2013-02-22 2 views
4

Вот мой код:Попытка построить PC (счетчик) для nand2tetris книги, но у меня возникают некоторые проблемы с логикой

CHIP PC { 
    IN in[16],load,inc,reset; 
    OUT out[16]; 

    PARTS: 
    Inc16(in = regout, out = incout); 
    Mux16(a = regout, b = incout, sel = inc, out = incdecision); 
    Mux16(a = incdecision, b = false, sel = reset, out = resetdecision); 
    Mux16(a = regout, b = resetdecision, sel = load, out = loaddecision); 
    Register(in = loaddecision, load = true, out = regout, out = out); 
} 

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

Что я делаю неправильно?

ответ

2

У вас, похоже, нет ни одного сигнала In. Если установлен сигнал load, вам необходимо получить соответствующий Mux16 для загрузки значения In в регистр.

2

Изменить порядок resetdecision и loaddecesion. Первый имеет более высокий приоритет.

Inc16(in=outpc, out=outincreased); 
Mux16(a=outpc, b=outincreased, sel=inc, out=outinc); 
Mux16(a=outinc, b=in, sel=load, out=outload); 
Mux16(a=outload, b=false, sel=reset, out=outreset); 
    //And16(a=outLOAD, b[0..15]=reset, out=outreset); 
Register(in=outreset, load=true, out=out, out=outpc); 
0

Сброс Mux16 должен произойти после нагрузки Mux16. Нагрузка Mux16 должна иметь «in» в качестве булавки «b».

Мой рабочий код из Nand2Tetris:

Inc16(in = outandabout, out = incout); 
Mux16(a = outandabout, b = incout, sel = inc, out = incinc); 
Mux16(a = incinc, b = in, sel = load, out = loadout); 
Mux16(a = loadout, b = false, sel = reset, out= outreset); 
Register(in = outreset, load = true, out = out, out = outandabout); 
+0

Вместо того, чтобы сказать, что должно произойти, вы должны прокомментировать, почему вещи должны произойти именно так. Это позволяет другим людям в будущем учиться и убирать гораздо больше от вашего ответа. – yanman1234