维持阻塞赋值和阻塞赋值的区别

阻塞赋值语句

  阻塞赋值用符号“=”表示。阻塞赋值表示在当前的赋值完成前阻塞其他的赋值任务。即在赋值时,先计算“=”右边的值,此时赋值语句不允许任何别的赋值任务的干扰,直到现行的赋值完成时,才允许别的赋值语句的执行。也就是说,在同一个块语句中,

其后面的赋值语句是在前一句赋值语句结束后再开始赋值的。

  如下面的程序:
  initial
    begin
      a=0; //阻塞赋值语句S1
      a=1; //阻塞赋值语句S2
    end

其中包含了两条阻塞赋值语句S1和S2,我们假设initial是在仿真时刻0得到执行的。由于S1和S2都是阻塞赋值语 句,所以在执行S1时,S2被“阻塞”而不能得到执行;只有 在S1执行完毕,a被赋值为0之后,S2才开始执行。而S2的执行将使变量a重新被赋值为1。

 

非阻塞赋值语句

 

 

         非阻塞赋值用符号“<=”表示。非阻塞赋值表示在当前的赋值未完成前不阻塞其他的赋值任务。即在赋值操作开始时计算“<=”右边的表达式,在赋值操作结束时更新“<=”左边的变量,并且在赋值操作的过程中,允许其他赋值 语句同时执行。也就是说,在同

一个块语句中,其后面的赋值语句是在前一句非阻塞赋值语句开始时,同时开始赋值的,并且是在块语句结束时,同时更新左边的变量后一起结束。

 

         如下面的程序:

  initial

    begin

      A<=1; //非阻塞赋值语句 S3

      B<=1; //非阻塞赋值语句 S4

    end

 

   其中包含了两条非阻塞赋值语句S3和S4,我们假设initial 块是在仿真时刻0得到执行的。语句S3首先得到执行,但是对 被赋值对象A的赋值操作要等到当前时间步结束时(initial块 结束时)才执行,同时因为S3是一条非阻塞赋值语句,所以 S3不会阻塞S4的

执行,于是S4也随即开始执行,但对被赋值 变量B的赋值操作也要等到当前时间步结束时(initial块结束 时)才执行。所以,在当前时间步结束时(initial块结束时) 被赋值变量A和B同时被赋值为1。

 

posted @ 2020-07-16 20:34  IC设计攻城狮  阅读(63)  评论(0)    收藏  举报