我知道几种交换2个寄存器的方法: 使用3 xors,使用寄存器,使用多路复用器等... 我们如何进行条件交换,尽可能减少代码并尽可能快地工作
答案 0 :(得分:2)
Tripple-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
答案 1 :(得分:1)
这种简单的方法在Verilog中可能是最好的 - 只需使用非阻塞分配将它们分配给对方
a <= b;
b <= a;
合成器会做正确的事。
答案 2 :(得分:1)
a <= b;
b <= a;
这就是你需要做的一切。