• RTL基本知识:阻塞赋值与非阻塞赋值


    0 丑话说在前边

    RHS:运算符(= or <=)右侧的表达式

    LHS:运算符(= or <=)左侧的表达式

    竞争(Race Condition):在同一仿真时间槽(time-slot)多条语句同时执行顺序不同时可能产生不同的执行结果的情况。

    建议规则一:模拟组合逻辑时使用阻塞赋值。

    建议规则二:在过程性语句中,模拟时序逻辑时使用非阻塞赋值。

    建议规则三:模拟latch时使用非阻塞赋值。

    建议规则四:在同一个过程性语句中同时包括时序逻辑和组合逻辑时,该过程性语句中使用非阻塞赋值。

    建议规则五:不要在同一个过程性语句中混用阻塞赋值与非阻塞赋值。

    建议规则六:不要在多个过程性语句中对同一个变量进行赋值操作。

    建议规则七:如果要观测非阻塞赋值的结果,使用$strobe和$monitor进行观测。

    建议规则八:不要使用#0。

    1 阻塞赋值

    阻塞赋值使用的赋值运算符为“=”。阻塞赋值的过程是立刻执行的,即阻塞赋值运算符右侧表达式求值完后立刻会更新至运算符左侧,并且这个执行的过程不受其他语句执行的影响,其后的语句只有当前的赋值操作执行完成后才能顺序执行。

    2 非阻塞赋值

    非阻塞赋值使用的赋值运算符为“<=”。非阻塞赋值执行过程为:在当前仿真时间槽(time-slot)开始分析计算获得右侧表达式的值,在当前时间槽执行结束时更新左侧表达式的值,在右侧表达式分析计算和左侧表达式被更新之间,任何其他事件都可以执行,同时也有可能修改已经计算完成的右侧表达式的值,即非阻塞赋值的过程不影响其他语句的执行.

    根据非阻塞赋值的特点,其赋值运算符左侧操作数只能为寄存器类型,因此非阻塞赋值只能用于过程性语句中(initial和always),不允许在连续赋值语句中使用非阻塞赋值。

     3 阻塞赋值与非阻塞赋值区别

    更多资讯,请关注下方二维码!

  • 相关阅读:
    买不到的数目
    逆波兰表达式
    颠倒的价牌
    排它平方数
    寒假作业
    搭积木
    网友年龄
    九宫重排
    格子刷油漆
    高僧斗法
  • 原文地址:https://www.cnblogs.com/xgcl-wei/p/9059789.html
Copyright © 2020-2023  润新知