在同一个always块中多次分配同一个寄存器,但条件不同

问题描述 投票:0回答:1

我有一个问题。 所以我知道在这段代码中:

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吗?不是要经过更多的逻辑门吗?或者因为代码的原因它总是优先,综合会处理它?

谢谢!

verilog system-verilog fpga
1个回答
0
投票

在单个过程

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
© www.soinside.com 2019 - 2024. All rights reserved.