Sunteți pe pagina 1din 81

Verilog

HDLs
Verilog

Mdulos
Interfaz
Variables
Comportamiento

Flujo de Diseo
Niveles de Abstraccin
Descripcin Estructural
Descripcin Algortmica

Test Benches

Conocer que son los Lenguajes de Descripcin de


Harware.
Aprender la sintaxis bsica de Verilog y su
metodologa de desarrollo.
Describir Circuitos Combinacionales en Verilog.
Realizar primera etapa de testing a un mdulo:
Test Benches

Primer Trabajo Prctico: ALU

Fueron desarrollados originalmente para documentar y


simular diseos de ASICs.

La introduccin de la sntesis para HDLs, los comenz a


popularizar. Las herramientas de sntesis compilaban
archivos fuentes escritos en algn HDL a una Netlist.

Permiten disear y verificar rpidamente circuitos


digitales.

Describen el hardware en varios niveles de abstraccin.

Simulacin

Sntesis

IMPORTANTE: Cuando se describen


circuitos utilizando HDLs, es critico pensar
que hardware producir el cdigo que estoy
escribiendo.

Entradas: Valores que son aplicados al circuito;


Salidas: Revisadas para ver si son correctas

El proceso que transforma el cdigo HDL en una Netlist que


describe el hardware (eje., una lista de compuertas y los cables que
las conectan).

Abel (circa 1983): Desarrollado por Data-I/O

Desarrollado para programar dispositivos lgicos;


No es bueno para mucho mas que para FSM.

ISP (Circa 1977) Proyecto de investigacin del CMU (Carnegie Mellon University)
Simulacin pero no sintesis.

Verilog (1984) Gateway Design Automation (luego adquirido por Cadence)


Similar a C en sintaxis pero no en semantica;
Convertido en estndar IEEE (1364) en 1995.

VHDL (VHSIC HDL) Desarrollado en 1981 por el departamento de defensa de


estados unidos

Similar a ADA;
Convertido en estadar IEEE (1076) en 1987.

El lenguaje surge originalmente para SIMULAR circuitos, pero luego


se comenz a utilizar tambin para SINTETIZAR circuitos.

De hecho, aplicado a las herramientas de desarrollo de FPGA, usamos


Verilog para las dos cosas:
Sntesis: archivo.v conteniendo el circuito
Simulacin: archivo_estimulo.v que simula el comportamiento del circuito
anterior (en archivo.v)

Del conjunto del lenguaje HDL, solo un subconjunto muy pequeo


sintetiza.

Advertencia: La sintaxis de Verilog es muy


parecida a la de C, pero no as su semntica.

module modulo_simple(A,B,C,x,y);
input A,B,C;

output x,y;
wire e;
assign e = A & B;

assign y = ~ C;
assign x = e | y;
endmodule

Segn el flujo de diseo, todo hardware se especifica


primero como una caja negra que define sus
entradas y salidas. En verilog esta caja negra se
denomina module (mdulo).

Entradas

CAJA NEGRA
(module)

Salidas

Tiene un nombre, puertos de I/O y parmetros de


configuracin (la interfaz externa);
Declaracin de Constantes y variables;
Sentencias y/o procesos concurrentes (funcionalidad);

Modulos: Interfaz

Las conexiones externas pueden ser puertos de entrada, de salida o


bidireccionales
El tipo de puerto determina la direccin de los datos:
A travs de los puertos de entrada entran datos y seales, es decir, se leen. (no
se pueden escribir). Se especifican como input
A travs de los puertos de salida se envian datos y seales, es decir, se escriben
(pueden leerse!). Se especifican como output
A travs de los puertos bidireccionales se envian y reciben datos y seales. Se
especifican como inout

Entradas
Module
Bidireccional

Salidas

Los parametros son constantes.

parameter msb = 7;
parameter e = 25, f = 9;
parameter average_delay = (r + f) / 2;
parameter byte_size = 8, byte_mask =
byte_size - 1;

Modulos: Variables

Las variables se llaman registros. Los registros a su vez


pueden poseer distintos tipos de datos: reg,
integer, real, time y otras.
Las variables se utilizan para almacenar valores, lo que
no siempre implica la sntesis de memoria en la
implementacin de hardware
Ejemplo:
reg unRegistro; //1-bit reg
integer a; // 32 bit integer

Los nmeros por defecto son enteros de 32 bits (base 10)


Pueden especificarse otras bases y longitues:

El 0 y 1 lgico no son suficientes para representar


todos los estados de un sistema digital. Verilog tiene
una lgica de 4 estados que permite que los reg y los
wires sean:
x: desconocido
0: false o nivel cero
1: true o nivel 1
z: alta impedancia

Los buses se declaran como elementos de varios bits.


Se pueden concatenar bits para obtener un bus.

module compuerta
( input wire [3:0] entrada1,
input wire [3:0] entrada2,
output wire [3:0] salida);

Los buses pueden realizarse tanto con conexiones


(wire) como con variables (reg ).
En la declaracin de un bus, el valor y el orden de los
ndices de los bits, determina el tamao del bus y la
ubicacin del bit ms significativo.

Modulos: Comportamiento

Luego de completar la declaracin de puertos, parmetros, constantes y


variables, el paso que sigue es describir la funcionalidad del mdulo. Esto
se realiza mediante sentencias concurrentes.

Para crear seales internas que modelan conexiones


elctricas se usan los wires.
Los puertos de I/O son wires por defecto.
Se usa el keyword wire para declararlos:
wire AB;
Se usa el keyword assign para asignarle un valor:
assign AB = A & B;
Se puede declarar un wire y asignarlo en la misma
lnea:
wire AB = A & B;

Todo wire debe declararse previamente a su uso (lectura o asignacin).


Hay wires externos (puertos) e internos al mdulo:

// Verilog code for AND-OR-INVERT gate


module AOI (input A, B, C, D, output F);
wire F;
wire AB, CD, O;
assign AB = A & B;
assign CD = C & D;
assign O = AB | CD;
assign F = ~O;
endmodule // end of Verilog code

Con lo visto desarrollar en Verilog un mdulo llamado


multi_compuerta, segn el diagrama siguiente,
sintetizar con el ISE, sin warnings, y mostrar el
esquematico RTL generado.

Se escriben especificaciones del


circuito/sistema (funcionalidad, interfaces y
arquitectura general).
Con una descripcin de comportamiento se
analiza el diseo a alto nivel (se modela con
lenguaje de alto nivel ej: C++, Matlab).
El modelo comportamental se convierte a
una descripcin RTL (dataflow) en un HDL.
De ah en ms el proceso contina con la
ayuda de herramietas EDA: se sintetiza el
circuito a un netlist, se crea un layout del
mismo a travs del place and route, se
verifica y fabrica el chip.
A la par se verifican los resultados de cada
etapa para asegurar que cumple con las
restricciones de timing, potencia y funcin.

TOP-DOWN

Definimos el bloque top e


identificamos los subloques que
lo conforman y lo vamos
componiendo de lo general a lo
especfico.

BOTTOM-UP

Primero identificamos los bloques


que tenemos a disposicin y a
partir de estos construimos
bloques mas grandes,
componiendo hacia lo general.

Normalmente se disea mediante una combinacin de ambos.

Como describimos un sistema que puede tener millones de


transistores? Por medio de vistas (view) y abstracciones

Vistas: son maneras o puntos de vista diferentes de describir un


sistema complejo
Estructural

Es un diagrama de bloques describiendo los componentes y sus


interconexiones. Es el diagrama del sistema o netlist;

De comportamiento (Behavioral)

Describe la funcionalidad, trata al sistema como una caja negra e ignora su


representacin interna. Pone el foco en la relacin entre las entradas y las
salidas

Fsico

Agrega mas informacin a la descripcin estructural: por ejemplo el tamao


de los componentes, su ubicacin. En FPGAs esta vista no aplica.

Independientemente de la manera que vemos el sistema, ste puede ser


descrito en cuatro niveles de abstraccin:

Procesador-Memoria
RTL (Register Transfer)
Gate o de compuertas
Transistor

Estos niveles nos permiten ir encarando el diseo de un sistema complejo, de


forma abstracta, hasta llegar a los niveles mas bajos del diseo

Lo que caracteriza a cada nivel de abstraccin es:

Bloques bsicos
Representacin de las seales
Representacin del tiempo
Representacin del comportamiento
Representacin fsica

Descripcion
Representacin Representacion
Descripcin
Bloques tipicos
comportamental
de seales
del tiempo
Fsica
(behavioral)
Procesador- procesador,
memoria
Memoria

Register
Transfer

Gate o
compuerta
Transistor

Tipos abstractos Secuencia de


de datos
eventos

Algoritmos en C, Floor plan (IP


Java, etc.
Level)

Sumadores, mux, Enteros, estado


Ticks de clock
registros
del sistema

FSM

Floor plan
(RT Level)

compuertas and,
0' y '1' lgicos
or, xor, flip-flop

Delay de
propagacin

Ecuaciones
Booleanas

Layout de
celdas

Transistores,
resistores

Funcion
continua

Ecuaciones
Diferenciales

Layout de
transistores

Tensin

Estructural
Processor-Memory
Switch
Register-Transfer

Funcional
Algoritmico
(behavioral)
Register-Transfer
Level

Compuertas

Ecuaciones Booleanas
Transistor
Ecuaciones Diferenciales

Menor Nivel
de Abstraccion Fsica (o geometrica)

Mayor Nivel
de Abstraccion
Y-chart
Gajski & Kahn

Descripcin Estructural

module halfadd (X, Y, C, S);


input X, Y;
output C, S;
wire S1, S2, S3;
nand NANDA (S3, X, Y);
nand NANDB (S1, X, S3);
nand NANDC (S2, S3, Y);
nand NANDD (S, S1, S2);
assign C = S3;
endmodule

Descripcin Algortmica

Tambin llamada Behavioral

Cuando la lista sensitiva de variables de entrada a un bloque


es muy grande se puede usar el smbolo @* que implica que
el bloque se ejecuta con el cambio de CUALQUIERA de las
seales.

Estructural (modelo incorrecto)

Algortmica (modelo correcto)

nombre_modulo
#(
.parametro_modulo
)
nombre_instancia
(
.nombre_puerto_1
.nombre_puerto_2
);

(valor_parametro)

(conexion),
(conexion)

Es un programa especial escrito en Verilog para


verificar el diseo (DUT, Desing Under Test)
Imita un laboratorio fsico para probar el circuito
Se generan las seales de estmulo de entrada del
diseo (test vector)
Se evalan las salidas del circuito (anlisis)

Test Bench

Test Vector

DUT

Results
analysis

Es un mdulo que no tiene puertos de I/O


Instancia el mdulo a probar (DUT)
Utiliza variables (regs) para crear el test vector
(stimulus)
Conecta el test vector a las entradas del DUT
Utiliza wires para conectar las salidas del DUT
Utiliza bloques inital para generar el stimulus y
evaluar las salidas

module test_MUX2TO1; // No tiene puertos


//DUT I/Os
reg A, B, SEL;
wire F;
// DUT instantiation
DUT my_mux(.A(A), .B(B), .SEL(SEL), .F(F));
//Stimulus
initial begin
A = 0; B = 1; SEL = 0;
#20 SEL = 1;
end
//Analysis
initial $monitor($time, A, B, SEL, F);
endmodule

En un bloque initial creamos el estimulo del componente a


testear.

initial
// Stimulus
begin
SEL = 0;
A = 0;
B = 0;
#10 A = 1;
#10 SEL = 1;
#10 B = 1;
end

// Analysis
initial $monitor($time, SEL, A, B, F);

Existen tareas y funciones predefinidas en Verilog.


Sintcticamente todas las tareas y funciones del
sistema comienzan con $
Proveen funcionalidad para:

Input-output desde archivos, la pantalla y el teclado


Control de simulacin y debugging
Chequeos de tiempo, y analisis de probabilidades
Funciones de conversin entre los diferentes tipos

$display
$monitor
$fopen, $fclose
$readmem
$time
$finish, $stop $end
$dumpvars

$setup, $hold

display values
trace value-changes
open, close a file
memory read tasks
simulation time
stop simulation
dump data to file for
waveform display
setup and hold timing checks

Muestra los valores en el formato elegido por el


usuario (parecido a un printf de C):
$display $displayb $displayh $displayo

reg [7:0] A;
initial begin
A = 8b0000_1111 ;
$display (%d %b %0b %h %0h, A, A, A, A, A);
end

La funcion $fopen abre un archivo y le asigna el


file descriptor. $swrite escribe las salidas
formateadas a un string.

Verilog tambin provee tareas para la entrada de


datos desde archivos o strings. $fgetc, $fscanf,
$sscanf son para obtener caracteres desde un
archivo, otras input tasks sirven para leer datos de
memoria directamente. $fread, $readmemh.

FPGA Prototyping By Verilog Examples:


Xilinx Spartan-3 Version, Pong P. Chu

S-ar putea să vă placă și