打印
[verilog]

Verilog过程赋值语句提问

[复制链接]
1142|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
shaorc|  楼主 | 2017-9-20 15:04 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
在书上看到的,讲解阻塞型赋值语句时,举了一个例子

说的是,本想采用触发器的方式,
设计一个延时来使得dreg的输出比areg慢3个时钟节拍,
但是结果是dreg的输出只比areg慢一个时钟节拍输出

程序和逻辑电路图,在下图给出



在分析中(如上图),既然已经说了,是顺序执行,
那么每天语句执行时间为一个时钟周期,
三个语句执行完不就是延时3个周期了吗?
即使后一句的右边是前一句更新后的结果,
到程序执行完时,dreg还是变成了areg
这样不就是延时3个时钟周期了吗?为什么不是这样呢?

另外,
阻塞型赋值语句,规定是,顺序执行语句,每种状态一个接一个执行,
非阻塞型赋值语句,规定是,并行赋值语句,当执行语句时同事计算右边的表达式,
而不会立刻把值赋给左边的变量,过一段时间才会赋值

那在下图中,是把第一个例子中的功能用非阻塞语句实现了
这里说的过一段时间,是指的是CLK信号来到时,才会赋值到左边吗?如果可以把阻塞和非阻塞赋值语句简单化的讲解一下就更好了,谢!

1.jpg (436.77 KB )

1.jpg

IMG_20170920_145413.jpg (391.88 KB )

IMG_20170920_145413.jpg

相关帖子

沙发
feelhyq| | 2017-9-20 15:42 | 只看该作者
本帖最后由 feelhyq 于 2017-9-20 16:25 编辑

阻塞代码:
               来了一个posedge clk ,areg首先被更新,被更新完瞬间, breg,creg,dreg同时被更新。
               这也就是 为什么dreg的输出只比areg慢一个时钟节拍输出(只有areg被更新了(需要一个时钟周期),breg,creg,dre               g才能同时被更新)。

非阻塞代码:  来了一个posedge clk ,areg首先被更新,由于是非阻塞,areg旧的数值作为breg的输入,同理creg,dreg也是一样。那么当第一个posedge clk来了以后, areg被更新了,breg,creg,dreg使用的是旧值,因此还没有被更新。同理当第二个posedge clk来了以后 breg被更新 creg,dreg还没有被更新,以此类推

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

197

主题

608

帖子

5

粉丝