Calcolatori Elettronici
|
|
- Enrico Natali
- 7 anni fa
- Visualizzazioni
Transcript
1 UNIVERSITÀ DEGLI STUDI DI UDINE Facoltà di Ingegneria Corso di Laurea Specialistica in Ingegneria Gestionale dell Informazione Dipartimento di Ingegneria Elettrica, Gestionale e Meccanica Calcolatori Elettronici RELAZIONE DISPOSITIVO NFACTOR Prof. Mirko Loghi Giovanni Bernardis Anno Accademico 2010/2011
2 OGGETTO: Progettare un dispositivo che, preso come ingresso un numero naturale senza segno, restituisce in uscita il numero di fattori primi distinti in cui può essere scomposto. Per la risoluzione del problema saranno presentati quattro algoritmi per i quali è stato sviluppato il progetto completo (diagramma ASM, schema del datapath, codice VHDL) e con opportuni commenti si cercherà di spiegare al lettore le scelte fatte. SPECIFICHE: Il dispositivo, denominato NFACTOR, deve avere un ingresso dati A da 32 bit e un uscita dati Q. All attivarsi del segnale di ingresso START, il dispositivo riceve su A un numero intero senza segno, che chiameremo per semplicità N, da 32 bit. Il dispositivo deve determinare e fornire in uscita, sulla linea dati Q, il numero di fattori primi distinti (e diversi da 1) in cui può essere scomposto il numero N. Infine, il dispositivo deve segnalare che l uscita è valida e che si può procedere con una nuova elaborazione, alzando il segnale di uscita READY. Ovviamente il dispositivo in questione deve avere gli ingressi per il clock e il reset. Le condizioni N=0 e N=1 devono essere gestite restituendo come risultato il valore 0. Inoltre, si ha a disposizione un dispositivo DIVIDER, che usa l uscita DONE per segnalare di essere pronto e di avere un risultato valido; il quale legge i numeri ai suoi ingressi OP1 e OP2 da 32 bit e all attivarsi del segnale GO, esegue la divisione intera e fornisce il risultato sull uscita DIV e il resto su REMAIN. Anche questo dispositivo è dotato dei segnali per il clock e il reset. Sono richiesti il diagramma ASM (Algorithmic State Machine), lo schema a blocchi del datapath e il codice VHDL della control-unit, datapath e del top-level.
3 ALGORITMI: Prima di procedere con i dettagli risolutivi, si vuole presentare l idea di base utilizzata per la soluzione. Com è solito farsi, per scomporre un numero nei suoi fattori, lo si cerca di dividere prima per 2 fino a quando si ottiene un resto diverso da 0, poi si prova con il 3, e poi in modo iterativo con i successivi numeri primi fino a quando il dividendo è uguale a 1 e a quel punto l algoritmo termina. Ad esempio se vogliamo scomporre il 40, procederemo con: 40/2 = 20 20/2 = 10 10/2 = 5 5/2= 2 con resto di 1, quindi proviamo con il 3, 5/3 = 1 con resto di 2, proviamo ancora con il 5, 5/5 = 1, a questo punto abbiamo finito e troviamo che i due fattori sono 2 e 5, quindi abbiamo 2 fattori distinti come risultato. Dopo questa premessa, analizziamo ora i diversi algoritmi utilizzati che si differenziano tra loro solo per come viene calcolato il nuovo divisore necessario per la divisione. ALGORITMO 1: La prima implementazione consiste nell utilizzare come divisore tutti i numeri dal 2 in poi: si partirà dividendo per 2, poi per 3, poi 4, poi 5, ecc., si noti che gli incrementi tra un divisore e quello successivo sono di un unità. Questo metodo è quello di più facile realizzazione, richiede che non appena la divisione ha resto diverso da zero, il divisore venga incrementato di 1. In questo modo però si compiranno molte divisioni in cui il risultato sicuramente ha resto non nullo e che quindi si possono evitare; ad esempio se troviamo il 2 come fattore, tutti i numeri pari, maggiori di 2 saranno già stati presi in considerazione (poiché sono multipli di 2). ALGORITMO 2: Una seconda strategia è di partire sempre dal 2, il più piccolo numero primo, poi il 3 e poi avanzare con incrementi di 2, in modo da utilizzare i numeri dispari come fattori, quindi 5, 7, ecc. Questo algoritmo è sicuramente migliore del primo in quanto consente di risparmiare circa il 50% dei tentativi (i numeri pari) che sicuramente sarebbero andati a vuoto. ALGORITMO 3: Il terzo metodo prevede di utilizzare come divisori la sequenza: 2, 3, 5, 7, 11, 13, 17, 19, ecc. Per passare al fattore successivo si utilizza la seguente sequenza di operazioni: +1, +2, +2, +4, +2, +4, +2, +4, ecc. Si noti che dopo i primi due passi la sequenza è periodica, questo tornerà utile in fase di implementazione. ALGORITMO 4: L ultimo algoritmo è quello maggiormente ottimizzato ma anche il più complesso; la sequenza di incrementi è la seguente: +1, +2, +2, +4, +2, +4, +2, +4, +6, +2, +6, +4, +2, +4, +2, +4, +6, +2, +6, ecc. Anche qui, dopo le prime 3 operazioni si può notare una periodicità di 8 elementi. Per tutti i casi sopraesposti, si può ridurre notevolmente il tempo di elaborazione considerando che se il divisore in esame è maggiore di, il dividendo corrente è primo e quindi è inutile proseguire con la ricerca. Questo si può dimostrare considerando un generico numero il quale può essere espresso come: dove e sono due fattori distinti; ipotizzando inoltre che, intuitivamente ne consegue che. Ad esempio, se prendiamo, si ottiene: Com è noto, il 15 si scompone nei fattori 3 e 5, corrispondenti ai nostri generici e. Applicando uno dei precedenti algoritmi, tenteremo di dividere prima per 2, poi per 3 (ottenendo così il primo
4 fattore e 5 come dividendo a questo punto il divisore successivo sarebbe il 4, ed essendo maggiore di 3,873 possiamo terminare l elaborazione sapendo che il dividendo in esame è primo, come infatti risulta esserlo. Quindi, quando siamo alla ricerca dei vari fattori, in linea generale, possiamo terminare la ricerca quando il divisore è maggiore di Nel nostro specifico caso, operando con numeri da 32 bit, il massimo valore rappresentabile è, ne segue che ( ) ; il valore soglia risulterà essere e quindi questo accorgimento ci aiuterà a risparmiare tempo nel caso dovessimo scomporre numeri primi molto grandi. È comune a tutti gli algoritmi l accorgimento che si utilizza per attivare il dispositivo DIVIDER, necessario ad effettuare il calcolo della divisione intera. Nel diagramma ASM, in un primo stato si abilita il segnale GO, per far avviare la divisione; in un secondo stato, invece, solamente si attende che la divisione sia terminata e all alzarsi del segnale DONE si procede con le successive elaborazioni. Attivare il segnale GO e valutare la condizione DONE in un unico stato è un classico errore che si commette in queste situazioni; analizzando le forme d onda capiremo meglio questa problematica. Si osservi che quando ci troviamo nello stato CALC, il segnale GO viene subito attivato ma che anche il segnale DONE continua a rimanere alto, quindi se lo valutassimo in quell istante ci troveremmo nella condizione di poter proseguire con le elaborazioni successive ma staremmo commettendo un errore in quanto in realtà la divisione è ancora in corso e i risultati forniti alle uscite non sono validi. Infine si vuol far notare che il registro Q è di soli 4 bit: questo è sufficiente a rappresentare il massimo numero di fattori distinti possibili avendo in ingresso numeri da 32 bit. Il massimo numero rappresentabile con 32 bit è: Ora moltiplicando tra loro i 10 più piccoli numeri primi distinti si ottiene: Si nota quindi che usando i più piccoli numeri primi distinti disponibili, già con 10 fattori si è ben oltre il numero massimo rappresentabile con 32 bit. Per rappresentare il 10 in binario sono sufficienti 4 bit e da questo ne deriva la dimensione del registro Q.
5 PROGETTO 1: ASM: Nello stato INIT vengono inizializzati i registri ed è lo stato in cui ci si trova quando si è pronti per una nuova elaborazione e si ha un risultato pronto. All attivarsi del segnale START ha inizio l elaborazione vera e propria e si entra in un ciclo while che viene terminato quando il divisore è maggiore di o quando il dividendo è minore o uguale a 1. All interno del ciclo viene attivato il segnale GO per avviare la divisione, al termine della quale viene valutato il resto e in base a quest ultimo si decide se ripetere la divisione con lo stesso divisore o se incrementare il divisore; inoltre c è un contatore che viene incrementato ogni volta che viene individuato un nuovo fattore primo.
6 DATAPATH: Tutti i registri sono abilitati dal segnale LOAD, in X si trova il dividendo corrente, che all inizio è uguale al numero in ingresso e poi diventa il quoziente delle divisioni quando queste sono prive di resto; in OLD c è l ultimo fattore valido trovato, che confrontato con il divisore corrente, ci dà la possibilità di individuare i fattori distinti; Q è il contatore del numero di fattori primi distinti ed è direttamente collegato all uscita del dispositivo. Ad ogni registro è associato un multiplexer, necessario per le varie inizializzazioni. Troviamo diversi comparatori che ci forniscono i segnali di ingresso alla control unit. Inoltre è presente un sommatore il cui compito è di incrementare il divisore di 1, in modo da provare tutti i fattori dal 2 in poi. VHDL: La control unit presenta un processo che regola la macchina a stati derivante dallo schema ASM e la descrizione comportamentale dei segnali di uscita diretti al datapath, tra i quali si trovano i vari selettori per i multiplexer. Il codice completo di toplevel, ctrlunit e datapath si trova nell APPENDICE 1.
7 PROGETTO 2: ASM: In questo secondo caso il diagramma ASM è molto simile al primo, in quanto l algoritmo è quasi lo stesso; l unica differenza è dovuta all introduzione di una variabile chiamata SOM, che assumendo i valori 1 o 2 consente l utilizzo di tutti i fattori dispari dopo il 2 come divisore.
8 DATAPATH: Come appena accennato, rispetto a prima, si tratta di trovare un sistema per sommare al divisore prima 1 e poi sempre 2. Questo è stato fatto adottando un registro chiamato SOM, collegato al sommatore del divisore; tramite un multiplexer comandato da opportuni segnali della control unit, il registro SOM assume prima il valore numerico 1 e poi sempre 2 fino ad una nuova elaborazione. VHDL: La FSM della control unit è identica, sono solamente stati aggiunti i segnali di LOAD e di selezione per il registro SOM. Anche il datapath sostanzialmente è lo stesso. Il codice è disponibile nell APPENDICE 2.
9 PROGETTO 3: ASM: Questo algoritmo prevede una sequenza di incrementi che dopo i primi 2 passi diventa periodica con periodo 2. Per la gestione della parte periodica da quella non periodica, è stata introdotta una decision box la cui condizione dipende da un contatore, chiamato FLAG, che non fa altro che segnalare se si è nel primo, secondo o seguenti passi. I vari incrementi vengono generati dalla cascata di 2 multiplexer pilotati rispettivamente dai segnali FLAG e CNT, quindi il segnale OUT_MUX = FLAG, CNT. Il resto dell algoritmo è lo stesso e quindi non ci sono sostanziali differenze per quanto riguarda l ASM, a parte alcune inizializzazioni aggiunte allo stato INIT dovute all introduzione di nuove variabili precedentemente inesistenti.
10 DATAPATH: Viene modificata la parte che riguarda gli incrementi del divisore, ora al sommatore è collegato il segnale OUT_MUX, frutto della cascata di 2 multiplexer: MUX_1 e MUX_2; il primo è controllato dal segnale di selezione SEL_1, il quale è direttamente collegato al registro FLAG e quindi gestisce la parte periodica da quella non periodica, il secondo multiplexer interviene solo per la parte periodica degli incrementi e il segnale di controllo è collegato ad un registro a 1 bit (il periodo è 2) chiamato CNT. Gli incrementi del registro FLAG, in un primo momento erano gestiti da un sommatore e da un multiplexer usato per l inizializzazione; poi è stato eliminato il sommatore e tutto viene gestito tramite il multiplexer. Anche gli incrementi del contatore CNT, inizialmente utilizzavano un sommatore, ma essendo un registro a 1 bit, è sufficiente una porta NOT. VHDL: L aggiunta della decision box e dei registri FLAG e CNT porta ad un incremento dei segnali di controllo da e verso la control unit: ci sono sia i LOAD per i registri e i segnali SEL per i multiplexer a loro collegati, sia un bus a 2 bit con lo stato del FLAG, utile per la decision box che è stata appena introdotta. I dettagli del codice sono disponibili nell APPENDICE 3.
11 PROGETTO 4: ASM: L ultimo algoritmo, per com è strutturato, è abbastanza simile al precedente e quindi anche nell ASM non ci sono grosse differenze; c è sempre una sequenza di incrementi che dopo 3 passi diventa periodica e questo è stato gestito in maniera analoga a prima, con l uso delle variabili FLAG e CNT. Anche qui si utilizza il segnale OUT_MUX, che in funzione di FLAG e CNT fornisce in uscite la sequenza di incrementi che andrà a sommarsi al divisore.
12 DATAPATH: Come anticipato, gli incrementi del divisore vengono gestiti da 2 multiplexer in cascata e anche il FLAG è sempre gestito dal solo multiplexer, consentendoci quindi di risparmiare un sommatore. Il contatore CNT questa volta è di 3 bit (, come il periodo) e quindi abbiamo dovuto usare un sommatore: partendo dal valore binario 000, una volta raggiunto il valore binario 111, un ulteriore somma porterebbe a 1000 come risultato ma a causa dell overflow, nel registro viene scritto il valore 000 ; da qui nasce la ciclicità che permette di avere una periodicità con periodo 8. VHDL: E stato modificato il MUX_2, avendo ora 8 ingressi a 32 bit e un bus a 3 bit per la selezione, sempre collegato al CNT. Tutto il codice si trova nell APPENDICE 4.
13 SIMULAZIONI E RISULTATI: Una volta completati ctrlunit e datapath, si passa alla descrizione strutturale del top level dove i blocchi componenti vengono collegati tra loro. Successivamente è necessario compilare i file e correggere eventuali errori. Una volta terminata questa fase, utilizzando un apposito testbench, che non è altro che un dispositivo dotato di generatore di reset, generatore di clock e generatore di ingressi, si simula ed analizza il comportamento del DUT (device under test) che nel caso specifico è il top level per i vari algoritmi. Nel nostro caso il testbench ha un clock con semiperiodo al livello logico 0 pari a 6ns e semiperiodo a livello alto pari a 5ns; il reset invece è un impulso dalla durata di 29ns che viene attivato 1ns dopo l avvio della simulazione mentre i dati in ingresso corrispondono alla seguente sequenza di numeri: 15, 0, 25, 1, 40, 99, 24, 1764, e La simulazione termina quando tutti i numeri vengono elaborati e quindi una metrica per confrontare gli algoritmi è la valutazione del tempo totale impiegato. Vengono ora riportati i risultati delle simulazioni: Algoritmo1: ns Algoritmo2: ns Algoritmo3: ns Algoritmo4: ns Osservando i dati si nota un trend monotono decrescente a significare l efficacia progressiva degli algoritmi. Il secondo algoritmo impiega approssimativamente metà tempo rispetto al primo e questo è dovuto al fatto che vengono utilizzati circa la metà dei tentativi, i numeri dispari invece della prova di tutti i numeri come divisore. Nel terzo algoritmo, preso un intervallo di incrementi pari a +6, vengono effettuati solo 2 tentativi (visti gli incrementi +2 e +4) contro i 6 del primo metodo, infatti anche i dati sperimentali confermano che impiega circa un terzo del tempo. Con un ragionamento analogo, si scopre che il quarto algoritmo dovrebbe impiegare circa il di tempo rispetto al primo tentativo; 8 deriva dalla periodicità con periodo di 8 elementi mentre il 30 deriva dalla somma degli incrementi. Utilizzando i dati sperimentali otteniamo ; quindi con buona approssimazione possiamo affermare che ancora una volta i dati confermano l analisi.
14 APPENDICE 1: NFACTOR1.VHDL package nfactor_pkg is component nfactor is port ( CLK, RESET : in std_logic; -- data inputs A : in std_logic_vector(31 downto 0 -- data outputs Q : out std_logic_vector(3 downto 0 -- control signals START : in std_logic; -- status signals READY : out std_logic end component; end nfactor_pkg; use ieee.numeric_std.all; use work.divider_behav_pkg.all; entity nfactor is port ( CLK, RESET : in std_logic; -- data inputs A : in std_logic_vector(31 downto 0 -- data outputs Q : out std_logic_vector(3 downto 0 -- control signals START : in std_logic; -- status signals READY : out std_logic end nfactor; architecture struct of nfactor is component nfactor1_ctrlunit is port (start, CLK, RST: in std_logic; ready: out std_logic; load_x, load_d, load_o, load_q: out std_logic; sel_x, sel_d, sel_o, sel_q: out std_logic; div_go: out std_logic; Xmin1, DmagMAX, DeqO, restozero, div_done: in std_logic end component; component nfactor1_datapath is port (CLK, RST, load_x, load_d, load_o, load_q: in std_logic; sel_x, sel_d, sel_o, sel_q, div_go: in std_logic; Xmin1, DmagMAX, DeqO, restozero, div_done: out std_logic; A: in std_logic_vector (31 downto 0 Q: out std_logic_vector (3 downto 0) end component; signal load_x, load_d, load_o, load_q, sel_x, sel_d, sel_o, sel_q: std_logic;
15 signal Xmin1, DmagMAX, DeqO, restozero, div_go, div_done: std_logic; CU: nfactor1_ctrlunit port map (START, CLK, RESET, READY, load_x, load_d, load_o, load_q, sel_x, sel_d, sel_o, sel_q, div_go, Xmin1, DmagMAX, DeqO, restozero, div_done DP: nfactor1_datapath port map (CLK, RESET, load_x, load_d, load_o, load_q, sel_x, sel_d, sel_o, sel_q, div_go, Xmin1, DmagMAX, DeqO, restozero, div_done, A, Q end struct; NFACTOR1_CTRLUNIT.VHDL entity nfactor1_ctrlunit is port (start, CLK, RST: in std_logic; ready: out std_logic; load_x, load_d, load_o, load_q: out std_logic; sel_x, sel_d, sel_o, sel_q: out std_logic; div_go: out std_logic; Xmin1, DmagMAX, DeqO, restozero, div_done: in std_logic end nfactor1_ctrlunit; architecture arch of nfactor1_ctrlunit is type state is (INIT, WAIT_DIV, CALC, FIN signal NextState, PresState: state; update_state: process(clk, RST) if RST = '1' then PresState<=INIT; elsif CLK'event AND CLK='1' then PresState<=NextState; end process; FSM: process (presstate, start, Xmin1, DmagMAX, DeqO, restozero, div_done) case presstate is when INIT => if start = '0' then nextstate <= INIT; else nextstate <= FIN; when FIN => if DmagMAX = '1' then nextstate <= INIT; elsif Xmin1 = '1' then nextstate <= INIT; else nextstate <= CALC; when CALC => nextstate <= WAIT_DIV; when WAIT_DIV => if div_done = '0' then nextstate <= WAIT_DIV; else nextstate <= FIN; end case; end process;
16 ready <= '1' when presstate=init else '0'; load_x <= '1' when presstate=init or (presstate=wait_div and div_done='1' and restozero='1') else '0'; sel_x <= '0' when presstate=init else '1' when presstate=wait_div and div_done='1' and restozero='1'; load_d <= '1' when presstate=init or (presstate=wait_div and div_done='1' and restozero='0') else '0'; sel_d <= '0' when presstate=init else '1' when presstate=wait_div and div_done='1' and restozero='0'; load_o <= '1' when presstate=init or (presstate=wait_div and div_done='1' and restozero='1' and DeqO='0') else '0'; sel_o <= '0' when presstate=init else '1' when presstate=wait_div and div_done='1' and restozero='1' and DeqO='0'; load_q <= '1' when (presstate=init and start='1') or (presstate=fin and DmagMAX='1') or (presstate=wait_div and div_done='1' and restozero='1' and DeqO='0') else '0'; sel_q <= '0' when (presstate=init and start='1') else '1' when (presstate=fin and DmagMAX='1') or (presstate=wait_div and div_done='1' and restozero='1' and DeqO='0' div_go <= '1' when presstate=calc else '0'; end arch; NFACTOR1_DATAPATH.VHDL use ieee.numeric_std.all; use work.divider_behav_pkg.all; entity nfactor1_datapath is port (CLK, RST, load_x, load_d, load_o, load_q: in std_logic; sel_x, sel_d, sel_o, sel_q, div_go: in std_logic; Xmin1, DmagMAX, DeqO, restozero, div_done: out std_logic; A: in std_logic_vector (31 downto 0 Q: out std_logic_vector (3 downto 0) end nfactor1_datapath; architecture arch of nfactor1_datapath is signal x, d, o, mux_x, mux_d, mux_o, out_div, out_rem: std_logic_vector (31 downto 0 signal q_reg, mux_q: std_logic_vector (3 downto 0 DIV : divider port map ( CLK => CLK, RESET => RST, OP1 => X, OP2 => D, DIV => out_div, REMAIN => out_rem, START => div_go, READY => div_done x <= (others=>'0') when RST='1' else mux_x when CLK'event and CLK='1' and load_x='1'; d <= (others=>'0') when RST='1' else mux_d when CLK'event and CLK='1' and load_d='1'; o <= (others=>'0') when RST='1' else mux_o when CLK'event and CLK='1' and load_o='1'; q_reg <= (others=>'0') when RST='1' else mux_q when CLK'event and CLK='1' and load_q='1'; q <= q_reg; mux_x <= A when sel_x='0' else out_div; mux_d <= std_logic_vector(to_unsigned(2,32)) when sel_d='0' else std_logic_vector(unsigned(d)+1
17 mux_o <= (others=>'0') when sel_o='0' else d; mux_q <= (others=>'0') when sel_q='0' else std_logic_vector(unsigned(q_reg)+1 Xmin1 <= '1' when unsigned(x) <= 1 else '0'; DmagMAX <= '1' when unsigned(d) > 2**16 else '0'; DeqO <= '1' when unsigned(d) = unsigned(o) else '0'; restozero <= '1' when unsigned(out_rem) = 0 else '0'; end arch;
18 APPENDICE 2: NFACTOR2.VHDL package nfactor_pkg is component nfactor is port ( CLK, RESET : in std_logic; -- data inputs A : in std_logic_vector(31 downto 0 -- data outputs Q : out std_logic_vector(3 downto 0 -- control signals START : in std_logic; -- status signals READY : out std_logic end component; end nfactor_pkg; use ieee.numeric_std.all; use work.divider_behav_pkg.all; entity nfactor is port ( CLK, RESET : in std_logic; -- data inputs A : in std_logic_vector(31 downto 0 -- data outputs Q : out std_logic_vector(3 downto 0 -- control signals START : in std_logic; -- status signals READY : out std_logic end nfactor; architecture struct of nfactor is component nfactor2_ctrlunit is port (start, CLK, RST: in std_logic; ready: out std_logic; load_x, load_d, load_o, load_q, load_som: out std_logic; sel_x, sel_d, sel_o, sel_q, sel_som: out std_logic; div_go: out std_logic; Xmin1, DmagMAX, DeqO, restozero, div_done: in std_logic end component; component nfactor2_datapath is port (CLK, RST, load_x, load_d, load_o, load_q, load_som: in std_logic; sel_x, sel_d, sel_o, sel_q, sel_som, div_go: in std_logic; Xmin1, DmagMAX, DeqO, restozero, div_done: out std_logic; A: in std_logic_vector (31 downto 0 Q: out std_logic_vector (3 downto 0) end component;
19 signal load_x, load_d, load_o, load_q, load_som, sel_x, sel_d, sel_o, sel_q, sel_som: std_logic; signal Xmin1, DmagMAX, DeqO, restozero, div_go, div_done: std_logic; CU: nfactor2_ctrlunit port map (START, CLK, RESET, READY, load_x, load_d, load_o, load_q, load_som, sel_x, sel_d, sel_o, sel_q, sel_som, div_go, Xmin1, DmagMAX, DeqO, restozero, div_done DP: nfactor2_datapath port map (CLK, RESET, load_x, load_d, load_o, load_q, load_som, sel_x, sel_d, sel_o, sel_q, sel_som, div_go, Xmin1, DmagMAX, DeqO, restozero, div_done, A, Q end struct; NFACTOR2_CTRLUNIT.VHDL entity nfactor2_ctrlunit is port (start, CLK, RST: in std_logic; ready: out std_logic; load_x, load_d, load_o, load_q, load_som: out std_logic; sel_x, sel_d, sel_o, sel_q, sel_som: out std_logic; div_go: out std_logic; Xmin1, DmagMAX, DeqO, restozero, div_done: in std_logic end nfactor2_ctrlunit; architecture arch of nfactor2_ctrlunit is type state is (INIT, WAIT_DIV, CALC, FIN signal NextState, PresState: state; update_state: process(clk, RST) if RST = '1' then PresState<=INIT; elsif CLK'event AND CLK='1' then PresState<=NextState; end process; FSM: process (presstate, start, Xmin1, DmagMAX, DeqO, restozero, div_done) case presstate is when INIT => if start = '0' then nextstate <= INIT; else nextstate <= FIN; when FIN => if DmagMAX = '1' then nextstate <= INIT; elsif Xmin1 = '1' then nextstate <= INIT; else nextstate <= CALC; when CALC => nextstate <= WAIT_DIV; when WAIT_DIV => if div_done = '0' then nextstate <= WAIT_DIV; else nextstate <= FIN;
20 end case; end process; ready <= '1' when presstate=init else '0'; load_x <= '1' when presstate=init or (presstate=wait_div and div_done='1' and restozero='1') else '0'; sel_x <= '0' when presstate=init else '1' when presstate=wait_div and div_done='1' and restozero='1'; load_d <= '1' when presstate=init or (presstate=wait_div and div_done='1' and restozero='0') else '0'; sel_d <= '0' when presstate=init else '1' when presstate=wait_div and div_done='1' and restozero='0'; load_o <= '1' when presstate=init or (presstate=wait_div and div_done='1' and restozero='1' and DeqO='0') else '0'; sel_o <= '0' when presstate=init else '1' when presstate=wait_div and div_done='1' and restozero='1' and DeqO='0'; load_q <= '1' when (presstate=init and start='1') or (presstate=fin and DmagMAX='1') or (presstate=wait_div and div_done='1' and restozero='1' and DeqO='0') else '0'; sel_q <= '0' when (presstate=init and start='1') else '1' when (presstate=fin and DmagMAX='1') or (presstate=wait_div and div_done='1' and restozero='1' and DeqO='0' load_som <= '1' when presstate=init or (presstate=wait_div and div_done='1' and restozero='0') else '0'; sel_som <= '0' when presstate=init else '1' when presstate=wait_div and div_done='1' and restozero='0'; div_go <= '1' when presstate=calc else '0'; end arch; NFACTOR2_DATAPATH.VHDL use ieee.numeric_std.all; use work.divider_behav_pkg.all; entity nfactor2_datapath is port (CLK, RST, load_x, load_d, load_o, load_q, load_som: in std_logic; sel_x, sel_d, sel_o, sel_q, sel_som, div_go: in std_logic; Xmin1, DmagMAX, DeqO, restozero, div_done: out std_logic; A: in std_logic_vector (31 downto 0 Q: out std_logic_vector (3 downto 0) end nfactor2_datapath; architecture arch of nfactor2_datapath is signal x, d, o, som, mux_x, mux_d, mux_o, mux_som, out_div, out_rem: std_logic_vector (31 downto 0 signal q_reg, mux_q: std_logic_vector (3 downto 0 DIV : divider port map ( CLK => CLK, RESET => RST, OP1 => X, OP2 => D, DIV => out_div, REMAIN => out_rem, START => div_go, READY => div_done x <= (others=>'0') when RST='1' else mux_x when CLK'event and CLK='1' and load_x='1'; d <= (others=>'0') when RST='1' else mux_d when CLK'event and CLK='1' and load_d='1'; o <= (others=>'0') when RST='1' else mux_o when CLK'event and CLK='1' and load_o='1';
21 som <= (others=>'0') when RST='1' else mux_som when CLK'event and CLK='1' and load_som='1'; q_reg <= (others=>'0') when RST='1' else mux_q when CLK'event and CLK='1' and load_q='1'; q <= q_reg; mux_x <= A when sel_x='0' else out_div; mux_d <= std_logic_vector(to_unsigned(2,32)) when sel_d='0' else std_logic_vector(unsigned(d)+unsigned(som) mux_o <= (others=>'0') when sel_o='0' else d; mux_q <= (others=>'0') when sel_q='0' else std_logic_vector(unsigned(q_reg)+1 mux_som <= std_logic_vector(to_unsigned(1,32)) when sel_som='0' else std_logic_vector(to_unsigned(2,32) Xmin1 <= '1' when unsigned(x) <= 1 else '0'; DmagMAX <= '1' when unsigned(d) > 2**16 else '0'; DeqO <= '1' when unsigned(d) = unsigned(o) else '0'; restozero <= '1' when unsigned(out_rem) = 0 else '0'; end arch;
22 APPENDICE 3: NFACTOR3.VHDL package nfactor_pkg is component nfactor is port ( CLK, RESET : in std_logic; -- data inputs A : in std_logic_vector(31 downto 0 -- data outputs Q : out std_logic_vector(3 downto 0 -- control signals START : in std_logic; -- status signals READY : out std_logic end component; end nfactor_pkg; use ieee.numeric_std.all; use work.divider_behav_pkg.all; entity nfactor is port ( CLK, RESET : in std_logic; -- data inputs A : in std_logic_vector(31 downto 0 -- data outputs Q : out std_logic_vector(3 downto 0 -- control signals START : in std_logic; -- status signals READY : out std_logic end nfactor; architecture struct of nfactor is component nfactor3_ctrlunit is port (start, CLK, RST: in std_logic; ready: out std_logic; load_x, load_d, load_o, load_q, load_flag, load_cnt: out std_logic; sel_x, sel_d, sel_o, sel_q, sel_cnt: out std_logic; flag: in std_logic_vector (1 downto 0 sel_flag: out std_logic_vector (1 downto 0 div_go: out std_logic; Xmin1, DmagMAX, DeqO, restozero, div_done: in std_logic end component; component nfactor3_datapath is port (CLK, RST, load_x, load_d, load_o, load_q, load_flag, load_cnt: in std_logic; sel_x, sel_d, sel_o, sel_q, sel_cnt, div_go: in std_logic; Xmin1, DmagMAX, DeqO, restozero, div_done: out std_logic; sel_flag: in std_logic_vector (1 downto 0
23 flag: out std_logic_vector (1 downto 0 A: in std_logic_vector (31 downto 0 Q: out std_logic_vector (3 downto 0) end component; signal load_x, load_d, load_o, load_q, load_flag, load_cnt: std_logic; signal sel_x, sel_d, sel_o, sel_q, sel_cnt: std_logic; signal flag, sel_flag: std_logic_vector (1 downto 0 signal Xmin1, DmagMAX, DeqO, restozero, div_go, div_done: std_logic; CU: nfactor3_ctrlunit port map (START, CLK, RESET, READY, load_x, load_d, load_o, load_q, load_flag, load_cnt, sel_x, sel_d, sel_o, sel_q, sel_cnt, flag, sel_flag, div_go, Xmin1, DmagMAX, DeqO, restozero, div_done DP: nfactor3_datapath port map (CLK, RESET, load_x, load_d, load_o, load_q, load_flag, load_cnt, sel_x, sel_d, sel_o, sel_q, sel_cnt, div_go, Xmin1, DmagMAX, DeqO, restozero, div_done, sel_flag, flag, A, Q end struct; NFACTOR3_CTRLUNIT.VHDL use ieee.numeric_std.all; entity nfactor3_ctrlunit is port (start, CLK, RST: in std_logic; ready: out std_logic; load_x, load_d, load_o, load_q, load_flag, load_cnt: out std_logic; sel_x, sel_d, sel_o, sel_q, sel_cnt: out std_logic; flag: in std_logic_vector (1 downto 0 sel_flag: out std_logic_vector (1 downto 0 div_go: out std_logic; Xmin1, DmagMAX, DeqO, restozero, div_done: in std_logic end nfactor3_ctrlunit; architecture arch of nfactor3_ctrlunit is type state is (INIT, WAIT_DIV, CALC, FIN signal NextState, PresState: state; update_state: process(clk, RST) if RST = '1' then PresState<=INIT; elsif CLK'event AND CLK='1' then PresState<=NextState; end process; FSM: process (presstate, start, Xmin1, DmagMAX, DeqO, restozero, div_done) case presstate is when INIT => if start = '0' then nextstate <= INIT; else nextstate <= FIN; when FIN =>
24 if DmagMAX = '1' then nextstate <= INIT; elsif Xmin1 = '1' then nextstate <= INIT; else nextstate <= CALC; when CALC => nextstate <= WAIT_DIV; when WAIT_DIV => if div_done = '0' then nextstate <= WAIT_DIV; else nextstate <= FIN; end case; end process; ready <= '1' when presstate=init else '0'; load_x <= '1' when presstate=init or (presstate=wait_div and div_done='1' and restozero='1') else '0'; sel_x <= '0' when presstate=init else '1' when presstate=wait_div and div_done='1' and restozero='1'; load_d <= '1' when presstate=init or (presstate=wait_div and div_done='1' and restozero='0') else '0'; sel_d <= '0' when presstate=init else '1' when presstate=wait_div and div_done='1' and restozero='0'; load_o <= '1' when presstate=init or (presstate=wait_div and div_done='1' and restozero='1' and DeqO='0') else '0'; sel_o <= '0' when presstate=init else '1' when presstate=wait_div and div_done='1' and restozero='1' and DeqO='0'; load_q <= '1' when (presstate=init and start='1') or (presstate=fin and DmagMAX='1') or (presstate=wait_div and div_done='1' and restozero='1' and DeqO='0') else '0'; sel_q <= '0' when (presstate=init and start='1') else '1' when (presstate=fin and DmagMAX='1') or (presstate=wait_div and div_done='1' and restozero='1' and DeqO='0' load_flag <= '1' when presstate=init or (presstate=wait_div and div_done='1' and restozero='0' and unsigned(flag)<=1) else '0'; sel_flag <= "00" when presstate=init else "01" when presstate=wait_div and div_done='1' and restozero='0' and flag="00" else "10" when presstate=wait_div and div_done='1' and restozero='0' and flag="01"; load_cnt <= '1' when presstate=init or (presstate=wait_div and div_done='1' and restozero='0' and flag="10") else '0'; sel_cnt <= '0' when presstate=init else '1' when presstate=wait_div and div_done='1' and restozero='0' and flag="10"; div_go <= '1' when presstate=calc else '0'; end arch; NFACTOR3_DATAPATH.VHDL use ieee.numeric_std.all; use work.divider_behav_pkg.all; entity nfactor3_datapath is port (CLK, RST, load_x, load_d, load_o, load_q, load_flag, load_cnt: in std_logic; sel_x, sel_d, sel_o, sel_q, sel_cnt, div_go: in std_logic; Xmin1, DmagMAX, DeqO, restozero, div_done: out std_logic; sel_flag: in std_logic_vector (1 downto 0 flag: out std_logic_vector (1 downto 0 A: in std_logic_vector (31 downto 0 Q: out std_logic_vector (3 downto 0) end nfactor3_datapath; architecture arch of nfactor3_datapath is signal x, d, o, mux_x, mux_d, mux_o, out_div, out_rem, mux_1, mux_2: std_logic_vector (31 downto 0 signal q_reg, mux_q: std_logic_vector (3 downto 0
25 signal flag_reg, sel_1, mux_flag: std_logic_vector (1 downto 0 signal cnt, mux_cnt, sel_2: std_logic; DIV : divider port map ( CLK => CLK, RESET => RST, OP1 => X, OP2 => D, DIV => out_div, REMAIN => out_rem, START => div_go, READY => div_done x <= (others=>'0') when RST='1' else mux_x when CLK'event and CLK='1' and load_x='1'; d <= (others=>'0') when RST='1' else mux_d when CLK'event and CLK='1' and load_d='1'; o <= (others=>'0') when RST='1' else mux_o when CLK'event and CLK='1' and load_o='1'; flag_reg <= (others=>'0') when RST='1' else mux_flag when CLK'event and CLK='1' and load_flag='1'; flag <= flag_reg; sel_1 <= flag_reg; cnt <= '0' when RST='1' else mux_cnt when CLK'event and CLK='1' and load_cnt='1'; sel_2 <= cnt; q_reg <= (others=>'0') when RST='1' else mux_q when CLK'event and CLK='1' and load_q='1'; q <= q_reg; mux_x <= A when sel_x='0' else out_div; mux_d <= std_logic_vector(to_unsigned(2,32)) when sel_d='0' else std_logic_vector(unsigned(d)+unsigned(mux_1) mux_o <= (others=>'0') when sel_o='0' else d; mux_q <= (others=>'0') when sel_q='0' else std_logic_vector(unsigned(q_reg)+1 mux_1 <= std_logic_vector(to_unsigned(1,32)) when sel_1="00" else std_logic_vector(to_unsigned(2,32)) when sel_1="01" else mux_2; mux_2 <= std_logic_vector(to_unsigned(2,32)) when sel_2='0' else std_logic_vector(to_unsigned(4,32) mux_flag <= "00" when sel_flag="00" else "01" when sel_flag="01" else "10" when sel_flag="10"; mux_cnt <= '0' when sel_cnt='0' else not cnt; Xmin1 <= '1' when unsigned(x) <= 1 else '0'; DmagMAX <= '1' when unsigned(d) > 2**16 else '0'; DeqO <= '1' when unsigned(d) = unsigned(o) else '0'; restozero <= '1' when unsigned(out_rem) = 0 else '0'; end arch;
26 APPENDICE 4: NFACTOR4.VHDL package nfactor_pkg is component nfactor is port ( CLK, RESET : in std_logic; -- data inputs A : in std_logic_vector(31 downto 0 -- data outputs Q : out std_logic_vector(3 downto 0 -- control signals START : in std_logic; -- status signals READY : out std_logic end component; end nfactor_pkg; use ieee.numeric_std.all; use work.divider_behav_pkg.all; entity nfactor is port ( CLK, RESET : in std_logic; -- data inputs A : in std_logic_vector(31 downto 0 -- data outputs Q : out std_logic_vector(3 downto 0 -- control signals START : in std_logic; -- status signals READY : out std_logic end nfactor; architecture struct of nfactor is component nfactor4_ctrlunit is port (start, CLK, RST: in std_logic; ready: out std_logic; load_x, load_d, load_o, load_q, load_flag, load_cnt: out std_logic; sel_x, sel_d, sel_o, sel_q, sel_cnt: out std_logic; flag: in std_logic_vector (1 downto 0 sel_flag: out std_logic_vector (1 downto 0 div_go: out std_logic; Xmin1, DmagMAX, DeqO, restozero, div_done: in std_logic end component; component nfactor4_datapath is port (CLK, RST, load_x, load_d, load_o, load_q, load_flag, load_cnt: in std_logic; sel_x, sel_d, sel_o, sel_q, sel_cnt, div_go: in std_logic; Xmin1, DmagMAX, DeqO, restozero, div_done: out std_logic; sel_flag: in std_logic_vector (1 downto 0
27 flag: out std_logic_vector (1 downto 0 A: in std_logic_vector (31 downto 0 Q: out std_logic_vector (3 downto 0) end component; signal load_x, load_d, load_o, load_q, load_flag, load_cnt: std_logic; signal sel_x, sel_d, sel_o, sel_q, sel_cnt: std_logic; signal flag, sel_flag: std_logic_vector (1 downto 0 signal Xmin1, DmagMAX, DeqO, restozero, div_go, div_done: std_logic; CU: nfactor4_ctrlunit port map (START, CLK, RESET, READY, load_x, load_d, load_o, load_q, load_flag, load_cnt, sel_x, sel_d, sel_o, sel_q, sel_cnt, flag, sel_flag, div_go, Xmin1, DmagMAX, DeqO, restozero, div_done DP: nfactor4_datapath port map (CLK, RESET, load_x, load_d, load_o, load_q, load_flag, load_cnt, sel_x, sel_d, sel_o, sel_q, sel_cnt, div_go, Xmin1, DmagMAX, DeqO, restozero, div_done, sel_flag, flag, A, Q end struct; NFACTOR4_CTRLUNIT.VHDL use ieee.numeric_std.all; entity nfactor4_ctrlunit is port (start, CLK, RST: in std_logic; ready: out std_logic; load_x, load_d, load_o, load_q, load_flag, load_cnt: out std_logic; sel_x, sel_d, sel_o, sel_q, sel_cnt: out std_logic; flag: in std_logic_vector (1 downto 0 sel_flag: out std_logic_vector (1 downto 0 div_go: out std_logic; Xmin1, DmagMAX, DeqO, restozero, div_done: in std_logic end nfactor4_ctrlunit; architecture arch of nfactor4_ctrlunit is type state is (INIT, WAIT_DIV, CALC, FIN signal NextState, PresState: state; update_state: process(clk, RST) if RST = '1' then PresState<=INIT; elsif CLK'event AND CLK='1' then PresState<=NextState; end process; FSM: process (presstate, start, Xmin1, DmagMAX, DeqO, restozero, div_done) case presstate is when INIT => if start = '0' then nextstate <= INIT; else nextstate <= FIN; when FIN =>
28 if DmagMAX = '1' then nextstate <= INIT; elsif Xmin1 = '1' then nextstate <= INIT; else nextstate <= CALC; when CALC => nextstate <= WAIT_DIV; when WAIT_DIV => if div_done = '0' then nextstate <= WAIT_DIV; else nextstate <= FIN; end case; end process; ready <= '1' when presstate=init else '0'; load_x <= '1' when presstate=init or (presstate=wait_div and div_done='1' and restozero='1') else '0'; sel_x <= '0' when presstate=init else '1' when presstate=wait_div and div_done='1' and restozero='1'; load_d <= '1' when presstate=init or (presstate=wait_div and div_done='1' and restozero='0') else '0'; sel_d <= '0' when presstate=init else '1' when presstate=wait_div and div_done='1' and restozero='0'; load_o <= '1' when presstate=init or (presstate=wait_div and div_done='1' and restozero='1' and DeqO='0') else '0'; sel_o <= '0' when presstate=init else '1' when presstate=wait_div and div_done='1' and restozero='1' and DeqO='0'; load_q <= '1' when (presstate=init and start='1') or (presstate=fin and DmagMAX='1') or (presstate=wait_div and div_done='1' and restozero='1' and DeqO='0') else '0'; sel_q <= '0' when (presstate=init and start='1') else '1' when (presstate=fin and DmagMAX='1') or (presstate=wait_div and div_done='1' and restozero='1' and DeqO='0' load_flag <= '1' when presstate=init or (presstate=wait_div and div_done='1' and restozero='0' and unsigned(flag)<=2) else '0'; sel_flag <= "00" when presstate=init else "01" when presstate=wait_div and div_done='1' and restozero='0' and flag="00" else "10" when presstate=wait_div and div_done='1' and restozero='0' and flag="01" else "11" when presstate=wait_div and div_done='1' and restozero='0' and flag="10"; load_cnt <= '1' when presstate=init or (presstate=wait_div and div_done='1' and restozero='0' and flag="11") else '0'; sel_cnt <= '0' when presstate=init else '1' when presstate=wait_div and div_done='1' and restozero='0' and flag="11"; div_go <= '1' when presstate=calc else '0'; end arch; NFACTOR4_DATAPATH.VHDL use ieee.numeric_std.all; use work.divider_behav_pkg.all; entity nfactor4_datapath is port (CLK, RST, load_x, load_d, load_o, load_q, load_flag, load_cnt: in std_logic; sel_x, sel_d, sel_o, sel_q, sel_cnt, div_go: in std_logic; Xmin1, DmagMAX, DeqO, restozero, div_done: out std_logic; sel_flag: in std_logic_vector (1 downto 0 flag: out std_logic_vector (1 downto 0 A: in std_logic_vector (31 downto 0 Q: out std_logic_vector (3 downto 0) end nfactor4_datapath; architecture arch of nfactor4_datapath is signal x, d, o, mux_x, mux_d, mux_o, out_div, out_rem, mux_1, mux_2: std_logic_vector (31 downto 0
29 signal q_reg, mux_q: std_logic_vector (3 downto 0 signal flag_reg, sel_1, mux_flag: std_logic_vector (1 downto 0 signal cnt, mux_cnt, sel_2: std_logic_vector (2 downto 0 DIV : divider port map ( CLK => CLK, RESET => RST, OP1 => X, OP2 => D, DIV => out_div, REMAIN => out_rem, START => div_go, READY => div_done x <= (others=>'0') when RST='1' else mux_x when CLK'event and CLK='1' and load_x='1'; d <= (others=>'0') when RST='1' else mux_d when CLK'event and CLK='1' and load_d='1'; o <= (others=>'0') when RST='1' else mux_o when CLK'event and CLK='1' and load_o='1'; flag_reg <= (others=>'0') when RST='1' else mux_flag when CLK'event and CLK='1' and load_flag='1'; flag <= flag_reg; sel_1 <= flag_reg; cnt <= (others=>'0') when RST='1' else mux_cnt when CLK'event and CLK='1' and load_cnt='1'; sel_2 <= cnt; q_reg <= (others=>'0') when RST='1' else mux_q when CLK'event and CLK='1' and load_q='1'; q <= q_reg; mux_x <= A when sel_x='0' else out_div; mux_d <= std_logic_vector(to_unsigned(2,32)) when sel_d='0' else std_logic_vector(unsigned(d)+unsigned(mux_1) mux_o <= (others=>'0') when sel_o='0' else d; mux_q <= (others=>'0') when sel_q='0' else std_logic_vector(unsigned(q_reg)+1 mux_1 <= std_logic_vector(to_unsigned(1,32)) when sel_1="00" else std_logic_vector(to_unsigned(2,32)) when sel_1="01" else std_logic_vector(to_unsigned(2,32)) when sel_1="10" else mux_2; mux_2 <= std_logic_vector(to_unsigned(4,32)) when sel_2="000" else std_logic_vector(to_unsigned(2,32)) when sel_2="001" else std_logic_vector(to_unsigned(4,32)) when sel_2="010" else std_logic_vector(to_unsigned(2,32)) when sel_2="011" else std_logic_vector(to_unsigned(4,32)) when sel_2="100" else std_logic_vector(to_unsigned(6,32)) when sel_2="101" else std_logic_vector(to_unsigned(2,32)) when sel_2="110" else std_logic_vector(to_unsigned(6,32) mux_flag <= "00" when sel_flag="00" else "01" when sel_flag="01" else "10" when sel_flag="10" else "11"; mux_cnt <= (others=>'0') when sel_cnt='0' else std_logic_vector(unsigned(cnt)+1 Xmin1 <= '1' when unsigned(x) <= 1 else '0'; DmagMAX <= '1' when unsigned(d) > 2**16 else '0'; DeqO <= '1' when unsigned(d) = unsigned(o) else '0'; restozero <= '1' when unsigned(out_rem) = 0 else '0'; end arch;
30 APPENDICE 5: TB.VHDL use ieee.numeric_std.all; use STD.textio.all; use WORK.nfactor_pkg.all; -- interface entity TB is end TB; architecture struct of TB is constant CLK_SEMIPERIOD0 constant CLK_SEMIPERIOD1 : time := 6 ns; : time := 5 ns; constant WAITS : integer := 5; signal CLK, RESET : std_logic; type seq_array is array (natural range <>) of integer; constant sequence : seq_array := ( 15, 0, 25, 1, 40, 99, 24, 1764, , * constant sequence_results : seq_array := ( 2, 0, 1, 0, 2, 2, 2, 3, 1, 3 signal seq_idx : integer := 0; signal old_seq_idx : integer := 0; signal nw : integer := 0; type statetype is ( INIT, W1, DONE1, FINISH, FINISH2 signal state : statetype := INIT; signal A : std_logic_vector(31 downto 0 signal Q : std_logic_vector(3 downto 0 signal START : std_logic; signal READY : std_logic; signal end_simul : std_logic; clk_process: process CLK <= '1', '0' after CLK_SEMIPERIOD1; wait for (CLK_SEMIPERIOD1 + CLK_SEMIPERIOD0 end process clk_process; start_process: process RESET <= '0'; wait for 1 ns;
31 RESET <= '1'; wait for 29 ns; RESET <= '0'; wait; end process start_process; end_process: process(end_simul) if end_simul='1' then assert false report "NONE. End of simulation." severity failure; end process end_process; DUT : nfactor port map ( CLK => CLK, RESET => RESET, A => A, Q => Q, START => START, READY => READY nextstate : process(clk, RESET) variable outputline : LINE; if RESET = '1' then state <= INIT; elsif rising_edge(clk) then case state is when INIT => if READY = '1' then state <= W1; seq_idx <= 0; nw <= 0; when W1 => seq_idx <= seq_idx + 1; old_seq_idx <= seq_idx; state <= DONE1; when DONE1 => if READY = '1' then if sequence_results(old_seq_idx) /= to_integer(unsigned(q)) then write(outputline, string'("wrong result: A=") write(outputline, sequence(old_seq_idx) write(outputline, string'(" Q=") write(outputline, to_integer(unsigned(q)) write(outputline, string'(" (should be ") write(outputline, sequence_results(old_seq_idx) write(outputline, string'(")") writeline(output, outputline if seq_idx >= sequence'length then state <= FINISH; else state <= W1;
32 when FINISH => nw <= nw + 1; if nw+1 = WAITS then state <= FINISH2; when FINISH2 => end case; end process nextstate; outputs : process(state, seq_idx) A <= (others => '-' START <= '0'; end_simul <= '0'; case state is when INIT => when W1 => A <= std_logic_vector( to_unsigned( sequence(seq_idx), A'length) START <= '1'; when DONE1 => when FINISH2 => end_simul <= '1'; when others => end case; end process outputs; end struct;
33 APPENDICE 6: DIVIDER.BEHAV.VHDL package divider_behav_pkg is component divider is port ( CLK, RESET : in std_logic; -- data inputs OP1 : in std_logic_vector(31 downto 0 OP2 : in std_logic_vector(31 downto 0 -- data outputs DIV : out std_logic_vector(31 downto 0 REMAIN : out std_logic_vector(31 downto 0 -- control signals START : in std_logic; -- status signals READY : out std_logic end component; end divider_behav_pkg; use ieee.numeric_std.all; entity divider is port ( CLK, RESET : in std_logic; -- data inputs OP1 : in std_logic_vector(31 downto 0 OP2 : in std_logic_vector(31 downto 0 -- data outputs DIV : out std_logic_vector(31 downto 0 REMAIN : out std_logic_vector(31 downto 0 -- control signals START : in std_logic; -- status signals READY end divider; : out std_logic architecture behav of divider is signal waitcount : integer := 0; type statetype is ( INIT, WORK1, DONE signal state : statetype := INIT; signal ratio signal remainder : std_logic_vector(div'range : std_logic_vector(remain'range nextstate : process(clk, RESET) if RESET = '1' then
34 state <= INIT; elsif rising_edge(clk) then case state is when INIT => waitcount <= 0; if START = '1' then state <= WORK1; ratio <= std_logic_vector( unsigned(op1) / unsigned(op2) remainder <= std_logic_vector( unsigned(op1) mod unsigned(op2) else state <= INIT; when WORK1 => waitcount <= waitcount+1; if waitcount=34-3 then state <= DONE; else state <= WORK1; when DONE => state <= INIT; end case; end process; outputs : process(state) READY <= '0'; DIV <= (others => '-' REMAIN <= (others => '-' case state is when INIT => READY <= '1'; DIV <= ratio; REMAIN <= remainder; when others => end case; end process; end behav;
library ieee; use ieee.std_logic_1164.all; library IEEE; use IEEE.std_logic_1164.all; use IEEE.numeric_std.all; library STD; use STD.textio.
VHDL Linguaggio di descrizione dell'hardware VHSIC Hardware Description Language VHSIC: Very High Speed Integrated Circuits VHDL Processi Attivati da qualche segnale Assegnazioni concorrenti A
DettagliDIPARTIMENTO DI ELETTRONICA E INFORMAZIONE. VHDL - Esempi. Martedì 13 Gennaio 2009
VHDL - Esempi Martedì 13 Gennaio 2009 Processi Un process è un'istruzione concorrente che contiene un'area sequenziale. Un processo viene eseguito parallelamente alle altre istruzioni concorrenti. L'esecuzione
DettagliIntroduzione al VHDL Lezione 3
Introduzione al VHDL Lezione 3 Cristina Silvano Università degli Studi di Milano Dipartimento di Scienze dell Informazione Via Comelico 39/41, I-20135 Milano (Italy) Tel.: +39-2-5835-6306 e-mail: silvano@elet.polimi.it
DettagliIntroduzione al VHDL. Alcuni concetti introduttivi
Introduzione al VHDL Alcuni concetti introduttivi Riferimenti The VHDL Cookbook, Peter J. Ashenden, Reperibile nel sito: http://vlsilab.polito.it/documents.html The VHDL Made Easy, David Pellerin, Douglas
DettagliEsercizi VHDL nelle prove d esame di Architettura degli elaboratori (a.a. 2002/03)
Esercizi VHDL nelle prove d esame di Architettura degli elaboratori (a.a. 2002/03) 18 settembre 2003 Prova del 9 giugno 2003 Descrizione VHDL (a scelta, dataflow o comportamentale) di un decoder per il
DettagliRELAZIONE DEL PROGETTO DI UN CONTATORE BINARIO UP/DOWN MODULO 4 PER IL CORSO DI APPARATI ELETTRONICI 1. INTRODUZIONE
RELAZIONE DEL PROGETTO DI UN CONTATORE BINARIO UP/DOWN MODULO 4 PER IL CORSO DI APPARATI ELETTRONICI 1. INTRODUZIONE In generale un contatore è un dispositivo che memorizza (e a volte visualizza) il numero
DettagliRiepilogo su FSM. Descrizione di macchine a stati tramite VHDL. Esempio di FSM (Moore) Esempio di FSM (Moore)
Riepilogo su FSM Descrizione di macchine a stati tramite VHDL M. Favalli Engineering Department in Ferrara FSM: i) insieme finito di simboli di ingresso; ii) insieme finito di simboli di uscita; iii) un
DettagliRappresentazione degli algoritmi
Rappresentazione degli algoritmi Universitá di Ferrara Ultima Modifica: 21 ottobre 2014 1 1 Diagramma di flusso Utilizzare il diagramma di flusso per rappresentare gli algoritmi che risolvono i seguenti
DettagliQuarta esercitazione
1 Quarta esercitazione Soluzione di una prova d esame Obiettivo Fornire una metodologia di progetto scomposizione in blocchi e definzione dei segnali interni diagramma degli stati della FSM scrittura del
DettagliIntroduzione alla programmazione
Introduzione alla programmazione Risolvere un problema Per risolvere un problema si procede innanzitutto all individuazione Delle informazioni, dei dati noti Dei risultati desiderati Il secondo passo consiste
DettagliDiagramma a blocchi per la selezione, in un mazzo di chiavi, di quella che apre un lucchetto
Diagramma a blocchi per la selezione, in un mazzo di chiavi, di quella che apre un lucchetto 14 1. Dato un numero dire se è positivo o negativo 2. e se il numero fosse nullo? 3. Eseguire il prodotto tra
DettagliCalcolatori Elettronici M Modulo Introduzione all ambiente Xilinx ISE 12.3 e ISIM
Calcolatori Elettronici M Modulo 2 06 Introduzione all ambiente Xilinx ISE 12.3 e ISIM 1 Questi lucidi forniscono una sintetica introduzione all ambiente di sviluppo Xilinx ISE 12.3 utilizzando come riferimento
DettagliDescrizioni VHDL Behavioral
1 Descrizioni VHDL Behavioral In questo capitolo vedremo come la struttura di un sistema digitale è descritto in VHDL utilizzando descrizioni di tipo comportamentale. Outline: process wait statements,
DettagliTipi di segnali (logici) predefiniti. Rappresentazione dei segnali in VHDL. Tipo bit (definito nel package standard)
Tipi di segnali (logici) predefiniti Tipo bit (definito nel package standard) Rappresentazione dei segnali in VHDL Approfondimento del corso di Linguaggi di descrizione dell hardware type Bit is ('0',
DettagliSintassi. Le varie espressioni sintattiche scritte in VHDL si possono ricondurre ai seguenti oggetti: Scalari e Vettori Nomi Oggetti: Espressioni
Introduzione Il VHDL e costituito da vari formati (types)ed operatori (operators) per consentire simulazione e sintesi a vari livelli Nel package STANDARD si trovano descritti quegli oggetti destinati
DettagliIntroduzione al VHDL VHDL. La storia. Corso introduttivo al VHDL. l acronimo di VHSIC Hardware Description Language
Introduzione al VHDL Corso introduttivo al VHDL Giovanni De Luca VHDL VHDL è l acronimo di VHSIC Hardware Description Language VHSIC è l acronimo di Very High Speed Integrated Circuit La storia Il VHDL
Dettagli14/11/2012. Il VHDL 3 parte. Tipi. Tipi scalari INTEGER; REAL; Tipo Fisici; BOOLEAN; CHARCTER; BIT ENUMERATO; Tipo composto ARRAY RECORD FILE ACCESS
Il VHDL 3 parte Tipi Tipi scalari INTEGER; REAL; Tipo Fisici; BOOLEAN; CHARCTER; BIT ENUMERATO; Tipo composto ARRAY RECORD FILE ACCESS 1 Definizione di un nuovo tipo TYPE Nome_tipo IS Definizione_tipo;
DettagliIntroduzione alla programmazione Esercizi risolti
Esercizi risolti 1 Esercizio Si determini se il diagramma di flusso rappresentato in Figura 1 è strutturato. A B C D F E Figura 1: Diagramma di flusso strutturato? Soluzione Per determinare se il diagramma
DettagliOttava esercitazione. Soluzione prova d esame 14 Settembre a.a
1 Ottava esercitazione Soluzione prova d esame 14 Settembre 2010 Un sistema a FPGA, funzionante a 1 KHz, è utilizzato per controllare il sistema frenante di una automobile dotata di ABS (Anti Block System)
DettagliSommario. Modellizzazione Sintassi Classi di Oggetti Tipi di Dati e Operatori Package e Librerie Processi Esempi di codice VHDL VHDL Testbenches
Fondamenti di VHDL Sommario VHDL: premessa e introduzione Modellizzazione Sintassi Classi di Oggetti Tipi di Dati e Operatori Package e Librerie Processi Esempi di codice VHDL VHDL Testbenches Premessa
DettagliLa descrizione ai terminali dell unità di controllo è la seguente:
Elettronica dei Sistemi Digitali Linguaggi di Descrizione Hardware - Prova d esame 5 Luglio 2004 Come tutti ben sanno un tachimetro da bicicletta misura la velocità e la distanza percorsi dal velocipede
DettagliLezione 7 ALU: Moltiplicazione e divisione
Architettura degli Elaboratori e delle Reti Lezione 7 ALU: Moltiplicazione e divisione F. Pedersini Dipartimento di Scienze dell Informazione Università degli Studi di Milano L 7 1/34 Sommario! Sommatori
DettagliReti Logiche Appello del 1 marzo 2011
Politecnico di Milano Dipartimento di Elettronica e Informazione prof.ssa Anna Antola prof. Fabrizio Ferrandi prof.ssa Cristiana Bolchini Esercizio n. 1 Si consideri la macchina sequenziale sincrona a
DettagliFondamenti di Informatica
Fondamenti di Informatica AlgoBuild: Strutture selettive, iterative ed array Prof. Arcangelo Castiglione A.A. 2016/17 AlgoBuild : Strutture iterative e selettive OUTLINE Struttura selettiva Esempi Struttura
DettagliPer gli esercizi sulla algebra booleana, si consiglia di verificare tramite tabelle di verità le equivalenze logiche proposte sulle dispense.
Fondamenti di Informatica - A. Fantechi Raccolta di esercizi Per gli esercizi sulla algebra booleana, si consiglia di verificare tramite tabelle di verità le equivalenze logiche proposte sulle dispense.
DettagliSistemi per la Progettazione Automatica. problema punti massimi i tuoi punti problema 1 14 problema 2 4 problema 3 6 problema 4 6 totale 30
Sistemi per la Progettazione Automatica Informatica - Tiziano Villa 17 Marzo 2008 Nome e Cognome: Matricola: Posta elettronica: problema punti massimi i tuoi punti problema 1 14 problema 2 4 problema 3
DettagliProgettazione di un sistema digitale
Progettazione di un sistema digitale Calcolatori Elettronici Progettazione di un sistema digitale Può essere vista come la progettazione di un sistema formato da due componenti: Il datapath, che esegue
DettagliReti combinatorie. Reti combinatorie (segue)
Reti combinatorie Sommatore Sottrattore Reti sequenziali Generatore di sequenze Riconoscitore di sequenze Reti combinatorie PROGRAMMAZIONE Il programmatore riporta le istruzioni che il calcolatore dovrà
DettagliDescrizione VHDL di componenti combinatori
Descrizione VHDL di componenti combinatori 5 giugno 2003 1 Decoder Il decoder è un componente dotato di N ingressi e 2 N uscite. Le uscite sono poste tutte a 0 tranne quella corrispondente al numero binario
DettagliReti Logiche A Appello del 24 febbraio 2010
Politecnico di Milano Dipartimento di Elettronica e Informazione prof.ssa Anna Antola prof. Fabrizio Ferrandi Reti Logiche A Appello del 24 febbraio 2010 Matricola prof.ssa Cristiana Bolchini Cognome Nome
DettagliIntroduzione alla sintesi comportamentale
Introduzione alla sintesi comportamentale Valentino Liberali Università degli Studi di Milano Dipartimento di Tecnologie dell Informazione Via Bramante 65, 26013 Crema, Italy Tel.: +39-0373.898.247; Fax:
DettagliEsercizio 1. Progettare la PO a partire dal microprogramma eseguibile e successivamente:
Architettura degli Elaboratori Prima prova di verifica intermedia - A.A. 2014-2015 Riportare Nome, Cognome, Numero di matricola e Corso di appartenenza su tutti i fogli consegnati. I risultati saranno
DettagliFacoltà di Ingegneria Corso di Studi in Ingegneria Informatica. Metodologie e strumenti per il reengineering del workflow management
Descrizione di Macchine a Stati finiti in VHDL Descrizioni di Macchine a Stati finiti in VHDL In questa lezione vedremo come un sistema digitale sequenziale può essere descritto in VHDL. Outline: Macchine
DettagliCAPITOLO 17 PROBLEMI DEL PRODUTTORE/CONSUMATORE v1
CAPITOLO 17 PROBLEMI DEL PRODUTTORE/CONSUMATORE v1 PRODUTTORE/CONSUMATORE Il problema del produttore/consumatore è uno dei problemi più comuni di concorrenza tra processi. Il problema presenta uno o più
DettagliInformatica/ Ing. Meccanica/ Prof. Verdicchio/ 14/02/2012 / Foglio delle domande / VERSIONE 1
Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 14/02/2012 / Foglio delle domande / VERSIONE 1 1) Il bus in un computer trasporta a) solo dati b) solo istruzioni c) sia dati sia istruzioni 2) In una sequenza
DettagliIntroduzione alla programmazione Algoritmi e diagrammi di flusso. Sviluppo del software
Introduzione alla programmazione Algoritmi e diagrammi di flusso F. Corno, A. Lioy, M. Rebaudengo Sviluppo del software problema idea (soluzione) algoritmo (soluzione formale) programma (traduzione dell
DettagliCAPITOLO 22 PROBLEMA DEL PRODUTTORE/CONSUMATORE
CAPITOLO 22 PROBLEMA DEL PRODUTTORE/CONSUMATORE Il problema del produttore/consumatore Il primo approccio alla risoluzione del problema del produttore/consumatore considera un buffer infinito presentato
DettagliReti Logiche A Esame del 24 febbraio 2006
Politecnico di Milano ipartimento di Elettronica e Informazione prof.ssa Anna Antola prof. Fabrizio Ferrandi prof.ssa Cristiana Bolchini Esercizio n. a) ata la seguente tabella di copertura: Reti Logiche
DettagliPROGRAMMAZIONE STRUTTURATA
PROGRAMMAZIONE STRUTTURATA Programmazione strutturata 2 La programmazione strutturata nasce come proposta per regolamentare e standardizzare le metodologie di programmazione (Dijkstra, 1965) Obiettivo:
DettagliIntroduzione al VHDL Lezione 2
Introduzione al VHDL Lezione 2 Cristina Silvano Università degli Studi di Milano Dipartimento di Scienze dell Informazione Via Comelico 39/41, I-20135 Milano (Italy) Tel.: +39-2-5835-6306 e-mail: silvano@elet.polimi.it
DettagliI.4 Rappresentazione dell informazione - Numeri con segno
I.4 Rappresentazione dell informazione - Numeri con segno Università di Ferrara Dipartimento di Economia e Management Insegnamento di Informatica Ottobre 20, 2015 Argomenti Introduzione 1 Introduzione
DettagliLaboratorio di Python
Problem solving, Ricorsione, Università di Bologna 13 e 15 marzo 2013 Sommario 1 2 3 4 Errore di semantica Esercizio def vocali(s): voc='' for c in s: if c in 'aeiou': voc=voc+c return voc Cerchiamo di
DettagliReti Logiche A. Introduzione al VHDL
Reti Logiche Introduzione al VHDL Gianluca Palermo Politecnico di Milano Dipartimento di Elettronica e Informazione e-mail: gpalermo@fusberta.elet.polimi.it 1 Sommario Introduzione Struttura di un modello
DettagliAddizione tra numeri binari
Addizione tra numeri binari A=a n-1 a n-2...a i...a 0 B=b n-1 b n-2...b i...b 0 s i =a i b i c in c out =a i b i + a i c in + b i c in a i b i FA c out c in S=s n s n-1 s n-2...s i...s 0 s i a n 1 b n
DettagliArchitettura degli Elaboratori
circuiti combinatori: ALU slide a cura di Salvatore Orlando, Marta Simeoni, Andrea Torsello 1 ALU ALU (Arithmetic Logic Unit) circuito combinatorio all interno del processore per l esecuzione di istruzioni
DettagliSomma di numeri floating point. Algoritmi di moltiplicazione e divisione per numeri interi
Somma di numeri floating point Algoritmi di moltiplicazione e divisione per numeri interi Standard IEEE754 " Standard IEEE754: Singola precisione (32 bit) si riescono a rappresentare numeri 2.0 10 2-38
DettagliFirmware Division & Floating pointer adder
Firmware Division & Floating pointer adder Prof. Alberto Borghese Dipartimento di Scienze dell Informazione borghese@di.unimi.it Università degli Studi di Milano Riferimenti sul Patterson: 3.4, 3.5 1/47
DettagliRappresentazione di numeri interi
Corso di Calcolatori Elettronici I Esercizi Rappresentazione di numeri interi ing. Alessandro Cilardo Corso di Laurea in Ingegneria Biomedica Interi senza segno Qual è l intervallo di rappresentazione
DettagliFirmware Division. Prof. Alberto Borghese Dipartimento di Informatica Università degli Studi di Milano
Firmware Division Prof. Alberto Borghese Dipartimento di Informatica borghese@di.unimi.it Università degli Studi di Milano Riferimenti sul Patterson 5a ed.: 3.4, 3.5 1/36 Sommario Divisione intera Circuiti
DettagliUn linguaggio per la descrizione dello hardware: il VHDL
Un linguaggio per la descrizione dello hardware: il VHDL Gli Hardware Description Languages Gli HDL consentono lo sviluppo di un modello del comportamento dei sistema digitali. Gli HDL permettono l eseguibilità
DettagliUn linguaggio per la descrizione dello hardware: il VHDL
Un linguaggio per la descrizione dello hardware: il VHDL Gli Hardware Description Languages Gli HDL consentono lo sviluppo di un modello del comportamento dei sistema digitali. Gli HDL permettono l eseguibilità
DettagliReti Logiche A Esame del 19 febbraio 2007
Politecnico di Milano Dipartimento di Elettronica e Informazione prof.ssa Anna Antola prof. Fabrizio Ferrandi Reti Logiche A Esame del 9 febbraio 007 Matricola prof.ssa ristiana Bolchini Esercizio n. Data
DettagliRegole per la scrittura di VHDL Sintetizzabile. Fabio Campi. Corso di Elettronica dei Sistemi Digitali LS AA
Regole per la scrittura di VHDL Sintetizzabile Fabio Campi Corso di Elettronica dei Sistemi Digitali LS AA 2003-2004 2004 VHDL Sintetizzabile Obiettivo: Mappare su celle Hardware di libreria, riferite
DettagliCalcolatori Elettronici
Calcolatori Elettronici RETI SEQUENZIALI : ESERCIZI Massimiliano Giacomin 1 Implementazione di contatori Un contatore è un dispositivo sequenziale che aggiorna periodicamente il suo stato secondo una regola
DettagliFirmware Division & Floating gpointer adder
Firmware Division & Floating gpointer adder Prof. Alberto Borghese Dipartimento di Scienze dell Informazione borghese@di.unimi.it it Università degli Studi di Milano Riferimenti sul Patterson: 3.4, 3.5
DettagliArray in Fortran 90. Ing. Luca De Santis. Anno accademico 2006/2007. DIS - Dipartimento di informatica e sistemistica
Array in Fortran 90 Ing. Luca De Santis DIS - Dipartimento di informatica e sistemistica Anno accademico 2006/2007 Fortran 90: array DIS - Dipartimento di informatica e sistemistica 1 / 25 Cosa vedremo
DettagliSTRUTTURE DI CONTROLLO DEL C++
STRUTTURE DI CONTROLLO DEL C++ Le istruzioni if e else Le istruzioni condizionali ci consentono di far eseguire in modo selettivo una singola riga di codice o una serie di righe di codice (che viene detto
DettagliFloating pointer adder & Firmware Division. Sommario
Floating pointer adder & Firmware Division Prof. Alberto Borghese Dipartimento di Scienze dell Informazione borghese@dsi.unimi.it Università degli Studi di Milano Riferimenti sul Patterson: 3.4, 3.5 1/43
DettagliRappresentazione dell informazione
Rappresentazione dell informazione Problema che coinvolge aspetti filosofici Interessa soprattutto distinguere informazioni diverse Con un solo simbolo è impossibile Pertanto l insieme minimo è costituito
Dettagliorologio e display cont 16
Tocci giovanni orologio e display obiettivo: costruzione di un orologio che sappia tenere in conto minuti e secondi. specifiche di progetto: Il nostro orologio, sarà costituito da : divisore di frequenza.
DettagliFondamenti di Informatica 6. Algoritmi e pseudocodifica
Vettori e matrici #1 Fondamenti di Informatica 6. Algoritmi e pseudocodifica Corso di Laurea in Ingegneria Civile A.A. 2010-2011 1 Semestre Prof. Giovanni Pascoschi Le variabili definite come coppie
DettagliLezione 7 Sommatori e Moltiplicatori
Architettura degli Elaboratori e delle Reti Lezione 7 Sommatori e Moltiplicatori Proff. A. Borghese, F. Pedersini Dipartimento di Scienze dell Informazione Università degli Studi di Milano L 7 /36 Sommario
DettagliNote per la Lezione 6 Ugo Vaccaro
Progettazione di Algoritmi Anno Accademico 2016 2017 Note per la Lezione 6 Ugo Vaccaro Ancora sulla tecnica Programmazione Dinamica Nella lezione scorsa abbiamo appreso che la tecnica Divide-et-Impera,
DettagliConversione di base. Conversione decimale binario. Si calcolano i resti delle divisioni per due
Conversione di base Dato N>0 intero convertirlo in base b dividiamo N per b, otteniamo un quoto Q 0 ed un resto R 0 dividiamo Q 0 per b, otteniamo un quoto Q 1 ed un resto R 1 ripetiamo finché Q n < b
DettagliI.4 Rappresentazione dell informazione
I.4 Rappresentazione dell informazione Università di Ferrara Dipartimento di Economia e Management Insegnamento di Informatica Ottobre 13, 2015 Argomenti Introduzione 1 Introduzione 2 3 L elaboratore Introduzione
DettagliModellazione RTL. Modulo 7
Modellazione RTL Modulo 7 Università di Cagliari Dipartimento di Ingegneria Elettrica ed Elettronica Laboratorio di Microelettronica e Bioingegneria (EOLAB) Register Transfer Level Esistono molti modi
DettagliUniversità Federico II - Napoli - A.A. 2011/2012 Corso di Laurea in Ingegneria Elettronica
Università Federico II - Napoli - A.A. 2011/2012 Corso di Laurea in Ingegneria Elettronica Architettura dei Sistemi Integrati Elaborato Progettazione microprocessore Pico16 Alunno X X Professore Antonio
DettagliFondamenti di Informatica
Fondamenti di Informatica Algebra di Boole e Circuiti Logici Prof. Christian Esposito Corso di Laurea in Ingegneria Meccanica e Gestionale (Classe I) A.A. 2016/17 Algebra di Boole e Circuiti Logici L Algebra
DettagliMetodologie di Progettazione Hardware-Software
Metodologie di Progettazione Hardware-Software Il Very High Speed Integrated Circuit Hardware Description Language ( VHDL ) Metodologie di Progettazione Hardware/Software LS Ing. Informatica 1 Gli Hardware
Dettaglisenza stato una ed una sola
Reti Combinatorie Un calcolatore è costituito da circuiti digitali (hardware) che provvedono a realizzare fisicamente il calcolo. Tali circuiti digitali possono essere classificati in due classi dette
DettagliArchitettura degli Elaboratori Lez. 8 CPU MIPS a 1 colpo di clock. Prof. Andrea Sterbini
Architettura degli Elaboratori Lez. 8 CPU MIPS a 1 colpo di clock Prof. Andrea Sterbini sterbini@di.uniroma1.it Argomenti Progetto della CPU MIPS a 1 colpo di clock - Istruzioni da implementare - Unità
DettagliR. Cusani, F. Cuomo: Telecomunicazioni - DataLinkLayer: Gestione degli errori, Aprile 2010
1 11. Data link layer: codici di rilevazione di errore, gestione degli errori La rilevazione di errore Un codice a rilevazione di errore ha lo scopo di permettere al ricevente di determinare se vi sono
DettagliAddizionatori: metodo Carry-Lookahead. Costruzione di circuiti combinatori. Standard IEEE754
Addizionatori: metodo Carry-Lookahead Costruzione di circuiti combinatori Standard IEEE754 Addizionatori Il circuito combinatorio che implementa l addizionatore a n bit si basa su 1-bit adder collegati
DettagliCos è un algoritmo. Si dice algoritmo la descrizione di un metodo di soluzione di un problema che sia
Programmazione Un programma descrive al computer, in estremo dettaglio, la sequenza di passi necessari a svolgere un particolare compito L attività di progettare e realizzare un programma è detta programmazione
Dettagli1) Codici ciclici. 2) Esempi di codici ciclici. 3) Algoritmi di codifica e decodifica. 4) Circuiti di codifica
Argomenti della Lezione ) Codici ciclici 2) Esempi di codici ciclici 3) Algoritmi di codifica e decodifica 4) Circuiti di codifica Codici ciclici Un codice lineare a blocchi (n,k) è ciclico se e solo se
DettagliLe etichette nei programmi. Istruzioni di branch: beq. Istruzioni di branch: bne. Istruzioni di jump: j
L insieme delle istruzioni (2) Architetture dei Calcolatori (lettere A-I) Istruzioni per operazioni logiche: shift Shift (traslazione) dei bit di una parola a destra o sinistra sll (shift left logical):
DettagliVHDL. Il linguaggio FOCUS
ON Il linguaggio VHDL di Antonio Di Stefano Il linguaggio VHDL consente di descrivere ed implementare circuiti complessi utilizzando tecnologie quali FPGA, CPLD, ASIC e structured ASIC. In questo articolo
Dettagli02 - Logica delle dimostrazioni
Università degli Studi di Palermo Facoltà di Economia Dipartimento di Scienze Economiche, Aziendali e Statistiche Appunti del corso di Matematica 0 - Logica delle dimostrazioni Anno Accademico 015/016
DettagliUNIVERSITÁ POLITECNICA DELLE MARCHE
UNIVERSITÁ POLITECNICA DELLE MARCHE A.A 2007/08 Architetture e Progettazione Di Sistemi Elettronici PROGETTO DI UN CIRCUITO ARITMETICO PER IL CALCOLO DELLA RADICE QUADRATA DI UN NUMERO IN VIRGOLA MOBILE
DettagliProgettazione dell unità di elaborazioni dati e prestazioni. Il processore: unità di elaborazione. I passi per progettare un processore
Il processore: unità di elaborazione Architetture dei Calcolatori (lettere A-I) Progettazione dell unità di elaborazioni dati e prestazioni Le prestazioni di un calcolatore sono determinate da: Numero
DettagliProgrammazione a blocchi. Algobuild Prof. Sergio Roselli
Programmazione a blocchi Algobuild Prof. Sergio Roselli Blocchi base Inizio programma I Fine programma F Input IN A Output Esecuzione OUT A A = 5 + 1 L interprete Algobuild Algobuildpermette di trascrivere
DettagliAritmetica dei Calcolatori - Operazioni
Aritmetica dei Calcolatori - Operazioni Luca Abeni March 2, 2016 Implementazione di Operazioni su Numeri Interi Abbiamo visto come rappresentare numeri naturali ed interi in un computer... Sequenze di
DettagliAppunti di informatica. Lezione 7 anno accademico Mario Verdicchio
Appunti di informatica Lezione 7 anno accademico 2016-2017 Mario Verdicchio L algoritmo di Euclide per l MCD Dati due numeri A e B, per trovare il loro MCD procedere nel seguente modo: 1. dividere il maggiore
DettagliCap. 2 - Rappresentazione in base 2 dei numeri interi
Cap. 2 - Rappresentazione in base 2 dei numeri interi 2.1 I NUMERI INTERI RELATIVI I numeri relativi sono numeri con il segno: essi possono essere quindi positivi e negativi. Si dividono in due categorie:
DettagliContatori Elettronici frequenzimetri
Facoltà di Ingegneria Università degli Studi di Firenze Dipartimento di Elettronica e Telecomunicazioni Contatori Elettronici frequenzimetri Ing. Andrea Zanobini Dipartimento di Elettronica e Telecomunicazioni
DettagliArithmetic and Logic Unit e moltiplicatore
Arithmetic and Logic Unit e moltiplicatore M. Favalli Engineering Department in Ferrara (ENDIF) ALU - multiplier Analisiesintesideicircuitidigitali 1 / 34 Sommario 1 Arithmetic and Logic Unit - ALU 2 Moltiplicatore
DettagliCorso di Laurea in Informatica Calcolo delle Probabilità e Statistica (269AA) A.A. 2016/17 - Prima prova in itinere
Corso di Laurea in Informatica Calcolo delle Probabilità e Statistica 69AA) A.A. 06/7 - Prima prova in itinere 07-0-03 La durata della prova è di tre ore. Le risposte devono essere adeguatamente giustificate.
DettagliLa codifica digitale
La codifica digitale Codifica digitale Il computer e il sistema binario Il computer elabora esclusivamente numeri. Ogni immagine, ogni suono, ogni informazione per essere compresa e rielaborata dal calcolatore
DettagliCognome e Nome : Corso e Anno di Immatricolazione: Modalità di Laboratorio (Progetto/Prova) :
PROGRAMMAZIONE (Corsi B e C) Pre-appello di Gennaio 2004 (A.A. 2003/2004) PROGRAMMAZIONE (B e C) S. Straordinaria - Appello di Gennaio (A.A. 2002/2003) 22 Gennaio 2004 ore 11 Aula II di Facoltà (Durata:
DettagliArgomenti della lezione. Introduzione agli Algoritmi e alle Strutture Dati. Lista Lineare. Lista Lineare come Tipo di Dato Astratto
Argomenti della lezione Introduzione agli Algoritmi e alle Strutture Dati Operazioni su Liste Dr. Emanuela Merelli Tipi di Dato Astratto Lista Lineare Pila Coda Concetto di Struttura dati dinamiche Lista
DettagliSistemi Web per il turismo - lezione 3 -
Sistemi Web per il turismo - lezione 3 - Software Si definisce software il complesso di comandi che fanno eseguire al computer delle operazioni. Il termine si contrappone ad hardware, che invece designa
DettagliAlgoritmi e Strutture di Dati (3 a Ed.) String matching. Alan Bertossi, Alberto Montresor
Algoritmi e Strutture di Dati (3 a Ed.) String matching Alan Bertossi, Alberto Montresor STRING MATCHING. Date una stringa P di m caratteri (pattern) e una stringa T di n caratteri, con m n, trovare un
DettagliCORSO DI PROGRAMMAZIONE
ISTITUTO TECNICO INDUSTRIALE G. M. ANGIOY SASSARI CORSO DI PROGRAMMAZIONE INTRODUZIONE ALLE ISTRUZIONI ITERATIVE DISPENSA 03.01 03-01_Iterazioni_[ver_15] Questa dispensa è rilasciata sotto la licenza Creative
Dettaglimodificato da andynaz Cambiamenti di base Tecniche Informatiche di Base
Cambiamenti di base Tecniche Informatiche di Base TIB 1 Il sistema posizionale decimale L idea del sistema posizionale: ogni cifra ha un peso Esempio: 132 = 100 + 30 + 2 = 1 10 2 + 3 10 1 + 2 10 0 Un numero
DettagliEsercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni
Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni Esercizio 1 Dire quale è la complessità temporale del seguente metodo, espressa con notazione asintotica O(.) (con la migliore
Dettagliinterfacciamento statico e dinamico analisi di interconnessioni, driver e receiver
Elettronica per telecomunicazioni 1 Contenuto dell unità D Interconnessioni interfacciamento statico e dinamico Integrità di segnale analisi di interconnessioni, driver e receiver Diafonia accoppiamenti
DettagliLogica binaria. Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna
Logica binaria Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna http://www.moreno.marzolla.name/ Logica binaria 2 Rappresentazione dell'informazione I calcolatori
DettagliProgetto di una Slot Machine da sala scommesse implementata in VHDL e C# Andrea Manganaro Elio Romanelli
Progetto di una Slot Machine da sala scommesse implementata in VHDL e C# Andrea Manganaro Elio Romanelli Regolamentazioni AAMS Descrizione del progetto GAMEGAME RANDOM RANDOM 1-2-31 GAME GAME 2 FINALFINAL
DettagliUnità Aritmetico-Logica
Unità Aritmetico-Logica A ritmethic L ogic U nit E l unità che esegue le operazioni aritmetiche e le operazioni logiche AND e OR 1-bit ALU : è una componente dell ALU che produce un singolo bit sui 32
DettagliARCHITETTURA DEI SISTEMI DI ELABORAZIONE
ARCHITETTURA DEI SISTEMI DI ELABORAZIONE Progetto di una ALU a 16 bit Sommario Progetto di una ALU a 16 bit... 1 Introduzione... 2 Specifiche... 3 Implementazione... 3 Button Manager... 7 Terminale...
Dettagli