Verilog
Lenguaje de Descripcin de Hardware.
Descripcin por Mdulos
Los mdulos se pueden ver como cajas negras.
E1 E2 Mdulo 2
E1 E2 E3 E4
Mdulo 4
Mdulo
S1 S2 S3
Mdulo1 E3 E4 Mdulo 3
Describir un Mdulo
module Uno (E1, E2, E3, E4, S) input E1; input E2; input E3; input E4; output S; . . endmodule
E1 E2 E3 E4
module Dos (E, S) input [O:3] E; output S; . . endmodule
Funcionalidad del Mdulo
La funcionalidad de cada mdulo se puede describir de dos forma: BLOQUEANTE y NO BLOQUEANTE
Bloqueante: orientado a eventos (p.e. sincronizado con el reloj). No Bloqueante: ejecucin continua (circuito combinacional).
Mdulo Bloqueante
always @(x or y or ) begin
end
@* Sensible al cambio de todas las variables @(negedge clock) Sensible solo al canto de bajada de clock
@(a or b or c ) Sensible al cambio de a o b o c o @(posedge clock) Sensible solo al canto de subida de clock
Mdulo no Bloqueante
assign f = a && b;
assign f = c; assign f[3] = ~a[0] & b[1];
Para la asignacin de circuitos combinacionales.
Es conveniente usar este mtodo de asignacin cuando se requiere implementar circuitos combinacionales que no requieren sincronizar con el reloj.
Tipos de entradas y salidas
input inout : Entradas del mdulo : Pueden cumplir la funcin de entrada y salida en un mdulo input inout Mdulo output
output : Salidas del mdulo
Tipos de Variables
Son dos los principales tipos de variables: reg : Son de tipo registro y permiten almacenar un valor. wire : Es una red que permite la conexin de circuitos (un cable).
Otras variables de inters son integer, float y arreglos y memorias.
Loops y Condiciones (I)
Verilog
if () else if () else ()
C
if () else if () else ()
case (a) 0: 1: default: endcase
for (i=0; i<N; i=i+1) begin end
switch(a) { case 0: case 1: default: }
for (i=0; i<N; i=i+1) { }
Loops y Condiciones (II)
Verilog
while (condicin) begin end repeat (nmero de veces) begin end wait (condicin) begin end
Mientras que la condicin sea falsa (0), se ejecuta el comando. Se emplea para detener la ejecucin secuencial del proceso hasta que se verifique una condicin.
C
while (condicin) { }
No existe
No existe
Ejemplo
ALU en Verilog
module alu(A, B, C, Ctl, result); input [0:1] A, B, C, Ctl; output reg [0:3] result; always @(A or B or C or Ctl) Begin if (Ctl == 2'b00) result = A & B & C; else if (Ctl == 2'b01) result = A | B | C; else if (Ctl == 2'b10) result = A ^ B ^ C; else result = A + B + C; end endmodule
Bibliografa
Manual de Verilog por Jorge Chvez. Software Evita Verilog. OVI Verilog HDL LRM. (Open Verilog International) Pgina Web Sistemas Digitales.
(http://www.elo.utfsm.cl/~lsb/elo211/elo211.html)