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 >