Уровень 43: Инженерный дебаг (Verilog)

Задание

В модуле FullAdder допущена ошибка — один из проводов подключён неверно. Тест падает на нескольких входных наборах. Ваша задача: найти ошибку, исправить её и добиться прохождения всех тестов.

Файл fulladder.v — редактируемый. cpu.v и testbench.v — только для чтения (контекст). Используйте вкладки для переключения между файлами.

Подсказка: внимательно посмотрите на вентиль g4 — какой сигнал он должен обрабатывать для правильного формирования бита переноса c_out?

Материалы по теме

Решение

В файле fulladder.v ошибка в вентиле g4:

and g4(w3, w1, w2);  // ошибка — третий порт w2 вместо c_in

Исправление:

and g4(w3, w1, c_in);  // правильно — w3 = w1 AND c_in

Сигнал w3 участвует в формировании выходного переноса: c_out = w2 OR w3, где w2 = a AND b. Полная формула: c_out = (a AND b) OR (w1 AND c_in) = (a AND b) OR ((a XOR b) AND c_in) — классическая логика полного сумматора. Подстановка w2 вместо c_in даёт неверный результат.