3

センシティビティ リスト内の複数のシグナルが同時に変化した場合にのみ、always ブロックを実行できるかどうか疑問に思っていました。

のように、信号 'in' と別の 'posedge clk' があるとします。両方の信号が変化したときに常にブロックを実行したい。可能であれば、その構文は何ですか?

4

2 に答える 2

3

一般に、これを行う方法はありません。これは、通常合成される標準的なロジック セルには実際にはマッピングされないためです。ただし、最終的な目標が何であるかを説明すると、合成可能なロジックを使用しながら、誰かが正しい方向に向けることができると確信しています. そのようなブロックが必要な理由を想像するのに苦労しています。

于 2013-03-12T06:12:43.030 に答える
2

これは元の質問に対する回答であり、コメントで明らかにされた問題ではありません

@Timが述べたように、これを実行できるハードウェア構造はありません。always @(posedge clk)clkのエッジでデータをサンプリングするフリップフロップを作成します。

always @*ブロックは、割り当ての右側または選択信号が変更されるたびにシミュレーターによって評価される組み合わせロジックを作成します。

Dタイプのフリップフロップから駆動される複数の1ビット信号がある場合は^、入力(D)と出力(Q)をXOR()して、値が変更されたことを示す1クロックサイクル幅の信号を作成できます。これらの変更信号を組み合わせて、イネーブル信号を作成できます。これは、フリップフロップの選択または有効化として使用されます。

always @(posedge clk or negedge rst_n) begin
  if (~rst_n) begin
    //reset condition
  end
  else if (enabled)
    //Enabled condition
  end
  // no final else, everything will holds its value
end

または、ラッチを有効にする場合もあります。

//synopsys async_set_reset "rst_n"
always @* begin
  if (~rst_n) begin
    // Reset 
  end
  else if (latch_open) begin
    //next datavalue
  end
end
于 2013-03-12T08:43:32.740 に答える