请教一个计数器的问题
要求实现:在hex0(7段数码管)上连续显示数字0-9,每秒刷新1次。使用计数器产生1秒的时间间隔,这个计数器的时钟由DE2平台上的50MHz时钟提供。
思路:通过计数器产生50M的分频得到1Hz的频率,再用1hz作为计数脉冲做一个10进制的计数器,其输出作为译码显示的输入。
问题:
上面的思路感觉没有严格符合要求,如所有计数器都有50Mhz的时钟触发,10进制的计数器就不是。 都没人理你,哈! 看这里。
计秒七段数码管.(Verilog)
http://blog.ednchina.com/2006tx_yafeng/157850/message.aspx 非常感谢亚峰同学的指导,你的代码主要部分贴出来如下:
// 获取按秒计数单元
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
-----------------------------------------------------------------------
参考解答:
//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 那你弄个32位计数器 计算出1HZ的位置控制显示吧 然后转行吧 回复【5楼】40130064
-----------------------------------------------------------------------
50MHz分频为1Hz计数为50_000_000,不是2的整数幂,怎么在32-bit的计数器里定位? case num is
when 50000000=>d<="显示1";
when 100000000=>d<="显示2";
when others=>null;
end case;
页:
[1]