在绘制硬件图时,我对如何解释阻塞和非阻塞分配感到有些困惑.我们是否必须推断非阻塞分配给我们一个寄存器?然后根据这个陈述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
Run Code Online (Sandbox Code Playgroud) 我试图了解芯片中的时钟重置。在设计中,使用什么标准来决定复位期间是否应为触发器分配一个值(通常为零)?
always_ff @(posedge clk or negedge reset) begin : process_w_reset
if(~reset) begin
flop1 <= '0;
....
end else begin
if (condition) begin
flop1 <= something ;
....
end
end
end
always_ff @(posedge clk) begin : process_wo_reset
if (condition) begin
flop1 <= something ;
....
end
end
Run Code Online (Sandbox Code Playgroud)
不重置稍后用作梳状逻辑中的控制信号的触发器是一种不好的做法吗?如果设计确保触发器在用于梳状逻辑块(即在 if 语句或 FSM 梳状逻辑中)之前分配有有效值(0 或 1),该怎么办?
我觉得最好总是重置设计中的所有失败。这样芯片复位后就不会有X了。然而,对于数据路径逻辑来说,重置触发器可能并不是什么大问题,因为它只是管道阶段。然而,如果触发器位于控制路径中(即,FSM 下一状态梳逻辑),则应将其重置为默认值。我的理解正确吗?我对DFT了解不多,不确定它是否还有其他含义。