verilog数码管静态显示。。。。。。可以按照这程序给我说说它的运行过程吗?

moduleled_display(sm_seg,sm_bit,clk,);inputclk;output[7:0]sm_seg;//数码管段码输出output[7:0]... module led_display(sm_seg,sm_bit,clk,);
input clk;
output [7:0] sm_seg; //数码管段码输出
output [7:0] sm_bit; //数码管位码输出
reg [7:0] sm_seg; //数码管段码输出寄存器
reg [7:0] sm_bit; //数码管位码输出寄存器
reg [3:0] disp_dat; //显示数据寄存器
reg [36:0] count; //定义计数寄存器
always @ (posedge clk )
begin count = count + 1'b1;
sm_bit = 8'b00000000;
end
always @ (count[24])
begin
disp_dat = {count[28:25]};
end
always @ (disp_dat)
begin case (disp_dat)
4'h0 : sm_seg = 8'hc0; //显示"0"
4'h1 : sm_seg = 8'hf9; //显示"1"
4'h2 : sm_seg = 8'ha4; //显示"2"
4'h3 : sm_seg = 8'hb0; //显示"3"
4'h4 : sm_seg = 8'h99; //显示"4"
4'h5 : sm_seg = 8'h92; //显示"5"
4'h6 : sm_seg = 8'h82; //显示"6"
4'h7 : sm_seg = 8'hf8; //显示"7"
4'h8 : sm_seg = 8'h80; //显示"8"
4'h9 : sm_seg = 8'h90; //显示"9"
4'ha : sm_seg = 8'h88; //显示"a"
4'hb : sm_seg = 8'h83; //显示"b"
4'hc : sm_seg = 8'hc6; //显示"c"
4'hd : sm_seg = 8'ha1; //显示"d"
4'he : sm_seg = 8'h86; //显示"e"
4'hf : sm_seg = 8'h8e; //显示"f"
endcase
end
endmodule
展开
 我来答
chit_wps
推荐于2016-05-28 · TA获得超过356个赞
知道小有建树答主
回答量:183
采纳率:0%
帮助的人:144万
展开全部
首先,译码的这段应该能看懂吧?有注释的,输出信号的不同的值,会使得数码管显示出不同的内容,就是注释说的 0-9 a-f。
4'h0 : sm_seg = 8'hc0; //显示"0"
4'h1 : sm_seg = 8'hf9; //显示"1"
4'h2 : sm_seg = 8'ha4; //显示"2"
4'h3 : sm_seg = 8'hb0; //显示"3"
4'h4 : sm_seg = 8'h99; //显示"4"
4'h5 : sm_seg = 8'h92; //显示"5"
4'h6 : sm_seg = 8'h82; //显示"6"
4'h7 : sm_seg = 8'hf8; //显示"7"
4'h8 : sm_seg = 8'h80; //显示"8"
4'h9 : sm_seg = 8'h90; //显示"9"
4'ha : sm_seg = 8'h88; //显示"a"
4'hb : sm_seg = 8'h83; //显示"b"
4'hc : sm_seg = 8'hc6; //显示"c"
4'hd : sm_seg = 8'ha1; //显示"d"
4'he : sm_seg = 8'h86; //显示"e"
4'hf : sm_seg = 8'h8e; //显示"f"

那么输出 sm_seg 是怎么变化的呢? 它的变化取决于 disp_dat 的变化:case (disp_dat)

那么再看disp_data是如何变化的呢?看下面的代码:
always @ (posedge clk )
begin count = count + 1'b1;
sm_bit = 8'b00000000;
end
always @ (count[24])
begin
disp_dat = {count[28:25]};
end
当时钟的每个上升沿到来的时候,计数器 count都会自动加1,如下:
count: 0000...00 37个0,因为计数器是37位的,加1变成:

count: 0000...01 继续加1
count: 0000...10 继续
count: 0000...11
一直累积到第24bit发生变化时,即第24位从0跳转到1,或是从1跳转到0,都会把计数器的第28:25位的值付给disp_dat。
disp_dat的值的变化就会导致输出寄存器sm_seg的变化,导致数码管的显示内容发生变化。

所以总的来说,就是数码管会从0-9 a-f的自动跳转显示,至于间隔时间多少,要看你的时间基数(就是时钟周期)多长,再来推算计数器技术翻转时间。
追问
请问如果count加到满了,还会重新从0开始加吗?
追答
计数器加到全1,就是你说的满了,再加,就会变成全0,重新开始没错 :)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式