Está en la página 1de 31

Fundamentos de Verilog

Ing. Javier Andrés Torres P. M.Sc


Asignación de Valores: Números

Es equivalente a -16’h06
Expresión de Numero Negativos
Operaciones Aritméticas
Operaciones Bitwise
Operadores de Reducción
Operaciones de Relación
Operadores de Igualdad
Operadores Lógicos
Operadores de Desplazamiento
Operadores Condicionales, de Concatenación
y de Replicación
Prioridad en los Operadores
Bloques de Asignación Procedimental
Bloque INITIAL
Bloque ALWAYS
Ejemplo de bloques INITIAL y ALWAYS
Tipos de Asignaciones Bloqueantes y No Bloqueantes
Ejemplo
Regla de Oro
Bloque ALWAYS
La sentencia ALWAYS permite implementar un bloque de instrucciones
comportamentales de manera repetida, en forma de lazo de repetición
iniciando su ejecución en el instante cero hasta que la simulación sea
terminada

Los bloques always emplean una lista sensitiva o lista de control de


eventos.

Cuando ocurre un cambio en la lista sensitiva, el bloque ALWAYS se


ejecuta.
Ejemplo de Multiplexor 2 a 1
module mux21b
(
input wire a ,
input wire b ,
input wire s ,
output reg y
);
always @(*) // @(a,b,s)
if(s == 0)
y = a;
else
y = b;
endmodule
Detectando Señales de Reloj
• Los bloques ALWAYS también se emplean para detectar señales de
reloj ( flancos) o señales de control
Flanco de
bajada

Flanco de
Subida
Implementación de Flip Flops con Pines Sincronos y Asíncronos
Comparación entre tipos de modelamiento
• Modelamiento a nivel de Compuerta

• Modelamiento por flujo de datos

• Modelamiento Comportamental

• Modelamiento Estructural
Modelamiento a Nivel de Compuerta

module m21(Y, D0, D1, S);

output Y;
input D0, D1, S;
wire T1, T2, Sbar;

and (T1, D1, S), (T2, D0, Sbar);


not (Sbar, S);
or (Y, T1, T2);

endmodule
Modelamiento por flujo de datos

module m21(D0, D1, S, Y);

output Y;
input D0, D1, S;

assign Y=(S)?D1:D0;

endmodule
Modelamiento Comportamental
module m21( D0, D1, S, Y);
input wire D0, D1, S;
output reg Y;
always @(D0 or D1 or S)
begin
if(S)
Y= D1;
else
Y=D0;

end
endmodule
module and_gate(output a, input b, c); Modelamiento
assign a = b & c;
endmodule Estructural
module not_gate(output d, input e);
assign d = ~ e;
endmodule

module or_gate(output l, input m, n);


assign l = m | n;
endmodule

module m21(Y, D0, D1, S);


output Y;
input D0, D1, S;
wire T1, T2, T3;
and_gate u1(T1, D1, S);
not_gate u2(T2, S);
and_gate u3(T3, D0, T2);
or_gate u4(Y, T1, T3);
endmodule
Instanciación de un
modulo a partir de
otro
Diseñar un multiplexor
4 a 1 a partir de uno 2 a
1
Implementación
// Mux 2-to-1 empleando ecuaciones lógicas mux21 U1
mux21 U3
module mux21a ( ( .a(a[3]),
( .a(a[1]),
input wire a , .b(b[3]),
.b(b[1]),
input wire b , .s(s),
.s(s),
input wire s , .y(y[3])
.y(y[1])
output wire y );
);
);
mux21 U4
assign y = ~s & a | s & b; mux21 U2
( .a(a[0]),
endmodule ( .a(a[2]),
.b(b[0]),
.b(b[2]),
// Modulo a partir de la instancia .s(s),
.s(s),
module mux24 ( .y(y[0])
.y(y[2])
input wire s; );
);
input wire [3:0] a; endmodule
input wire [3:0] b;
output wire [3:0] y;
);
Tarea
• https://www.youtube.com/watch?v=hJcnny6pNgU&list=PLJcfWvdcbF
WGvXfRSot_Ison4hxTqEPit&index=1

• Videos de Jay Brockman

También podría gustarte