Сбой DMux.hdl, когда in=1, sel=0

Я пишу код hdl для DMux на основе курса Nand2Tetris.

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

PARTS:
And(a = sel, b = in, out = b);
Not(in = sel, out = selNot);
And(a = in, b = selNot, out = a);   
}

По какой-то причине этот код не работает со значениями тестового сценария in = 1 and sel = 0. В этом случае он оценивает a и b как 0.

Я выписывал ворота несколько раз и не могу понять, почему результат не a = 1 and b = 0

Может кто-нибудь объяснить мне, что происходит?


person yalpsid eman    schedule 24.04.2017    source источник


Ответы (2)


У меня есть ощущение, что у вашей реализации Not может быть проблема.

Попробуйте заменить Not на Nand:

Nand(a=sel,b=sel,out=notSel);   // notSel = ! sel

Если это работает, то ваш Not.hdl неверен.

Кроме того, с точки зрения стиля, будет понятнее, если вы определите свои промежуточные звенья перед окончательными выводами (т. е. поместите Nand первым) и будете последовательны в порядке ввода (т. е.: a=in, b=sel или notSel, out = a или б). Помогает уменьшить вероятность того, что вы что-то неправильно прочтете.

person MadOverlord    schedule 24.04.2017

Не уверен, что с вашим кодом что-то не так. Вроде такой же как у меня, работает. Вы проверили свои другие ворота «И» и «Не»?

Мой код:

Not(in=sel, out=notsel);
And(a=notsel, b=in, out=a);
And(a=in, b=sel, out=b);
person Erica Lapadat-Janzen    schedule 01.08.2017