Professional Documents
Culture Documents
Tema II.
VHDL para sntesis Lgica y verificacin de Diseos.
b. Restricciones en las descripciones. Sntesis Lgica c. Acondicionamiento entradas asncronas. d. Segmentacin (pipeline). e. Tipos de Simulacin. f. Lectura/escritura en Ficheros. g. Generacin de Estmulos.
? ? ?
Software
Diseo Algoritmos Cdigo C/C++
Simulacin
Compilacin
!P
Arquitectura
Diseo Algoritmos Lenguaje Alto nivel
Independiente Tecnologa
Simulacin
Sntesis
FPGA
Hardware
RTL
Logic Synthesis
Logic Simulator
Logic Simulator
!! VHDL
permite realizar especificaciones textuales del Hardware utilizando una sintaxis similar a la de los lenguajes de programacin de alto nivel.
!!
Permite la descripcin del Hardware con distintos niveles de abstraccin (algortmico, RTL, estructural, etc). Facilita la documentacin de las especificaciones y la verificacin formal de las mismas. Facilita la reutilizacin de las descripciones en distintos proyectos.
!!
!!
!!
!!
El modelado del hardware en VHDL se realiza mediante la elaboracin de unidades de cdigo. Existen cinco tipos distintos de unidades de cdigo:
!!
Unidades Primarias.
"! "! "!
Declaracin de Entidad. Declaracin de Paquete. Declaracin de Configuracin. Cuerpo de Arquitectura. Cuerpo de paquete.
!!
Unidades secundarias:
"! "!
!!
Cada unidad de cdigo esta orientada a una determinada funcin dentro de la elaboracin de un modelo VHDL.
Libreras
10
!!
Libreras ms utilizadas:
!! !! !!
work: librera de usuario. Donde se almacenan todos los diseos .vhd y ficheros auxiliares del compilador/simulador. Esta librera es visible por defecto. std: Librera de recursos disponible en VHDL. Dispone de declaraciones de tipos de datos, entrada/salida a ficheros, etc. Esta librera es visible por defecto. ieee: Define un nuevo tipo de dato multi-nivel.
"! "! "! "!
std_logic_1164: Define el tipo STD_LOGIC u STD_ULOGIC. std_logic_arith: Define los tipos SIGNED y UNSIGNED, operaciones aritmticas y de comparacin. Adems dispone de mltiples funciones de conversin de tipos. std_logic_signed: Define el tipo de datos STD_LOGIC_VECTOR y realiza las operaciones aritmticas CON SIGNO (Ca2). std_logic_unsigned: Define el tipo de datos STD_LOGIC_VECTOR y realiza las operaciones aritmticas SIN SIGNO.
Declaracin de Entidad
11 !! !!
La Declaracin de Entidad modela el interfaz de los dispositivos. Cumple funciones anlogas a las de los smbolos en los esquemas.
DECLARACION DE ENTIDAD: NOMBRE Y PUERTOS
NOMBRE
PUERTOS
OUT IN
Circuito
INOUT
BUFFER
Declaracin de Entidad
12
!!
Nombre del Dispositivo es una etiqueta de usuario que identifica el dispositivo hardware cuyo interfaz define.
cont8bits, mux21, men16K, etc
!!
Su nombre: Etiqueta de usuario. Su direccionalidad: IN, OUT, INOUT o BUFFER. Su tipo de datos.
!!
!!
Los puertos de la declaracin de entidad son objetos de tipo SEAL. Adems, a diferencia de las seales normales, tienen direccionalidad.
Declaracin de Arquitectura
13 !!
Modelado del funcionamiento de los dispositivos: Los dispositivos se modelan como sistemas que realizan un procesamiento de la informacin. CUERPOS DE ARQUITECTURA
ENTRADAS
ALGORITMO DE PROCESAMIENTO
SALIDAS
!!
a un esquemtico.
Behavioral (Algoritmo)
!!
mixta funcin-
Funcional
estructura.
!!
Descripcin Comportamental
!! Descripcin
Estructural Switch
Algortmica.
15
ARCHITECTURE
Conceptos Bsicos
16
No se distingue entre maysculas y minsculas. !! Como en todos los lenguajes, tienen una serie de palabras reservadas, que tienen una funcin determinada y no se pueden usar para otros propsitos. !! Comentarios:
!!
hacen con un par de guiones -- !! Solo existen comentarios de una sola linea.
!! Se
-- Esto es un comentario -- Este es otro comentario.
!! A
Tipos de Datos
17
Cada objeto del lenguaje ha de pertenecer a uno de los tipos de datos permitidos. !! Existen tipos de datos predefinidas por el lenguaje y tipos de datos que pueden ser definidos por el usuario. !! VHDL es un lenguaje fuertemente tipado, por lo que toda asignacin se ha de hacer sobre un determinado tipo de datos. !! La conversin entre distintos tipos de datos no se hace de manera automtica, sino que hay que implementar funciones para hacer la conversin.
!!
Tipos de Datos
18
!!
Son Objetos que solo pueden contener un nico valor en cada instante. !! Compuestos !! Ficheros !! Punteros
!!
El Lenguaje VHDL contiene una serie de tipos de datos pre-definidos, definidos en los standards IEEE 1076 e IEEE 1164.
!! !! !!
!!
Paquete standard de la librera std: Define los tipos de datos BIT, BOOLEAN, INTEGER y REAL. Paquete std_logic_1164 de la librera ieee: Define el tipo de datos STD_LOGIC y STD_ULOGIC. Paquete std_logic_arith de la librera ieee: Define el tipo de datos SIGNED y UNSIGNED. Adems define diferentes funciones de conversin de tipos. conv_integer(x), conv_unsigned(x,n), conv_std_log_vector(x,n), etc. Paquete std_logic_signed y std_logic_unsigned de la librera ieee: Define funciones que permiten operar con el tipo STD_LOGIC_VECTOR como si fuera un tipo de datos SIGNED y UNSIGNED. Define operaciones aritmticas, lgicas y funciones de conversin de datos.
20
!!
!!
!!
!!
Este tipo de datos se puede utilizar para modelar drivers activos (puertas logicas Forcing 0/1), drivers resistivos (pull-up/pull-down weak 0/1) y Alta impedancia (Z). Es un tipo de datos no resuelto, los conflictos a nivel de asignacin no son resueltos automticamente.
type STD_ULOGIC_VECTOR is array (NATURAL range <>) of STD_ULOGIC;
STD_LOGIC y STD_LOGIC_VECTOR. Subtipo de dato predefinido a partir del tipo STD_ULOGIC. Este tipo de datos esta definido en el paquete std_logic_1164. Es un tipo de datos resuelto, los conflictos a nivel de asignacin son resueltos automticamente. nicamente utilizar a nivel de simulacin.
subtype STD_LOGIC is resolved STD_ULOGIC; subtype STD_LOGIC_VECTOR is (resolved) STD_ULOGIC_VECTOR;
-------------------------------------------------------------------- resolution function ------------------------------------------------------------------constant resolution_table : stdlogic_table := ( ----------------------------------------------------------| U X 0 1 Z W L H | | ---------------------------------------------------------('U', 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U'), -- | U | ('U', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X'), -- | X | ('U', 'X', '0', 'X', '0', '0', '0', '0', 'X'), -- | 0 | ('U', 'X', 'X', '1', '1', '1', '1', '1', 'X'), -- | 1 | ('U', 'X', '0', '1', 'Z', 'W', 'L', 'H', 'X'), -- | Z | ('U', 'X', '0', '1', 'W', 'W', 'W', 'W', 'X'), -- | W | ('U', 'X', '0', '1', 'L', 'W', 'L', 'W', 'X'), -- | L | ('U', 'X', '0', '1', 'H', 'W', 'W', 'H', 'X'), -- | H | ('U', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X') -- | - | );
Arrays Registros
A diferencia de los tipos de datos escalares, los tipos de datos compuestos son aqullos que contienen varios tipos de datos mas pequeos. Los objetos que pertenezcan a tipos de datos compuestos pueden ser manejados globalmente o individualmente sobre cada uno de los datos menores que contenga. Un tipo de datos compuesto puede estar a su vez formado por otros datos tambin compuestos.
Tipos de Objetos
23 !!
!!
!!
!!
Un objeto es un contenedor de valores. En VHDL existen cuatro tipos distintos de objetos: constant (constantes), variable (variables), file (archivos) y signal (seales). Los tres primeros son similares a los Existentes en los HLLs; las seales son objetos que modelan nodos lgicos. Al igual que en los HLLs estructurados, antes de poder utilizar un objeto, es necesario declararlo. En la declaracin hay que indicar el tipo de objeto y el tipo de dato que puede contener el objeto.
Asignacin a seales
24 !!
!!
Si se especifica un retardo, se realiza despus de pasado ese tiempo. Si no se incluye, se realiza despus de suspenderse el proceso.
!!
Una sentencia de asignacin de valor a seal PROYECTA una TRANSACCION sobre el valor de la seal. Si se realizan dos asignaciones sobre una misma seal en el mismo instante de tiempo la ultima es la que se proyecta, descartando las anteriores (diferente en asignaciones concurrentes).
!!
Asignacin a variables
25 !!
!!
!! !! !! !!
Cuando se realiza la asignacin de una variable, su valor cambia instantneamente y no se guarda informacin sobre los valores que dicha variable tuvo anteriormente. La expresin ha de devolver un valor del mismo tipo que el tipo de la variable sobre la que se realiza la asignacin. Las variables solo se utilizan en partes secunciales (procesos, funciones y procedimientos), y son locales. No se pueden incluir retardos en las asignaciones de variable. Ejemplo:
signal sig : integer; var := sig + 1; variable var : integer;
Combinacional Vs Secuencial:
!!
!!
Concurrente Vs Secuencial
!!
Por definicin, la Lgica combinacional es aquella en la cual la salida nicamente del valor actual de las entradas.
El lenguaje VHDL es un lenguaje que permite el modelar un funcionamiento paralelo (concurrente). Utilizacin de instrucciones CONCURRENTES para el modelado de lgica combinacional. (WHEN,GENERATE;BLOCK, XOR, +,SLL,etc) Utilizacin de instrucciones secuenciales para el modelado de lgica SECUENCIAL. (PROCESS,FUNCTIONS,PROCEDURES).
!!
!!
Por otro lado, la lgica secuencial, es aquella que depende de valores anteriores.
!!
Sentencias concurrentes
27
!!
!! !!
!!
Las sentencias concurrentes se ejecutan continuamente, en contra de las sentencias secunciales que se ejecutan una despus de la otra. Se utilizan en los cuerpos de la arquitectura. Por lo tanto, da igual en que orden se pongan las sentencias concurrentes. De hecho no sabemos el orden va a ejecutar el simulador dichas sentencias concurrentes. Las sentencias concurrentes son:
-!Procesos -!Bloques -!Llamadas a procedimientos concurrentes -!Asignaciones de seal -!Instanciacin de componentes -!Sentencias generate
Sentencias concurrentes
28
WHEN
!!
WHEN/ELSE
asignacion WHEN condicion ELSE asignacion WHEN condicion ELSE ......;
mux_sal<= a WHEN sel=00 ELSE b WHEN sel=01 ELSE c WHEN sel=10 ELSE d;
!!
WITH/SELECT/WHEN
WITH identificador SELECT asignacion WHEN condicion ELSE asignacion WHEN condicion ELSE ......; WITH sel SELECT mux_sal <= a WHEN b WHEN c WHEN d WHEN 00, 01, 10, OTHERS;
Sentencias secuenciales
29
!!
!! !!
Procesos Un proceso contiene una serie de sentencias que se ejecutan secuencialmente. Se utilizan en descripciones RTL y comportamentales. Su sintaxis es la siguiente:
etiqueta: PROCESS (lista sensibilidad) [zona declaracin] VARIABLE nombre : tipo; BEGIN ...... instrucciones secuenciales ...... END PROCESS etiqueta;
Sentencias secuenciales
30
DECLARACIONES
Procesos
VARIABLES CONSTANTES
Sentencias secuenciales
31
Sentencia if
!!
Sentencias secunciales
32
Sentencias secunciales
33
Bucles
!!
Sentencia exit salir del bucle. Sentencia return para pasar a la prxima iteracin.
34
b. Restricciones en las descripciones. Sntesis Lgica c. Acondicionamiento entradas asncronas. d. Segmentacin (pipeline). e. Tipos de Simulacin. f. Lectura/escritura en Ficheros. g. Generacin de Estmulos.
RTL
Logic Synthesis
Logic Simulator
Logic Simulator
VHDL
HERRAMIENTAS SIMULACION SINTESIS
!Permite asegurar el funcionamiento de un circuito antes de la realizacin, en diferentes situaciones. !Acepta todas las caractersticas del lenguajes (ideal para especificar o prototipar). !Permite comprobar el funcionamiento en etapas posteriores al diseo.
!Genera un circuito Hardware con el funcionamiento especificado. !Soporta solo un subconjunto del lenguaje. !La calidad del resultado depende del estilo de descripcin. !Sntesis lgica y sntesis arquitectural.
La sntesis lgica permite implementar automticamente circuitos digitales a partir de descripciones con lenguajes HDL. Los sintetizadores exigen que las descripciones estn realizadas con un determinado nivel de abstraccin, llamado RTL. En el nivel RTL hay que especificar explcitamente el comportamiento de la lgica combinacional, y las transiciones de la lgica secuencial. El comportamiento del sintetizador se puede controlar mediante atributos y restricciones.
RTL
!!
Logic Simulator
Logic Simulator
!!
!!
Modelo RTL
!!
!!
!!
!!
No todos los Sintetizadores permiten las misma construcciones. Consultar los manuales. Con un poco de experiencia con el sintetizador se pueden realizar descripciones que sean directamente sintetizables. Las Descripciones RTL son independientes de la tecnologa sobre la que se implementa el circuito. Las descripciones RTL solo describen la funcionalidad del circuito, con lo que no se incluye informacin sobre los retardos del circuito. Estos dependern de la tecnologa utilizada.
!!
!!
!!
En las Descripciones RTL sintetizables se pueden utilizar tanto sentencias secuenciales como concurrentes. Cada asignacin de seal, proceso o instanciacin de componente hace que el sintetizador genere un bloque de lgica para ello. Cada seal o variable se implementa mediante un cable. El sintetizador es capaz de realizar distintos tipos de optimizaciones sobre el cdigo, dependiendo de las restricciones (constraints) y atributos que se apliquen en la sintesis.
Definicin de Constraints
Definicin de Atributos
!!
!!
!!
Los tipos de datos mas utilizados en sntesis son los de las libreras de Synopsis: std_logic, std_logic_vector, signed y unsigned. Tambin se utilizan los tipos bit y bit_vector, as como tipos de datos enumerados definidos por el usuario. El tipo de datos integer tambin se puede utilizar, pero se suele restringir el rango (sino se suelen utilizar 32 bits).
!!
Introduccin
!!
!!
!!
Los circuitos combinacionales son aquellos cuyas salida son una funcin del valor actual de las entradas. No tienen reloj ni guardan informacin sobre los estados anteriores. En VHDL se pueden implementar tanto con sentencias concurrentes (recomendable), como dentro de un proceso.
Sentencias concurrentes
!!
!!
!!
!!
La lgica combinacional se implementa mediante asignaciones de seal. Las asignaciones pueden ser directas, condicionales o de seleccin. No importa el orden en que se realicen las asignaciones, ya que son concurrentes. Si sobre una misma seal hay varias asignaciones, solo una de ellas ha de asignar un valor fuerte, el resto tienen que estar en alta impedancia.
Asignaciones seal
Asignacin condicional
Asignacin seleccin
Sentencias Secuenciales
!!
Se puede crear lgica combinacional en un proceso, pero dicho proceso ha de activarse cada vez que cambie alguna de las entradas de dicha lgica combinacional. En una seal combinacional hay que especificar su valor para todas las opciones. Si no se hace as, el sintetizador incluir un latch, para mantener su valor.
!!
Buffers Tri-estado
!!
!!
Introduccin
!!
!!
!!
Los circuitos secuenciales son capaces de almacenar valores. Los flip-flops mantienen el valor de su salida hasta que se produce un determinado flanco en su entrada de reloj. Son activos por flanco. Los latches mantienen su valor mientras una de sus entradas tenga un nivel. Si esa entrada tiene otro nivel se comporta de modo transparente. Son activos por nivel.
!!
!!
Las herramientas de sntesis generalmente no son capaces de realizar asignaciones en ambas transiciones de reloj. NO SINTESIS El atributo EVENT debe de estar relacionado con una condicin de test. NO SINTESIS Si una seal aparece en la lista de sensibilidad de un PROCESS, pero no es usada en l, la herramienta de sntesis la ignorar.
PROCESS(clk) BEGIN IF clkevent and clk=1 THEN COUNTER<=COUNTER + 1; ELSIF clkevent and clk=0 THEN COUNTER<=COUNTER - 1; END IF; END PROCESS; ----------------------------------------PROCESS(clk) BEGIN IF clkevent THEN COUNTER<=COUNTER + 1; END IF; END PROCESS; ----------------------------------------PROCESS(clk) BEGIN COUNTER<=COUNTER + 1; END PROCESS;
if-then-else
case
if SEL = 00 then Y elsif SEL = 01 then Y elsif SEL = 10 then Y else Y end if;
A; B; C; D;
4:1 MUX
case SEL is when 00=> when 01=> when 10=> when others end case;
Y
2:1 MUX
A; B; C; = D;
A B C D
00 01 10 11
2:1 MUX
A SEL == 01 SEL == 00
SEL
!!
!!
!!
!!
NO cambiar el valor de una seal en dos procesos, porque depender su valor de qu proceso se ejecute antes. La herramienta de sntesis no sintetizar dicha descripcin. NO inicializar variables o seales en la propia declaracin (el sintetizador suele omitirlas). Hacerlo cuando se realice el reset. Las salida combinacionales no hace falta inicializarlas. Si a un objeto de tipo std_logic se le asigna el valor de X, el sintetizador interpretar que puede asignarle cualquier valor. La simulacin post sntesis diferir de la funcional. Si dentro de un proceso se hacen dos asignaciones sobre una misma seal en el mismo instante de tiempo, se programar la ultima asignacin. Ello permite asignar valores por defecto a las seales, evitando que se infieran latches. NO utilizar buffers tri-estado internamente, unicamenete en los bloques I/ O.
!!
!!
!!
Realizar un diseo sncrono disminuye riesgos de un posterior mal funcionamiento. Evitar asincronismos; tanto el reset como el reloj tienen que ser iguales para todos los registros. Si se quieren relojes de distinta frecuencia, se debern de generar internamente con divisores y aplicarlos en las entradas de habilitacin de los distintos bloques. Intentar evitar latches, ya que pueden producir problemas temporales y no todas las FPGAs disponen de ellos. UN SINTETIZADOR SOLO PERMITIR DESCRIPCIONES CUYO COMPORTAMIENTO SE PUEDA IMPLEMENTAR EN HARDWARE DIGITAL.
54
b. Restricciones en las descripciones. Sntesis Lgica c. Acondicionamiento entradas asncronas. d. Segmentacin (pipeline). e. Tipos de Simulacin. f. Lectura/escritura en Ficheros. g. Generacin de Estmulos.
!!
!!
Los sistemas digitales de todos los tipos deben tratar inevitablemente con seales de entrada asncronas con el reloj del sistema Las entradas asncronas son tpicamente solicitudes de servicio o flags de estatus. Tales entradas normalmente cambian en forma lenta comparada con la frecuencia del reloj del sistema y no necesitan reconocerse durante la pulsacin particular de reloj. Si una transicin se pierde en una pulsacin de reloj, siempre puede detectarse en la siguiente. Es esencial que las entradas asncronas sean sincronizadas en un solo lugar del sistema.
!!
Circuito acondicionador
57
b. Restricciones en las descripciones. Sntesis Lgica c. Acondicionamiento entradas asncronas. d. Segmentacin (pipeline). e. Tipos de Simulacin. f. Lectura/escritura en Ficheros. g. Generacin de Estmulos.
Segmentacin (pipeline)
58
!!
Temporizacin
!!
En general las herramientas de anlisis temporal de los fabricantes de PLDs informan de que mrgenes disponemos a una determinada frecuencia "! Ms habitual es el anlisis sobre el margen de activacin. "! Lo suelen llamar Slack = tclk tffpd(max) tcomb(max) tsu tdesfase "! Si el slack es negativo el diseo no cumple las especificaciones temporales.
Segmentacin (pipeline)
59
!!
Segmentacin (pipeline).
!!
!!
!!
La segmentacin o pipeline es una estrategia de control para aumentar la velocidad de proceso de una determinada arquitectura digital. Consiste en introducir registros que permiten dividir el proceso en tramos cuya ejecucin se solapa en el tiempo. El tiempo de latencia es lo que tarda el pipeline en llenarse. Inconvenientes:
"!
Combinational Logic
Combinational Logic
Combinational Logic
Data In
etc.
Registers
Combinational Logic
Registers
Combinational Logic
Registers
"! "!
El retardo de las distintas etapas no es similar, velocidad limitada a la del bloque mas pequeo. Debe estudiarse si el retardo de las etapas es comparable con el del registro. Si la secuencia con que llegan los datos no es regular se pierde velocidad.
Data In etc.
Clock
Circuito segmentado
Segmentacin (pipeline)
60
!!
Comparticin de recursos:
!!
!!
La comparticin de recursos es una tcnica de optimizacin que nos permite utilizar un nico bloque para implementar diferentes operadores. Si no compartimos operadores, cada bloque se realizar utilizando su propia lgica. Si compartimos operadores obtendremos una ocupacin de rea menor a costa de un rendimiento menor.
A A B C
+ +
Y B Y
+
C
>
Total LUTs = 32 Clock frequency = 87.7 MHz
>
Total LUTs = 64 Clock frequency = 133.3 MHz (+52% !)
61
b. Restricciones en las descripciones. Sntesis Lgica c. Acondicionamiento entradas asncronas. d. Segmentacin (pipeline). e. Tipos de Simulacin. TestBench f. Lectura/escritura en Ficheros. g. Generacin de Estmulos.
TestBench
62
RTL
Logic Synthesis
Logic Simulator
Logic Simulator
TestBench
63
!! !!
Cuerpo de arquitectura que incluya una instancia del Dispositivo bajo test (DUT). Generacin de secuencias de valores para aplicarlos a las entradas. Monitorizar los valores obtenidos a la salida.
"! "!
Verificacin salida
TestBench
64
!!
Tipo I Simulacin funcional manual. Los retardos internos del DUT no estn modelados y la salida es verificada manualmente (inspeccin visual del simulador). Tipo II Simulacin temporal Manual. Los retardos internos del DUT son tenidos en cuenta y la salida es verificada manualmente. Tipo III Simulacin automatizada funcional. Los retardos internos del DUT no estn modelados y la salida es verificada por el simulador comparando las salidas del DUT con un fichero o modelo ideal. Tipo IV Simulacin automatizada temporal. Los retardos internos del DUT son tenidos en cuenta y la salida es verificada por el simulador comparando las salidas del DUT con un fichero o modelo ideal. Tipo de simulacin ideal para la verificacin un dispositivo.
!!
!!
!!
TestBench
65
entity test_bench is end entity test_bench; architecture test_reg4 of test_bench is signal d0, d1, d2, d3, en, clk, q0, q1, q2, q3 : bit; begin dut : entity work.reg4(behav) port map ( d0, d1, d2, d3, en, clk, q0, q1, q2, q3 ); stimulus : process is begin d0 <= 1; d1 <= 1; d2 <= 1; d3 <= 1; wait for 20 ns; en <= 0; clk <= 0; wait for 20 ns; en <= 1; wait for 20 ns; clk <= 1; wait for 20 ns; d0 <= 0; d1 <= 0; d2 <= 0; d3 <= 0; wait for 20 ns; en <= 0; wait for 20 ns; ! wait; end process stimulus; end architecture test_reg4;
TestBench
66
TestBench
67 Architecture verif of test_bench is signal d0, d1, d2, d3, en, clk : bit; signal q0a, q1a, q2a, q3a, q0b, q1b, q2b, q3b : bit; begin dut_a : entity work.reg4(struct) Generacin estmulos port map ( d0, d1, d2, d3, en, clk, q0a, q1a, q2a, q3a ); dut_b : entity work.reg4(behav) port map ( d0, d1, d2, d3, en, clk, q0b, q1b, q2b, q3b ); stimulus : process is begin d0 <= 1; d1 <= 1; d2 <= 1; d3 <= 1; wait for 20 ns; en <= 0; clk <= 0; wait for 20 ns; en <= 1; wait for 20 ns; clk <= 1; wait for 20 ns; ! ! verify : process is wait; begin end process stimulus; wait for 10 ns; ... assert q0a = q0b and q1a = q1b and q2a = q2b and q3a = q3b report implementations have different outputs severity error; Verificacin Modelo wait on d0, d1, d2, d3, en, clk; end process verify; end architecture regression;
68
b. Restricciones en las descripciones. Sntesis Lgica c. Acondicionamiento entradas asncronas. d. Segmentacin (pipeline). e. Tipos de Simulacin. f. Lectura/escritura en Ficheros. g. Generacin de Estmulos.
Lectura/escritura en Fichero
69
Lectura/escritura en Fichero
70
!! !!
Los objetos de este tipo representan ficheros. La sintaxis de su declaracin es: type nombre_fichero is file of nombre_del_tipo; type VECTORES is file of bit_vector;
=> Ejemplo
!!
!!
Operaciones que pueden realizarse con un fichero: abrirlo, cerrarlo, leerlo, escribirlo o comprobar si se ha llegado al final del mismo Estas operaciones se realizan a travs de ciertos procedimientos y funciones que estn declarados implcitamente para el tipo fichero
Lectura/escritura en Fichero
71 !!
El paquete TEXTIO, que est incluido en la librera STD, contiene las declaraciones bsicas para trabajar con ficheros de texto En TEXTIO estn declarados los tipos: TEXT y LINE: type LINE is access string; type TEXT is file ft/'string;
!!
!!
Utilizando estos tipos se puede declarar un fichero de texto: file objeto fichero: TEXT is in/out "nombrefichero.extensin";
!!
Los datos en los ficheros de texto estn organizados en lneas. Cada lnea puede contener un nmero de elementos variable.
Lectura/escritura en Fichero
72
!!
!!
!!
Para leer los datos de un fichero de texto, primero hay que realizar una llamada al procedimiento READLINE, con el que se lee una lnea entera. Despus, hay que realizar un nmero de llamadas determinado al procedimiento READ para leer los elementos de la lnea La escritura de un fichero se realiza formando lneas con el procedimiento WRITE, y despus escribiendo la lnea entera en el fichero mediante el procedimiento WRITELINE Estos procedimientos estn declarados en el paquete TEXTIO para los tipos predefinidos en VHDL.
Lectura/escritura en Fichero
73 !!
=> Ejemplo: Lectura de fichero sincronizada con seal de reloj El fichero vectores.txt contiene los siguientes valores: 001 010 011 100
!!
Lectura/escritura en Fichero
74 !!
El paquete std_logic_textio contiene dichos procedimientos declarados para los tipos std_logic y std_logic_vector
!!
Lectura/escritura en Fichero
75 !!
=> Ejemplo: Lectura de datos de un fichero y conversin a formato serie El fichero datos.txt contiene los siguientes valores: 01010101 10101010 00110011 11001100 00001111 11110000
!!
!!
Formato de salida:
Lectura/escritura en Fichero
76
Lectura/escritura en Fichero
77 !!
=> Ejemplo: Entrada de fichero con elementos de distinto tipo en la misma lnea El fichero dif_datos.txt contiene los siguientes elementos: 00 0 CERO 01 1 UNO 10 2 DOS 11 3 TRES
!!
Lectura/escritura en Fichero
78 !!
!!
Lectura/escritura en Fichero
79
Lectura/escritura en Fichero
80
Ejemplo: Banco de pruebas de un Full-Adder El fichero v_FA_in.txt contiene los siguientes valores: 000 001 010 011 100 101 110 111 Al ejecutar el banco de pruebas se obtiene el fichero v_FA_out.txt con el siguiente contenido:
Vector numero 1 : 000 ---> 00 Vector numero 2 : 001 ---> 01 Vector numero 3 : 010 ---> 01 Vector numero 4 : 011 ---> 10 Vector numero 5 : 100 ---> 01 Vector numero 6 : 001 ---> 10 Vector numero 7 : 110 ---> 10 Vector numero 8 : 111 ---> 11
81
b. Restricciones en las descripciones. Sntesis Lgica c. Acondicionamiento entradas asncronas. d. Segmentacin (pipeline). e. Tipos de Simulacin. f. Lectura/escritura en Ficheros. g. Generacin de Estmulos.
Generacin Estmulos
82 !!
La generacin de estmulos es una parte importante de los TestBench. Para ello el lenguaje VHDL dispone de una serie de instrucciones: AFTER, WAIT FOR, NOW, LAST_EVENT , etc. La instruccin NOW representa el tiempo de simulacin actual. Puede ser importante verificar eventos en tiempos particulares de simulacin.
!!
!!
El atributo objLAST_EVENT nos devuelve el tiempo transcurrido desde que se dio un evento en ese objeto.
!!
La sentencia wait for suspende la ejecucin hasta que transcurra un tiempo de simulacin igual al especificado.
Generacin Estmulos
83