일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- pwm
- Pspice
- i2c 통신
- behavioral modeling
- ring counter
- Recursion
- LED
- java
- DHT11
- KEYPAD
- verilog
- stop watch
- gpio
- soc 설계
- D Flip Flop
- Edge Detector
- dataflow modeling
- BASYS3
- Linked List
- Algorithm
- ATMEGA128A
- atmega 128a
- half adder
- FND
- uart 통신
- vivado
- test bench
- prescaling
- hc-sr04
- structural modeling
- Today
- Total
거북이처럼 천천히
Verilog RTL 설계 (6월 13일 - 2) 본문
1. 4bit Parallel-adder
- 4bit 병렬 가산기는 다음과 같은 구조를 갖는다.
- 4bit 병렬 가산기는 아래와 그림과 같이 4bit 데이터 A, B를 가산기에 대입하면 전가산 수행 후, 결과 값이 출력된다.
- 위 그림에서 알 수 있듯이 4bit parallel-adder는 4개의 Full-adder를 병렬로 연결함으로서 만들 수 있다.
- 4bit parallel adder에 대해서 Structural modeling, Dataflow modeling으로 구현해보겠다.
- Q) 왜 4bit parallel adder의 Behavior modeling 을 구현하지 않는가?
A) 입력 값으로 4bit 크기를 갖는 A, B 와 1bit 크기를 갖는 Sign 데이터가 들어오는 데, 모든 경우의 수는
몇 개가 나오는가? 입력 값으로 가능한 경우의 수는 총 2^9 = 512개가 나온다.
그런데, Behavioral modeling 으로 설계한다는 것은 "모든 입력 경우의 수에 대해서 출력을 하나하나
지정해주는 설계 방식"이기 때문에 비효율적이고, 복잡하기 때문에 구현하지 않는다.
- 주의) 4bit parallel adder는 결과값을 4bit로 출력하기 때문에 최대 15까지만 출력이 가능하며, 이를 넘으
면 Overflow가 발생하여 0으로 돌아간다.
2. 4bit Parallel-adder (Structural Modeling)
< Source >
// and_gate dataflow Modeling
module and_gate (
input a, b,
output out);
wire result_value;
assign result_value = a * b;
assign out = result_value;
endmodule
// xor_gate Behavioral Modeling
module xor_gate (
input a, b,
output reg out);
always @(a, b) begin
case({a, b})
2'b00 : out = 0;
2'b01 : out = 1;
2'b10 : out = 1;
2'b11 : out = 0;
endcase
end
endmodule
// half_adder Structural Modeling
module half_adder (
input a, b,
output sum, carry );
and_gate and0 (a, b, carry);
xor_gate xor0 (a, b, sum);
endmodule
// full_adder Structural Modeling
module full_adder (
input a, b, Cin,
output sum, carry );
wire carry_0, sum_0, carry_1;
half_adder half0 (a, b, sum_0, carry_0);
half_adder half1 (sum_0, Cin, sum, carry_1);
xor_gate xor0 (carry_0, carry_1, carry);
endmodule
//
module Parallel_4bit_adder_Structural_Modeling(
input [3:0] a, b,
input sign,
output [3:0] sum,
output carry);
wire[3:0] sum;
wire[2:0] carry_line;
full_adder full_adder0 (a[0], b[0], sign, sum[0], carry_line[0]);
full_adder full_adder1 (a[1], b[1], carry_line[0], sum[1], carry_line[1]);
full_adder full_adder2 (a[2], b[2], carry_line[1], sum[2], carry_line[2]);
full_adder full_adder3 (a[3], b[3], carry_line[2], sum[3], carry);
endmodule
< Simulation >
- 덧셈 연산 값이 15을 넘으면 Overflow가 발생하며, 0으로 돌아가 잘못된 출력이 발생한다는 점도 유념해야한다.
3. 4bit Parallel-adder (Dataflow Modeling)
< source >
module Parallel_4bit_adder_Dataflow_Modeling(
input [3:0] a, b,
input sign,
output [3:0] sum,
output carry );
wire[4:0] result_value = a + b + sign;
assign sum = result_value[3:0];
assign carry = result_value[4];
endmodule
< Simulation >
- 덧셈 연산 값이 15을 넘으면 Overflow가 발생하며, 0으로 돌아가 잘못된 출력이 발생한다는 점도 유념해야한다.
- Dataflow modeling으로 설계할 경우, 각각의 Full adder간에 공유되는 carry 값을 저장하는 변수가 없기 때문에 하나씩 계산을 통해 간접적으로 확인할 수 있지만, 이를 시뮬레이션에서 변수를 통해 직접적으로 확인할 수 없다.
'RTL Design > Verilog RTL 설계' 카테고리의 다른 글
Verilog RTL 설계 (6월 13일 - 4) (1) | 2024.06.15 |
---|---|
Verilog RTL 설계 (6월 13일 - 3) (1) | 2024.06.15 |
Verilog RTL 설계 (6월 13일 - 1) (0) | 2024.06.14 |
Verilog RTL 설계 (6월 12일 - 3) (0) | 2024.06.13 |
Verilog RTL 설계 (6월 12일 - 2) - Half adder (0) | 2024.06.12 |