yf.x 发表于 2010-6-2 20:00:21

请教一个计数器的问题

要求实现:
在hex0(7段数码管)上连续显示数字0-9,每秒刷新1次。使用计数器产生1秒的时间间隔,这个计数器的时钟由DE2平台上的50MHz时钟提供。

思路:通过计数器产生50M的分频得到1Hz的频率,再用1hz作为计数脉冲做一个10进制的计数器,其输出作为译码显示的输入。

问题:
上面的思路感觉没有严格符合要求,如所有计数器都有50Mhz的时钟触发,10进制的计数器就不是。

40130064 发表于 2010-6-2 23:31:02

都没人理你,哈!

tear086 发表于 2010-6-2 23:42:18

看这里。
计秒七段数码管.(Verilog)
http://blog.ednchina.com/2006tx_yafeng/157850/message.aspx

yf.x 发表于 2010-6-3 20:36:59

非常感谢亚峰同学的指导,你的代码主要部分贴出来如下:

// 获取按秒计数单元
always @ (posedge clk_1_Hz, negedge KEY)
begin
if (!KEY)
cnt <= 0;
else
begin
if (cnt == 15)   // 1'hf
   cnt <= 0;
else
   cnt <= cnt + 1'b1;
end
end

// 例化七段数码管译码器      
SEG7_LUTu1(
.oSEG0(HEX0),
.iDIG(cnt)
);
endmodule

思路也是先分频产生1hz的脉冲,在用这个脉冲计数,然后译码。


再次看题目(de2的lab4的part4,要求如下:确保所有的触发器都使用这个50Mhz的时钟,我以前理解的是计数分频和秒显示的数字都是50mhz的时钟直接驱动的)。

yf.x 发表于 2010-6-3 21:10:59

回复【楼主位】yf.x
-----------------------------------------------------------------------

参考解答:

//top-level file
module seg_number(
                  output HEX0,
                  input CLOCK_50,
                  input KEY
                  );
                  
                  wire clk_1hz;
                  reg cnt;
                  
                  div u0(
                         .o_clk(clk_1hz),
                         .i_clk(CLOCK_50),
                         .rst_n(KEY)
                         );
                        
                  always @(posedge clk_1hz or negedge KEY)
                  begin
                         if(!KEY)
                           cnt<=4'b0;
                         else
                         begin
                           if(cnt==4'd9)
                           cnt<=4'b0;
                           else
                           cnt<=cnt+1'b1;
                         end
                  end
                  
                  seg7_lut u1(
                              .oseg(HEX0),
                              .idig(cnt)
                              );
endmodule

40130064 发表于 2010-6-3 22:51:20

那你弄个32位计数器 计算出1HZ的位置控制显示吧 然后转行吧

yf.x 发表于 2010-6-3 23:13:53

回复【5楼】40130064
-----------------------------------------------------------------------

50MHz分频为1Hz计数为50_000_000,不是2的整数幂,怎么在32-bit的计数器里定位?

40130064 发表于 2010-6-3 23:20:47

case num is
when 50000000=>d<="显示1";
when 100000000=>d<="显示2";

when others=>null;
end case;
页: [1]
查看完整版本: 请教一个计数器的问题