实验一
1.设计功能描述
在 DE0 开发板上,设计一个变换计数最大值的循环计数器:在电路复位后会循环的从0值递增计数到最大值,第一次计数最大值是6,然后是7、8、9,然后计数最大值又变成6,如此往复循环; 计数数值以十进制数在最右侧的 HEX LED 数码管上显示,变化的时间间隔是1秒 ,复位时,数码管熄灭。
2.手工绘制的RTL图
3.Quartus Ⅱ9.0 编译生成的RTL电路图
(1)时间基准电路
(2)计数器模块
(3)数码管译码模块
4.程序源代码
///时间基准电路/
module cnt_sync(
CLK ,
CNTVAL,
OV );
input CLK;
output [32-1:0] CNTVAL;
output OV;
parameter MAX_VAL = 25_000_000;
reg [32-1:0] CNTVAL;
reg OV;
always @ (posedge CLK) begin
if(CNTVAL >= MAX_VAL)
CNTVAL <= 0;
else
CNTVAL <= CNTVAL + 1'b1;
end
always @ (CNTVAL) begin
if(CNTVAL == MAX_VAL)
OV = 1'b1;
else
OV = 1'b0;
end
endmodule
//计数器模块/
module counter( //对1s基本信号计数
EN, //计数使能控制
CLK,
COU,
RST);
input RST, EN, CLK;
output reg [3:0] COU;
reg [1:0] M;
reg [3:0] MAX = 4'b0110;
always @ (posedge CLK)
if (RST == 1)
if (EN == 1)
if (COU != MAX)
begin
COU <= COU + 1'b1;
M <= M;
end
else
begin
COU <= 4'b0000;
M <= M + 1<