RTL Design/Verilog 연습

4 X 1 MUX / 1 X 4 DEMUX

유로 청년 2024. 7. 8. 22:16

1. MUX

  • MUX는 2^n 개의 입력선과 n 개의 선택선, 1개의 출력선을 갖는다.
  • 2^n 개의 입력선을 통해 한 번에 동시에 여러 데이터들 들어오지만, 실질적으로 출력선을 통해 출력되는 데이터는 n 개의 선택선에 의해 선택된 단 1개의 입력선으로 들어오는 데이터 이다.

 

 

 

 

2. DEMUX

  • DEMUX는 1개의 입력선과 n 개의 선택선, 2^n개의 출력선을 갖는다.
  • DEMUX는 2^n 개의 출력선을 갖지만, 실질적으로 입력선을 통해 들어온 데이터를 출력으로 내보내는 출력선은 n 개의 선택선에 의해 선택받은 출력선이다.
  • MUX 와 DEMUX에 대한 자세한 내용은 아래 게시글을 참조하기 바란다.
    MUX와 DEMUX (tistory.com)
 

MUX와 DEMUX

1. MUX (MultipleXer)MUX는 여러 개의 입력선들 중 선택선에 의해 선택된 입력선으로 들어오는 데이터를 출력으로 내보내는 조합 논리 회로이다.MUX는 2^n개의 입력선과 n개의 선택선으로 부터 입력 값

jbhdeve.tistory.com

 

 

 

 

 

1.1. Behaviroal modeling of 4 X 1 MUX (case문)

< Source >

//  Behavioral Modeling of 4X1 MUX 
module Behavioral_Modeling_4X1_MUX_case(
    input [3:0] signal,
    input [1:0] selector,
    output reg data );
    
    always @(signal, selector) begin
        case(selector)
            2'b00 : data = signal[0];
            2'b01 : data = signal[1];
            2'b10 : data = signal[2];
            2'b11 : data = signal[3];
            default data = data;
        endcase
    end
    
endmodule

 

< Simulation >

 


< RTL Analysis >

 

 

< synthesis >

 

 

 

 

 

1.2. Behaviroal modeling of 4 X 1 MUX (if - else 문)

 

< Source >

// Behavioral Modeling of 4X1 MUX
module Behavioral_Modeling_4X1_MUX_if_else(
    input [3:0] signal, 
    input [1:0] selector,
    output reg data  );
    
    always @(signal, selector) begin
        if(selector == 2'b00) data = signal[0];
        else if(selector == 2'b01) data = signal[1];
        else if(selector == 2'b10) data = signal[2];
        else if(selector == 2'b11) data = signal[3];
        else data = data;
    end
    
endmodule

 

< Simulation >


< RTL Analysis >

 

 

< synthesis >

 

 

 

 

1.3. Dataflow modeling of 4 X 1 MUX (조건 연산자)

< Source >

// Dataflow Modeling of 4X1 MUX
module Dataflow_Modeling_4X1_MUX(
    input[3:0] signal,
    input[1:0] selector,
    output data );
    
    assign data = (selector == 2'b00)? signal[0] : 
                  ((selector == 2'b01)? signal[1] :
                  ((selector == 2'b10)? signal[2] :
                  ((selector == 2'b11)? signal[3] : data)));
    
endmodule

 

< Simulation >


< RTL Analysis >

 

 

 

 

 

 

 

1.4. Dataflow modeling of 4 X 1 MUX (배열 인덱스)

< Source >

// Dataflow Modeling of 4x1 MUX 
module Dataflow_Modeling_4X1_MUX_Array_Index(
    input [3:0] signal,
    input[1:0] selector,
    output data  );
    
    assign data = signal[selector];
    
endmodule

 

< Simulation >

 

< RTL Analysis >

 

 

 

 

 

 

 

 

2.1. Behaviroal modeling of 1 X 4 DEMUX (case 문)

< Source >

// Behavioral Modeling of 1X4 DEMUX (case)
module Behavioral_Modeling_of_1X4_DEMUX_case(
    input data, 
    input[1:0] selector,
    output reg [3:0] signal);
    
    always @(*) begin
        case(selector)
            2'b00 : signal = {3'b000, data};
            2'b01 : signal = {2'b00, data, 1'b0};
            2'b10 : signal = {1'b0 , data, 2'b00};
            2'b11 : signal = {data, 3'b000};
            default signal = signal;
        endcase
    end
endmodule

 

< Simulation >

 

< RTL analysis >

 

< Synthesis >

 

 

 

 

 

2.2.  Behaviroal modeling of 1 X 4 DEMUX (if-else 문)

< Source >

// Behavioral Modeling of 1X4 DEMUX if_else
module Behavioral_Modeling_of_1X4_DEMUX_if_else(
    input data,
    input [1:0] selector,
    output reg [3:0] signal );
    
    always @(data or selector) begin
        if(selector == 2'b00) signal = {3'b000, data};
        else if(selector == 2'b01) signal = {2'b00, data, 1'b0};
        else if(selector == 2'b10) signal = {1'b0, data, 2'b00};
        else if(selector == 2'b11) signal = {data, 3'b000};
        else signal = signal;    
    end
    
endmodule

 

 

< Simulation >

 

 

< RTL analysis >

 

 

 

< Synthesis >

 

 

 

 

 

 

 

2.3. Dataflow modeling of 1 X 4 DEMUX 

< Source >

// Dataflow Modeling of 1X4 DEMUX
module Dataflow_Modeling_of_1X4_DEMUX(
    input data,
    input [1:0] selector,
    output [3:0] signal );
    
    assign signal = (selector == 2'b00)? {3'b000, data} :
                    ((selector == 2'b01)? {2'b00, data, 1'b0} : 
                    ((selector == 2'b10)? {1'b0, data, 2'b00} :
                    ((selector == 2'b11)? {data, 3'b000} : signal)));
    
endmodule

 

 

< Simulation >

 

 

< RTL analysis >