0

次のコードを実装しようとしています。

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 が割り当てられます。だから、合成でも機能するように、私がやろうとしていることを行う適切な方法があるのではないかと思っていますか?

4

1 に答える 1

0

通常、フリップフロップの感度リストにリセットを含めます。アクティブローリセットの場合always @(posedge clock or negedge reset)

提供された例では、ビジーは定義されていませんreg [7:0] busy;

私は次のように実装します:

reg [7:0] busy;

always @(posedge clock or negedge reset) begin
    if (reset == 1'b0) begin
        busy    <= 8'b0;
    end
    else if (condition determined by module input) begin
        busy[0] <= 1'b1; // busy <= 8'b1;
    end
    else begin
        busy    <= next_busy;
    end
end //always @(posedge clock)
于 2012-10-30T07:18:37.570 に答える