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.
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
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
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)
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.
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).
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.
8 Flujo de diseño de un circuito integrado
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.
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
Sintaxis
12 Comandos Palabras reservadas para la invocación de funciones propias del lenguaje.
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;
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
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
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
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;
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;
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;
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.
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));
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
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
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.
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
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
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 = 12b0; 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
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
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;
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
31 Binarios aritméticos Realizan operaciones aritméticas entre dos operandos.
Tipos: + suma – diferencia * multiplicación / división % resto
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
37 Estructuras de control Estructuras de programación utilizadas para el manejo de datos.
If case for while repeat wait
38 if Función: Ejecuta codigo de manera condicional.
Formato: if(condicion)codigo1; else codigo2;
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
ESTA PRESENTACIÓN CONTIENE MAS DIAPOSITIVAS DISPONIBLES EN LA VERSIÓN DE DESCARGA