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

Gate-Level Modeling: van hardware-schema's naar Verilog-code

Meeste digitale ontwerpen worden op een hoger abstractieniveau gedaan zoals RTL, hoewel het soms intuïtiever is om kleinere deterministische circuits op een lager niveau te bouwen met combinatorische elementen zoals and en or. Modelleren op dit niveau heet meestal gate-level modeling omdat het gates betreft en een een-op-een relatie heeft tussen een hardware-schema en de Verilog-code.

Verilog ondersteunt een paar basis logic gates bekend als primitives omdat ze geïnstantieerd kunnen worden als modules aangezien ze al vooraf gedefinieerd zijn.

And/Or/Xor Gates

Deze primitives implementeren een AND en een OR gate die veel scalaire inputs nemen en een enkele scalaire output leveren. De eerste terminal in de lijst van argumenten aan deze primitives is de output die geüpdatet wordt telkens wanneer een van de inputs verandert.

module gates (
  input a, b,
  output c, d, e
);
  and (c, a, b); // c is output, a en b zijn inputs
  or (d, a, b);  // d is output, a en b zijn inputs
  xor (e, a, b); // e is output, a en b zijn inputs
endmodule
module tb;
  reg a, b;
  wire c, d, e;
  integer i;
  gates u0 (.a(a), .b(b), .c(c), .d(d), .e(e));
  initial begin
    {a, b} = 0;
    $monitor ("[T=%0t a=%0b b=%0b c(and)=%0b d(or)=%0b e(xor)=%0b", $time, a, b, c, d, e);
    for (i = 0; i < 10; i = i+1) begin
      #1 a <= $random; b <= $random;
    end
  end
endmodule

Simulatie-log

ncsim> run
[T=0 a=0 b=0 c(and)=0 d(or)=0 e(xor)=0
[T=1 a=0 b=1 c(and)=0 d(or)=1 e(xor)=1
[T=2 a=1 b=1 c(and)=1 d(or)=1 e(xor)=0
[T=4 a=1 b=0 c(and)=0 d(or)=1 e(xor)=1
[T=5 a=1 b=1 c(and)=1 d(or)=1 e(xor)=0
[T=6 a=0 b=1 c(and)=0 d(or)=1 e(xor)=1
[T=7 a=1 b=0 c(and)=0 d(or)=1 e(xor)=1
[T=10 a=1 b=1 c(and)=1 d(or)=1 e(xor)=0
ncsim: *W,RNQUIE: Simulation is complete.

Nand/Nor/Xnor Gates

De inverse van alle bovenstaande gates zijn ook beschikbaar in de vorm van nand, nor en xnor. Hetzelfde ontwerp wordt hergebruikt met de uitzondering dat de primitives omgewisseld zijn met hun inverse versies.

module gates (
  input a, b,
  output c, d, e
);
  // Gebruik nand, nor, xnor in plaats van and, or, xor
  nand (c, a, b);
  nor (d, a, b);
  xnor (e, a, b);
endmodule
module tb;
  reg a, b;
  wire c, d, e;
  integer i;
  gates u0 (.a(a), .b(b), .c(c), .d(d), .e(e));
  initial begin
    {a, b} = 0;
    $monitor ("[T=%0t a=%0b b=%0b c(nand)=%0b d(nor)=%0b e(xnor)=%0b", $time, a, b, c, d, e);
    for (i = 0; i < 10; i = i+1) begin
      #1 a <= $random; b <= $random;
    end
  end
endmodule

Simulatie-log

ncsim> run
[T=0 a=0 b=0 c(nand)=1 d(nor)=1 e(xnor)=1
[T=1 a=0 b=1 c(nand)=1 d(nor)=0 e(xnor)=0
[T=2 a=1 b=1 c(nand)=0 d(nor)=0 e(xnor)=1
[T=4 a=1 b=0 c(nand)=1 d(nor)=0 e(xnor)=0
[T=5 a=1 b=1 c(nand)=0 d(nor)=0 e(xnor)=1
[T=6 a=0 b=1 c(nand)=1 d(nor)=0 e(xnor)=0
[T=7 a=1 b=0 c(nand)=1 d(nor)=0 e(xnor)=0
[T=10 a=1 b=1 c(nand)=0 d(nor)=0 e(xnor)=1
ncsim: *W,RNQUIE: Simulation is complete.

Deze gates kunnen meer dan twee inputs hebben.

module gates (
  input a, b, c, d,
  output x, y, z
);
  and (x, a, b, c, d);
  or (y, a, b, c, d);
  nor (z, a, b, c, d);
endmodule
module tb;
  reg a, b, c, d;
  wire x, y, z;
  integer i;
  gates u0 (.a(a), .b(b), .c(c), .d(d), .x(x), .y(y), .z(z));
  initial begin
    {a, b, c, d} = 0;
    $monitor ("[T=%0t a=%0b b=%0b c=%0b d=%0b x=%0b y=%0b x=%0b", $time, a, b, c, d, x, y, z);
    for (i = 0; i < 10; i = i+1) begin
      #1 a <= $random; b <= $random; c <= $random; d <= $random;
    end
  end
endmodule

Simulatie-log

ncsim> run
[T=0 a=0 b=0 c=0 d=0 x=0 y=0 x=1
[T=1 a=0 b=1 c=1 d=1 x=0 y=1 x=0
[T=2 a=1 b=1 c=1 d=0 x=0 y=1 x=0
[T=3 a=1 b=1 c=0 d=1 x=0 y=1 x=0
[T=4 a=1 b=0 c=1 d=0 x=0 y=1 x=0
[T=5 a=1 b=0 c=1 d=1 x=0 y=1 x=0
[T=6 a=0 b=1 c=0 d=0 x=0 y=1 x=0
[T=7 a=0 b=1 c=0 d=1 x=0 y=1 x=0
[T=8 a=1 b=1 c=1 d=0 x=0 y=1 x=0
[T=9 a=0 b=0 c=0 d=1 x=0 y=1 x=0
[T=10 a=0 b=1 c=1 d=1 x=0 y=1 x=0
ncsim: *W,RNQUIE: Simulation is complete.

Buf/Not Gates

Deze gates hebben slechts één scalaire input en een of meer outputs. buf staat voor een buffer en overdraagt de waarde van input naar output zonder polariteitswijziging. not staat voor een inverter die de polariteit van het signaal op de input omkeert. Een 0 op de input levert een 1 op en vice versa.

module gates (
  input a,
  output c, d
);
  buf (c, a); // c is output, a is input
  not (d, a); // d is output, a is input
endmodule
module tb;
  reg a;
  wire c, d;
  integer i;
  gates u0 (.a(a), .c(c), .d(d));
  initial begin
    a = 0;
    $monitor ("[T=%0t a=%0b c(buf)=%0b d(not)=%0b", $time, a, c, d);
    for (i = 0; i < 10; i = i+1) begin
      #1 a <= $random;
    end
  end
endmodule

Simulatie-log

xcelium> run
[T=0 a=0 c(buf)=0 d(not)=1
[T=2 a=1 c(buf)=1 d(not)=0
[T=8 a=0 c(buf)=0 d(not)=1
[T=9 a=1 c(buf)=1 d(not)=0
xmsim: *W,RNQUIE: Simulation is complete.

De laatste terminal in de poortlijst verbindt met de input van de gate en alle andere terminals verbinden met de output-poort van de gate. Hier is een voorbeeld van een multiple-output buffer, hoewel dit zelden gebruikt wordt.

module gates (
  input a,
  output c, d
);
  not (c, d, a); // c,d is output, a is input
endmodule

Simulatie-log

xcelium> run
[T=0 a=0 c=1 d=1
[T=2 a=1 c=0 d=0
[T=8 a=0 c=1 d=1
[T=9 a=1 c=0 d=0
xmsim: *W,RNQUIE: Simulation is complete.

Bufif/Notif

Buffers en Inverters met een additioneel controlsignaal om de output in te schakelen zijn beschikbaar via bufif en notif primitives. Deze gates hebben een geldige output alleen als het controlsignaal ingeschakeld is, anders is de output in high impedance. Er zijn twee versies: één met normale polariteit van control aangegeven door een 1 zoals bufif1 en notif1 en een met geïnverteerde polariteit van control aangegeven door een 0 zoals bufif0 en notif0.

Verilog

  1. Ontwerpen en Verifiëren van een Basis NAND Poort Circuit met de 4011 IC
  2. Junction Field-Effect Transistors (JFETs): Gate Stroomrichting & N-kanaal vs P-kanaal
  3. Geïntegreerde Schakelingen: Fundamenten van Digitale Logische Poorten
  4. De NOT-Poort (Inverter) in TTL-Schakelingen Begrijpen
  5. Waterpaslatten Begrepen: Definitie, Gebruik en Typen
  6. Precieze Draaibank Niveleren: Een Professionele Gids
  7. Variabele Scope in C#: Klasse-, Methode- en Blokniveau
  8. Ontwerpabstractielagen: Duidelijke gids voor chip-architectuur
  9. Praktisch Verilog Gate-Level Ontwerp: AND, OR, NOT Gates & 2x1 Multiplexer
  10. Gate Delays in Verilog begrijpen: Accurate timing voor betrouwbare digitale ontwerpen
  11. Geavanceerde Switch-Level Modeling in Verilog