Descargar la presentación
La descarga está en progreso. Por favor, espere
1
Departament Enginyeria Electrònica Josep Conesa
Introducció VHDL Departament Enginyeria Electrònica Josep Conesa
2
Història Anys 70: Evolució en els processos de fabricació dels Ci’s.
Poques eines de disseny Disseny concentrat en les característiques i connexions a nivell de transistor. Anys 80: Processos tecnològics més complexes. Augment dels problemes d’integració (circuits MSI i LSI). Desfasament entre tecnologies i tècniques de disseny. Apareixen els “llenguatges de descripció de hardware”: IBM IDL Texas Instruments TI-HDL General Electrics ZEUS Cap aconsegueix una gran acceptació
3
Historia L’any 1981 el Departament de defensa dels Estats Units van desenvolupar el projecte VHSIC (Very High Speed Integrated Circuit). Rentabilitzar les inversions en hardware (gràcies a que aquest nou sistema permet un més fàcil manteniment, reduint molt tant els costos de temps, com de material).
4
Evolució VHDL 1983: IBM i TI , junt amb certes empreses i universitats, varen desenvolupar un llenguatge de disseny, que els permetés l'estandardització, facilitant així el manteniment dels dissenys i la depuració dels algoritmes. 1987: IEEE publica l’estàndard IEEE std 1076- 1987 (VHDL). 1993: IEEE publica un nou estàndard actualitzat. 1999: VHDL-AMS extensió
5
VHDL Llenguatge de programació d’alt nivell:
Llenguatge creat específicament pel disseny de hardware (llenguatge de descripció de hardware). Permet abstracció d’alt nivell. Ens permet el disseny de CPUs, manipular fitxers, retards en el temps...
6
Avantatges del llenguatge VHDL
Independència en la metodologia de disseny. Portabilitat. Permet la transferència de dissenys a diferents entorns CAD, de simulació o de síntesi. Ràpid “Time-to-Market”.Combinat amb eines de síntesi automàtica permet portar un disseny amb temps record. Versatilitat per la descripció de sistemes complexes. Possibilitat de reutilització. Independència respecte dels fabricants.
7
Fabricants FPGA Actel Altera Software de simulació Atmel
Chip Express Clear Logic Cypress Dyna Chip Fast Analog Solutions Lattice Xilinx Inc. Software de simulació Altera Quartus-II Lattice ispLEVER Xilinx Foundation Actel Libero
8
Què és una FPGA ? Una FPGA és un dispositiu lògic programable que es pot configurar per implementar qualsevol circuit digital. Segons utilitzem una FPGA més gran , amb més recursos interns, podrem implementar dissenys més complexos. Una vegada configurada i gravada amb el nostre disseny ens queda un xip com a únic maquinari, necessitant ben poc components exteriors per acabar el sistema.
9
Estructura FPGA Tres tipus de components
CLB : (Blocs lògics configurables). Són els pilars de la FPGA i estan distribuïts uniformement per tot l’àrea de la FPGA i són idèntics Latches Multiplexors Petites memòries IOB (Blocs entrada/sortida) Son CLB’s específics que es troben al costat dels PINS i la seva funció és interconnectar el xip amb l’exterior. Xarxa d’interconnexió: Conjunt de camins formats per matrius d’interconnexió que permeten connectar CLB’s amb CLB’S i amb IOB’s
10
Estructura FPGA Busos de línies metàl·liques CLB IOB
Matrius d’interconnexió
11
Estructura bàsica d’un disseny en VHDL
Encapçalament Library, Package Declaració de l’entitat Caixa negra Declaració de l’arquitectura Funcionament de l’entity Encapçalament Entitat Arquitectura
12
Encapçalament Biblioteques (LIBRARY):
Dins de les diferents biblioteques podem trobar components, tipus de senyals, operacions... que ja han estat implementades i són estàndard. Biblioteques existents: IEEE, Altera, LPM, etc. Per poder-les utilitzar: 1. Cal fer una crida a la biblioteca que ens interessa. ex: LIBRARY IEEE; 2. Car expressar quines parts d’aquesta biblioteca volem utilitzar: ex: USE IEEE_STD_LOGIC_1164.ALL; Part del paquet Nom del paquet
13
Paraules reservades del VHDL
select abs component if of severity access configuration in on signal after constant inout open subtype alias disconnect is or then all downto label others to and else library out transport architecture elsif linkage package type array end loop port units assert entity map procedure until attribute exit mod process use begin file nand range variable block for new record wait body function next register when buffer generate nor rem while bus generic not report with case guarded null return xor
14
Un programa en VHDL consta de dues parts:
Bloc o entitat (ENTITY): Anàloga al símbol esquemàtic del disseny a implementar. Fa referència als senyals d’entrada i sortida d’interfície. Arquitectura (ARQUITECTURE): La descripció interna del bloc.
15
ENTITY DECLARACIÓ D’ UNA ENTITAT
La podem veure com el que envolta l’arquitectura Conte els ports d’entrada i sortida S’han d’especificar els modes i els tipus de cada port DECLARACIÓ D’ UNA ENTITAT entity nom_entitat is port ( -- ports d’entrada, sortida, bidireccionals nom_portA : tipus_port tipus_senyal ; nom_portB : tipus_port tipus_senyal ); end nom_entitat ; *Important: L’ultima declaració dels ports va sense el símbol de ;
16
Tipus de port in : Port d’entrada. No es permet assignar-li un valor. Es pot utilitzar per rellotges,entrades de control com l’enable, i per dades d’entrada unidireccionals out : Port de sortida. No se’ns permet llegir el seu valor internament. buffer : Port de sortida. Se’ns permet llegir el seu valor. Aquest mode es similar al out. Nomes pot ser connectat a un senyal intern o a un port de mode buffer d’un altre entitat inout : Port d’entrada/sortida (bidireccional).
17
Tipus de senyals dels ports
boolean : 2 valors. True y False.(exemple d’un comparador) Exemple Igual : out boolean; bit : 2 valors (0 y 1). bit_vector : Vector de bits. S’ha de definir el pes dels bits segons posem la paraula reservada downto o to segons el bit més significatiu es el numero més alt o el més baix del vector. Entrada : bit_vector (0 to 7); En aquest cas el MSB es el 0 el numero 7 és el LSB Entrada : bit_vector (7 downto 0); En aquest cas el MSB es el bit numero 7 i el numero 0 és el LSB Integer : utilitza de números enters. El valor que li assignem no ha d’estar inserit entre cap signe. std_logic : Com el bit però a més a més amb valors d’alta impedància (Z) i indefinits (X). std_logic_vector : Array (vector) de std_logics. Altres tipus : Els definim nosaltres (Ex: màquines d’estats) type format_meu is (guapo,lleig,no_mal_del_tot); Defineix el domini d’una variable discreta. Un nou tipus (type) discret determinat per format_meu
18
Exemple d’entitat ENTITY exemple IS PORT( a,b : in std_logic;
c : out std_logic; d : inout std_logic; e : buffer std_logic); END exemple;
19
Sintaxis Exemple: ENABLE,enable, Enable, enablE (és el mateix)
VHDL no és sensible a minúscules i majúscules Exemple: ENABLE,enable, Enable, enablE (és el mateix) El primer caràcter identificador ha de ser una lletra Dos guions baixos seguits no són vàlids No són vàlids els caràcters diferents a les lletres, números i guió baix
20
Exemple Sintaxis _rellotge 3_llegir Signal_#1 Clear__2 Els comentaris
No són identificatius vàlids: _rellotge 3_llegir Signal_#1 Clear__2 Els comentaris Poden estar col·locats en qualsevol lloc i es fan amb doble guió (- -) Exemple : -- això és un comentari
21
Senyals Els senyals tenen una estructura similar als ports d’una entitat, però es declaren dins d’una arquitectura, i actuen com connexions internes (són els cables dels esquemàtics): SIGNAL nom: tipus [rang] SIGNAL num: bit_vector(7 downto 0);
22
exemple SIGNAL A : std_logic; SIGNAL B: std_logic_vector(5 downto 0);
SIGNAL C : Boolean; SIGNAL D: integer range o to 255; BEGIN A <= ‘1’; B <= “001011”; C <= true; D <= 34;
23
Operacions lògiques Les operacions lògiques es poden implementar directament: NOT AND OR NAND NOR XOR XNOR
24
Assignació segons la classe
Per un senyal: <= Per una constat o variable: := Bit o std_logic: utilitzar cometes simples ‘x’ std_logic_vector: “10110” Nombres enters: No utilitzar cometes, assignació directa.
25
Declaració arquitectura
architecture nom_arcqu of nom_entitat is -- declaració de senyals interns i altres tipus begin -- nucli del programa end nom_arcqu ;
26
Descripció arquitectura
Estil behavioral o de comportament o d’alt nivell : Es caracteritza per incloure les sentències i ordres típiques d’un llenguatge de programació (if, then, case, for...) de manera que la distribució final del circuit amb portes lògiques dins del PLD córrer a càrrec del compilador i de la resta de programari. Estructura seqüencial (es necessita un process). Estil dataflow o flux de dades : Implica la transferència del senyal d’entrada a la sortida node a node. No és seqüencial, és concurrent. És la traducció a VHDL de les equacions algebraiques. Estil structural o estructural : S’hi descriu un netlist de VHDL, en els qual els components són connectats i avaluats instantàniament mitjançant senyals internes. Bàsicament, es tracta de la traducció dels esquemàtics, porta a porta (component) i cable a cable (signal) Estil mixt : Compost per 2 o més estils diferents.
27
Sentencies seqüencials
Estil behavioral Les sentències descrites en un programa s’executen de dalt cap a baix. Importància de l’ordre de les citades sentències en el programa. La realització de forma seqüencial d’un circuit es realitza dins del cos d’un procés (dins d’un process).
28
Exemple comportamental (o d’alt nivell) o behavioral
(a i b entrades, sortida1 i sortida2 sortides) architecture behavioral of compara is begin process (a, b) if (a = b) then sortida1 <= ‘1’; else sortida1 <= ‘0’; end if; if (a = ‘0’ and b = ‘0’) or (a = ‘1’ and b = ‘1’) then sortida2 <= ‘1’; sortida2 <= ‘0’; end process; end behavioral;
29
Exemple comparador estil behavioral
compara : process(a,b) begin if a = b then igual <= ‘1’; else igual <= ‘0’; end if; end process compara; end nom_arquitectura
30
Exemple comparador estil dataflow (equació algebraica)
entity comp is port (a,b: in bit_vector(7 downto 0); igual: out bit); end comp; -- una altre manera de descriure comp architecture booleana of comp is begin igual <= not(a(0) xor b(0)) and not (a(1) xor b(1)) and not (a(2) xor b(2)) and not (a(3) xor b(3)); end booleana;
31
Exemple comparador descripció estructural (l’esquema)
entity comp is port (a,b : in bit_vector(7 downto 0); igual : out bit ); end comp; -- una altre manera de descriure un comparador use work.gatespkg.all; -- (aquí hi ha la biblioteca de portes lògiques) architecture estructural of comp is signal x: std_logic_vector(0 to 3); begin U0: xnor2 port map (a(0),b(0),x(0)); U1: xnor2 port map (a(1),b(1),x(1)); U2: xnor2 port map (a(2),b(2),x(2)); U3: xnor2 port map (a(3),b(3),x(3)); U4: and4 port map (x(0),x(1),x(2),x(3),x(4),igual); end estructural;
32
Descripció nom_proces: process (llista)
Les variables mostrades a la llista s’anomenen variables sensibles. El process s’executa la primera vegada i després només quan hi ha un canvi en alguna d’aquestes variables. L’engegada del procediment és insensible a variacions de variables no contingudes a llista
33
Sentència Process: Sempre que es vulgui utilitzar sentències seqüencials (if, for, case) haurem d’usar un procés. Estructura d’un procés: etiqueta: process (senyals_sensibles) -- declaració de variables begin -- sentències seqüencials end process etiqueta; És opcional escriure les etiquetes
34
Sentencia if Estructura: if (condició ) then -- fes alguna cosa else
-- fes un altre cosa end if; Exemples de condicions: if (a = b) then ... if (a = “1111”) then ... if (b = ‘1’) and (c(0) = ‘0’) then ... if clock’event and clock = ‘1’ then ...
35
Sentencia if També es poden realitzar aniuaments (nesting) :
if (condició) then -- alguna cosa elsif (altre_condició ) then -- altre cosa else -- altre cosa diferent end if;
36
Sentencia CASE Estructura de la sentència: case senyal_a_avaluar is
when valor_1 => -- fes alguna cosa; when valor_2 => -- fes alguna cosa; when valor_3 => -- fes alguna cosa; ... when últim_valor => -- el que sigui; end case;
37
Sentencia CASE Variacions sobre la sentència CASE:
case senyal_a_avaluar is when valor_1 => -- fes quelcom; when valor_n => -- fes quelcom; ... when others => -- el que sigui; end case;
38
Sentencia CASE exemple
case data is when 0 => dout <= ‘0’; sortida <= ‘1’; when 1 => dout <= ‘1’; when 2 => dout <= ‘1’; when others => dout = ‘Z’; end case;
39
Assignació concurrent condicional:
Realitza la mateixa funció que el if de les sentències seqüencials. Estructura: sortida <= entrada1 when (condició) else entrada2; Exemple: output <= input1 when control = ‘1’ else input2;
40
Assignació concurrent amb selecció
Realitza la mateixa funció que el case de les sentencies seqüencials. Estructura: with senyal select output <= entrada1 when valor1_senyal , entrada2 when valor2_senyal , ... entrada_n when valor_n_senyal ;
41
Assignació concurrent amb selecció Exemple
with a select resultat <= b OR c when “00”, b AND c when “01”, b XOR c when “10”, NOT(b XOR c) when “11”;
42
Exemple porta AND entity porta is port( e1: in std_logic;
O1: out std_logic); end porta architecture A of porta is begin etiqueta: process(e1,e2) O1 <= e1 and e2; end process etiqueta; end A e2 e1 O1 e2 e1 O1
43
Exemple porta AND process (a,b) begin if a= ‘1’ and b= ‘1’ then
sal <= ‘1’; else sal <= ‘0’ end if; end process;
44
Descripció de lògica síncrona
En els circuits digitals síncrons, l’estat intern s’actualitza quan arriba el flanc actiu del senyal de rellotge (clock) library ieee; use ieee.std_logic.all; entity flipD is port(d,clk: in std_logic; q: out std_logic); end flipD; architecture ex_sincron of flipD is begin process (clk) begin if (clk’event and clk = ‘1’) then – Detecció del flanc de pujada q <= d; end if; end process; end ex_sincron;
45
Descripció de lògica síncrona
Quan s’utilitza std_logic_1164, es poden fer servir les funcions: Rising_edge(clk) equivalent a clk’event AND clk = ‘1’ Falling_edge(clk) equivalent a clk’event AND clk = ‘0’ En el cas d’una cel·la de memòria latch activada per nivell alt a l’entrada E només cal posar: if (E = ‘1’)
46
Sentència WAIT UNTIL Estructura: process begin wait until (E = ‘1’);
-- coses a realitzar; end process; S’espera fins que el senyal E no tingui nivell alt
47
Descripció de maquines d’estats finits (FSM)
Molts circuits lògics seqüencials serveixen per fabricar màquines d’estats finits. Exemple d’especificació d’una FSM per controlar una memòria RAM FSM té dues variables d’entrada: ready que indica que el bloc de memòria està preparat read_write (R_W) que indica que es pretén fer una lectura o escriptura de la memòria La maquina d’estats genera aleshores dues variables oe i we que s’apliquen a les entrades output enable (OE) i write_enable (WE) de la RAM Dibuixeu l’esquema de la memòria RAM a controlar i la FSM a dissenyar
48
Descripció màquina d’estats
TAULA DE SORTIDES start reading idle writing R_W ready ESTAT OE WE idle start writing 1 reading
49
library ieee; use ieee.std_logic_1164.all; entity exemple_FSM is port( r_w, ready: in std_logic; reset,clk: in std_logic; oe,we: out std_logic); end exemple_FSM; architecture implementacio_FSM of exemple_FSM is type estats is (idle,start,writing,reading); signal estat_actual: estats; begin procediment: process (r_w, ready, reset, clk) begin if reset = ‘1’ then estat_actual <= idle; elsif (clk’event and clk = ‘1’) then case estat_actual is when idle => oe <= ‘0’; we <= ‘0’; if ready = ‘1’ then estat_actual <= start; else end if; when start => oe<= ‘0’; we <= ‘0’; if r_w = ‘1’ then estat_actual <= reading; else estat_actual <= writing; end if; when reading => oe <= ‘1’; we <= ‘0’; if ready=‘1’ then estat_actual < =idle; when writing => oe <= ‘0’; we <= ‘1’; if ready = ‘1’ then estat_actual <= idle; estat_actual <= writing; end case; end if end process procediment; end implementacio_FSM;
50
Referències Altera Corporation, Data Book, San Jose, Calif.: Altera Corporation 1995. Armstrong, J.R., Chip-level modeling with VHDL, Englewoods Cliffs, N.J.: Prentice Hall, 1988. VHDL Cookbook, accesible via ftp://ftp.cs.adelaide.edu.au/pub/VHDL/ S., Introduction to HDL-based design using VHDL, Mountain View, Calif., Synopsys Inc., 1991. Coelho, David. The VHDL Handbook, Boston, Kluwer Academic, 1989. IEEE, IEEE Standard VHDL Language Reference Manula, Std , New York, IEEE, 1993. IEEE, IEEE Standard Multivalue Logic System for VHDL Model Interoperability (Std_logic_1164), Std IEEE , New York, IEEE, 1993. Leung, Steven and Michael Shanblatt, ASIC System Design with VHDL: A Paradigm, Boston, Kluwer Academic, 1989. Lipsett, Roger, Erich Marschner and Moe Shahdad. “VHDL: The Language”, IEEE Design and Test of Computers, New York, IEEE, April 1986. Mazor, Stanley and Patricia Langstraat, A Guide to VHDL, Boston, Kluwer Academic, 1992. Navabi, Zainaladebin, VHDL Analysis and Modeling of Digital Systems, New York, McGraw-Hill, 1993. Xilinx Inc., Programmable Logic Data Book, San Jose, Calif., Xilinx Inc., 1994.
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.