Descargar

Diseño digital usando Verilog

Enviado por Pablo Turmero


    edu.red

    1 Diseño Digital utilizando HDLs Los lenguajes de descripción de hardware (HDLs) permiten modelar sistemas digitales completos.

    Mediante herramientas de software estos modelos pueden luego “sintetizarse” para implementarlos como circuitos reales.

    La utilización de HDLs y su posterior síntesis puede tener como objetivo la creación de un circuito integrado de propósito específico (ASICs) o la implementación del circuito en algún dispositivo de lógica programable.

    edu.red

    2 Diseño Digital utilizando HDLs Al utilizar un HDL es importante tener en cuenta que se está modelando hardware, y no escribiendo software.

    El software se caracteriza por ser secuencial, un procesador ejecutará una instrucción después de otra. En el hardware hay varias tareas que se ejecutan en forma concurrente. Los HDL poseen la habilidad de representar el paso del tiempo y secuenciar los eventos acordemente. Los HDL proveen tipos de datos orientados a hardware. Ej.: variables para representar Hi-Z

    edu.red

    3 Diseño Digital utilizando HDLs Existen varios HDLs pero dos son los que predominan: Verilog y VHDL.

    Casi todo los fabricantes de PLDs proveen soporte para Verilog y VHDL

    Se está investigando en nuevos HDLs que incorporen mayores facilidades y prestaciones a las nuevas tecnologías y necesidades de los desarrolladores. Ej.: SystemC, SystemVerilog

    edu.red

    4 VHDL Quiere decir VHSIC Hardware Description Lenguaje, a su vez, VHSIC proviene de “Very High Speed Integrated Circuit”.

    Surge en 1980 a partir del apoyo del departamento de defensa de Estados Unidos y la IEEE.

    Estandarizado en 1987 (IEEE 1076) conocido como VHDL-87. Extendido y modificado en 1993 (VHDL-93) y en el 2002 (VHDL-2002)

    edu.red

    5 Verilog Desarrollado por una empresa privada (Gateway Design Automation) en 1984.

    Esta empresa es después adquirida por Cadence Design System.

    En 1990 Verilog se abre al dominio público.

    En 1995 es estandarizado por la IEEE.

    edu.red

    6 Verilog vs. VHDL Mientras que Verilog proviene y tiene una sintaxis parecida de C, VHDL es parecido a Ada y Pascal.

    Para un mismo diseño, VHDL utiliza más sintaxis que Verilog.

    Verilog es más rápido de aprender.

    No tienen problemas de incompatibilidades (es posible realizar proyectos mixtos).

    edu.red

    7 Consideraciones de Diseño Recordar siempre que se está modelando hardware.

    Aplicar la metodología de diseño de ingeniería, recordar siempre en dividir el problema.

    Tener en mente si se va a usar un PLD (y cual) o diseñar un ASIC.

    Definir el sistema en los diferentes niveles de abstracción y en los tres dominios diferentes.

    edu.red

    8 Flujo de diseño de un circuito integrado

    edu.red

    9 Niveles de abstracción y dominios El sistema digital puede definirse en distintos niveles de abstracción y en tres dominios diferentes: comportamiento, estructural y físico.

    El diseño debe ser integral, se debe tener presente lo anterior en todo momento.

    Para interpretar estos conceptos se usa el diagrama “Y” de Gajski y Kahn.

    edu.red

    10 Niveles de abstracción y dominios Comportamiento Estructural Físico Procesador, memorias Registros, ALU Compuertas Transistores Floorplan Celdas estándares Sticks Polígonos Algoritmos RTL Ec. Lógicas Ec. Diferenciales Diagrama de Gajski-Kahn

    edu.red

    Sintaxis

    edu.red

    12 Comandos Palabras reservadas para la invocación de funciones propias del lenguaje.

    edu.red

    13 Variables Estructuras utilizadas para el almacenamiento y manejo de datos en Verilog.

    Existen 3 tipos fundamentales de variables:

    reg : registro y almacena un valor wire : “cable” que permite conexión tri : variable del tercer estado.

    Declaración: Tipo [msb:lsb] nombre ; Ejemplo: wire [31:0] BID;

    edu.red

    14 Módulos Bloque constructivo básico en Verilog. Sintaxis:

    module Nombre (Entrada, Salida);

    input Entrada; Output Salida;

    Original Copia(Puertos);

    always @ (ListaDeSensibilidad) begin //Código end

    endmodule Declaración de módulo Declaración de puertos Procesos Instancias

    edu.red

    15 Declaración del módulo Bloque de construcción básico, en Verilog un sistema digital está compuesto por la interconexión de un conjunto de módulos.

    Sintaxis

    module (); //Código endmodule

    edu.red

    16 Declaraciones de Puertos Los puertos son los argumentos del módulo que le permiten comunicarse con el exterior, pueden ser de tres tipos:

    input

    output

    inout

    edu.red

    17 input Son las entradas al módulo, son variables de tipo wire (mismo comportamiento de un cable).

    Sintaxis:

    input [MSB:LSB] Entrada;

    Ejemplos:

    input [4:0] Entrada1; //entrada de 5 bits

    input Entrada2; //entrada de 1 bit wire Entrada2;

    edu.red

    18 output Son las salidas del módulo, pueden ser variables de tipo wire, cuado es combinacional o tipo reg (guarda el valor) cuando es secuencial.

    Sintaxis:

    output [MSB:LSB] Salida;

    Ejemplos:

    output [3:0] Salida1; //salida de 4 bits

    output Salida2; //salida de 1 bit reg Salida2;

    edu.red

    19 inout Son puertos bidireccionales, de tipo wire.

    Sintaxis:

    inout [MSB:LSB] Dididireccional;

    Ejemplos:

    inout [4:0] Bider1; // Dididireccional de 5 bits

    inout [7:0] Bider; // Dididireccional de 8 bit wire [7:0] Bider;

    edu.red

    20 Instancias Proceso por el cual se crean objetos a partir de un módulo base. Permiten diseñar modularmente, evitando así tener código “chorreado”.

    Se tiene un módulo como el que sigue:

    module Original (CLK, Reset, Variable); //Código endmodule

    El formato para crear una instancia de este módulo sería:

    Original Copia (localCLK, RESETlocal, VarLocal);

    El orden es muy importante en este tipo de instancia, cada puerto debe corresponder.

    edu.red

    21 Instancias Existe otra forma de instanciar. Tenemos el módulo original:

    module Original (CLK, Reset, Variable); //Código endmodule

    El formato para crear la instancia sería:

    Original Copia (.CLK(localCLK), .Reset(RESETlocal), .Variable(VarLocal));

    El orden, en este caso, de los puertos no importa, pudiendo instancearse de la siguiente forma:

    Original Copia (.Reset(RESETlocal), .Variable(VarLocal), .CLK(localCLK));

    edu.red

    22 Procesos Son estructuras que ejecutan código definido en ellas.

    Se ejecutan paralelamente, es decir que los procesos se puede ejecutar simultáneamente.

    Los más utilizados son:

    Initial

    always

    edu.red

    23 initial Solo se ejecutan una vez, este proceso solo se utiliza para simulación.

    Formato:

    initial begin //Código end Ejemplo:

    initial begin A = 0; C = D && E; end

    edu.red

    24 always Se ejecutan siempre que ocurra algún cambio en la lista de sensibilidad.

    La lista de sensibilidad son variables, las cuales, al momento que cambian de valor, activan el always.

    El always es utilizado para definir tanto procesos combinacionales como secuenciales.

    edu.red

    25 always Formato:

    always @ ( ) begin //Código end

    Ejemplos

    always @ (A or B or C) begin if(B) begin E = C; D = 1 end else E = 0; D = 0; end end

    edu.red

    26 always Ejemplos

    always @ (posedge CLK) begin if(Reset) Var = 0; else Var = E; end

    always @ * begin // Al solo poner ‘*’ es sensible if(B) begin // a todas las entradas del módulo E = C; D = 1 end else E = 0; D = 0; end end

    edu.red

    27 Uso de puertos de un módulo module incrementer(go,out,clk,rst); input go,clk,rst; output[11:0] out; reg[11:0] out;

    always @ (posedge clk or negedge rst) begin if(!rst) out = 12’b0; else if(go) out = out + 1; end endmodule

    Si un puerto de salida y una variable reg tienen mismo nombre, Verilog in- fiere un cable entre ellos, “cable implicito” Un puerto de entrada se puede usar directamente en el codigo pues Verilog infiere un cable (wire) tambien

    edu.red

    28 assign (continuous assignment) Otra estructura muy usada es el assign, usada para declarar estructuras combinacionales.

    Ejemplo: assign A = B | C; La variable A debe ser de tipo wire No se utiliza dentro de un always o initial, pues el assign implica ejecucion concurrente, no secuencial

    always (posedge CLK) begin assign A = B | C; end

    edu.red

    29 assign El assign tambien se puede usar para construir un “if”:

    assign A = (Condición)? B: C;

    Si la condición es verdadera: A = B, sino A = C.

    Ejemplos:

    assign A = (Bandera == 1)? B: C; assign A = (Bandera)? B: C; assign Salida = (Sel == 0)? Entrada1: Entrada2; assign Salida = (!Sel)? Entrada1: Entrada2;

    edu.red

    30 Operadores Comandos utilizados para realizar operaciones sobre variables.

    Tipos: Aritméticos Relacionales Lógicos Lógica bit a bit Lógica de reducción Otras

    edu.red

    31 Binarios aritméticos Realizan operaciones aritméticas entre dos operandos.

    Tipos: + suma – diferencia * multiplicación / división % resto

    edu.red

    32 Relacionales Realizan una operación de comparación sobre dos operandos y devuelven un valor booleano.

    Tipos: > mayor que >= mayor o igual que < menor que desplazamiento derecha, con adición de ceros ?: condicional

    edu.red

    37 Estructuras de control Estructuras de programación utilizadas para el manejo de datos.

    If case for while repeat wait

    edu.red

    38 if Función: Ejecuta codigo de manera condicional.

    Formato: if(condicion)codigo1; else codigo2;

    edu.red

    39 case Función: Ejecuta la n-esima porción de codigo asociada con el valor de la variable que se esta evaluando.

    Formato: case(expresión) Opcion1:codigo1; Opcion2:codigo2; Opcion3:codigo3; default:codigo_predeterminado; endcase

    edu.red

    ESTA PRESENTACIÓN CONTIENE MAS DIAPOSITIVAS DISPONIBLES EN LA VERSIÓN DE DESCARGA