이번에는 전가산기 4개를 이어 붙인 4bit 가산기를 구현해보려고 한다.
전가산기에 관한 내용은 아래 글을 참고하여 확인할 수 있다.
2024.06.13 - [Language/Verilog] - Vivado : 전가산기(Full-adder) 구현
4bit adder
4비트 가산기를 구현하기 위해서는 두 개의 입력을 받을 a, b 입력단자와 올림수를 표현할 Cin(carry in) 입력 단자를 필요로 한다.
아래는 Structural 기법을 사용하여 4bit 가산기를 구현한 것이다.
4bit 가산기이기 때문에 입력단자 a, b를 ' [3:0] '을 통해 4비트를 선언해 주었다.
4개의 전가산기를 연결해 주며, carry 값을 전달해 줄 carry wire는 ' carry_w ' 로 3개를 선언해 주었다.
가장 먼저 Cin으로 초기 carry 값을 받고, carry_w(carry_wire)를 통하여 옆 가산기로 carry 값을 넘겨주는 방식으로 동작이 구현된다.
구현한 코드는 아래와 같다.
module fadderr_4bits_s(
input [3:0] a, b,
input cin, // carry in
output [3:0] sum,
output carry);
wire [2:0] carry_w;
full_adder_structural fa0(.a(a[0]), .b(b[0]), .c(cin), .sum(sum[0]), .carry(carry_w[0]));
full_adder_structural fa1(.a(a[1]), .b(b[1]), .c(carry_w[0]), .sum(sum[1]), .carry(carry_w[1]));
full_adder_structural fa2(.a(a[2]), .b(b[2]), .c(carry_w[1]), .sum(sum[2]), .carry(carry_w[2]));
full_adder_structural fa3(.a(a[3]), .b(b[3]), .c(carry_w[2]), .sum(sum[3]), .carry(carry));
endmodule
아래는 위의 코드를 동작시킨 출력 파형을 나타낸다.
출력 파형을 보면 Cin 값이 0과 1로 되어있는 것을 확인할 수 있는데, Cin(carry in)을 0과 1로 준 이유는 4비트 병렬 가산기를 바탕으로 8비트 가산기를 구현하려고 0과 1을 대입해 준 것이다.
다음은 Dataflow 기법을 활용하여 4bit 가산기를 구현한 코드와 출력 파형을 나타낸다.
Structural 기법과는 달리, Dataflow 기법을 활용하여 구현을 할 때에는 sum_value 값으로만 구현 된다는 특징을 지닌다.
동작을 구현할 코드는 아래와 같다.
module full_4bits_dataflow(
input [3:0]a, b,
input cin,
output [3:0] sum,
output carry);
wire [4:0] sum_value;
assign sum_value = a + b + cin;
assign sum = sum_value[3:0];
assign carry = sum_value[4];
endmodule
위 코드로 구현된 출력 파형은 아래와 같다.
'Language > Verilog' 카테고리의 다른 글
Vivado : Edge Detector, Shift Register(SISO, SIPO, PISO, PIPO) (2) | 2024.07.16 |
---|---|
Vivado : 동기식 카운터 (0) | 2024.07.12 |
Vivado : Decoder, Encoder (2) | 2024.06.25 |
Vivado : 전가산기(Full-adder) 구현 (0) | 2024.06.13 |
Vivado : 논리 게이트 구현 (2) | 2024.06.12 |