7

設計では、クロックの立ち上がりエッジの特定の状況で信号をアクティブにし、クロックの立ち下がりエッジの別の状況で非アクティブにする必要があります。これが私が思うことです:

always@(posedge CLK) begin
  signal1 <= 1'b0; // reset flag
  if(circumstance1) signal1 <=1'b1; // raise flag if circumstance occurs
end

always@(negedge CLK) begin
  signal2 <= 1'b1; // reset flag (actually set alternate to signal1)
  if(circumstance2) signal2 <=1'b0; // raise flag if circumstance occurs
end

always@(posedge signal1 or negedge signal2) begin
  if(signal1) outsignal <= 1'b0;   // activate outsignal
  else outsignal <= 1'n1;   // deactivate outsignal
end

それはうまくいきますか?より良い代替手段はありますか (クロックを 2 倍にしてシングル エッジをキャッチすることは、ここではオプションではありません)。

ラッセルの返信後に編集します。ラッセル、あなたは次の提案をしていると思います:

wire nCLK = ~CLK;

always@(posedge CLK or posedge nCLK or negedge nRESET) begin
    if(!nRESET) outsignal <= 1'b0;
    else if(nCLK) outsignal <= 1'b1;
         else outsignal <= 1'b0;
end

私はあなたを正しく理解しましたか?

4

2 に答える 2

3

これはオフチップ信号ですか?その場合、ザイリンクスおよびその他のチップ ベンダーは、これに役立つプリミティブを提供しています。ODDR2 プリミティブを接続すると、運が良くなる可能性があります。クロックを反転します。通常のクロックを C0 にドライブし、反転クロックを C1 に入力します。次に、ロジックを使用して D0 および D1 入力を設定します。

上で書いた方法は、非常に堅牢なソリューションではありません。

このタスクを実行するには、ファブリック プリミティブを使用してみてください。

于 2013-10-26T15:39:42.400 に答える