3

我知道交换 2 个寄存器的几种方法:使用 3 个异或,使用寄存器,使用多路复用器等......我们如何进行条件交换,它应该尽可能少地使用代码并尽可能快地工作

4

3 回答 3

2

Triple-XOR是一种软件技巧,用于在没有直接寄存器交换指令(例如 x86 XCHG)的顺序机器上交换寄存器值。XOR 指令不能同时执行,因为它们每个都依赖于先前的输出,因此需要三个指令周期。

使用 Verilog,您正在描述硬件,因此您可以通过赋值在一个周期内交换两个寄存器的值。这将从彼此的输出推断两个寄存器的加载路径。

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 回答