Symbol

사용 코드_assign 문 사용
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
module Full_adder (a, b, sel, out);
input [3:0] a, b; // 입력: 4비트 데이터 a, b
input sel; // 선택 신호: sel=1이면 a 출력, sel=0이면 b 출력
output [3:0] out; // 출력: 선택된 4비트 데이터
reg [3:0] out; // always 블록에서 값을 할당하므로 reg로 선언 (output reg도 가능)
always @(sel or a or b) begin // 입력이 바뀔 때마다 동작
case (sel) // sel 값을 기준으로 분기
1'b1 : out = a; // sel = 1이면 a를 출력
1'b0 : out = b; // sel = 0이면 b를 출력
endcase
end
endmodule
|
cs |
사용 코드_always 문 사용
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
module mux_4bit (a, b, sel, out);
input [3:0] a, b; // 4비트 입력: a와 b (두 데이터 중 하나를 선택)
input sel; // 선택 신호: 1이면 a, 0이면 b 선택
output [3:0] out; // 선택된 4비트 출력
reg [3:0] out; // always 블록에서 할당되므로 reg 타입으로 선언
always @(sel or a or b) begin
case(sel) // sel 값에 따라 출력 결정
1'b1 : out = a; // sel = 1 -> a 출력
1'b0 : out = b; // sel = 0 -> b 출력
endcase
end
endmodule
|
cs |
사용 코드_case 문
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
module mux (iA, iB, iC, iD, iSEL, oOUT);
input [7:0] iA, iB, iC, iD; // 8비트 입력: 4개의 데이터 입력
input [1:0] iSEL; // 2비트 선택 신호: 00, 01, 10, 11 중 하나를 선택
output [7:0] oOUT; // 8비트 출력: 선택된 입력 값이 출력됨
reg [7:0] out; // always 블록에서 out 값 설정 후 oOUT에 연결될 레지스터형 변수
// 입력 값(iA, iB, iC, iD, iSEL)이 변경될 때마다 출력 out 값을 갱신
always @(iA or iB or iC or iD or iSEL) begin
case (iSEL)
0 : out = iA; // iSEL = 2'b00 → iA 선택
1 : out = iB; // iSEL = 2'b01 → iB 선택
2 : out = iC; // iSEL = 2'b10 → iC 선택
default : out = iD; // iSEL = 2'b11 또는 다른 값 → iD 선택
endcase
end
// always 블록에서 계산된 out 값을 oOUT에 연결
assign oOUT = out;
endmodule
|
cs |
사용 코드_Testbench
|
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
32
|
module tb_mux;
reg [7:0] iA, iB, iC, iD; // 8비트 입력 값
reg [1:0] iSEL; // 2비트 선택 신호
wire [7:0] oOUT; // 8비트 출력 값
// 검증할 mux 모듈을 이름에 의한 포트 맵핑으로 인스턴스화
mux U0 (
.iA (iA), // 8비트 입력 A
.iB (iB), // 8비트 입력 B
.iC (iC), // 8비트 입력 C
.iD (iD), // 8비트 입력 D
.iSEL (iSEL), // 2비트 선택 신호
.oOUT (oOUT) // 8비트 출력
);
// 입력 신호를 생성
initial begin
// iSEL = 00 : iA 선택
iA = 8'h00; iB = 8'h01; iC = 8'h02; iD = 8'h03; iSEL = 2'b00; #100;
// iSEL = 01 : iB 선택
iA = 8'h00; iB = 8'h01; iC = 8'h02; iD = 8'h03; iSEL = 2'b01; #100;
// iSEL = 10 : iC 선택
iA = 8'h00; iB = 8'h01; iC = 8'h02; iD = 8'h03; iSEL = 2'b10; #100;
// iSEL = 11 : iD 선택
iA = 8'h00; iB = 8'h01; iC = 8'h02; iD = 8'h03; iSEL = 2'b11; #100;
end
endmodule
|
cs |
Schematic

Smulation

'Verilog_RTL 설계' 카테고리의 다른 글
| [Verilog]_4BIT_ADDER (0) | 2025.06.14 |
|---|---|
| [Verilog]_Tri_state_Buffer / Inverter (0) | 2025.06.14 |
| [Verilog_RTL]_MUX (0) | 2025.06.14 |
| [Verilog_RTL]_FULL_ADDER_GATE (0) | 2025.06.14 |
| [Verilog_RTL]_HALF_ADDER_GATE (0) | 2025.06.13 |