次のコードを実装しようとしています。
reg [7:0] next_busy;
always @* begin
next_busy = busy; //default assignment
if (condition determined by module input) begin
next_busy[0]= 1'b1;
end
end //always @*
always @(posedge clock) begin
if (reset) begin
busy <= 8'b0;
end else begin
busy <= next_busy;
end
end //always @(posedge clock)
これはシミュレーションでは正常に機能しますが、合成では next_busy 信号に対してある種の競合があるようです。つまり、busy が 1 でない場合 (たとえば、前のサイクルでリセットがあった場合)、x が出力されます (入力条件が満たされた場合)。ただし、busy が既に 1 であった場合 (および入力条件が満たされている場合)、next_busy には正しく 1 が割り当てられます。だから、合成でも機能するように、私がやろうとしていることを行う適切な方法があるのではないかと思っていますか?