2013-09-04
折腾了2晚,今晚终于完成了我的第一份课后作业——点亮LED灯。
主要是跟着版主的视频学习。
我的代码如下:
	//////////////////////////////////////////////////////////////////////////////////
// Engineer: 136.finema
// 
// Create Date:    22:35:14 09/03/2013 
//////////////////////////////////////////////////////////////////////////////////
	module Led(led); //模块名
output [7:0] led; //输出口
reg [7:0] led;  //寄存器
	always
begin
 //led <= 8'b10101010; //间隔输出 Led1亮Led2灭....
 led <= 8'b01010101;  //间隔输出 Led1灭Led2亮....
end
endmodule
LED的代码昨晚已经写好了,但是进行编译时报错误,如下:
	1.Warning (292000): FLEXlm software error: Invalid (inconsistent) license key.  The license key and data for the feature do not match.  This usually happens when a license file has been altered. Feature:       quartus License path:  E:\devs\altera\12.0\quartus\bin\license.dat; FLEXnet Licensing error:-8,523 For further information, refer to the FLEXnet Licensing documentation, available at "www.acresso.com".
2.Error (119013): Current license file does not support the EPM240T100C5 device
说当前授权文件不支持EPM240T100C5设备。 但我明明都破解成功,已经没30天的限制提示了,啥原因啊?
后来在群里咨询了一下,版主和群里的成员都有提到是破解有问题。
我又用我原来的破解程序,重试了几次,还是不行。
后来从群里共享下了个“Crack_QII_12.0_Windows密码12345.rar”的破解程序,重新破解,问题解决。
注意,如果运行“Quartus_12.0_x86破解器.exe” 点应用时,提示“什么文件正在使用,需要关闭程序文件,再继续”的,应该用“sys_cpt.dll.BAK” 还原回“sys_cpt.dll” 再运行破解。
跟着版主学。今晚完成了第二份课后作业——LED1秒闪烁。代码如下。 明晚跟着做仿真。
	
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
//学号: 136.finema
// 
//创建时间:    21:43:14 09/05/2013
//名称:led_flicker
//功能:LED间隔1秒闪烁
//////////////////////////////////////////////////////////////////////////////////
	module led_ficker(sys_clk,sys_rst,led);
 input sys_clk;   //输入时钟信号
 input sys_rst;   //输入复位信号
 output [7:0] led;  //输出信号
 
 //变量定义
 reg [7:0] led;
 reg [25:0] counter;  //计数器.  50MHz时钟, 因此计数器要计数 50M次=50*1000*1000 就为1秒
     
 //如果复位,则LED全亮,计数器给0
 //计数器到49999999,则反转一下
 
 //计数器的逻辑处理
 always @(posedge sys_clk,negedge sys_rst) //只对时钟上升沿信号和复位下降沿信号敏感
 begin
  if (!sys_rst)
   counter <=26'd0;
  else
   begin
    if (counter==26'd49999999)
     counter<=26'd0;
    else
     counter<=counter+1'b1;
   end
 end
 
 //led的逻辑处理
 always @(posedge sys_clk,negedge sys_rst)
 begin
  if (!sys_rst)
   led <= 8'b11111111;
  else
   begin
    if (counter==26'd49999999)
     led<=~led;    
   end
 end
endmodule
2013.09.08
昨天,看视频学习了Modersim testbench文件的编写,以及modersim软件的使用。
以下是 LED1秒闪烁的testbench源代码。
	
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
//学号: 136.finema
// 
//创建时间:    11:26:14 09/07/2013
//名称:led_flicker_test
//功能:LED间隔1秒闪烁测试
//////////////////////////////////////////////////////////////////////////////////
	module led_flicker_test;
 
 //变量定义
 //输入
 reg sys_clk;
 reg sys_rst;
 
 //输出
 wire [7:0] led;
 
 
 //时钟激烈产生, 周期20ns,即50MHz
 initial
 begin
  sys_clk = 0;
  forever 
   # 10 sys_clk = ~sys_clk;
 end
	 //复位激励产生
 initial
 begin
  sys_rst = 1;
  # 10 sys_rst = 0;
  # 50 sys_rst = 1;
 end
 
 
 //被测模块实例
 led_flicker led_flicker_inst(
  .sys_clk(sys_clk),
  .sys_rst(sys_rst),
  .led(led)
 );
 
endmodule
2013.09.08
今天,根据前2节LED课学的内容,自己编了 LED流水灯。 代码如下:
	`timescale 1ns / 1ps
`define ONE_SECOND  26'd49999999 //50MHz时钟, 因此计数器要计数 50M次=50*1000*1000 就为1秒
	//////////////////////////////////////////////////////////////////////////////////
//学号: 136.finema
// 
//创建时间:    10:00:14 09/08/2013
//名称:led_water
//功能:LED流水灯
//算法:每秒种点亮1盏灯,点够8盏,又重新来
////////////////////////////////////////////////////////////////////////////////// 
	module led_water(sys_clk,sys_rst,led);
 input sys_clk;   //输入时钟信号
 input sys_rst;   //输入复位信号
 output [7:0] led;  //输出信号
 
 //变量定义 
 reg [7:0] led;
 reg [25:0] timeCounter;  //时间计数器.  
 
 //计数器的逻辑处理
 always @(posedge sys_clk,negedge sys_rst) //只对时钟上升沿信号和复位下降沿信号敏感
 begin
  if (!sys_rst)
   timeCounter <=26'd0;
  else
   begin
    if (timeCounter==`ONE_SECOND)
     timeCounter<=26'd0;
    else
     timeCounter<=timeCounter+1'b1;
   end
 end
 
 
 //led的逻辑处理
 always @(posedge sys_clk,negedge sys_rst)
 begin
  if (!sys_rst)
   led <= 8'b11111111;
  else
   begin
    if (timeCounter==`ONE_SECOND)
    begin
     if (led==8'b00000000)
      led <= 8'b11111111;
     else
      led <=(led<<1);  //像左移位
    end
       
   end
 end
endmodule
2013.09.08
完成第四份课后作业——LED跑马灯
看视频学习,学到了用位拼接运算符,进行循环移位。 不过我进行实现时没有用拼接运算,而是用了求反移位,相对来说代码没版主的优雅。
	`timescale 1ns / 1ps
`define ONE_SECOND  26'd49999999 //50MHz时钟, 因此计数器要计数 50M次=50*1000*1000 就为1秒
	//////////////////////////////////////////////////////////////////////////////////
//学号: 136.finema
// 
//创建时间:    16:31:14 09/08/2013
//名称:led_run
//功能:LED跑马灯,按照顺序1~8, 每秒种只点亮1盏灯,点够8盏,又重新来
//////////////////////////////////////////////////////////////////////////////////
	module led_run(sys_clk,sys_rst,led);
 input sys_clk;   //输入时钟信号
 input sys_rst;   //输入复位信号
 output [7:0] led;  //输出信号
 
 //变量定义 
 reg [7:0] led;
 reg [25:0] timeCounter;  //时间计数器.  
 
 //计数器的逻辑处理
 always @(posedge sys_clk,negedge sys_rst) //只对时钟上升沿信号和复位下降沿信号敏感
 begin
  if (!sys_rst)
   timeCounter <=26'd0;
  else
   begin
    if (timeCounter==`ONE_SECOND)
     timeCounter<=26'd0;
    else
     timeCounter<=timeCounter+1'b1;
   end
 end
 
 
 //led的逻辑处理
 always @(posedge sys_clk,negedge sys_rst)
 begin
  if (!sys_rst)
   led <= 8'b11111110;
  else
   begin
    if (timeCounter==`ONE_SECOND)
    begin
     if (led==8'b01111111)
      led <= 8'b11111110;
     else
      led <=~((~led)<<1);  //先求反,再向左移位,最后求反
    end
       
   end
 end
endmodule
回复
| 有奖活动 | |
|---|---|
| 硬核工程师专属补给计划——填盲盒 | |
| “我踩过的那些坑”主题活动——第002期 | |
| 【EEPW电子工程师创研计划】技术变现通道已开启~ | |
| 发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
| 【EEPW在线】E起听工程师的声音! | |
| 高校联络员开始招募啦!有惊喜!! | |
| 【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
| 送您一块开发板,2025年“我要开发板活动”又开始了! | |
			
			
			
						
			
 我要赚赏金
