比如在时钟clk下上升沿输入一个控制信号ctrl_a,此信号持续一个周期,我想输出一个延迟16拍的信号ctrl_b,同样持续一个周期,怎么用计数器去实现(不用D触发器去连打16拍),谢谢!
时钟上升沿来时,ctrl_a=1持续一个周期,此时过16个周期后,ctrl_b=1,同样持续一个周期。其实我目的就是想将ctrl_a为高有效时将其值赋给16个周期后的ctrl_b
追答当ctrl_a=1时,将ctrl_a的值赋值给ctrl_c,同时当ctrl_a=1,计数器开始计数,计数16个时钟后,将ctrl_c的值给ctrl_b就行了。
always@(posedge clk)
begin
if(ctrl_a=1)
ctrl_c <= ctrl_a;
else
ctrl_c <= ctrl_c;
end
always@(posedge clk)
begin
if(ctrl_a=1)
cnt<= 'd0;
else if(cnt == 16)
cnt <= 0;
else
cnt <= cnt +1'b1;
always@(posedge clk)
begin
if(cnt == 16)
ctrl_b <= ctrl_c;
else
ctrl_b <= 0
首先很感谢你的回答!用寄存的方法我也想过,但是你这样写的话会导致每次计数到16就会赋值给ctrl_b。所以我琢磨了下加个条件应该就可以。
if(ctrl_a=1)
ctrl_c <= ctrl_a;
else if(cnt==16)
ctrl_c <=1'b0 ;
else
ctrl_c <= ctrl_c;
分给你吧 谢谢!
嗯 是的!我只提供思路细节问题肯定要自己考虑