Verilog_RTL 설계

[Verilog_RTL]_4BIT_MUX

juniha 2025. 6. 14. 00:28

Symbol

[그림 1] 4BIT_MUX


사용 코드_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

[그림 2] 4BIT_MUX_Schematic

Smulation

[그림 2] 4BIT_MUX_ 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