Уровень 43: Инженерный дебаг (Verilog)
Задание
В модуле FullAdder допущена ошибка — один из проводов подключён неверно. Тест падает на нескольких входных наборах. Ваша задача: найти ошибку, исправить её и добиться прохождения всех тестов.
Файл fulladder.v — редактируемый. cpu.v и testbench.v — только для чтения (контекст). Используйте вкладки для переключения между файлами.
Подсказка: внимательно посмотрите на вентиль g4 — какой сигнал он должен обрабатывать для правильного формирования бита переноса c_out?
Материалы по теме
- Полный сумматор — классическая схема
- Verilog — это не программирование — схемное мышление
Решение
В файле 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 даёт неверный результат.