计数器同样由三个模块构成,分别为:顶层,计数器和译码器。
一、实验任务
大家这会儿数电理论课应该还没学到这里,所以对以上的部分名词进行解释:
1.异步清零(clr)
指不管现在时钟信号(clk)是什么,跑到哪儿了,只要你按下异步清零的按钮,计数器就应该马上归零。
2.同步使能(en)
其实就是一个计数器是否开始工作的开关,关闭了使能开关,计数器将会停在当前的计数值,不再随时间信号进行计数。
3.同步置数(load)
一个非常面向使用对象的功能。让使用者输入一个数值(预置数),再从这个数值进行加/减计数,因为是随着下一个时钟信号的到来才开始计数的,所以叫同步置数。
二、实验分析
输入信号:
clkin(时钟),clr(异步清零),upd(加减计数),en(使能开关),[3:0]data(预置数),load(同步置数)
输出信号:
seg0(位选),[3:0]Q(波形),[6:0]codeout (译码器),CO(进位信号)
三、代码
顶层文件:
module w_2495_03(codeout, Q, clkin, clr, CO, upd, en, load, seg0, data);
input clkin, clr, upd, en, load;
input [3:0] data;
output[6:0] codeout;
output [3:0] Q;
output CO,seg0;
w_2495_03_2(clkin, clr, Q, CO, upd, en, load, data );
w_2495_03_1 (codeout,Q,seg0);
endmodule
译码器:
module w_2495_03_1 (codeout, Indec,seg0); //译码器
input[3:0] Indec;
output[6:0] codeout;
reg [6:0]codeout;
output seg0;
assign seg0 = 1;
always@(Indec)
begin
case(Indec)
4'd0 : codeout=7'b111_1110;
4'd1 : codeout=7'b011_0000;
4'd2 : codeout=7'b110_1101;
4'd3 : codeout=7'b111_1001;
4'd4 : codeout=7'b011_0011;
4'd5 : codeout=7'b101_1011;
4'd6 : codeout=7'b101_1111;
4'd7 : codeout=7'b111_0000;
4'd8 : codeout=7'b111_1111;
4'd9 : codeout=7'b111_1011;
default: codeout=7'bx;
endcase
end
endmodule
计数器
module w_2495_03_2(clkin, clr, Q, CO, upd, en, load, data); //十进制计数器
input clkin, clr, upd, en, load;
input [3:0] data;
output [3:0] Q;
reg [3:0]Q;
output wire CO;
always@(posedge clkin, posedge clr)
if(clr) //异步清零(为1时)
Q<=4'd0;
else if(!