zoukankan      html  css  js  c++  java
  • RTL基本知识:阻塞赋值与非阻塞赋值

    0 丑话说在前边

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

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

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

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

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

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

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

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

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

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

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

    1 阻塞赋值

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

    2 非阻塞赋值

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

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

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

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

  • 相关阅读:
    poj3905 2sat!
    poj3648,2-sat求解
    poj2723 2sat判断解+二分
    hdu3622 2-sat问题,二分+判断有无解即可。
    poj2767,单向连通图判定,缩点+重新建图+新图DFS
    poj2186 求有向图G中所有点都能到达的点的数量
    poj2553 有向图缩点,强连通分量。
    poj 1236+hdu2767 有向图 缩点+看度数(tarjan)
    poj3694+hdu2460 求桥+缩点+LCA/tarjan
    dfs + 最小公倍数 Codeforces Round #383 (Div. 2)
  • 原文地址:https://www.cnblogs.com/xgcl-wei/p/9059789.html
Copyright © 2011-2022 走看看