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
回复
有奖活动 | |
---|---|
【有奖活动——B站互动赢积分】活动开启啦! | |
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |