3

私は2つのレジスタを交換するいくつかの方法を知っています:3つのXORを使用する、レジスタを使用する、マルチプレクサを使用するなど...条件付き交換を行うにはどうすればよいですか?

4

3 に答える 3

2

Triple-XORは、直接レジスタ交換命令(x86XCHGなど)が使用できないシーケンシャルマシンでレジスタ値を交換するために使用されるソフトウェアトリックです。XOR命令は、それぞれが前の出力に依存しているため、同時に実行することはできません。そのため、3つの命令サイクルが必要です。

Verilogではハードウェアを記述しているため、割り当てによって1サイクルで2つのレジスタの値を交換します。これにより、互いの出力から両方のレジスタのロードパスが推測されます。

if (swap) begin
  a <= b;
  b <= a;
end 

マルチプレクサについて言及します。別のロードパスがある場合にのみ、マルチプレクサと制御ロジックが必要に応じてインスタンス化されます。一部のスワップ/インクリメントデバイスには、またはのいずれかをロードできるため、マルチプレクサがa あります。ba+1

if (swap) begin
  a <= b;
  b <= a;
end else begin
  a <= a+1;
end
于 2012-12-12T12:13:51.450 に答える
1

簡単な方法はおそらくVerilogで最適です-ノンブロッキング割り当てを使用してそれらを互いに割り当てるだけです

a <= b;
b <= a;

シンセサイザーは正しいことをします。

于 2012-12-11T11:50:01.567 に答える
1
a <= b;
b <= a; 

それがあなたがする必要があるすべてです。

于 2012-12-14T05:15:10.400 に答える