Documente Academic
Documente Profesional
Documente Cultură
Diseo de Computadores: Sntesis Lgica Apuntes de Prcticas sobre Simulacin y Sntesis con VHDL empleando el entorno de Synopsis Jorge Juan Chico Manuel J. Bellido 20 Diciembre 2006
Contenidos
Diseo de Registros Diseo de bloques combinacionales Diseo de Mquinas de Estados Finitos Uniendo Componentes Creando TestBenchs para simulacin
-- DEFINICION DE LA ESTRUCTURA: ENTIDAD, ENTRADAS Y SALIDAS-library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; Entity<NOMBRE_ENTIDAD>is port ( SEALESDEENTRADA SEALESDESALIDA ); end<NOMBRE_ENTIDAD>;
3
-- DEFINICIN DEL COMPORTAMIENTO: ARQUITECTURA DE LA ENTIDAD Architecture <NOMBRE_ARQUITEC> of <NOMBRE_ENTIDAD> is <SENALES INTERNAS QUE SE NECESITAN> begin --PROCESO SECUENCIAL
begin <cuerpo del proceso secuencial> end process;
--PROCESO COMBINACIONAL
<NOMBRE_PROC.>: process (<LISTA:todas las seales que sean leidas>) begin <cuerpo del proceso combinacional> end process;
end <NOMBRE_ARQUITEC>;
4
Lista sensibilidad: solo CLK y seal de inicializacin ASNCRONA Seal asncrona mayor prioridad que el reloj Flanco de reloj en VHDL:
CLK='1' and CLK'event :Flanco de subida CLK='0' and CLK'event :Flanco de bajada
Proceso Combinacional:
Lista de sensibilidad: todas las seales que van a ser ledas en el proceso (que son entradas en el bloque combinacional) En caso de usar sentencias tipo case o if hay que estar seguros de cubrir todas las condiciones posibles
Diseo de Registros
-- Si la salida del registro es condicional (con alta impedancia --hay que definir la seal interna que define al regsitro: signal <reg> : std_logic_vector( n downto 0); begin --PROCESO SECUENCIAL: Operaciones de cambio de valor
<NOMBRE PROCESO>: process (CLK) begin if clk='1' and clk'event then if write='1' then end if; end if; end process;
6
Diseo de Registros
--PROCESO COMBINACIONAL
<NOMBRE_PROC.>: process (<seales de control lectura>, <reg>) begin if <seal_lectura>='1' then <salida_datos> <= <reg>;--LECTURA DEL REGISTRO else <salida_datos> <= (others => 'Z');--ALTA IMPEDANCIA end if; end process;
end <NOMBRE_ARQUITEC>;
Ejemplo de diseo de registro: Registro pc (enlace en la pgina web de la asignatura al fichero registro_pc.vhd)
Diseo de Registros
-- Array de M Registros de n bits: Definicin de tipo de seal type ram is array (0 to M) of std_logic_vector(n downto 0); signal <array_reg> : ram; begin --PROCESO SECUENCIAL: Operaciones de cambio de valor
<NOMBRE PROCESO>: process (CLK) begin if clk='1' and clk'event then if write='1' then <array_reg>(<Num_Entero>)<= <entrada_datos>; endif; end if; end process;
8
Para manejar nmeros con signo emplear seales internas tipo signed que asociaremos a las entradas/salidas de la entidad que son tipo std_logic, si es necesario. Ejemplo:
puertos de la entidad: - port ( A : in std_logic_vector(n downto 0);.............) Seales internas: - signal A_int : signed(n downto 0); cuerpo de la arquitectura: - A_int <= signed(A); Conversin a std_logic: std_logic_vector(<nombre_signed>)
Para las operaciones se pueden emplear las operaciones aritmticas habituales (suma, resta, multiplicacin etc.) Enlace en la pgina web al fichero sum_res.vhd
SHR(B,A) SHL(B,A) - B dato tipo unsigned o signed que va a ser desplazado. - A dato tipo unsigned que indica el nmero de desplazamientos. - Si el dato B es tipo signed, el desplazamiento es Aritmtico.
10
Se crea la entidad con los puertos de E/S Se declaran los componentes y las seales internas que se necesiten para interconectar aquellos entradas/salidas de componentes que no aparezcan en la entidad en la arquitectura, antes de comenzar a definir el comportamiento de la misma (antes del begin) Para definir el comportamiento de la arquitectura (tras el begin) se colocan los componentes, indicando que seal (interna o de la entidad) se conecta con cada seal del componente
11
Ejemplo: Unin de los registros PC e IPC (enlace al fichero union_pc_ipc.vhd de la pgina web de la asignatura)
12
Diseo de FSM:
--SENALES INTERNAS QUE SE NECESITAN: tipo de estados y seales de estado actual y prximo: type STATE_TYPE is (<definicin de estados>); signal CS, NS : STATE_TYPE; .................................. --PROCESO SEC.: SEALES ASNCRONAS -Rst- Y LA SEAL DE RELOJ <NOMBRE PROCESO>: process (Rst, CLK) begin if Rst = 0 then CS <== <estado inicial>; elsif CLK= 1 and CLKevent then CS <== NS; end if; end process;
13
Diseo de FSM:
-- PROCESO COMBINACIONAL: OBTIENE EL VALOR DE LAS SALIDAS -- EN CADA ESTADO <NOMBRE PROCESO>: process (< todas las seales que aparezcan>) variables <todas_las_salidas>: std_logic; begin <variables_salidas> := <valor_defecto>; case CS is when <actual> => <variables_salidas> := <valor_estado_actual>; NS <= <prximo_estado>; ................. end case; <seales de salida> <== <variables_salidas>; end process; Ejemplo: Diseo de la U.C de la calculadora del tema 1. Enlace en la web al fichero control_calculadora.vhd 14
Se crea una Entidad vacia como testbench. Se incluyen en la arquitectura una seal interna por cada entrada o salida de la entidad control.
Se incluye, el componente del diseo a verificar. Por ltimo, se crean patrones de entrada en las seales de entrada. (Seguir las guas que se dan de creacin de testbench en la Gua de codificacin en VHDL para simulacin y sntesis:
/cad/SYNOPSYS_2004.06/vcs/vcs_mx7.1.1/doc/VHDLsimCMSG.pdf)
Ejemplo: testbench para control_calculadora. Enlace en la pgina web de la asignatura al fichero tb_control.vhd
15
16
(www.synopsis.com) Se encuentra instalada en sunmicro1 (s.o. solaris) sunmicro2 (s.o. solaris) Se inicializan las variables de entorno con: $ ent_synopsis 1.- Crear directorio de trabajo 2.- Dentro del directorio colocar los cdigos VHDL del circuito a simular y del testbench 3.- Compilar los cdigos VHDL:
$ vhdlan <nombre_diseos.vhd> $ vhdlan <nombre_tb.vhd> $ scs -nc -time NS -exe scsim <nombre_entidad_tb>
17
5.- Ejecutar comando scirocco: Se abre la ventana para lanzar el simulador (ejecutable creado en el proceso anterior). 6.- En la ventana del simulador abrir: waveform y Hierarchy. 7.- En la ventana de hierarchy seleccionar las seales que queramos visualizar y aadir a la ventana de waveform. 8.- En la ventana de simulacin ejecutar:
9.- En waveform se visualizan las formas de onda. Se dene analizar para comprobar que el circuito opera como queremos.
18
En estas transparencias viene solo un resumen de la sntesis con synopsis. En el Tutorial sobre flujo de diseo digital con tecnologas de UMC que se encuentra enlazado en la pgina de la asignatura existe una informacin ms completa La herramienta de sntesis es Design Analyzer de Synopsis. Tanto en micro como sunmicro1 y sunmicro2 se invoca con el comando da tras haber inicializado las variables con: $ ent_synopsis Proceso de sntesis sobre el kit UMC_0.18 (tecnologa UMC 0.18micras)
Partiendo del directorio donde se encuentran los fuentes (cdigo VHDL del circuito a sintetizar): 1.- Crear directorio y cambiarnos a este directorio. 2.- Copiar a este directorio el fichero del kit de UMC_018 para Design Analyzer:
cp /cad/KITS/UMC/UMC_18/VST/v5/UMCL18G212D3_1.0/design_compiler/.synopsys_dc.setup . 19
3.- Ejecutar comando da . Se abrir la ventana de Design A. 4.- En la ventana de Design Analyzer:
a) File--> Read: Seleccionar el circuito a sintetizar b) Una vez leido el circuito, ejecutar: Tools--> Design Optimization. Dejar opciones como estn y OK. Si todo ha funcionado, con el paso 4 se habr generado un circuito sintetizado que se puede reconocer en la ventana de Design Analyzer porque aparece una caja con una puerta NAND. Este es el circuito sintetizado. En los botones de la izquierda de la ventana de Design Analizer se puede ver por dentro el circuito a nivel de puertas y biestables. File--> Save as: Seleccionar formato verilog y un nombre adecuado para el circuito sintetizado.
20
Colocacin de PADS
En Design Analizer, Los PADS bidireccionales se conectan a seales bidireccionales (inout). La herramienta se encarga de re-disear el circuito para adaptarlo a las lneas del PAD.
21
Abrir el diseo con D.A. y cargar todos los ficheros del diseo. Hacer la sntesis/optimizacin si es necesario Seleccionar uno o varios puertos en el mdulo ms alto de la jerarqua (top-level) Seleccionar Edit -> Insert Pads... Seleccionar Port Pad Atributes... Escribir nombre del pad a aadir en el campo Exact Pad to Use. Pulsar OK en esta ventana y la superior. Comprobar colocacin y conexin del pad en la vista de nivel lgico del top-level
22
File -> Save As: Elegir formato Verilog Elegir un nombre representativo. Ej: dp_pads.v
File -> Save Info -> Design Timing Elegir formato SDF Elegir un nombre representativo: Ej: dp_pads.sdf
23