2013-01-23 3 views
5

겉으로는 일에 가깝습니다. 7 번 라인에서 엉망이되었습니다. 다음과 같이DMux 4 방식의 문제점은 무엇입니까?

/** 
* 4-way demultiplexor. 
* {a,b,c,d} = {in,0,0,0} if sel==00 
*    {0,in,0,0} if sel==01 
*    {0,0,in,0} if sel==10 
*    {0,0,0,in} if sel==11 
*/ 


CHIP DMux4Way { 
    IN in, sel[2]; 
    OUT a, b, c, d; 

    PARTS: 
    DMux(in = in, sel = sel[0], a = out1, b = out2); 

    DMux(in = out1, sel = sel[1], a = a, b = b); 
    DMux(in = out2, sel = sel[1], a = c, b = d); 
} 

나는 나의 DMUX를 구현했습니다, 나는 것처럼이 나무라고 사용하고 있습니다 :

/** 
* Dmultiplexor. 
* {a,b} = {in,0} if sel==0 
*   {0,in} if sel==1 
*/ 


CHIP DMux { 
    IN in, sel; 
    OUT a, b; 

    PARTS: 
    Not(in = sel, out = notsel); 
    And(a = in, b = notsel, out = a); 
    And(a = in, b = sel, out = b); 
} 
+2

당신은 당신의 물건을 쓰려고합니까? 그것은 VHDL이나 Verilog처럼 보이지 않습니다 ... – Marty

+2

그것은 nand2tetris 과정에서 사용되는 것 같습니다 : http://nand2tetris.org/ –

답변

7

당신이 올바른 생각을 가지고있어! 그러나 당신은 sel [1]과 반대로 sel [0]을 좁히기 시작했습니다. 이것은 왼쪽 열에 해당합니다.

PS : 나는 늦게

편집을 해요 알고 : 아래의 요청에 따라 고정 코드를 추가했습니다. 진리표에서 왼쪽 열을 참조 할 것을 좁히는에서 피드백

CHIP DMux4Way { 
    IN in, sel[2]; 
    OUT a, b, c, d; 

    PARTS: 
    DMux(in = in, sel = sel[1], a = out1, b = out2); 

    DMux(in = out1, sel = sel[0], a = a, b = b); 
    DMux(in = out2, sel = sel[0], a = c, b = d); 
} 

주셔서 감사합니다 (즉, SEL [1] 카운트 때 오른쪽에서 시작하는 기억), 효과적으로 분리 할 것 중간에 옵션이 있습니다

+1

다른 사람이 대답하지 못하면 늦었을 때 아무 잘못 없습니다! 또한 (부분적으로) 수정 된 코드를 게시하여 가능한 한 명확하게 작성하는 것이 좋습니다. –

+0

이 특정 상황에서는 솔루션을 게시하지 않아야합니다. 나는 당신이 알고 있는지 확실하지 않지만, 저자는 특별히 그렇게하지 말 것을 요청합니다. – michaelavila

+0

@AdrianWragg : 전적으로 당신과 동의합니다.하지만 누군가 대답했다하더라도 늦게 대답하는 데는 잘못된 것이 없습니다. q/a에 가치를 더하는 것은 무엇이든 늦어도 일찍 일어나 든 괜찮습니다. –

관련 문제