Verilog_RTL 설계

[Verilog_RTL]_DECODER

juniha 2025. 6. 14. 17:18

Symbol

[그림 1] Decoder

 

사용 코드

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
module decoder (a, y);
    
    input  [1:0] a;         // 2비트 입력 신호 a (a[1], a[0])
    output [3:0] y;         // 4비트 출력 신호 y
 
    wire [3:0] y;           // output y와 중복 선언
 
    // 2-to-4 디코더 출력 논리
    assign y[0] = !a[1] & !a[0];   // 입력이 00일 때 y[0] = 1
    assign y[1] = !a[1] &  a[0];   // 입력이 01일 때 y[1] = 1
    assign y[2] =  a[1] & !a[0];   // 입력이 10일 때 y[2] = 1
    assign y[3] =  a[1] &  a[0];   // 입력이 11일 때 y[3] = 1
 
endmodule
cs

사용 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
module decoder (a, y);
    
    input  [1:0] a;           // 2비트 입력 신호 a (a[1], a[0])
    output [3:0] y;           // 4비트 출력 신호 y
 
    wire [3:0] y;             // output y와 중복 선언 
 
    // 입력 값에 따라 해당 y 비트만 1, 나머지는 0
    assign y[0] = (a[1:0] == 2'b00);  // a = 00 → y[0] = 1
    assign y[1] = (a[1:0] == 2'b01);  // a = 01 → y[1] = 1
    assign y[2] = (a[1:0] == 2'b10);  // a = 10 → y[2] = 1
    assign y[3] = (a[1:0] == 2'b11);  // a = 11 → y[3] = 1
    
endmodule
cs

 

Schenatic

[그림 2] Decoder_Schematic

 

 

진리표를 보고 코드 작성

[그림 3] Decoder_진리표

사용 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
module de_coder (a, y);
    
    input  [1:0] a;           // 2비트 입력 신호 (a[1], a[0])
    output [3:0] y;           // 4비트 출력 신호 y
 
    wire [3:0] y;             // ❗ output y와 중복 선언 (Vivado 등 합성기에서 경고/에러 발생 가능)
 
    // 입력 값에 따라 4비트 y 출력 설정 (2-to-4 디코더 동작)
    assign y = (a == 2'b00) ? 4'b0001 :   // a = 00 → y = 0001
               (a == 2'b01) ? 4'b0010 :   // a = 01 → y = 0010
               (a == 2'b10) ? 4'b0100 :   // a = 10 → y = 0100
                               4'b1000;   // a = 11 → y = 1000
    
endmodule
cs

 

사용 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
module d_coder (a, y);
    
    input  [1:0] a;           // 2비트 입력 신호 (a[1], a[0])
    output [3:0] y;           // 4비트 출력 신호 y
 
    reg [3:0] y;              // always 블록에서 y를 할당하므로 reg 타입으로 선언
 
    always @(a) begin         // a 값이 바뀔 때마다 실행
        case (a)
            2'b00 : y = 4'b0001;  // a = 00 -> y = 0001
            2'b01 : y = 4'b0010;  // a = 01 -> y = 0010
            2'b10 : y = 4'b0100;  // a = 10 -> y = 0100
            2'b11 : y = 4'b1000;  // a = 11 -> y = 1000
        endcase
    end    
    
endmodule
cs

 

Schematic

[그림 4] Decoder_Schematic

'Verilog_RTL 설계' 카테고리의 다른 글

[Verilog_RTL]_4BIT_ALU  (0) 2025.06.14
[Verilog_RTL]_LOGIC_GATE  (0) 2025.06.14
[Verilog]_4BIT_ADDER/SUBTRACTOR  (0) 2025.06.14
[Verilog]_4BIT_ADDER  (0) 2025.06.14
[Verilog]_Tri_state_Buffer / Inverter  (0) 2025.06.14