今天在看部落格的時候看到有一種新穎的加法器寫法,這和之前的超前進位加法器,二進制加法器不同,這個加法器應用了循環。我覺得應該會綜合出來一個很差的東西,然後我試了一下:
代碼:
module adder(
x,y,cin,sum,cout
);
parameter N = 32;
input wire cin;
input wire [N-1:0]x,y;
output reg [N-1:0]sum;
output reg cout;
reg [N:0] temp;
integer i;
[email protected](*) begin
temp[0] = cin;
for(i = 0;i < N;i = i + 1) begin
temp[i+1] = (x[i]&y[i])||(x[i]&temp[i])||(y[i]&temp[i]);
sum[i] = x[i]^y[i]^temp[i];
end
cout = temp[N];
end
endmodule
從上面代碼看來,關鍵路徑應該很長,然後綜合了一下:
一個加法器,不能點開看裡面的邏輯,這就是Xilinx的加法器,這個效果和a+b是一樣的。這說明以後還是用自己寫的加法器吧!可能會比Xilinx的加法更快!
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiclRnblN0LclHdpZXYyd2LcBzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CX90TUNVTQ610MJpWT3lleZZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39TOwcTM0kDNwIDOyATM0EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)