2013-01-23 28 views
5

Có vẻ như gần như đang làm việc, nó chỉ rối tung ở dòng 7?Có gì sai với DMux 4 cách của tôi?

/** 
* 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); 
} 

Tôi đã thực hiện DMux của tôi như sau, và tôi chỉ sử dụng đó như thể nó là một cây:

/** 
* 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

Bạn đang cố gắng viết nội dung nào vào HDL? Nó không giống như VHDL hay Verilog ... – Marty

+2

Có vẻ như nó được sử dụng trong khóa học nand2tetris: http://nand2tetris.org/ –

Trả lời

7

Bạn đã có những ý tưởng đúng! Nhưng bạn đã bắt đầu bằng cách thu hẹp sel [0] trái ngược với sel [1], tương ứng với cột bên trái.

PS: Tôi biết tôi đã trễ

Chỉnh sửa: Đã thêm mã cố định theo yêu cầu bên dưới. Cám ơn ý kiến ​​phản hồi

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); 
} 

Trong thu hẹp những gì sẽ tham khảo các cột bên trái trong một bảng sự thật (Tức là, sel [1]; nhớ để bắt đầu từ bên phải khi đếm), bạn muốn được một cách hiệu quả tách các tùy chọn ngay ở giữa

+1

Không có gì sai khi bị trễ nếu không ai khác trả lời! Bạn cũng có thể muốn xem xét (một phần) đăng mã đã sửa, để làm cho nó rõ ràng nhất có thể. –

+0

Trong tình huống cụ thể này, bạn thực sự không nên đăng giải pháp. Tôi không chắc liệu bạn có biết, nhưng các tác giả đặc biệt yêu cầu bạn không làm như vậy. – michaelavila

+0

@AdrianWragg: Tôi hoàn toàn đồng ý với bạn, nhưng ngay cả khi ai đó đã trả lời, không có gì sai khi trả lời trễ. Bất cứ điều gì làm tăng thêm giá trị cho q/a là được, cho dù đó là muộn hay sớm. –

Các vấn đề liên quan