이전글 : 멀티플렉서 (MUX)


디멀티플렉서(Demultiplexer : 역다중화기, 디먹스)



디먹스는 먹스와 반대되는 기능을 한다.

한 개의 선으로 들어오는 입력을 n비트의 선택 입력에 따라 2ⁿ개의 선 중 하나로 출력한다.


1-to-4 디먹스로 예를 들어보면,

선택입력이 00일 때 0번 출력선으로 출력,

선택입력이 01일 때 1번 출력선으로 출력,

선택입력이 10일 때 2번 출력선으로 출력,

선택입력이 11일 때 3번 출력선으로 출력하는 것이다.




□ 1to4 디먹스의 논리식(불대수식)

4to1먹스와는 반대로 출력이 4개이므로 논리식도 4개로 써 볼 수 있다.

데이터입력 d와 선택입력 s0, s1 그리고 출력 x0, x1, x2, x3이 있으면

각각의 출력에 대한 논리식은

x0 = s1's0'd

x1 = s1's0d

x2 = s1s0'd

x3 = s1s0d


이렇게 나오는데, d를 제외한 부분을 보면 선택입력에 대한 디코더와 같은 논리가 있다는 것을 알 수 있다.

s1's0'은 선택입력이00일 때만 참이 되고,

s1's0은 선택입력이 01일 때만 참이 되고..

이런식으로 선택입력에 따라 x0~x3중 하나만 참이 되어서 데이터입력인 d값이 그곳으로 출력되는것이다.





□ 1to4 디먹스의 블록도






□ 먹스와 디먹스의 연결



먹스의 출력을 디먹스의 입력으로 넣고 동일한 sel(선택입력)을 주면

먹스와 디먹스가 서로 반대되는 역할을 하기 때문에 먹스쪽의 입력이 디먹스쪽의 출력으로 그대로 나오게 된다.

그러나 정확히 말하면 먹스쪽 데이터입력이 하이임피던스상태여도 디먹스쪽 출력은 0이 나오기 때문에 완전히 그대로 나오는 것은 아니다...




□ Verilog로 디먹스 구성하기


베릴로그로 디먹스를 구현해보자.

디먹스의 논리식을 참고하여 블록도대로 그대로 작성해보면

일단 아래와 같이 구성할 수 있다.(더 아래쪽에서 간단한 코드가 나옵니다)


module demux4(data, sel0, sel1, out0, out1, out2, out3);
    input data;
    input sel0 ,sel1;
    output out0, out1, out2, out3;
    wire w0, w1, w2, w3;
   
    and(w0, ~sel0, ~sel1);
    and(w1,  sel0, ~sel1);
    and(w2, ~sel0,  sel1);   
    and(w3,  sel0,  sel1);
   
    and(out0, w0, data);
    and(out1, w1, data);  
    and(out2, w2, data);
    and(out3, w3, data);

endmodule  



선택입력과 출력을 리스트로 묶고 동작적 모델링을 사용하여 코드를 더 간단히 해 보면,

module demux4(data, sel, out);
    input data;
    input[1:0] sel;
    output[3:0] out;
   
    wire data;
    wire[1:0] sel;
    reg[3:0] out;
   
    always @(data or sel) begin
        out[sel] = data;
    end
endmodule


여기서 4개의 출력선 중 출력이 없는 선은 하이임피던스 상태가 나오는데,

위의 코드에서 reg[3:0] out = 0; 이렇게 초기값으로 0을 인가하면 출력이 없는 선도 0값을 나오게 할 수 있다.




관련글 : 멀티플렉서(MUX)

관련글목록 : 블로그 '전자' 카테고리





* 멀티플렉서 (Multiplexer, MUX, 먹스, 다중화기)



멀티플렉서는 데이터입력과 선택입력(제어입력)을 가지고 있다.

제어입력(select)는 들어오는 n개의 입력 중 하나를 선택하는 역할을 한다.

 

출처

위 그림에서 sel에 0이 입력되면 out에는 I0 값이 출력되고,

sel에 1이 입력된다면 out으로 I1 값이 출력된다.

입력이 2개 출력이 1개이기 때문에 이와 같은 멀티플렉서를 2-to-1 멀티플렉서라고 한다.


- to - 1 멀티플렉서에서 입력 데이터 수가 개이면 select의 비트수는 n개가 된다.

입력 데이터 수가 8개(개)라고 한다면 select 3비트로 모든 가짓수(8가지) 선택할 수 있는 것이다.

8-to-1 멀티플렉서에서 각각의 경우를 써 보면 

select가

000일때 0번 데이터,

001일때 1번 데이터,

010일때 2번 데이터,

011일때 3번 데이터,

100일때 4번 데이터,

101일때 5번 데이터,

110일때 6번 데이터,

111일때 7번 데이터.

를 선택하여 출력하게 된다.





* 멀티플렉서의 논리식 (불대수식)


2-to-1 멀티플렉서의 논리식을 살펴보자.

데이터 입력으로 D0,D1,  제어입력으로 s,  출력으로 Out이 있다고 할 때 논리식은


Out = s'D0 + sD1 


이다.  자세히 살펴보면 곱의 합(SOP : Sum of Product)방식으로 이루어진 식이라는 것을 알 수 있는데 각각의 항을 보면

s가 0일 때는 sD1 항은 D1의 값과 관계없이 0이 되어 무시된다. (나머지 s'D0 항을 보면 s'는 1이므로 결과값은 D0이 됨)

s가 1일 때는 반대로 s'D0 항이 D0 값에 관계없이 0이 되어버린다.  (남은 sD1 항을 보면 s는 1이므로 결과값은 D1과 같게 됨)




이번에는 4-to-1 멀티플렉서의 논리식을 보자.

데이터 입력으로 D0 D1 D2 D3이 있고 제어입력으로 s0 s1이 있을 때 식은 아래와 같다.


Out = s0's1'D0 + s0s1D1 + s0s1D2 + s0s1D3 


제어입력이 00일때, 01일때, 10일때, 11일때의 각각의 경우에 대하여

위에서 2-to-1 멀티플렉서의 원리와 같이, 한 항을 제외한 나머지 모든 항들이 0이 되어서 무시된다.

이러한 원리로 여러 개의 입력 중 하나를 선택하여 출력하는 것이다.





* 쿼터스로 작성한 4-to-1 멀티플렉서의 블록도




제어입력인 두개의 sel이 이루는 4가지 경우가  각각의 4가지 입력과 POS를 이루고 있다.




관련글 : 디멀티플렉서(DEMUX)

관련글목록 : 블로그 '전자' 카테고리









+ Recent posts