ALU 74181 Pin Descrizione !A0 - !A3 Operand inputs (active LOW) !B0 - !B3 Operand inputs (active LOW) S0 - S3 Function Select inputs M Mode Control input Cn Carry input !F0 - !F3 Function outputs (active LOW) A=B Comparator output !G Carry Generate output (active LOW) !P Carry Propagate output (active LOW) Cn+4 Carry Output Descrizione - Mode La ALU 74181 è un circuito in grado di eseguire 16 operazioni logiche e 16 operazioni aritmetiche (con o senza carry input): • M = ‘1’ i carry interni sono disabilitati e vengono eseguite le operazioni logiche di tabella • M = ‘0’ i carry interni sono abilitati e vengono eseguite le operazioni aritmetiche di tabella; inoltre si distinguono i seguenti casi: o Cn = ‘0’ il carry-in è inibito o Cn = ‘1’ il carry-in è abilitato Descrizione - Carry In modalità «aritmetica» la ALU fornisce tre carry di uscita: • Cn+4 è il classico ripple carry di uscita, calcolato in seguito all’esecuzione dell’operazione. • !P e !G sono due look-ahead carry che vengono calcolati da una logica indipendente a quella che esegue l’operazione richiesta: o !P indica che l’operazione propaga il carry-in all’esterno o !G indica che l’operazione genera un carry-out N.B. !P e !G non sono affetti dal carry in e vengono utilizzati da un’eventuale CLA (74182) nel caso si vogliano impiegare più ALU (74181) per operazioni su un maggior numero di bit Descrizione - Note generali A=B, in modalità sottrazione, indica l’equivalenza logica tra i due operandi: assume valore ‘1’, quando !F(3 - 0) = ‘1111’. Il segnale po’ inoltre essere usato insieme a Cn+4 per indicare A < B oppure A > B. La ALU opera in logica negata per quanto riguarda gli operandi, la funzione d’uscita e i carry look-ahead, come indicato dalla tabella dei pin. Le operazioni aritmetiche sono da interpretare in complemento a 2. N.B. la sottrazione viene effettuata come addizione complementare (complemento a 1): ciò significa che per ottenere l’operazione «A – B» è necessario abilitare il carry in. Tabella delle funzioni Selezione Funzione S3 S2 S1 S0 Active LOW M = ‘1’ Funzioni Logiche M = ‘0’ - Funzioni Aritmetiche Cn = ‘0’ Cn = ‘1’ 0 0 0 0 F = !A F=A–1 F=A 0 0 0 1 F = A nand B F = (A and B) – 1 F = A and B 0 0 1 0 F = !A or B F = (A and !B) – 1 F = A and !B 0 0 1 1 F=1 F = - 1 complemento a 2 = «1111» F=0 0 1 0 0 F = A nor B F = A + (A or !B) F = A + (A or !B) + 1 0 1 0 1 F = !B F = (A and B) + (A or !B) F = (A and B) + (A or !B) + 1 0 1 1 0 F = A xnor B F=A–B–1 F=A–B 0 1 1 1 F = A or !B F = A or !B F = (A or !B) + 1 1 0 0 0 F = !A and B F = A + (A or B) F = A + (A or B) + 1 1 0 0 1 F = A xor B F=A+B F=A+B+1 1 0 1 0 F=B F = (A and !B) + (A or B) F = (A and !B) + (A or B) + 1 1 0 1 1 F = A or B F = A or B F = (A or B) + 1 1 1 0 0 F=0 F=A+A F=A+A+1 1 1 0 1 F = A and !B F = (A and B) + A F = (A and B) + A + 1 1 1 1 0 F = A and B F = (A and !B) + A F = (A and !B) + A + 1 1 1 1 1 F=A F=A F=A+1 N.B. i simboli «+» e «-» indicano operazioni aritmetiche VDHL - Introduzione N.B. A causa della lunghezza del sorgente, nelle slide seguenti verrà presentata soltanto la struttura «portante» che descrive la rete, tralasciando quelle parti «modulari» se si presentano ripetutamente all’interno del codice. La Architecture è costituita da un Process all’interno del quale vengono definite le variabili (associate ai pin) utilizzate all’interno degli Statements; il funzionamento della rete viene descritto con una struttura basata su costrutti if-the-elsif-else innestati: un primo costrutto discrimina la modalità di funzionamento; per M=‘0’ un secondo costrutto separa i casi con carry-in abilitato oppure no. Per ognuno di questi 3 casi vengono elencate, sempre mediante if-then-elsif-else, le 16 possibili funzioni. Il ripple carry viene valutato dalle stesse espressioni per la funzione d’uscita; al contrario i look-ahead carry vengono gestiti, per ogni operazione aritmetica, da Statements indipendenti. Il valore di A=B è invece valutato soltanto in caso di sottrazioni da un ulteriore Statement if-then-else, mentre in tutti gli altri casi è posto a ‘0’ di default. Simulazioni Di seguito vengono riportate le simulazioni della ALU: ogni possibile funzione viene testata sia in modalità Behavioral per valutare il corretto funzionamento logico, sia in modalità Post-Route per evidenziare eventuali ritardi. Per tutti i test verranno utilizzati i seguenti valori per gli operandi: • A = «0101» • B = «1100» N.B. da ricordare che A, B, F e gli altri pin indicati nella tabella iniziale sono da valutare in logica negata(Active LOW). Ogni simulazione verifica le 16 funzioni previste in una determinata modalità operazionale: logica, aritmetica senza carry-in, aritmetica con carry-in. Simulazione Behavioral – M=‘1’ Simulazione Post-Route – M=‘1’ Simulazione Behavioral – M=‘0’, Cn=‘0’ Simulazione Post-Route – M=‘0’, Cn=‘0’ Simulazione Behavioral – M=‘0’, Cn=‘1’ Simulazione Post-Route – M=‘0’, Cn=‘1’ Analisi dei ritardi Come anticipato precedentemente, le simulazioni Post-Route evidenziano dei ritardi sulle uscite: • ‘AcB’ (‘A=B’) subisce un ritardo di 9 ns • ‘P’ e ‘G’ vengono ritardati di 10 ns • ‘F(3-0)’ presenta un ritardo che oscilla tra i 12 e 14 ns: in questo caso tale periodo si può considerare di «stabilizzazione» in quanto all’interno di esso la rete assume valori non predicibili causati da glitches. • ‘Cn4’ (‘Cn+4’) risulta contemporaneo ad ‘F(3-0)’, dunque ritardato anch’esso di 12-14 ns Tale andamento è giustificato dall’indipendenza di certi «blocchi» della rete: anche osservando il VHDL è possibile prevedere uno sfalsamento delle uscite in base alla complessità del codice che le gestisce.