Полный сумматор на Verilog: проектирование и реализация
Сумматор — базовый компонент АЛУ процессора, используется для инкремента адресов, индексов, указателей. Полный сумматор учитывает входной перенос (Cin) и выдаёт сумму (Sum) и выходной перенос (Cout).
Таблица истинности
| A | B | Cin | Cout | Sum |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 | 1 |
| 0 | 1 | 0 | 0 | 1 |
| 0 | 1 | 1 | 1 | 0 |
| 1 | 0 | 0 | 0 | 1 |
| 1 | 0 | 1 | 1 | 0 |
| 1 | 1 | 0 | 1 | 0 |
| 1 | 1 | 1 | 1 | 1 |
Проект
4-битный сумматор с входами a, b, c_in и выходами sum, c_out. Комбинационная схема моделируется через assign или always.
Вариант 1: assign
module fulladd (
input [3:0] a, b,
input c_in,
output c_out,
output [3:0] sum
);
assign {c_out, sum} = a + b + c_in;
endmodule
Вариант 2: always-блок
module fulladd (
input [3:0] a, b,
input c_in,
output reg c_out,
output reg [3:0] sum
);
always @(a or b or c_in)
{c_out, sum} = a + b + c_in;
endmodule
Аппаратная схема
Тестбенч
module tb_fulladd;
reg [3:0] a, b;
reg c_in;
wire [3:0] sum;
wire c_out;
integer i;
fulladd fa0 (.a(a), .b(b), .c_in(c_in), .c_out(c_out), .sum(sum));
initial begin
a <= 0; b <= 0; c_in <= 0;
$monitor("a=0x%0h b=0x%0h c_in=0x%0h c_out=0x%0h sum=0x%0h", a, b, c_in, c_out, sum);
for (i = 0; i < 5; i = i+1) begin
#10 a <= $random; b <= $random; c_in <= $random;
end
end
endmodule
Результат симуляции
a=0x0 b=0x0 c_in=0x0 c_out=0x0 sum=0x0 a=0x4 b=0x1 c_in=0x1 c_out=0x0 sum=0x6 a=0x3 b=0xd c_in=0x1 c_out=0x1 sum=0x1 // 0x3+0xD+1=0x11 → sum=0x1, c_out=1 a=0x5 b=0x2 c_in=0x1 c_out=0x0 sum=0x8 a=0xd b=0x6 c_in=0x1 c_out=0x1 sum=0x4 a=0xd b=0xc c_in=0x1 c_out=0x1 sum=0xa
Verilog
- Освоение Verilog: полное руководство по проектированию цифровых схем
- Освоение конкатенации в Verilog: практическое руководство
- Понимание назначений в Verilog: типы, синтаксис и лучшие практики
- Блокирующие и неблокирующие назначения в Verilog: ключевые различия
- Мастерство функций в Verilog для эффективного RTL дизайна
- Понимание задач (Tasks) в Verilog: отличия от функций, синтаксис и применение
- Генератор тактового сигнала в Verilog: проектирование и реализация
- Мастерство математических функций Verilog для эффективного аппаратного дизайна
- Мастерство $timeformat в Verilog: точность и контроль отображения времени
- Понимание и печать timescale в Verilog в любой области видимости