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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1665|回复: 0

[原创] 【技巧分享】时序逻辑和组合逻辑的区别和使用

[复制链接]
发表于 2020-3-3 15:48:18 | 显示全部楼层 |阅读模式

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

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

x
根据逻辑电路的不同特点,数字电路分为组合逻辑和时序逻辑,明德扬粉丝里的同学提出,无法正确区分,今天让我跟一起来学习一下两种逻辑的区别以及使用环境。

·时序逻辑和组合逻辑的区别
        关于组合逻辑和时序逻辑的不同,我们可以从三方面来理解,分别是code(代码),电路图和波形图三方面。
      
       从代码层面来看,时序逻辑即敏感列表里面带有时钟上升沿,如果是没有上升沿或者是带有“*”号的代码,为组合逻辑。

        电路层面,两种逻辑反映的电路也有不同,时序逻辑相当于在组合逻辑的基础上多了一个D触发器。

       波形图层面,组合逻辑的波形是即刻反映变化的,与时钟无关;但是时序逻辑的波形不会立刻反映出来,只有在时钟的上升沿发生变化。

        用一个简单的例子来区分学习下,如计算c=a+b。

        在代码层面,时序逻辑代码表示如下,可以看到此代码有“posedge“时钟上升沿,即表示有一个D触发器,a+b的结果c是在D触发器发出指令后才进行输出的。


                               
登录/注册后可看大图


                               
登录/注册后可看大图

        组合逻辑则如下所示,是不带上升沿的,有“*”号的,直接输出a+b=c的值,不进行额外操作:


                               
登录/注册后可看大图

                               
登录/注册后可看大图


      对比两种逻辑的代码表示,可以看出同样是输出c的值,不同的逻辑输出时间却不同,时序逻辑是在时钟上升沿输出,组合逻辑则直接输出。
      
      电路图层面,组合逻辑为一个加法器连接a和b,紧接着立刻给到c,如下图所示,可以看到a+b得出的值c直接输出,没有进行任何额外操作:

                               
登录/注册后可看大图


                               
登录/注册后可看大图

        时序逻辑的电路图加法器连接的a和b没有变,但是c的值在输出部分,不会直接输出,D触发器就像一扇门,信号值c‘停留在门前,当D触发器收到了时钟clk上升沿的信号,才会把门打开,输出信号c的值,如下图所示:

                               
登录/注册后可看大图

                               
登录/注册后可看大图

        可以看到,组合逻辑是直接输出信号c,时序逻辑需要D触发器收到时钟上升沿信号后才会输出信号c。

       在波形图层面,我们可以画出时序图来分析,如下图所示。可以看出第一个时钟时a=1,b=2,此时组合逻辑立刻得出c=3,是跟时钟没有关系的;但是时序逻辑一定要在下一个时钟的上升沿处才得出c=3的结果;

        以此类推,后面的原理是一样的,当a=2,b=4时,组合逻辑马上得出c=6,时序逻辑在第3个时钟上升沿得出c=6。


                               
登录/注册后可看大图

                               
登录/注册后可看大图

        综上所述,我们进行一下总结,组合逻辑任意时刻的输出仅仅取决该时刻的输入,与时钟无关;时序逻辑先算好当前输入信号的结果,但还不影响输出,只有等到时钟上升沿的一瞬间,才把结果给了输出。

   · 时序逻辑和组合逻辑的使用
        相信大家已经可以非常清晰的区分组合逻辑和时序逻辑,下面我们就讨论一下组合逻辑和时序逻辑的使用环境。

       首先我们需要保证信号的结果是正确的,只要满足目标需求,这时使用时序逻辑还是组合逻辑都是可以的(这里我们讨论的是大多数情况,但也有例外,例如模块的输出一般要求是时序逻辑)。

     在实际设计中,为了便于操作,我们可以首先考虑用时序逻辑,看是否能满足设计要求。如果无法满足目标要求,需要凑时序,那么就考虑改为组合逻辑。
      
      举个例子便于大家更好地理解,如下图所示,假设有一个模块,有两个信号dout和dout_vld,其中dout表示数据,dout_vld表示数据有效性。我们假设需要该模块先后输出两个数据6和1。

                               
登录/注册后可看大图

                               
登录/注册后可看大图

        如下图所示,该波形输出就是正确的,只要设计能保证正确性,那不管使用组合逻辑还是时序逻辑,都是可以的。

                               
登录/注册后可看大图

                               
登录/注册后可看大图

        但假设现在输出的结果如下图所示,输出的是8和5,不是我们目标需要的6和1,并且可以看到,dout_vld比dout晚了一个时钟,这个时候就可以考虑设计dout_vld的时序逻辑改为组合逻辑,将信号dout_vld提前一拍,就可以得到正确的结果。

        另一种方法,假设dout是组合逻辑设计的,就是把dout改为时序逻辑实现,将dout推迟一拍,达到信号对齐的效果。

                               
登录/注册后可看大图

                               
登录/注册后可看大图

        通过上面的详细解释,相信大家都可以掌握时序逻辑和组合逻辑的原理和使用,更多时序知识,请参考时序约束培训教程。更好的思路就在下面留言吧,我们互相讨论互相学习!

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2024-11-17 02:40 , Processed in 0.013509 second(s), 6 queries , Gzip On, Redis On.

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