gpt4 book ai didi

verilog - 如何解释 Verilog 中的阻塞与非阻塞赋值?

转载 作者:行者123 更新时间:2023-12-03 10:45:21 24 4
gpt4 key购买 nike

在绘制硬件图时,我对如何解释阻塞和非阻塞分配感到有些困惑。我们是否必须推断非阻塞赋值给了我们一个寄存器?然后根据这个说法c <= a+b , c 将是一个寄存器对,但不是 a 和 b?

module add (input logic clock,  
output logic[7:0] f);

logic[7:0] a, b, c;

always_ff @(posedge clock)
begin
a = b + c;
b = c + a;
c <= a + b;
end

assign f = c;

endmodule

最佳答案

最初了解阻塞和非阻塞分配之间的差异绝对有点棘手。但不用担心 - 有一个方便的经验法则:

If you want to infer combo logic with an always block, use blocking assignments (=). If you want sequential logic, use a clocked always block with nonblocking assignments (<=). And try not to mix the two.



你上面的代码可能不是最好的例子。在不知道您尝试构建什么加法器/触发器结构的情况下,存在组合反馈路径(这是不好的)的危险。由于您没有输入总线,您实际上是在尝试构建 a , b & c凭空!

但是要回答您的问题,分配给时钟 always 内的任何变量块将推断一个触发器,除非它使用阻塞运算符( = )分配并用作一种局部变量。
module add
(
input clock,
input [7:0] in1,
input [7:0] in2,
output logic [7:0] f1, f2, f3, f4, f5
);


// f1 will be a flipflop
always_ff @(posedge clock) begin
f1 = in1 + in2;
end


// f2 will be a flipflop
always_ff @(posedge clock) begin
f2 <= in1 + in2;
end


// f3 will be a flipflop
// c1 will be a flipflop
logic [7:0] c1;
always_ff @(posedge clock) begin
c1 <= in1 + in2;
f3 <= c1 + in1;
end


// f4 will be a flipflop
// c2 is used only within the always block and so is treated
// as a tmp variable and won't be inferred as a flipflop
logic [7:0] c2;
always_ff @(posedge clock) begin
c2 = in1 + in2;
f4 = c2 + in1;
end


// c3 will be a flipflop, as it's used outside the always block
logic [7:0] c3;
always_ff @(posedge clock) begin
c3 = in1 + in2;
end

assign f5 = c3 + in1;

endmodule

遵循经验法则并且不在 always 中混合阻塞和非阻塞赋值的一个重要原因块,是混合您的分配会导致 RTL 模拟和门模拟/真实硬件操作之间严重的模拟不匹配。 verilog 模拟器处理 =<=完全不同。阻塞赋值意味着“立即将值赋值给变量”。非阻塞赋值意味着“弄清楚要分配给这个变量的内容,并将其存储起来以备将来分配”。阅读以更好地理解这一点的好论文是:另见: http://www.sunburst-design.com/papers/CummingsSNUG2000SJ_NBA.pdf

关于verilog - 如何解释 Verilog 中的阻塞与非阻塞赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4653284/

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