西华大学课程设计说明书 3.3.1锁存模块verilog源代码
module locker(ale,din,qout,qou); input ale; //锁存脉冲,下降沿有效。 input[31:0] din; //锁存值输入。 output[31:0] qout; //锁存值。 output[31:0] qou; reg[31:0] qout; reg[31:0] qou;
always @(negedge ale) begin if(!ale) begin qout=din; qou=qout; end else
qout=qout; qou=qout; end
endmodule
3.4七段译码模块
七段译码模块,译码脉冲来自dclk,上升沿由效,上升沿到来时,便根据输入
的4位bcd码,输出相应的七段显示码,比如输入的为0001(十进制数1),在dclk下降沿到来时dout输出七段码11111001(即数码管显示1)。
3.4.1七段一码模块功能仿真波形
图3-4-4计数模块功能仿真图
10
西华大学课程设计说明书 3.4.2七段译码模块逻辑综合图
图3-4-2计数模块功能仿真图
3.4.3七段一码模块代码源程序
module decord(din,dout,dclk); input[3:0] din; input dclk;
output[7:0] dout; reg[7:0] dout;
always @(posedge dclk) case(din)
4'b0000:
begin dout=8'b1100_0000;end 4'b0001:
begin dout=8'b1111_1001;end 4'b0010:
begin dout=8'b1010_0100;end 4'b0011:
begin dout=8'b1011_0000;end 4'b0100:
11
西华大学课程设计说明书 begin dout=8'b1001_1001;end 4'b0101:
begin dout=8'b1001_0010;end 4'b0110:
begin dout=8'b1000_0010;end 4'b0111:
begin dout=8'b1111_1000;end 4'b1000:
begin dout=8'b1000_0000;end 4'b1001:
begin dout=8'b1001_1000;end 4'b1010:
begin dout=8'b1000_1000;end 4'b1011:
begin dout=8'b1000_0011;end 4'b1100:
begin dout=8'b1100_0110;end 4'b1101:
begin dout=8'b1010_0001;end 4'b1110:
begin dout=8'b1000_0110;end 4'b1111:
begin dout=8'b1000_1110;end endcase endmodule
3.5数码管显示模块
该模块将译码模块译码结果作为输入送到输入端ledin,然后再使能信号d_en
(周期为2s)高电平有效,在d_en有效的情况下依次将输入值送到输出端口ledout,并改变位选输出值switch,从而实现数码管的动态显示,比如ledin输入值设定为随机值
8‘h904FDEF528BC8898,在d_en有效,并且lclk的第一个上升沿到来时,把98h送到ledout,并将switch赋值为FE,从而使第一个数码管显示98h 所代表的段码值,第二个上升沿到来时把88h送到ledout,switch赋值为FD,从而使第二个数码管显示88h所代表的段码值,依次类推,便可以对八个数码管进行动态显示了。
12
西华大学课程设计说明书 3.5.1数码管显示模块功能仿真波形图
图3-5-1显示模块功能仿真图
3.5.2数码管显示模块综合图
图3-5-2显示模块逻辑综合图
13
西华大学课程设计说明书 3.5.3数码管显示模块源代码
module display(ledin,ledout,lclk,switch,d_en); input lclk,d_en; input[63:0] ledin;
output[7:0] ledout,switch; reg[7:0] ledout,switch; integer num1,num2; always @(posedge lclk) if(d_en) case (num1)
0:begin num1<=1;switch=8'hfe;end 1:begin num1<=2;switch=8'hfd;end 2:begin num1<=3;switch=8'hfb;end 3:begin num1<=4;switch=8'hf7;end 4:begin num1<=5;switch=8'hef;end 5:begin num1<=6;switch=8'hdf;end 6:begin num1<=7;switch=8'hbf;end 7:begin num1<=0;switch=8'h7f;end endcase
else begin switch=0;end always @(switch) case(switch) 8'h00:ledout=0;
8'hfe:ledout=ledin[7:0]; 8'hfd:ledout=ledin[15:8]; 8'hfb:ledout=ledin[23:16]; 8'hf7:ledout=ledin[31:24]; 8'hef:ledout=ledin[39:32]; 8'hdf:ledout=ledin[47:40]; 8'hbf:ledout=ledin[55:48]; 8'h7f:ledout=ledin[63:56]; endcase endmodule
14