Sunteți pe pagina 1din 23

Simulacin y Sntesis con VHDL

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

Diseando en Lenguaje VHDL

Gua de codificacin en VHDL para simulacin y sntesis:


/cad/SYNOPSYS_2004.06/vcs/vcs_mx7.1.1/doc/VHDLsimCMSG.pdf

Diseo de Registros Diseo de bloques combinacionales Diseo de Mquinas de Estados Finitos Uniendo Componentes Creando TestBenchs para simulacin

Herramienta de Simulacin de circuitos descritos en VHDL: Scirocco de SYNOPSIS

Procedimiento de Sntesis con Design Analyzer de SYNOPSIS


2

Diseando en Cdigo VHDL

-- 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

Diseando en Cdigo VHDL

-- 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;

<NOMBRE PROCESO>: process (<LISTA DE SENSIBILIDAD: Rst, CLK>)

--PROCESO COMBINACIONAL
<NOMBRE_PROC.>: process (<LISTA:todas las seales que sean leidas>) begin <cuerpo del proceso combinacional> end process;

end <NOMBRE_ARQUITEC>;
4

Diseando en Cdigo VHDL


Guas bsicas de diseo Proceso secuencial:

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

case: usar when others if: usar else


5

Diseando en Cdigo VHDL

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

Condiciones de escritura en reg

<reg> <= <entrada_datos>;

Diseando en Cdigo VHDL

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)

Diseando en Cdigo VHDL

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

Diseando en Cdigo VHDL


Diseo de Bloques combinacionales: ALU Circuitos con Operaciones Aritmticas.

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

Ejemplo: Sumador-restador de nmeros con signo C-2.

Diseando en Cdigo VHDL


Diseo de Bloques combinacionales: ALU Circuitos con Operaciones de Desplazamiento.

Se emplean las funciones:


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.

Ejemplo: Desplazador Lgico a derecha e izquierda de nmeros de 32 bits.

Enlace en la pgina web al fichero desplazador.vhd

10

Diseando en Cdigo VHDL

Diseo Estructural: Uniendo componentes

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

Diseando en Cdigo VHDL

Diseo Estructural: Uniendo componentes


Architecture <NOMBRE_ARQUITEC> of <NOMBRE_ENTIDAD> is component <Nombre_componente> port ( <entradas_salidas_del_componente> ); end component; ---------<resto de componentes>-----<seales_internas> begin <nombre_de_colocacion_componente>: <nombre_componente> port( <seal_1_compo> => <seal_entidad_o_interna_de_conexin>, <seal_2_compo> => <seal_entidad_o_interna_de_conexin>, ---------------------); ----------<resto de componentes>--------end <nombre_arquitectura>;

Ejemplo: Unin de los registros PC e IPC (enlace al fichero union_pc_ipc.vhd de la pgina web de la asignatura)

12

Diseando en Cdigo VHDL

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

Diseando en Cdigo VHDL

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

Diseando en Cdigo VHDL

Creacin de Testbench para verificacin del diseo mediante simulacin

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

Diseando en Cdigo VHDL

16

Simulacin con Scirocco

Herramienta empleada: scirocco de synopsis


(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:

Recetario para simulacin con scirocco


$ vhdlan <nombre_diseos.vhd> $ vhdlan <nombre_tb.vhd> $ scs -nc -time NS -exe scsim <nombre_entidad_tb>
17

4.- Se crea el ejecutable de simulacin:

Simulacin con Scirocco

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:

run <tiempo> <unidades>

9.- En waveform se visualizan las formas de onda. Se dene analizar para comprobar que el circuito opera como queremos.

18

Sntesis con Design Analyzer

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

Sntesis con Design Analyzer


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.

5.- Salvar el circuito en formato verilog:

20

Colocacin de PADS

Biblioteca de PADS: UMCL18G300D3_1.0 Ejemplos de PADS:

Entrada: C3I40 Salida: C3O40 Entrada/salida (bidireccional): C3B10

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

Colocacin de PADS. Proceso


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

Colocacin de PADS. Salvar diseo

Salvar diseo con Pads:

File -> Save As: Elegir formato Verilog Elegir un nombre representativo. Ej: dp_pads.v

Salvar informacin temporal para uso futuro

File -> Save Info -> Design Timing Elegir formato SDF Elegir un nombre representativo: Ej: dp_pads.sdf

23

S-ar putea să vă placă și