Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Verilog

Полный сумматор на Verilog: проектирование и реализация

Сумматор — базовый компонент АЛУ процессора, используется для инкремента адресов, индексов, указателей. Полный сумматор учитывает входной перенос (Cin) и выдаёт сумму (Sum) и выходной перенос (Cout).

Таблица истинности

ABCinCoutSum
00000
00101
01001
01110
10001
10110
11010
11111

Проект

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

  1. Освоение Verilog: полное руководство по проектированию цифровых схем
  2. Освоение конкатенации в Verilog: практическое руководство
  3. Понимание назначений в Verilog: типы, синтаксис и лучшие практики
  4. Блокирующие и неблокирующие назначения в Verilog: ключевые различия
  5. Мастерство функций в Verilog для эффективного RTL дизайна
  6. Понимание задач (Tasks) в Verilog: отличия от функций, синтаксис и применение
  7. Генератор тактового сигнала в Verilog: проектирование и реализация
  8. Мастерство математических функций Verilog для эффективного аппаратного дизайна
  9. Мастерство $timeformat в Verilog: точность и контроль отображения времени
  10. Понимание и печать timescale в Verilog в любой области видимости