verilog中的阻塞语句和非阻塞语句什么区别?

[复制链接]
查看11 | 回复2 | 2017-9-14 19:15:19 | 显示全部楼层 |阅读模式
赋值的类型的选择取决于建模的逻辑类型在时序块的 RTL 代码中使用非阻塞赋值。
非阻塞赋值在块结束后才完成赋值操作,此赋值方式可以避免在仿真出现冒险和竞争现象。在组合的 RTL 代码中使用阻塞赋值。
使用阻塞方式对一个变量进行赋值时,此变量的值在在赋值语句执行完后就立即改变。使用非阻塞赋值方式进行赋值时,各个赋值语句同步执行;因此,通常在一个时钟沿对临时变量进行赋值,而在另一个时钟沿对其进行采样。下面的模块综合为触发器,其中采用了阻塞赋值方式:module bloc(clk,a,b);input clk, a;output b; reg b;reg y;always @(posedge
回复

使用道具 举报

千问 | 2017-9-14 19:15:19 | 显示全部楼层
阻塞语句用“=”赋值,电路的输出时刻与输入相关,即输入变化时输出立刻变化,可用在assign和always非阻塞语句用“<=”赋值,可以理解为在输入输出之间有个门,门开的时刻always @()括号中的条件,一般为电路时钟的上升沿或下降沿,输入对输出赋值。阻塞语句一般用在组合逻辑电路中,非阻塞语句一般用在时序逻辑电路中;
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行