FPGA in ambiente libero Alessio Rugo Farthan srl
Di cosa parleremo oggi Tecnologia FPGA Programmazione FPGA Strumenti di supporto in ambiente libero Esempi applicativi
Tecnologia FPGA (1/7) Field Programmable Gate Array (matrice di porte logiche programmabile sul campo) Circuiti digitali (ri)programmabili (PLD) Funzionalità programmate via software dall'utente finale
Tecnologia FPGA (2/7) Perchè usare la tecnologia FPGA Riprogrammabilità Analisi/simulazioni software prima di quelle hardware Ciclo di progettazione più veloce rispetto a tecnologie ASIC Costo per prototipazione minore
Tecnologia FPGA (3/7) Applicazioni principali DSP Prototipazione industriale Aerospaziali, Automotive, Biomediche PC Hardware (emulazione)
Tecnologia FPGA (4/7) Come funziona? Composta da matrici di blocchi logici configurabili (CLB) Ogni blocco può implementare una funzione combinatoria complessa o una semplice funzione logica (AND, XOR,...) I blocchi sono interconnessi da canali di routing Reti di pin di I/O
Tecnologia FPGA (5/7) LUT - Unità base Acronimo di LOOK-UP TABLE, una “tabella di associazioni” Associa ad ogni possibile input a xBIT un output a yBIT Le LUT di un FPGA sono a 4/6bit generalmente L'uscita può essere “registrata” o “non registrata” tramite l'elemento di memoria FF-D
Tecnologia FPGA (6/7) Connessioni Le porte delle LUT sono collegate ciascuna ad una diversa pista (routing wires) Queste piste sono a loro volta connesse a degli SWITCH Anche la tabella di routing di questi SWITCH è configurabile LUT
Tecnologia FPGA (7/7) Principali produttori Xilinx Altera Lattice
Programmazione FPGA (1/12) Occorre una descrizione della configurazione hardware → Linguaggi HDL Linguaggi usati –VHDL (Very high-Speed integrated circuit HDL) –Verilog Entrambi sono standard IEEE
Programmazione FPGA (2/12) Differenze: –VHDL ha operatori e tipi di dati più avanzati, ma maggiore complessità d'uso –VHDL ha un approccio maggiormente “algoritmo” –Il VHDL è più flessibile (es: tipi definiti dagli utenti) –VHDL ha maggiori costrutti per l'estendibilità e usabilità (entità gerarchiche, package,...) –Il Verilog ha dei tipi di dato gate-level (wire) –Il Verilog ha curva di apprendimento –più bassa!
Programmazione FPGA (3/12) Gate Level – uso diretto delle celle logiche entity amico is port ( parla_male : in STD_LOGIC; parla_bene : in STD_LOGIC; aiuta : in STD_LOGIC; e_presente : in STD_LOGIC; vero_amico : out STD_LOGIC; ) architecture amico_arch of amico is signal parole, fatti : STD_LOGIC; begin vero_amico <= parole AND fatti; parole <= parla_bene AND (not parla_male); fatti <= aiuta OR e_presente; end amico_arch; OUT vero amico IN parla_bene Parla male aiuta e_presente NON case sensitive
Programmazione FPGA (4/12) PORTA LOGICA AND PORTA LOGICA OR parla_male parla_bene aiuta e_presente parole fatti vero_amico vero_amico <= parole AND fatti; parole <= parla_bene AND (not parla_male); fatti <= aiuta OR e_presente; segnali, non variabili GATE LEVEL CIRCUITO SINTETIZZATO
Programmazione FPGA (5/12) entity amico is port ( parla_male : in STD_LOGIC; parla_bene : in STD_LOGIC; aiuta : in STD_LOGIC; e_presente : in STD_LOGIC; vero_amico : out STD_LOGIC_VECTOR(2 downto 0); ) architecture amico_arch of amico is signal parole, fatti : STD_LOGIC; begin amico_vero <= “11” when (parla_male = '0' AND parla_bene = '1' AND aiuta = '1') else “10” when (parla_male = '0' AND parla_bene = '1' AND aiuta = '0') else “01” when (parla_male = '1' AND parla_bene = '1') else “00”; end amico_arch; RTL Level – componenti “intermedi” comparatori, sommatori, multiplexer,... I1 I2 EN I1
Programmazione FPGA (6/12) entity esempio is port ( clk : in STD_LOGIC; contatore_out : out STD_LOGIC_VECTOR(2 downto 0); ) architecture esempio_arch of esempio is signal contatore : STD_LOGIC_VECTOR(2 downto 0); begin contatore_out <= contatore; ESEMPIO : process(clk) begin if clk'event AND clk = '1' then contatore <= contatore + '1'; end if; end amico_arch; RTL Level – sequential vs concurrent caso sequenziale: le istruzioni sono eseguite nell'ordine stabilito
Programmazione FPGA (7/12) Tipi di dato Diversi tipi di dato disponibili nativamente Librerie di tipi/operazioni standard e non Possibilità di definire i propri USARE STD_LOGIC (interfaccia) Scelta naturale per la codifica di un circuito Evita traduzioni/interpretazioni non volute Ha tutti gli stati che caratterizzano un circuito (1,0,Z,...) Si evitano conversioni durante le simulazioni (connessioni tra moduli con porte diverse)
Programmazione FPGA (8/12) entity esempio is port ( clk : in STD_LOGIC; contatore_out : out STD_LOGIC_VECTOR(2 downto 0) := (others => '0'); valido : out STD_LOGIC; ) architecture esempio_arch of esempio is signal contatore : STD_LOGIC_VECTOR(1 downto 0); begin contatore_out <= contatore; ESEMPIO : process(clk) begin if clk'event AND clk = '1' then contatore <= contatore + '1'; valido <= '0'; if contatore = “00” then valido <= '1'; end if; end amico_arch; Uso del tipo STD_LOGIC(_VECTOR) caso sequenziale: le istruzioni sono eseguite nell'ordine stabilito
Programmazione FPGA (9/12) ESEMPIO : process(clk) variable contatore_svelto : STD_LOGIC_VECTOR(1 downto 0) := (others => '0'); begin if clk'event AND clk = '1' then contatore <= contatore + '1'; contatore_svelto := contatore_svelto + '1'; valido <= '0'; if contatore = “00” OR contatore_svelto = “00” then valido <= '1'; end if; end amico_arch; Non solo “segnali”, anche variabili dichiarate con visibilità interna al processo si aggiornano immediatamente, non alla fine del processo clk valido
Programmazione FPGA (10/12) Somma_e_Moltiplica Architettura modulare Un sistema è composto da vari componenti sinergici, a vari livelli. Tale approccio gerarchico viene preservato Una entity può contenere altre “entity”, che prendono il nome di component Si riporta la loro interfaccia e si “mappano” ingressi ed uscite del modulo a gerarchia inferiore a segnali interni o interfaccia stessa del modulo a gerarchia maggiore Sommatore Moltiplicatore risultato = (a+b)*b a b b sum = a + b risultato
Programmazione FPGA (11/12) MSF (Macchine a stati finiti) La programmazione di realtà più complesse richiede l'implementazione di MSF Esempio: 1) START: resetta i registri 2) STATE1: se dv = '1', invia input corrente al sommatore, asserendo sum_dv = '1'. Passa a STATE2. Se non c'è input (dv='0') passa a STATEN e termina 3) STATE2: quando sum_rdy ='1', campiona l'output e torna allo STATE1
Programmazione FPGA (12/12) Flusso progettazione FPGA NOI SIAMO QUI! Prima: constraints (UCF)
Programmazione FPGA in Ambiente libero (1/4) E' possibile progettare e programmare FPGA in ambiente libero? Si! –ISE versione linux (provato WebPack) –Driver USB/JTAG resi compatibili E' possibile usare strumenti OS per completare il flusso FPGA? –La mia analisi dice di no al momento
Programmazione FPGA in Ambiente libero (2/4) Su cosa si può contare su certezza al momento dal mondo OS? OpenCores: design and publish core designs under a license for hardware modeled on the Lesser General Public License (LGPL) for software –Disponibilità di moduli VHDL (Core) open source di qualunque tipo. –Progetti di software di supporto allo sviluppo. –
Programmazione FPGA in Ambiente libero (3/4) “Open source” per l'Hardware Obiezione: l'hardware non ha costi nulli di distribuzione, deve essere “costruito” Ogni hw è costruito a partire da un progetto IP (Intellectual property): unità riutilizzabile di logica, layout di un progetto chip, etc. Gli IP sono moduli HDL. Le licenze open source per l'hardware non sono ancora consolidate (si opera su “costosi” brevetti). Es: LGPL. Curiosità: Open Source Bank Letture: Jeremy Bennett, CEO, Embecosm
Programmazione FPGA in Ambiente libero (4/4) Per la gestione di un progetto hardware, ISE al momento non ha avversari OS. Anche i tool con gli algoritmi delle diverse fasi del flusso non hanno un alter ego OS di livello Anche se rimarchiamo il fatto che ISE sia un software proprietario, esiste una versione (gratuita) per linux
Programmazione FPGA in Ambiente libero (1/)
Flusso Design FPGA (2)
Programmazione FPGA in Ambiente libero (1/)
Alessio Rugo Farthan srl Domande E Risposte