gpt4 book ai didi

verilog - <= Verilog中的赋值运算符

转载 作者:行者123 更新时间:2023-12-04 16:24:22 26 4
gpt4 key购买 nike

<=在Verilog中做什么?

例如:

always @(posedge Clock) begin
if (Clear) begin
BCD1 <= 0;
BCD0 <= 0;
end
end

最佳答案

在Verilog中,“<=”被称为非阻塞分配,它与“=”具有很大的不同,后者被称为阻塞分配,因为在任何基于供应商的仿真器中调度事件。

建议对顺序逻辑使用非阻塞分配,对组合逻辑使用阻塞分配,只有这样才能在综合过程中推断出正确的硬件逻辑。

顺序块中的非阻塞语句将推断实际硬件中的触发器。

永远记住不要在任何顺序或组合块中混合使用阻塞和非阻塞。

在模拟器的调度过程中:

有四个区域和命令的执行顺序,如下所示

1) Active region
--Blocking assignments
--Evaluation of RHS of non-blocking assignments(NBA)
--Continuous assignment
--$display command
--Evaluate input and output of primitives
2) Inactive region
--#0 blocking assignments
3) NBA(non-blocking assignment update)
--update LHS of non-blocking assignments (NBA)
4) Postponed
--$monitor command
--$strobe command

在同一时隙中对两个变量使用阻塞分配“=”会导致争用情况

例如:带有竞争条件的Verilog代码,
always @(posedge Clock) 
BCD0 = 0; // Usage of blocking statements should be avoided
always @(posedge Clock)
BCD1 = BCD0;

为了避免竞争状况,请使用非阻塞语句“<=”

例如:
   always @(posedge Clock) 
BCD0 <= 0; // Recommended to use NBA
always @(posedge Clock)
BCD1 <= BCD0;

执行此块时,将有两个事件添加到非阻塞分配更新队列中。
因此,它在时间步长结束时从BCD0进行了BCD1的更新。

根据verilog LRM,不允许在连续赋值语句中使用非阻塞式“<=”赋值,这会导致编译错误。

例如:
assign BCD0 <= BCD1; //Results in compilation error

仅在程序分配陈述中使用NBA,
 - initial and
- always blocks

关于verilog - <= Verilog中的赋值运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26727727/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com