Ошибка сравнения при реализации мультиплексора в nand2tetris

Я пытаюсь реализовать шлюз MUX (мультиплексор) в курсе nand2tetris. Сначала попробовал сам, и получил ошибку. Но независимо от того, что я изменил, я всегда получал ошибку. Поэтому я попытался проверить некоторый код в Интернете, и это то, что использует большинство людей:

CHIP Mux {
    IN a, b, sel;
    OUT out;

    PARTS:
    Not(in=sel, out=nsel);
    And(a=sel, b=b, out=c1);
    And(a=nsel, b=a, out=c2);
    Or(a=c1, b=c2, out=out);
}

Но даже когда я пробую этот код, я все равно получаю следующую ошибку: сообщение об ошибке

Что я получаю в виде таблицы истинности:

|   a   |   b   |  sel  |  out  |
|   0   |   0   |   0   |   0   |
|   0   |   0   |   1   |   0   |
|   0   |   1   |   0   |   0   |
|   0   |   1   |   1   |   0   |

Что я должен получить:

|   a   |   b   |  sel  |  out  |
|   0   |   0   |   0   |   0   |
|   0   |   0   |   1   |   0   |
|   0   |   1   |   0   |   0   |
|   0   |   1   |   1   |   1   |
|   1   |   0   |   0   |   1   |
|   1   |   0   |   1   |   0   |
|   1   |   1   |   0   |   1   |
|   1   |   1   |   1   |   1   |

У меня новейший пакет программного обеспечения на 13 января 2020 г.


person S1LV3R    schedule 13.01.2020    source источник
comment
Убедитесь, что вы загрузили последнюю реализацию Mux.hdl, прокрутив вниз HDL-окна аппаратного эмулятора. Вы должны увидеть свой последний код. Код, который вы разместили, в порядке, работает со мной. У меня, конечно, более старая версия, но я бы удивился, увидев проблему на их стороне. Кроме того, я использую ту же версию аппаратного симулятора, поэтому проблема должна заключаться в тестовых сценариях, и мой вид выглядит так же, как у вас на скриншоте, который вы разместили.   -  person zubergu    schedule 14.01.2020
comment
@zubergu У меня правильная версия Mux.hdl и правильный (насколько я знаю) тестовый скрипт. Даже при использовании реализаций по умолчанию я получаю сообщение об ошибке   -  person S1LV3R    schedule 14.01.2020


Ответы (1)


Из того, что видно, ваши входные контакты:

a = 0  
b = 1  
sel = 1

Ваши внутренние контакты:

nsel = 1 
c1   = 1 
c2   = 0

Все как и ожидалось до сих пор.

Ожидается out = 1 в этом случае, и вы получите out = 0. В этот момент тестовый сценарий останавливается из-за сбоя.

Это может быть вызвано двумя причинами:
1) вы не загрузили правильный Mux.hdl и потому что, если вы вычислите Or(c1,c2), вы получите 1, что правильно. Если вы поместите And вместо Or, это объяснит ошибку
2) ваша реализация Or.hdl неверна.Mux использует вашу версию Or, если такой файл присутствует в том же каталоге.

Итак, сначала проверьте свой код в Hardware Simulator, затем проверьте свою реализацию Or.hdl. Последнее вы можете сделать, временно удалив Or.hdl из каталога проекта. Аппаратный симулятор загрузит встроенную версию Or гейта.

person zubergu    schedule 13.01.2020
comment
Вот что так странно. Даже когда я использую все по умолчанию, я все равно получаю ту же ошибку. В яблочко. Я убедился, что у меня есть правильный тестовый сценарий - person S1LV3R; 14.01.2020
comment
Это странно. Я только что попробовал сегодня, и это сработало. Не знаю, что случилось. Я отмечаю ваш ответ как принятый, так как он мне помог - person S1LV3R; 14.01.2020