Уровень 35: 8-битный сумматор (Verilog)
Задание
Напишите 8-битный сумматор (Adder8) на Verilog. Он складывает две 8-битные шины a[7:0] и b[7:0] с учётом входного переноса c_in. Результат — sum[7:0] и выходной перенос c_out.
Используйте 8 экземпляров модуля FullAdder из уровня 34, соединённых цепочкой переноса (ripple carry).
Материалы по теме
- Анатомия сумматора
- Информационные шины
- Adder8 — 8-битный сумматор
Решение
8-битный сумматор — это цепочка из 8 полных сумматоров, где выходной перенос каждого подаётся на c_in следующего. Перенос «пробегает» от младшего бита к старшему (ripple carry).
Порядок портов FullAdder: (sum, c_out, a, b, c_in).
- В бойлерплейте уже объявлена шина промежуточных переносов:
wire [7:0] c;. Добавьтеwire w;для буфера. - Младший разряд (бит 0) принимает внешний
c_in:FullAdder fa0(sum[0], c[0], a[0], b[0], c_in); - Разряды 1–7: каждый следующий FA берёт перенос предыдущего:
FullAdder fa1(sum[1], c[1], a[1], b[1], c[0]);FullAdder fa2(sum[2], c[2], a[2], b[2], c[1]);и так далее доfa7. - Выходной перенос —
c[7], но его нужно пробросить через два последовательных NOT (буфер — двойное отрицание не меняет сигнал, но даёт нужную задержку):not g1(w, c[7]);not g2(c_out, w);
Доступ к отдельным битам шины — через квадратные скобки: a[0], b[3]. Все 8 сумматоров работают одновременно — цепочка существует в железе, а не в порядке строк.