我知道交换 2 个寄存器的几种方法:使用 3 个异或,使用寄存器,使用多路复用器等......我们如何进行条件交换,它应该尽可能少地使用代码并尽可能快地工作
问问题
7467 次
3 回答
2
Triple-XOR是一种软件技巧,用于在没有直接寄存器交换指令(例如 x86 XCHG
)的顺序机器上交换寄存器值。XOR 指令不能同时执行,因为它们每个都依赖于先前的输出,因此需要三个指令周期。
使用 Verilog,您正在描述硬件,因此您可以通过赋值在一个周期内交换两个寄存器的值。这将从彼此的输出推断两个寄存器的加载路径。
if (swap) begin
a <= b;
b <= a;
end
您提到多路复用器 - 只有当有另一个负载路径时,多路复用器和控制逻辑才会根据需要进行实例化,例如。一些交换/增量设备将具有多路复用器,因为a
可以加载b
或a+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 回答