VHDL + Alliance
-
Upload
martin-blake -
Category
Documents
-
view
21 -
download
0
description
Transcript of VHDL + Alliance
VHDLVHDL++
AllianceAlliance
VHDLDesarrollado para el Very High Speed Integrated Circuits Program del gobierno de EEUU.
Luego, standard de la IEEE.
Objetivos para el lenguaje:
Permitir descripción de la estructura de un diseño (descripción estructural).
Especificar la funcionalidad usando estructuras similares a las de lenguajes de programación familiares (Ada) (descripción de comportamiento).
Simulación de los diseños.
Permite describir un componente mediante dos enfoques: comportamiento y estructura.
Comportamiento vs Estructura
Comportamiento
Enfoque “caja negra”
Se especifican las salidas en función de las entradas.
En una descripción jerárquica, las hojas son descripciones de comportamiento.
Ej: a2_y.vbe (compuerta AND de dos entradas)
Estructura
Enfoque “caja blanca”
Se especifica la manera de interconectar los componentes que forman el diseño.
En una descripción jerárquica los nodos internos especifican estructura.
Ej: mux4.vst (multiplexor de 4 a 1 de 1 bit de ancho).
Tipos de DatosTipos de datos escalares (númericos, enumerados, algunos predefinidos) y compuestos (arreglos y records).
Para nuestro trabajo nos vamos a manejar con los siguientes tipos:
BIT:
type BIT is (‘0’, ‘1’);
BIT_VECTOR:
type BIT_VECTOR is array ( range ) of BIT;
Donde el rango se especifica de la siguiente manera:
range ::= simple_expression direction simple_expression
direction ::= to | downto
Ej:
Entrada_ALU: BIT_VECTOR (0 to 5);
Salida_ALU: BIT_VECTOR (8 downto 3);
Describiendo comportamientoEntity componente is
generic(declaraciones genéricas;
);port(
declaraciones de ports;);
End componente;Architecture comportamiento of componente isBegin
descripción de comportamiento;End comportamiento;
Ejemplo: a2_y.vbeENTITY a2_y IS GENERIC ( CONSTANT area : NATURAL := 1008; -- area CONSTANT cin_i0 : NATURAL := 39; -- cin_i0 CONSTANT tpll_i0 : NATURAL := 1244; -- tpll_i0 CONSTANT rdown_i0 : NATURAL := 2048; -- rdown_i0 CONSTANT tphh_i0 : NATURAL := 1122; -- tphh_i0 CONSTANT rup_i0 : NATURAL := 1848; -- rup_i0 CONSTANT cin_i1 : NATURAL := 39; -- cin_i1 CONSTANT tpll_i1 : NATURAL := 1319; -- tpll_i1 CONSTANT rdown_i1 : NATURAL := 2048; -- rdown_i1 CONSTANT tphh_i1 : NATURAL := 1029; -- tphh_i1 CONSTANT rup_i1 : NATURAL := 1848 -- rup_i1 );
Sigue en la próxima transparencia…
PORT ( i0 : in BIT; -- i0 i1 : in BIT; -- i1 t : out BIT; -- t vdd : in BIT; -- vdd vss : in BIT -- vss );END a2_y;-- Architecture DeclarationARCHITECTURE behaviour_data_flow OF a2_y ISBEGIN ASSERT ((vdd and not (vss)) = '1') REPORT "power supply is missing on a2_y" SEVERITY WARNING;t <= (i0 and i1);END;
Ejemplo: a2_y.vbe
VHDL - Especificando estructura•Definir interfaz del componente.
Entity identifier is
entity_header
entity_declarative_partend identifier
entity_header ::=
[generic_clause]
[port_clause]
generic_clause ::= generic (generic_list) ;
port_clause ::= port( port_list) ;
Cada elemento del generic_list es de la forma:
[constant] identifier_list : [in] subtype_indication [:= expression ]
Cada elemento del port_list es de la forma:
[signal] identifier_list : [mode] subtype_indication [bus] [:= expression ]
EjemploEntity alu1 is
port( a : in bit;
b : in bit;
carry_in : in bit;res : out bit;
carry_out : out bit ;
vdd, vss: in bit);end alu1;
‘alu1’ será una entidad con tres puertos de entrada de un bit cada uno (a, b, carry_in) , y dos puertos de salida (res, carry_out) de un bit cada uno, además de las señales de tierra y alimentación.
Ahora, queda declarar los componentes de nuestra entidad, instanciarlos y definir su interconexión => la arquitectura de nuestro diseño.
Puertos de salida
Puertos deentrada
Describiendo la arquitecturaarchitecture identifier of entity_name is
architecture_declarative_partbegin
architecture_statement_part
end identifier;
En la parte declarativa en general pondremos declaraciones de señales internas o de componentes.
signal_declaration ::= signal identifier_list : subtype_indication [register | bus] [ := expr.]
component_declaration ::= component identifier
[generic_clause]
[port_clause]
end component;
En la parte de comandos instanciaremos los componentes, de la siguiente manera.
Instanciando componentescomponent_instatiation_statement ::=
label: component_name
[generic_map_aspect]
[port_map_aspect]
Ejemplo:
enable_gate: nand3
port map ( a => en1, b => en2, c => int_req, y => interrupt);
parameter_rom: read_only_memory
generic_map (data_bits => 16, addr_bits => 8);
port_map (en => rom_sel, data => param, addr => a (7 downto 0);
Ahora, pasemos a un ejemplo completo.... Construyamos un XOR usando compuertas AND y NOT.
XOR con AND, OR y NOT
A B A xor B
0 0 0
0 1 1
1 0 1
1 1 0
A xor B= (A and (not B)) or ((not A) and B)
Diagrama del circuito
A
B
n1_y a2_y
o2_y
AllianceAllianceConjunto de herramientas para desarrollo y validación de circuitos utilizando VHDL como lenguaje.
Disponible para Linux y Windows – Licencia GNU
Provee muchas herramientas:AsimutGenlibBsgRageMips_asmEtc...
En esta primer parte, vamos a utilizar la herramienta de simulación Asimut.
Asimut: generalidadesUso: asimut [opciones] archivo_vhdl archivo_patrón archivo_resultado
Los archivos VHDL pueden ser descripciones estructurales (.vst) o de comportamiento (.vbe)
Los componentes referenciados por el archivo_vhdl se buscan usando el siguiente orden:
Descripcion de comportamiento (vbe) en el path MBK_CATA_LIB.
Descripcion estructural (vst) en el directorio actual.
Los resultado se escriben en el directorio indicado por MBK_WORK_LIB
Opciones mas usadas:
-c : solo compilar. OJO! Muchos errores se detectan sólo al linkear.
Ejemplo: asimut mi_xor prueba_mi_xor resultado_mi_xor
Asimut: Archivo PatrónSon archivos que contienen las pruebas a realizar sobre los componentes.
Estructura:
[in | out | signal] <nombre_de_señal> [tipo_de_dato];Begin<nombre_patron>: <lista de valores>..End;
Donde la <lista de valores> puede contener caracteres comodín (‘*’), valores fijos (‘1’,’0’) o valores a validar (‘?0’).
Asimut: Archivo Patrón ejemplo
Prueba_mi_xor.pat
in a B;:in b B;;out result B;:begin1 : 0 0 *;2 : 1 0 *;3 : 0 1 *;4 : 1 1 *;end;