giovedì 23 giugno 2011

Laboratorio: hardware liquido!

Non è certo l'ultima novità, ma è una delle innovazioni di maggior successo nel campo dei circuiti integrati. Parliamo, oggi, dei Circuiti Logici Programmabili.


Field Programmable Gate Array (FPGA) oppure Complex Programmable Logic Device (CPLD), sono i nomi che più spesso contraddistinguono tali componenti.

Vediamo di cosa si tratta, io propongo alcune definizioni:
  • circuiti elettronici che non hanno una specifica funzione, ma che sarà l'utente a fornirgliela
  • sistemi hardware la cui metodologia di sviluppo è esattamente quella del software
  • circuiti che possono essere ripetutamente aggiornati durante il ciclo di vita del prodotto, riducendo i rischi di obsolescenza
  • circuiti che posso essere riparati (entro certi limiti) mediante una semplice riconfigurazione, utilizzando risorse "spare"
  • circuiti che possono contenere al proprio interno un intero sistema di elaborazione e che aggiorneremo, nel tempo, così come facciamo con le applicazioni per il nostro PC.

Quest'ultima definizione, nota anche come System on Programmable Chip (SoPC), significa che possiamo progettare un intero elaboratore all'interno di un FPGA, utilizzando componenti software (Core o Intellectual Property) di nostra concezione o di terze parti.

Ma allora esisterà anche l'hardware Open Source?
Certo! Esistono moltissimi progetti di sistema con schemi di licenza "open" tipo GNU e LGPL, basta guardare il sito http://opencores.org/ e scegliere il progetto che meglio si addice al nostre necessità (es. ci sono numerose CPU e non mancano UART, Timer, I2C, SPI, ecc.).

Ma come si usano questi circuiti programmabili?
Vi mostro un banale esempio ...l'importante è il concetto!

Supponiamo di voler realizzare un contatore binario e di non voler acquistare, cablare e provare un chip con questa specifica funzione. Bene, programmiamocelo dal nulla!
Così:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity counter is
    Port (
        clk : in std_logic;
        output : out std_logic_vector(1 downto 0)
    );
end counter;

architecture behavioral of counter is
    signal cnt : std_logic_vector(1 downto 0);
begin
    process(clk)
        begin
            if clk'event and clk='1' then
                cnt <= cnt + 1;
            end if;   
    end process;
    output <= cnt;
end behavioral;

In questo progetto (semplificato al massimo) ho utilizzato il linguaggio VHDL (VLSI Hardware Description Language) per codificare le funzionalità di un contatore binario a 2 bit.

Procediamo con la Simulazione, la Sintesi e l'Implementazione (passi simili alla compilazione, link e debug, di un normale software)...


...diamo una guardatina all'interno del chip...


...è quasi tutto vuoto, ma si possono vedere i fili, cioè le route ed i blocchi logici occupati dal nostro contatore e resta tantissimo spazio per aggiungere altre funzionalità.

Poi, versiamo il tutto all'interno del chip ....pardon, programmiamo il chip.


Ecco fatto!

Verifichiamo con l'oscilloscopio che il nostro contatore binario funzioni realmente...

(il bit 0 è la traccia in basso)
...Ok, funziona tutto!

Non mi resta che augurarvi: "buona programmazione dell'hardware".

Qui Pianeta Terra, a presto.

1 commento: