Пытаюсь собрать ПК (счетчик) для книги 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 (проверено через мультиплексор), который затем проходит через другой мультиплексор, который может сбросить его, а затем еще один мультиплексор, который может записать или не записать его в зависимости от значение нагрузки. Затем любое значение, полученное из этого (будь то измененное значение или значение, полученное из старого регистра), помещается в регистр.

Что я делаю не так?


person Doug Smith    schedule 22.02.2013    source источник


Ответы (3)


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

person Michael    schedule 23.02.2013

Измените порядок 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);
person Fatih SARIKOC    schedule 21.11.2013

Сброс 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);
person Erica Lapadat-Janzen    schedule 31.07.2017
comment
Вместо того, чтобы говорить, что должно произойти, вы должны прокомментировать, почему все должно происходить именно так. Это позволит другим людям в будущем узнать и извлечь гораздо больше пользы из вашего ответа. - person yanman1234; 01.08.2017