에서 가산기를 구현한다는 것 - 3항 가산
계속.
다양한 추가의 구현
여기까지 개설한 ALM의 기본 구조를 전제로 다양한 가산기의 구현을 생각해 봅시다.
※여기에서는, Altera(Intel)의 FPGA를 전제로 하고 있습니다만, Xilinx나 Lattice의 FPGA도 기본적으로는 같은 구성이므로, 대체로 적용 가능하지 않을까 생각합니다.
3항 가산
공유 연산 모드를 사용하면 3항의 가산을 고밀도로(그러나 가장 빠르지는 않지만) 구현할 수 있습니다.
이 때문에, 다입력의 가산기의 파이프라인을 실장하는 경우에는, 3항으로 1단으로 하면 편리한 경우가 많습니다.
32bit 8 입력의 가산의 구현 예를 4개 나타냅니다.
회로도로서 다음과 같습니다.
Verilog-HDL의 설명은 다음과 같습니다.
module adder8 #(
parameter W = 32
) (
input wire clk,
input wire [7:0][W-1:0] d,
output reg [W-1:0] sum
);
always_ff @(posedge clk) begin
sum <= d[0] + d[1] + d[2] + d[3] + d[4] + d[5] + d[6] + d[7];
end
endmodule
module adder8_binary #(
parameter W = 32
) (
input wire clk,
input wire [7:0][W-1:0] d,
output reg [W-1:0] sum
);
logic [3:0][W-1:0] sum1;
logic [1:0][W-1:0] sum2;
always_ff @(posedge clk) begin
sum1[0] <= d[0] + d[1];
sum1[1] <= d[2] + d[3];
sum1[2] <= d[4] + d[5];
sum1[3] <= d[6] + d[7];
sum2[0] <= sum1[0] + sum1[1];
sum2[1] <= sum1[2] + sum1[3];
sum <= sum2[0] + sum2[1];
end
endmodule
module adder8_ternary #(
parameter W = 32
) (
input wire clk,
input wire [7:0][W-1:0] d,
output reg [W-1:0] sum
);
logic [2:0][W-1:0] sum1;
always_ff @(posedge clk) begin
sum1[0] <= d[0] + d[1] + d[2];
sum1[1] <= d[3] + d[4] + d[5];
sum1[2] <= d[6] + d[7];
sum <= sum1[0] + sum1[1] + sum1[2];
end
endmodule
module adder8_quatenary #(
parameter W = 32
) (
input wire clk,
input wire [7:0][W-1:0] d,
output reg [W-1:0] sum
);
logic [1:0][W-1:0] sum1;
always_ff @(posedge clk) begin
sum1[0] <= d[0] + d[1] + d[2] + d[3];
sum1[1] <= d[4] + d[5] + d[6] + d[7];
sum <= sum1[0] + sum1[1];
end
endmodule
Quartus의 합성 결과를 나타냅니다.
module
Latency
fMax
ALMs
FFs
ALUTs
adder8
1clk
171MHz
47.5
32
128
adder8_binary
3clk
327MHz
111.0
224
224
adder8_ternary
2clk
317MHz
63.8
128
128
adder8_quatenary
2clk
226MHz
67.1
160
96
adder8이 가장 회로 규모가 작습니다. 그러나 fMax는 가장 느린 회로입니다.
adder8_binary가 가장 fMax가 높지만 회로 규모는 adder8_ternary에 비해 약 두 배입니다. Latency는 3clk에서 가장 느린 회로입니다.
adder8_quaternary는 adder8_ternary와 거의 유사한 회로 규모입니다 (ALM 수는 동등하고 FF 수 LUT 수는 작음). 그러나 fMax는 binary, ternary에 비해 100MHz도 느려지고 있습니다.
위의 예에서는 3입력마다 가산을 정리하는 것이 가장 균형이 좋다고 할 수 있습니다.
수정 내역
Reference
이 문제에 관하여(에서 가산기를 구현한다는 것 - 3항 가산), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/srmfsan/items/bc28156c41e6a26315cb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)