在Verilog中交换2个寄存器的最佳方法是什么

时间:2012-12-11 07:37:11

标签: verilog

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

3 个答案:

答案 0 :(得分:2)

Tripple-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

答案 1 :(得分:1)

这种简单的方法在Verilog中可能是最好的 - 只需使用非阻塞分配将它们分配给对方

a <= b;
b <= a;

合成器会做正确的事。

答案 2 :(得分:1)

a <= b;
b <= a; 

这就是你需要做的一切。