在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1619|回复: 3

[原创] 请教大家,fpga怎么实现延时计数器比较好?

[复制链接]
发表于 2021-12-21 06:43:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
一个输入信号需要延迟一段时间,然后再输出,如下:
module (
       input       clk,
       input      rst_n,
       input      test_sig //一个时钟宽度的脉冲信号
        );
        
        reg  [10:0]test_cnt;
         always @(negedge clk or negedge rst_n)     
            begin
              if(~rst_n)
                test_cnt  <= 10'd0;      
              else if(test_sig)
                test_cnt  <= 10'd0;         
              else  if(test_cnt < 10'd500)
                test_cnt  <= test_cnt + 10'd1;   
            end
        
        
assign test_sig_delay = test_cnt == 10'd400 ? 1'b1 : 1'b0
endmodule


test_sig_delay是test_sig延时400个时钟后的信号输出,像上面那样实现好吗?另外,test_cnt的寄存器的输出反馈回来去控制test_cnt的计数最大值,这样好吗?
        
     


发表于 2021-12-21 15:55:16 | 显示全部楼层
1.lz的输入信号test_sig是单周期信号?即使是单周期信号,如果test_sig是从io输入,如何保证正好能被时钟采样而不出现毛刺是个挑战;
2.lz的代码默认了信号没有任何毛刺,且信号宽度比时钟周期要大,或者就是在当前时钟域下,那么lz的程序只能保证信号的上升沿延迟输出,且只输出了一个时钟周期,而不是整个信号波形的延时输出。
3.lz的需求描述清楚,才好写代码。
发表于 2021-12-21 16:21:44 | 显示全部楼层
test_sig_delay是test_sig延时400个时钟后的信号输出,像上面那样实现好吗?
不好,test_sig如果是个干净的1 bit信号,你这处理完成组合逻辑信号了,有毛刺

另外,test_cnt的寄存器的输出反馈回来去控制test_cnt的计数最大值,这样好吗?
这倒没什么

另外,你这逻辑有bug
 楼主| 发表于 2021-12-22 00:17:14 | 显示全部楼层
感谢两位回复,
我所设想的test_sig的信号,是和 本模块在一个时钟域的其他模块产生的一个时钟宽度的脉冲信号,并且满足建立保持时间约束,另外,test_sig_delay 如果用寄存器输出的,就不会有毛刺了吧?
如果按上述这样实现的话,写一个延时400个时钟周期的代码,上述方式是不是唯一选择呢 ?还有没有其他方式 ?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-8 16:56 , Processed in 0.019884 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表