2016-05-26 6 views
1

Я реализую счетчик от гл. 3. Вот мой код:Не могу найти ошибку при реализации счетчика

// This file is part of www.nand2tetris.org 
    // and the book "The Elements of Computing Systems" 
    // by Nisan and Schocken, MIT Press. 
    // File name: projects/03/a/PC.hdl 

    /** 
    * A 16-bit counter with load and reset control bits. 
    * if  (reset[t] == 1) out[t+1] = 0 
    * else if (load[t] == 1) out[t+1] = in[t] 
    * else if (inc[t] == 1) out[t+1] = out[t] + 1 (integer addition) 
    * else     out[t+1] = out[t] 
    */ 

    CHIP PC { 
     IN in[16], load, inc, reset; 
     OUT out[16]; 
     //sel=0; a;sel=1;b 
     PARTS: 
     //reset 
     Not16(in=true, out=resetted); 
     //inc 
     Inc16(in=t, out=incremented); 
     //Choose input between reset and out[t] 
     Mux16(a=t,b=resetted,sel=reset,out=o1); 
     //Choose input between o1 and in[t](load) 
     Mux16(a=o1, b=in,sel=load,out=o2); 
     //Choose input between o2 and inc 
     Mux16(a=o2,b=incremented, sel=inc, out=o3); 
     Register(in=o3, load=load, out=t, out=out); 
    } 

Это, кажется, не в состоянии в этом тесте:

set in -32123, 
tick, 
output 

Это строка 5, я не могу найти свою ошибку (ы). Любая помощь приветствуется

ответ

0

Hint (потому что это обучение упражнение, в конце концов):

Вы делаете каскад мультиплексоров для генерации нового значения, но при каких обстоятельствах вы обновление реестра?

Предложения:

Вернитесь к главе 2 и обратите внимание, что у них есть вы реализуете компонент Mux4Way16. Использование его сделает вашу жизнь намного проще.

Кроме того, вы можете использовать false как входной сигнал, и он автоматически станет таким же широким, насколько необходимо. Поэтому вам не нужно запускать true через Not16, чтобы получить false [16].

+0

Также, если кто-то пришел сюда с помощью поисковой системы, я хочу отметить, что мне пришлось изменить порядок операций, чтобы заставить его работать (я не знаю, почему это сработало). –