
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

2013.09.14
跟着版主视频学,完成第五份课后作业,代码如下。
注:版主视频中提到的 7段数码管代码查询工具,版主在群里共享了一份,我把它上传到了服务器上,链接为
http://share.eepw.com.cn/share/download/id/90001
`timescale 1ns / 1ps
`define ONE_SECOND 26'd49999999 //50MHz时钟, 因此计数器要计数 50M次=50*1000*1000 就为1秒
//////////////////////////////////////////////////////////////////////////////////
//学号: 136.finema
//
//创建时间: 21:49:14 09/14/2013
//名称:dig_display_dip
//功能:数码管静态循环显示,用DIP控制哪个数码管亮
//算法:
//////////////////////////////////////////////////////////////////////////////////
module dig_display_dip(sys_clk,
sys_rst,
dip,
dig_seg,
dig_bit);
input sys_clk; //输入时钟信号
input sys_rst; //输入复位信号
input [7:0] dip; //输入DIP
output [7:0] dig_seg; //输出数码管段码
output [7:0] dig_bit; //输出数码管位码
//变量定义
reg [7:0] dig_seg;
wire [7:0] dig_bit;
reg [25:0] timeCounter; //时间计数器.
reg [7:0] charIndex; //字符索引.
//计数器的逻辑处理
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)
begin
charIndex <=8'd0;
end
else
begin
if (timeCounter==`ONE_SECOND)
begin
charIndex <=charIndex+1'b1;
end
else
begin
charIndex <= charIndex;
if (charIndex>8'd16)
charIndex <=8'd0;
end
end
end
//数码管显示
always @(charIndex)
begin
case (charIndex)
8'd0: dig_seg<=8'hC0; //0
8'd1: dig_seg<=8'hF9; //1
8'd2: dig_seg<=8'hA4; //2
8'd3: dig_seg<=8'hB0; //3
8'd4: dig_seg<=8'h99; //4
8'd5: dig_seg<=8'h92; //5
8'd6: dig_seg<=8'h82; //6
8'd7: dig_seg<=8'hF8; //7
8'd8: dig_seg<=8'h80; //8
8'd9: dig_seg<=8'h90; //9
8'd10: dig_seg<=8'h88; //A
8'd11: dig_seg<=8'h83; //B
8'd12: dig_seg<=8'hC6; //C
8'd13: dig_seg<=8'hA1; //D
8'd14: dig_seg<=8'h86; //E
8'd15: dig_seg<=8'h8E; //F
8'd16: dig_seg<=8'h7F; //.
default: dig_seg<=8'hC0;
endcase
end
//连续赋值,8个数码管根据DIP导通
assign dig_bit = dip;
endmodule
我用到的tcl文件,内容如下:
回复
有奖活动 | |
---|---|
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏10分 | |
【我踩过的那些坑】DRC使用位置错误导致的问题被打赏100分 | |
我踩过的那些坑之混合OTL功放与落地音箱被打赏50分 | |
汽车电子中巡航控制系统的使用被打赏10分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏100分 | |
分享汽车电子中巡航控制系统知识被打赏10分 | |
分享安全气囊系统的检修注意事项被打赏10分 | |
分享电子控制安全气囊计算机知识点被打赏10分 | |
【分享开发笔记,赚取电动螺丝刀】【OZONE】使用方法总结被打赏20分 | |
【分享开发笔记,赚取电动螺丝刀】【S32K314】芯片启动流程分析被打赏40分 |