Modelado de nivel de puerta
La mayoría de los diseños digitales se realizan en un nivel más alto de abstracción como RTL, aunque a veces se vuelve intuitivo construir circuitos deterministas más pequeños en un nivel más bajo mediante el uso de elementos combinacionales como y y o . El modelado realizado en este nivel generalmente se denomina modelado a nivel de puerta ya que involucra puertas y tiene una relación uno a uno entre un esquema de hardware y el código Verilog.
Verilog admite algunas puertas lógicas básicas conocidas como primitivas ya que se pueden instanciar como módulos ya que ya están predefinidos.
Puertas Y/O/Xor
Estas primitivas implementan un Y y un O puerta que toma muchas entradas escalares y proporciona una sola salida escalar. El primer terminal en la lista de argumentos de estas primitivas es la salida que se actualiza cada vez que cambia alguna de las entradas.
module gates ( input a, b,
output c, d, e);
and (c, a, b); // c is the output, a and b are inputs
or (d, a, b); // d is the output, a and b are inputs
xor (e, a, b); // e is the output, a and b are 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
Registro de simulación 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.
Puertas Nand/Nor/Xnor
El inverso de todas las puertas anteriores también están disponibles en las formas de nand
, nor
y xnor
. Se reutiliza el mismo diseño anterior con la excepción de que los primitivos se intercambian con sus versiones inversas.
module gates ( input a, b,
output c, d, e);
// Use nand, nor, xnor instead of and, or and xor
// in this example
nand (c, a, b); // c is the output, a and b are inputs
nor (d, a, b); // d is the output, a and b are inputs
xnor (e, a, b); // e is the output, a and b are 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(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
Registro de simulación 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.
Estas puertas pueden tener más de dos entradas.
module gates ( input a, b, c, d,
output x, y, z);
and (x, a, b, c, d); // x is the output, a, b, c, d are inputs
or (y, a, b, c, d); // y is the output, a, b, c, d are inputs
nor (z, a, b, c, d); // z is the output, a, b, c, d are inputs
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
Registro de simulación 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.
Puertas Buf/No
Estas puertas tienen solo una entrada escalar y una o más salidas. buf
significa un búfer y simplemente transfiere el valor de la entrada a la salida sin ningún cambio en la polaridad. not
significa un inversor que invierte la polaridad de la señal en su entrada. Entonces, un 0 en su entrada producirá un 1 y viceversa.
module gates ( input a,
output c, d);
buf (c, a); // c is the output, a is input
not (d, a); // d is the 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
Registro de simulación 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.
El último terminal en la lista de puertos se conecta a la entrada de la puerta y todos los demás terminales se conectan al puerto de salida de la puerta. Aquí hay un ejemplo de un búfer de salida múltiple, aunque rara vez se usa.
module gates ( input a,
output c, d);
not (c, d, a); // c,d is the output, a is input
endmodule
Registro de simulación 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
Los búferes e inversores con una señal de control adicional para habilitar la salida están disponibles a través de bufif
y notif
primitivos. Estas puertas tienen una salida válida solo si la señal de control está habilitada, de lo contrario, la salida estará en alta impedancia. Hay dos versiones de estos, uno con polaridad de control normal indicada por un 1 como bufif1
y notif1
y segundo con polaridad de control invertida indicada por un 0 como bufif0
y notif0
.
Verilog
- Función de puerta básica
- Transistores, efecto de campo de unión (JFET)
- Circuitos integrados
- La puerta NOT
- Ámbito variable de C#
- Capas de abstracción de diseño
- Ejemplos de nivel de puerta de Verilog
- Retardo de puerta Verilog
- Modelado de nivel de interruptor
- ¿Qué es un bastón de nivel?
- Cómo nivelar un torno