Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Verilog

Verilog Full Adder Ontwerp & Implementatie Gids

Een opteller is een digitaal component dat optelling van twee getallen uitvoert. Het is het hoofdbestanddeel in een ALU van een processor en wordt gebruikt voor adresverhoging, tabelindices, buffer pointers en veel andere plaatsen waar optelling nodig is.

Een full adder voegt een carry input toe aan de andere binaire inputs om een som en een carry output te produceren.

Waarheidstabel

ABCinCoutSum
00000
00101
01001
01110
10001
10110
11010
11111

Ontwerp

Een voorbeeld van een 4-bit opteller die twee binaire getallen accepteert via signalen a en b (beide 4-bits). Aangezien een opteller een combinatorische schakeling is, kan het in Verilog gemodelleerd worden met een continue toewijzing via assign of een always blok met een gevoeligheidslijst van alle inputs. Hieronder de assign benadering:

module fulladd (
  input [3:0] a,
  input [3:0] b,
  input c_in,
  output c_out,
  output [3:0] sum
);
  assign {c_out, sum} = a + b + c_in;
endmodule

De volgende code gebruikt een always blok dat uitgevoerd wordt wanneer een van de inputs verandert:

module fulladd (
  input [3:0] a,
  input [3:0] b,
  input c_in,
  output reg c_out,
  output reg [3:0] sum
);
  always @ (a or b or c_in) begin
    {c_out, sum} = a + b + c_in;
  end
endmodule

Hardware Schema

Gesynthetiseerd schema van de 4-bit full adder

Testbench

module tb_fulladd;
  reg [3:0] a;
  reg [3:0] 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

Let op dat wanneer a en b optellen tot een getal breder dan 4 bits, de som terugrolt naar nul en c_out 1 wordt. Bijvoorbeeld, de geleverde regel optelt tot 0x11: de lagere 4 bits gaan naar sum en bit #4 naar c_out.

Simulatie Log:

ncsim> run
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
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
ncsim: *W,RNQUIE: Simulation is complete.

Golfformaat van de full adder

Verilog

  1. Verilog beheersen: Complete tutorial voor digitale schakelingontwerp
  2. Verilog concatenatie beheersen: Een praktische gids
  3. Verilog-toewijzingen begrijpen: types, syntax en best practices
  4. Verilog Blocking vs. Non-Blocking: belangrijkste verschillen uitgelegd
  5. Verilog-functies beheersen voor efficiënt RTL-ontwerp
  6. Verilog Tasks begrijpen: Functions vs Tasks, Syntax en Gebruik
  7. Verilog Clock Generator: Ontwerp & Implementatie Gids
  8. Verilog Math Functions beheersen voor efficiënt Hardware-ontwerp
  9. Verilog $timeformat beheersen: Precisie en Weergave-controle
  10. Verilog Timescales begrijpen en printen in elke Scope
  11. Verilog File I/O onder de knie: Openen, Lezen, Schrijven en Sluiten