Capitolo 10: Realizzazione di Macchine a Stati Finiti Reti Logiche Contemporary Logic Design Randy H. Katz University of California, Berkeley May 1993 Trasparenze tradotte da: Luciano Lavagno Universita’ di Udine Settembre 1998
Riassunto del capitolo • Strategie di realizzazione Logica a porte singole Progetto con contatori e ROM Logica programmabile: PAL FPGA: Altera, Actel, Xilinx
Strategie di realizzazione • Logica a porte singole E’ stata l’oggetto principale fino a questo punto • Logica MSI (p.es. contatori) • Logica strutturata (p.es. PLA/PAL, ROM) • Field Programmable Gate Array (FPGA) La funzione puo’ essere configurata “al volo” o sul campo Sia flipflop/registri, sia porte singole su uno stesso curcuito.
Strategie di realizzazione Progetto di FSM con logica strutturata Logica combinatoria Registri Schema a blocchi per macchina di Moore (o “Mealy sincrona”) Funzione Ingressi Uscite di uscita Funzione di Stato futuro Stato Realizzazione a ROM ROM Registri A0 D0 • Ingressi e stato presente sono gli indirizzi • Bit di dato della ROM sono uscite e stato futuro Ingressi Uscite An-1 Dk-1 An Dk An+m-1 Dk+m-1 Stato
Strategie di realizzazione Progetto a ROM Esempio: convertitore seriale da BCD ad eccesso-3 BCD Codice eccesso-3 0000 0011 0001 0100 0010 0101 0011 0110 0100 0111 0101 1000 0110 1001 0111 1010 1000 1011 1001 1100 Processo di conversione I bit sono presentati in modo seriale partendo col bit meno significativo Un ingresso X, un’uscita Z
Strategie di realizzazione Convertitore da BCD ad eccesso-3 Stato futuro Uscita Stato presente X=0 X=1 X=0 X=1 S0 S1 S2 1 Tabella delle transizioni S1 S3 S4 1 S2 S4 S4 1 S3 S5 S5 1 S4 S5 S6 1 S5 S0 S0 1 S6 S0 -- 1 -- Diagramma degli stati
Strategie di realizzazione Convertitore da BCD ad eccesso-3 Realizzazione a ROM X 1 Q2 Q1 Q0 D2 Z D1 D0 Indirizzo ROM Uscita ROM Realizzazione circuitale 74175 = 4 FF D attivi sul fronte di salita Tabella di verita’ (ingressi/uscite ROM) In progetti a ROM non serve considerare l’assegnazione degli stati!!
Strategie di realizzazione Convertitore da BCD ad eccesso-3 LSB MSB Comportamento nel tempo per ingressi 0 0 0 0 (0) e 1 1 1 0 (7) 1 1 1 1 1 1 1 0 0 0 0 1 1 0 0 1 1 1 0 0 1 0 1 LSB LSB
Strategie di realizzazione Convertitore da BCD ad eccesso-3 Progetto a PLA Codiifca degli stati con NOVA 0 S0 S1 1 1 S0 S2 0 0 S1 S3 1 1 S1 S4 0 0 S2 S4 0 1 S2 S4 1 0 S3 S5 0 1 S3 S5 1 0 S4 S5 1 1 S4 S6 0 0 S5 S0 0 1 S5 S0 1 0 S6 S0 1 S0 = 000 S1 = 001 S2 = 011 S3 = 110 S4 = 100 S5 = 111 S6 = 101 Codifica degli stati derivata da NOVA Realizzazione con 9 termini prodotto File di ingresso di NOVA
Strategie di realizzazione Convertitore da BCD ad eccesso-3 .i 4 .o 4 .ilb x q2 q1 q0 .ob d2 d1 d0 z .p 16 0 000 001 1 1 000 011 0 0 001 110 1 1 001 100 0 0 011 100 0 1 011 100 1 0 110 111 0 1 110 111 1 0 100 111 1 1 100 101 0 0 111 000 0 1 111 000 1 0 101 000 1 1 101 --- - 0 010 --- - 1 010 --- - .e Ingresso di Espresso .i 4 .o 4 .ilb x q2 q1 q0 .ob d2 d1 d0 z .p 9 0001 0100 10-0 0100 01-0 0100 1-1- 0001 -0-1 1000 0-0- 0001 -1-0 1000 --10 0100 ---0 0010 .e Uscita di Espresso
Strategie di realizzazione Convertitore da BCD ad eccesso-3 D2 = Q2 • Q0 + Q2 • Q0 D1 = X • Q2 • Q1 • Q0 + X • Q2 • Q0 + X • Q2 • Q0 + Q1 • Q0 D0 = Q0 Z = X• Q1 + X • Q1
Strategie di realizzazione Convertitore da BCD ad eccesso-3 PAL 10H8: 10 ingressi, 8 uscite, 2 termini prodotto per porta OR D1 = D11 + D12 D11 = X • Q2 • Q1 • Q0 + X • Q2 • Q0 D12 = X • Q2 • Q0 + Q1 • Q0 0. Q2 • Q0 1. Q2 • Q0 8. X • Q2 • Q1 • Q0 9. X • Q2 • Q0 16. X • Q2 • Q0 17. Q1 • Q0 24. D11 25. D12 32. Q0 33. non usata 40. X • Q1 41. X • Q1
Strategie di realizzazione Convertitore da BCD ad eccesso-3
Strategie di realizzazione Architetture PAL avanzate Output enable controllato da ingresso o termine prodotto Architettura PAL sequenziale (con registri) Reazione con stato presente negato D2 = Q2 • Q0 + Q2 • Q0 D1 = X • Q2 • Q1 • Q0 + X • Q2 + X • Q0 + Q2 • Q0 + Q1 • Q0 D0 = Q0 Z = X • Q1 + X • Q1
Strategie di realizzazione Architetture PAL avanzate PAL XOR, con polarita’ di uscita programmabile Ingresso XOR puo’ essere: 1 (coprire gli 1) 0 (coprire gli 0) termine prodotto Vantaggio di PAL XOR: parita’ ed operazioni aritmetiche
Strategie di realizzazione Esempio di PAL XOR Esempio di PAL a registri
Strategie di realizzazione Specifica di PAL in Abel PAL P10H8 module bcd2excess3 title 'BCD to Excess 3 Code Converter State Machine' u1 device 'p10h8'; "Input Pins X,Q2,Q1,Q0,D11i,D12i pin 1,2,3,4,5,6; "Output Pins D2,D11o,D12o,D1,D0,Z pin 19,18,17,16,15,14; INSTATE = [Q2, Q1, Q0]; S0 = [0, 0, 0]; S1 = [0, 0, 1]; S2 = [0, 1, 1]; S3 = [1, 1, 0]; S4 = [1, 0, 0]; S5 = [1, 1, 1]; S6 = [1, 0, 1]; equations D2 = (!Q2 & Q0) # (Q2 & !Q0); D1 = D11i # D12i; D11o = (!X & !Q2 & !Q1 & Q0) # (X & !Q2 & !Q0); D12o = (!X & Q2 & !Q0) # (Q1 & !Q0); D0 = !Q0; Z = (X & Q1) # (!X & !Q1); end bcd2excess3; Equazioni esplicite per funzioni di uscita partizionate
Strategie di realizzazione Specifica di PAL in Abel PAL P12H6 module bcd2excess3 title 'BCD to Excess 3 Code Converter State Machine' u1 device 'p12h6'; "Input Pins X, Q2, Q1, Q0 pin 1, 2, 3, 4; "Output Pins D2, D1, D0, Z pin 17, 18, 16, 15; INSTATE = [Q2, Q1, Q0]; OUTSTATE = [D2, D1, D0]; S0in = [0, 0, 0]; S0out = [0, 0, 0]; S1in = [0, 0, 1]; S1out = [0, 0, 1]; S2in = [0, 1, 1]; S2out = [0, 1, 1]; S3in = [1, 1, 0]; S3out = [1, 1, 0]; S4in = [1, 0, 0]; S4out = [1, 0, 0]; S5in = [1, 1, 1]; S5out = [1, 1, 1]; S6in = [1, 0, 1]; S6out = [1, 0, 1]; equations D2 = (!Q2 & Q0) # (Q2 & !Q0); D1 = (!X & !Q2 & !Q1 & Q0) # (X & !Q2 & !Q0) # (!X & Q2 & !Q0) # (Q1 & !Q0); D0 = !Q0; Z = (X & Q1) # (!X & !Q1); end bcd2excess3; Equazioni piu’ semplici
Strategie di realizzazione Specifica di PAL in Abel PAL P16R4 module bcd2excess3 title 'BCD to Excess 3 Code Converter' u1 device 'p16r4'; "Input Pins Clk, Reset, X, !OE pin 1, 2, 3, 11; "Output Pins D2, D1, D0, Z pin 14, 15, 16, 13; SREG = [D2, D1, D0]; S0 = [0, 0, 0]; S1 = [0, 0, 1]; S2 = [0, 1, 1]; S3 = [1, 1, 0]; S4 = [1, 0, 0]; S5 = [1, 1, 1]; S6 = [1, 0, 1]; state_diagram SREG state S0: if Reset then S0 else if X then S2 with Z = 0 else S1 with Z = 1 state S1: if Reset then S0 else if X then S4 with Z = 0 else S3 with Z = 1 state S2: if Reset then S0 else if X then S4 with Z = 1 else S4 with Z = 0 state S3: if Reset then S0 else if X then S5 with Z = 1 else S5 with Z = 0 state S4: if Reset then S0 else if X then S6 with Z = 0 else S5 with Z = 1 state S5: if Reset then S0 else if X then S0 with Z = 1 else S0 with Z = 0 state S6: if Reset then S0 else if !X then S0 with Z = 1 end bcd2excess3; PAL con registri diagramma degli stati
Strategie di realizzazione Progetto di FSM con contatori Contatori sincroni: CLR, LD, CNT Quattro tipi di transizioni di stato: (1) allo stato 0 (CLR) (2) al prossimo stato in sequenza (CNT) (3) ad un qualsiasi altro stato (LD) (4) allo stesso stato Nessun CLR segnale n attivato CNT LD n+1 m E’ necessaria una codifica molto attenta per usare al meglio la sequenza di conteggio
Strategie di realizzazione Progetto di FSM con contatori Rivediamo il convertitore eccesso-3 Notate la natura “sequenziale” della codifica degli stati
Strategie di realizzazione Progetto di FSM con contatori Convertitore eccesso-3 Ingressi e Stato presente Stato futuro Uscite X 1 Q2 Q1 Q0 Q2+ Q1+ Q0+ Z CLR LD EN C B A Il segnale CLR domina su LD, che a sua volta domina CNT
Strategie di realizzazione Progetto di FSM con contatori Convertitore eccesso-3 .i 5 .o 7 .ilb res x q2 q1 q0 .ob z clr ld en c b a .p 17 1---- -0----- 00000 1111--- 00001 1111--- 00010 0111--- 00011 00----- 00100 0111--- 00101 110-011 00110 10----- 00111 ------- 01000 010-100 01001 010-101 01010 1111--- 01011 10----- 01100 1111--- 01101 0111--- 01110 ------- 01111 ------- .e Ingresso di Espresso .i 5 .o 7 .ilb res x q2 q1 q0 .ob z clr ld en c b a .p 10 0-001 0101101 -0-01 1000000 -11-0 1000000 0-0-0 0101100 -000- 1010000 -0--0 0010000 0-10- 0101011 --11- 1000000 -11-- 0010000 -1-1- 1010000 .e Uscita di Espresso
Strategie di realizzazione Progetto di FSM con contatori Schema del convertitore eccesso-3 Registro di uscita sincrono
Strategie di realizzazione Progetto di FSM con PLD complessi Dispositivi logici programmabili (Programmable Logic Device, PLD) PAL, PLA = 10 - 100 porte logiche equivalenti Matrici logiche programmabili (Field Programmable Gate Array, FPGA) • Famiglia MAX Altera • Matrice Logica Programmabile Actel (Programmable Logical Array) • Matrice Logica Programmabile Xilinx (Logical Cell Array, LCA) 100 - 10.000 porte logiche equivalenti!
Strategie di realizzazione Progetto di FSM con PLD complessi EPLD Altera (Erasable Programmable Logic Devices) Prospettiva “storica”: PAL: stessa tecnologia di PROM TTL (programmabili una sola volta tramite fusibili) EPLD: stessa tecnologia di EPROM cancellabili CMOS (cancellate con raggi Ultravioletti) Blocco base Altera: MACROCELL CLK MUX clock Matrice AND/OR 8 termini prodotto + MUX programmabili MUX pad Matr. Piedino I/O Q uscita AND Contr. invers. MUX Blocco logico sequenziale reaz. Polarita’ programmabile Reazione programmmabile
Strategie di realizzazione Progetto di FSM con PLD complessi Gli EPLD Altera contengono da 8 a 48 macrocelle indipendenti Programmazione clock/Output Enable usando bit di EPROM: Global Modo sincrono CLK Clk MUX 1 Flipflop controllato dal clock globale segnale locale usato come Output enable OE/Local CLK Q EPROM Cell Global CLK Clk Modo “asincrono” MUX 1 Flipflop controllato dal clock generato localmente OE/Local CLK Q EPROM Cell Logica sequenziale: puo’ essere FF D, FF T, attivo sul fronte di salita o di discesa; un termine prodotto realizza il reset
Strategie di realizzazione Progetto di FSM con PLD complessi Strutture AND-OR sono piuttosto limitate: non possono condividere termini prodotto tra macrocelle Soluzione Altera: Multiple Array Matrix (MAX) Connessione globale: Programmable Interconnect Array Logic Array Block (simili a macrocelle) EPM5128: 8 ingressi fissi 52 piedini I/O 8 LAB 16 Macrocelle/LAB 32 Expander/LAB
Strategie di realizzazione Progetto di FSM con PLD complessi Architettura di un LAB I/O Pad Macrocell I/O ARRAY Block I N I/O Pad P P I U A T S Expander Product Term ARRAY Termini prod. macrocella Termini prodotto dell’Expander condivisi tra tutte le macrocelle all’interno di un LAB Termini prod. expander
Strategie di realizzazione PAL P22V10 Puo’ avere molti termini prodotto per ogni uscita Registro, reazione ed Output Enable per ogni uscita
Strategie di realizzazione Progetto di FSM con PLD complessi Programmable Gate Array Actel Righe di blocchi logici programmabili + righe di interconnessione Buffer I/O, logica programm. e collaudo Tecnologia ad anti-fusibile: programmabile una sola volta Buffer I/O, logica programm. e collaudo Buffer I/O, logica programm. e collaudo Usa anti-fusibili per creare interconnessioni lunghe a partire da brevi segmenti Buffer I/O, logica programm. e collaudo Blocco logico Connessioni Blocchi logici combinatori con 8 ingressi ed 1 uscita FF creati da porte logiche con reazione
Strategie di realizzazione Blocco logico Actel (Actel Logic Module) Blocco logico base e’ un multiplexer 4:1 modificato SOA S0 S1 D0 2:1 MUX D1 1 2:1 MUX Y 1 D2 2:1 MUX D3 1 SOB R "0" Esempio: realizzazione di un latch R-S Q+ = R’ 0 + R (S’ 1 + S Q) = = R S’ + R S Q = = R S’ + R Q = = (R + (S + Q)’)’ 2:1 MUX "0" 1 2:1 MUX Q 1 "1" 2:1 MUX 1 S
Strategie di realizzazione Connessione Actel Blocco logico Pista orizzontale Anti-fusibile Pista verticale Schema di interconnessione
Strategie di realizzazione Esempio di interconnessione Actel Blocco logico Ingresso Blocco logico Uscita Blocco logico Ingresso Servono “deviazioni” per girare intorno ad una pista gia’ usata Minimizzare il numero di deviazioni per connessioni a ritardo piu’ critico (clock, reti a molti livelli) Bastano 2 - 3 segmenti per la maggior parte delle connessioni
Strategie di realizzazione Progetto di FSM con PLD complessi Matrici logiche Xilinx (Xilinx Logic Cell Array) Tecnologia RAM statica CMOS: programmabile “al volo”! Tutti i bit di programmazione collegati come registro a scorrimento Programmazione fa scorrere una stringa di 1 e 0 all’accensione IOB IOB IOB IOB IOB Architettura generale del circuito: • blocchi logici (CLB) • blocchi di I/O (IOB) • canali di interconnessione CLB CLB IOB canali di interconnessione IOB CLB CLB IOB
Strategie di realizzazione Progetto di FSM con PLD complessi Architettura LCA Xilinx: blocco di ingresso/uscita (IOB) Ingressi: - abilitazione tri-state uscita (OE), - dato in uscita, - clock Uscita: dato in ingresso FF interni per ingresso ed uscita Uscite lente/veloci: tempo di salita di 30 ns o 5 ns Pull-up interno per IOB non utilizzati
Strategie di realizzazione Progetto di FSM con PLD complessi Architettura LCA Xilinx: blocco logico configurabile (CLB) 2 flipflop Qualsiasi funzione con fino a 5 variabili Reset globale Clock e abilitazione Ingresso esterno ai flipflop (DIN) Reset DIN Mux D RD Q CE Mux Q1 X F A B Generatore C di funzioni D combinatorie E G Q2 Mux Y Mux D RD Q Clock Mux CE Clock Enable
Strategie di realizzazione Progetto di FSM con PLD complessi Architettura LCA Xilinx: generatore di funzioni del CLB Q1 A Q1 B Mux Funzione A F F C Mux di 4 B Mux variabili Funzione D Mux C Mux di 5 E variabili D Q2 G E Q1 Q2 A Qualsiasi funzione di 5 variabili B Mux Funzione G C Mux di 4 variabili D Mux E Q2 Due funzioni indipendenti di 4 variabili ciascuna
Strategie di realizzazione Progetto di FSM con PLD complessi Architettura LCA Xilinx: generatore di funzioni del CLB Q1 A B Mux Funzione C Mux di 4 variabili E D Alcune funzioni (limitate) di 6 variabili F Q2 Mux Q1 G A B Mux Funzione C Mux di 4 variabili D Q2
Strategie di realizzazione Progetto di FSM con PLD complessi Esempi di uso di Xilinx Generatore di parita’ a 5 bit Realizzato con 1 CLB: F = A xor B xor C xor D xor E (non e’ lo stesso generatore visto nel capitolo 8!) Comparatore a 2 bit: A B = C D o A B > C D Realizzato con 1 CLB: (=) F = A C + A B D + B C D (>) G = A B C D + A B C D + A B C D + A B C D
Strategie di realizzazione Progetto di FSM con PLD complessi Esempi di uso di Xilinx Funzione “maggioranza ad n ingressi”: uscita ad 1 se n/2 (o piu’) ingressi ad 1 CLB Maggioranza a 7 ingressi CLB Maggioranza a 5 ingressi Funzione “parita’ ad n ingressi”: 5 ingressi per CLB => 2 livelli di CLB forniscono fino a 25 ingressi! CLB Parita’ a 9 ingressi
Strategie di realizzazione Progetto di FSM con PLD complessi Esempi di uso di Xilinx Sommatore binario a 4 ingressi Sommatore a riporto: 4 ritardi di CLB per riporto finale in uscita 2 sommatori a 2 bit (3 CLB ciascuno) danno solo 2 ritardi di CLB per riporto finale in uscita!!
Strategie di realizzazione Progetto di FSM con PLD complessi Architettura LCA Xilinx Connessioni dirette Interconnessione: DI CE A DI CE A B X B X C CLB0 C CLB1 K Y K (1) Connessione diretta (2) Connessione con linee lunghe globali (3) Connessione con linee lunghe verticali ed orizzontali (4) Connessione con matrice Y E D R E D R Linee lunghe orizzontali Matrice conness. Linee lunghe orizzontali DI CE A DI CE A B X B X C CLB2 C CLB3 K Y K Y E D R E D R Linee lunghe Linea lunga verticali globale
Strategie di realizzazione Progetto di FSM con PLD complessi Architettura LCA Xilinx Realizzazione FSM conversione da BCD ad eccesso-3 Q2+ = Q2 • Q0 + Q2 • Q0 Q1+ = X • Q2 • Q1 • Q0 + X • Q2 • Q0 + X • Q2 • Q0 + Q1 • Q0 Q0+ = Q0 Z = Z • Q1 + X • Q1 Nessuna funzione richiede piu’ di 4 variabili 4 FF richiedono 2 CLB Macchina di Moore (Mealy sincrona) Uso del reset globale Mettere Q2+, Q0+ nel primo CLB Q1, Z nel secondo CLB massimizzare l’uso di connessioni dirette e tramite matrice
Strategie di realizzazione Progetto di FSM con PLD complessi Architettura LCA Xilinx Realizzazione FSM conversione da BCD ad eccesso-3
Esempio di progetto Controllore di semaforo Decomposizione in sotto-blocchi piu’ semplici • FSM di controllo: funzioni di stato futuro e di uscita registro di stato • Contatore per intervallo lungo ed intervallo corto • Sensore dei veicoli • Decodificatore di uscita e luci
Controllore di semaforo Esempio di progetto Controllore di semaforo Schema a blocchi Reset Contatore Clk intervallo lungo e corto TS TL ST FSM controllo F Reset Logica 2 Segnali 3 Decodifica C (asinc.) Sensore stato futuro 2 luci luci veicoli ed uscita C (sinc.) codificati 3 Clk 2 H Registro 2 di stato
Esempio di progetto Controllore di semaforo Logica dei sotto-blocchi Decodificatore delle luci Sensore veicoli (de-rimbalzatore + sincronizzatore) Temporizzatore degli intervalli (contatore)
Esempio di progetto Controllore di semaforo Logica di stato futuro della FSM di controllo Codifica degli stati: HG = 00, HY = 10, FG = 01, FY = 11 P1 = C TL Q1 + TS Q1 Q0 + C Q1 Q0 + TS Q1 Q0 P0 = TS Q1 Q0 + Q1 Q0 + TS Q1 Q0 ST = C TL Q1 + C Q1 Q0 + TS Q1 Q0 + TS Q1 Q0 HL[1] = TS Q1 Q0 + Q1 Q0 + TS Q1 Q0 HL[0] = TS Q1 Q0 + TS Q1 Q0 FL[1] = Q0 FL[0] = TS Q1 Q0 + TS Q1 Q0 Realizzazione a PAL/PLA: servono 5 ingressi, 7 uscite, 8 termini prodotto PAL 22V10: 11 ingressi, 10 I/O programmabili, da 8 a 14 termini per ogni OR Realizzazione a ROM: ROM da 32 parole di 8 bit (256 bit) Reset potrebbe raddoppiare la ROM...
Esempio di progetto Controllore di semaforo Logica di stato futuro della FSM di controllo Realizzazione a contatore: 2 MUX 4:1 Realizzazione TTL con MUX e contatore Si puo’ ridurre il numero di integrati con un MUX 8:1? ST = abilitazione al conteggio per entrambi i contatori (controllo e intervalli)
Esempio di progetto Controllore di semaforo Logica di uscita della FSM di controllo Realizzazione a contatore: Possiamo evitare il costo delle funzioni di uscita? Perche’ non decodificare le uscite direttamente dallo stato presente? ST e’ un’uscita di Mealy sincrona Le luci sono uscite di Moore
Esempio di progetto Controllore di semaforo Realizzazione con LCA Xilinx Realizzazione a partire dalle equazioni gia’ derivate: Nessuna delle funzioni ha piu’ di 5 variabili P1, ST hanno 5 variabili (1 CLB ciascuna) P0, HL1, HL0, FL0 hanno 3 variabili (1/2 CLB ciascuna) FL1 ha 1 variabile (1/2 CLB) 4.5 CLB in totale!
Esempio di progetto Controllore di semaforo Realizzazione con LCA Xilinx Piazzare le funzioni in modo da rendere massimo l’uso di connessioni dirette
Esempio di progetto Controllore di semaforo Realizzazione con LCA Xilinx Realizzazione con contatore e multiplexer: MUX 4:1 MUX, contatore a 2 bit MUX: 6 variabili (4 dati, 2 controllo) ma questa e’ esattamente una delle funzioni di 6 variabili che possono essere realizzate con 1 CLB! Serve un secondo CLB per realizzare TL • C e TL + C' Notate che ST/Cnt e’ in realta’ funzione di TL, C, TS, Q1, Q0: basta 1 CLB per realizzare questa funzione di 5 variabili! Contatore a 2 bit: 2 funzioni di 3 variabili (2 bit di stato + Cnt) anche qui basta 1 CLB Decodificatori delle luci: funzioni di 2 variabili (Q1, Q0) 2 per CLB, richiedono 3 CLB per le 6 luci Totale: 5 CLB
Riassunto del capitolo • Ottimizzazione e realizzazione di FSM Minimizzazione degli stati: corrispondenza tra righe e tabella delle implicazioni Codifica degli stati: euristiche e programmi CAD • Problemi di realizzazione Scelta dei flipflop Realizzazioni con logica strutturata basati su ROM basati su PLA/PAL basati su contatori PLD piu’ complessi: Altera, Actel, Xilinx