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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1800|回复: 5

[原创] 问一个困惑很久的问题

[复制链接]
发表于 2019-8-3 14:06:45 | 显示全部楼层 |阅读模式

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

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

x
//
always@(posedge  clk  or negedge rst_n)
begin
   if(!rst_n)
      cnt<=0;
   else
     begin
         if(cnt<=9)      
            cnt<=cnt+1'b1;
         else
            cnt<=0;
   end
end
//(1)
wire flag;
assign flag==(cnt==5)?1'b1:1'b0;
或者
//(2)
reg flag;
always@(posedge  clk  or negedge rst_n)
begin
   if(!rst_n)
      flag<=0;
   else
     begin
        if(cnt==5)
           flag<=1;
        else
           flag<=0;
      end
end
///////
显然,flag的产生除了(2)里面会有一个延时之外,每次cnt==5的时候flag都会顺利产生。
现在的疑问是,wire 型flag信号和reg型flag信号是一摸一样的宽度的么?
显然reg型flag,每一个脉冲,用同一个时钟去检测肯定是可以一次不漏地检测到的。
那么wire型呢?
如果每次脉冲是和第(1)种一样宽,那么就可以一次不漏地检测到。
       这是不是说明wire连线的延时是可以忽略不计的?
如wire型flag比reg型flag信号更窄,那么用同一个clk去检测wire型flag是不是有可能会漏掉一些脉冲或者错误检测?

网上的说法是组合逻辑最好寄存器输出,那么这种assign赋值语句的输出也需要寄存器输出才能保证不出错吗?






发表于 2019-8-3 15:37:49 | 显示全部楼层
“如果每次脉冲是和第(1)种一样宽,那么就可以一次不漏地检测到” ——在时钟边沿正确的捕获到信号,说明该信号的建立和保持满足寄存器的建立/保持时间要求,不能说明wire型和reg型flag脉冲宽度相等。
“如wire型flag比reg型flag信号更窄,那么用同一个clk去检测wire型flag是不是有可能会漏掉一些脉冲或者错误检测”——楼主的意思是wire型flag会比reg型flag更迟的建立或者更早的撤销或者两者都是?第1种情况,由于cnt经过组合逻辑产生wire型flag,相对于在某个时钟边缘之后建立的reg型flag,它的建立有一定的组合逻辑延迟,所以要求时钟频率不能过高,否则下一个时钟边沿捕获不到信号;第2种情况,组合逻辑对信号的延迟是顺延下去的,flag的建立延迟有多少,它的撤销延迟就有多少,所以不会提前结束;第三种情况,就当前组合逻辑的输入输出来看,不会发生
“那么这种assign赋值语句的输出也需要寄存器输出才能保证不出错吗?”——当你模块的输出信号成为你系统的关键路径,限制你的频率的时候,可以使用寄存器砍断关键路径,否则不需要。
发表于 2019-8-5 15:39:05 | 显示全部楼层
没区别,两个写法一样的
发表于 2019-8-5 19:33:58 | 显示全部楼层
1. wire 型flag信号和reg型flag信号是一摸一样的宽度的么?

假设周期是2ns。
如果只从数字逻辑上说,flag_wire和flag_reg都是在cnt_reg==5的时候维持一个2ns的高电平。

如果考虑电路上的毛刺、信号转移时间、时钟偏移、时钟抖动,那么flag_wire和flag_reg都可能不是严格的持续2ns。

那怎么保证时序电路正常运行呢?

2. 是不是有可能会漏掉一些脉冲或者错误检测?

不会出现“漏”的问题。

在时序电路里面有建立时间和保存时间两个重要的概念。EDA工具会根据你设置的始终约束,对时序电路进行建立时间检查和保持时间检查。

3. 那么这种assign赋值语句的输出也需要寄存器输出才能保证不出错吗

从电路功能上来说,不是任何地方都要寄存之后在输出的,必须考虑电路的时序要求和功能要求。
 楼主| 发表于 2019-8-6 15:36:37 | 显示全部楼层


snq31418 发表于 2019-8-5 19:33
1. wire 型flag信号和reg型flag信号是一摸一样的宽度的么?

假设周期是2ns。


厉害,你讲得很清楚了。
总之就是时序的问题,从触发器的建立保持时间谈起,讲到了问题的本质。
感谢。
 楼主| 发表于 2019-8-6 15:38:08 | 显示全部楼层


snq31418 发表于 2019-8-5 19:33
1. wire 型flag信号和reg型flag信号是一摸一样的宽度的么?

假设周期是2ns。


嗯,清楚明白,学到了新东西。感谢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2024-11-18 02:43 , Processed in 0.018713 second(s), 7 queries , Gzip On, Redis On.

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