搜索
bottom↓
回复: 7

请教一个计数器的问题

[复制链接]

出0入0汤圆

发表于 2010-6-2 20:00:21 | 显示全部楼层 |阅读模式
要求实现:
在hex0(7段数码管)上连续显示数字0-9,每秒刷新1次。使用计数器产生1秒的时间间隔,这个计数器的时钟由DE2平台上的50MHz时钟提供。

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

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

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2010-6-2 23:31:02 | 显示全部楼层
都没人理你,哈!

出0入0汤圆

发表于 2010-6-2 23:42:18 | 显示全部楼层
看这里。
计秒七段数码管.(Verilog)
http://blog.ednchina.com/2006tx_yafeng/157850/message.aspx

出0入0汤圆

 楼主| 发表于 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_LUT  u1  (
  .oSEG0(HEX0),
  .iDIG(cnt[3:0])
);
endmodule

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


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

出0入0汤圆

 楼主| 发表于 2010-6-3 21:10:59 | 显示全部楼层
回复【楼主位】yf.x  
-----------------------------------------------------------------------

参考解答:

//top-level file
module seg_number(
                  output [6:0]HEX0,
                  input CLOCK_50,
                  input [0:0]KEY
                  );
                  
                  wire clk_1hz;
                  reg [3:0]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[3:0])
                              );
endmodule

出0入0汤圆

发表于 2010-6-3 22:51:20 | 显示全部楼层
那你弄个32位计数器 计算出1HZ的位置控制显示吧 然后转行吧

出0入0汤圆

 楼主| 发表于 2010-6-3 23:13:53 | 显示全部楼层
回复【5楼】40130064  
-----------------------------------------------------------------------

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

出0入0汤圆

发表于 2010-6-3 23:20:47 | 显示全部楼层
case num is
when 50000000=>d<="显示1";
when 100000000=>d<="显示2";

when others=>null;
end case;
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-15 16:17

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表