我有一个问题。 所以我知道在这段代码中:
reg a;
always @(posedge clk) begin
if (enable1) begin
a <= 0;
end
if (enable2) begin
a <= 1;
end
end
enable2 优先,因为更靠下,所以a=1。
但是如果代码如下所示怎么办:
reg a;
reg state<=0;
always @(posedge clk) begin
a=0;
case(state)
0: begin
if (enable) begin
a=1; end
end
end
a仍然=1吗?不是要经过更多的逻辑门吗?或者因为代码的原因它总是优先,综合会处理它?
谢谢!
在单个过程
always
进程中,语句按顺序执行,最后写入 总是获胜。综合分析您的代码并优先考虑导致最后一次写入发生的条件。
SystemVerilog 确实有一个
unique if
和 unique case
构造,可以断言只能发生一种情况;然后综合可以自由地并行优化逻辑。
always @(posedge clk) begin
unique if (enable1) begin
a <= 0;
end
else if (enable2) begin
a <= 1;
end
else
a< = 'x; // don't care
end