Introduccion HDL y Verilog

download Introduccion HDL y Verilog

of 81

description

Presentacion de clase

Transcript of Introduccion HDL y Verilog

  • 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