Post on 04-Mar-2016
description
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 sumetodologa 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 Entradas: Valores que son aplicados al circuito; Salidas: Revisadas para ver si son correctas
Sntesis 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).
IMPORTANTE: Cuando se describencircuitos utilizando HDLs, es critico pensarque hardware producir el cdigo que estoyescribiendo.
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).
CAJA NEGRA(module)
Entradas 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
ModuleEntradas
Salidas
Bidireccional
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 cadaetapa para asegurar que cumple con lasrestricciones de timing, potencia y funcin.
TOP-DOWN
Definimos el bloque top e identificamos los subloques quelo conforman y lo vamoscomponiendo de lo general a lo especfico.
BOTTOM-UP
Primero identificamos los bloquesque tenemos a disposicin y a partir de estos construimosbloques 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
Bloques tipicosRepresentacin
de sealesRepresentacion
del tiempo
Descripcion comportamental
(behavioral)
Descripcin Fsica
Procesador-Memoria
procesador, memoria
Tipos abstractos de datos
Secuencia de eventos
Algoritmos en C, Java, etc.
Floor plan (IP Level)
Register Transfer
Sumadores, mux, registros
Enteros, estado del sistema
Ticks de clock FSMFloor plan (RT Level)
Gate o compuerta
compuertas and, or, xor, flip-flop
0' y '1' lgicosDelay de propagacin
Ecuaciones Booleanas
Layout de celdas
Transistor
Transistores, resistores
TensinFuncioncontinua
Ecuaciones Diferenciales
Layout de transistores
Mayor Nivel
de Abstraccion
FuncionalEstructural
Fsica (o geometrica)
Menor Nivel
de Abstraccion
Y-chart
Gajski & Kahn
Algoritmico
(behavioral)
Register-Transfer
Level
Ecuaciones Booleanas
Ecuaciones Diferenciales
Processor-Memory
Switch
Register-Transfer
Compuertas
Transistor
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.
Algortmica (modelo correcto) Estructural (modelo incorrecto)
nombre_modulo
#(
.parametro_modulo (valor_parametro)
)
nombre_instancia
(
.nombre_puerto_1 (conexion),
.nombre_puerto_2 (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 DUTResults 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 display values
$monitor trace value-changes
$fopen, $fclose open, close a file
$readmem memory read tasks
$time simulation time
$finish, $stop $end stop simulation
$dumpvars dump data to file forwaveform display
$setup, $hold 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