Initial commit
This commit is contained in:
@@ -0,0 +1,229 @@
|
||||
Progetto di Reti Logiche
|
||||
|
||||
Prof. Fornaciari, Prof. Palermo e Prof. Salice
|
||||
Anno Accademico 2025 - 2026
|
||||
|
||||
REGOLE per lo svolgimento del progetto
|
||||
(Aggiornamento del 27 Novembre 2025)
|
||||
|
||||
Compito dello studente è quello di descrivere in VHDL e sintetizzare il componente HW che
|
||||
implementa la specifica richiesta, interfacciandosi con una memoria dove sono memorizzati i
|
||||
dati e dove andrà scritto il risultato finale. Allo studente verrà fornito un Test Bench di
|
||||
esempio (che include la memoria) per validare il corretto funzionamento del modulo
|
||||
implementato.
|
||||
|
||||
●
|
||||
|
||||
●
|
||||
|
||||
Il progetto può essere svolto in gruppi composti da un massimo di 2 studenti che
|
||||
debbono avere il medesimo docente di riferimento.
|
||||
Il progetto è una attività autonoma che non coinvolge in nessun modo il corpo
|
||||
docente a meno di chiarimenti sulla specifica di progetto.
|
||||
|
||||
● Nel caso il testo di specifica risulti incompleto, è compito del gruppo di lavoro
|
||||
|
||||
contattare i docenti motivando accuratamente la ragione della incompletezza.
|
||||
|
||||
● Strumento di sintesi da usare è XILINX VIVADO WEBPACK e la FPGA target può
|
||||
essere qualunque perchè il progetto è talmente piccolo che non ha problemi.
|
||||
(Esempio: Artix-7 FPGA xc7a200tfbg484-1)
|
||||
|
||||
Il progetto deve funzionare con un periodo di clock di almeno 20 ns;
|
||||
|
||||
Criteri di valutazione
|
||||
|
||||
● Un componente descritto e simulabile correttamente in pre-sintesi viene valutato fino
|
||||
|
||||
ad un massimo di 24.
|
||||
|
||||
● Un componente sintetizzabile e correttamente simulabile in post-sintesi può ottenere
|
||||
una valutazione superiore a 24: fino a 30 per un progetto fatto in coppia, fino a 30L
|
||||
per un progetto svolto da un singolo studente.
|
||||
|
||||
● Lo studente deve allegare al progetto come documentazione una relazione.
|
||||
Quest’ultima deve includere: 1) specifiche di progetto 2) scelte progettuali 3) risultati
|
||||
dei test fatti e le ragioni di tali test (motivare le scelte) 4) risultati della sintesi. Nel
|
||||
caso di un componente descritto e simulabile correttamente in pre-sintesi questo
|
||||
deve essere chiaramente segnalato anche nella relazione. La qualità della relazione
|
||||
concorre alla definizione del voto complessivo.
|
||||
Il voto finale, in entrambi i casi, terrà conto dei test superati dal componente, dalla
|
||||
qualità del codice VHDL e della relazione presentata (incluse le scelte progettuali).
|
||||
Un progetto fatto in coppia può comunque raggiungere la lode grazie alla valutazione
|
||||
complessiva dell’implementazione e della relazione.
|
||||
|
||||
●
|
||||
|
||||
● ATTENZIONE: non è possibile rifiutare il voto finale. Questo è dovuto alla
|
||||
tipologia del progetto che è considerato, da regolamento didattico, una “PROVA
|
||||
FINALE”.
|
||||
|
||||
● E’ facoltà dei docenti richiedere un'integrazione mediante una discussione orale o
|
||||
una prova pratica relativamente allo sviluppo del progetto nell'ambiente suggerito, in
|
||||
aggiunta alla valutazione basata sulla prova di funzionamento del codice e della
|
||||
relazione.
|
||||
|
||||
Criteri di Consegna
|
||||
|
||||
● La specifica del progetto resta invariata per tutto l’anno accademico. La consegna
|
||||
del progetto può essere fatta solo una volta nell’arco dell’anno accademico con la
|
||||
possibilità di una ed unica risottomissione in caso di insufficienza (si legga la nota
|
||||
successiva).
|
||||
|
||||
●
|
||||
|
||||
● NOTA: nel caso che la prima consegna risulti insufficiente (9<x<18) viene consentita,
|
||||
a parere insindacabile del docente, una successiva consegna; la valutazione, in
|
||||
questo frangente, non potrà superare in nessun caso 24/30. Non sono né previste
|
||||
né eccezioni e/o compensazioni. Ai progetti la cui valutazione è inferiore ai 10/30
|
||||
non verrà offerta la possibilità di riconsegna.
|
||||
Il progetto e la relativa relazione è personale (o del gruppo di due studenti) e
|
||||
per nessun motivo deve essere condiviso con colleghi della propria o di altre
|
||||
sezioni. Il progetto verrà sottoposto ad un controllo anti-plagio confrontandolo con
|
||||
tutti i progetti delle 3 sezioni a partire dalla prima consegna. Nel caso venga
|
||||
identificato un plagio evidente, la prova verrà considerata con valutazione 0/30
|
||||
con relative conseguenze anche di carattere disciplinare. In caso di plagio
|
||||
verrà presa in considerazione anche la/le persone sorgenti del materiale con
|
||||
rettifica del voto anche laddove già verbalizzato.
|
||||
|
||||
● ATTENZIONE: in caso di bocciatura (valutazione che si ottiene in due casi: progetti la
|
||||
cui valutazione è inizialmente inferiore ai 10/30, progetti risultati insufficiente dopo la
|
||||
seconda consegna) il candidato verrà rimandato all’anno accademico successivo.
|
||||
● ATTENZIONE: Nel caso il candidato non riesca a superare positivamente la
|
||||
valutazione del progetto entro l'ultima consegna, dovrà sostenere la “PROVA
|
||||
FINALE” con il progetto dell'anno accademico successivo.
|
||||
|
||||
IMPORTANTE: La "Prova Finale, Progetto di Reti Logiche" è un esame, anzi è da
|
||||
considerarsi alla stregua di una tesi personale, e come tale il progetto DEVE
|
||||
contenere lavoro che deve essere considerabile come dello studente. L'uso di
|
||||
strumenti di AI per supportare la risoluzione dell'assegnamento (o parte di esso) e
|
||||
consegnarlo come se fosse proprio lavoro è considerato una cattiva condotta
|
||||
accademica che è considerata al pari del plagio. Inoltre, se usato da più studenti,
|
||||
strumenti di GenAI, quali ad esempio GitHub-copilot/ChatGPT etc…, generano codice
|
||||
simile tra gli studenti. Questo porta inoltre all’identificazione dello stesso come
|
||||
cross-plagio e quindi come tale verrà trattato. Si può essere ispirati (molto
|
||||
limitatamente), ma non si può sottomettere codice o materiale generato o fortemente
|
||||
derivato/copiato da altri.
|
||||
|
||||
Modalità di consegna:
|
||||
|
||||
Le date previste per le tre sessioni sono:
|
||||
|
||||
●
|
||||
|
||||
●
|
||||
●
|
||||
●
|
||||
|
||||
I consegna entro 1 Febbraio 2026
|
||||
○ per potersi laureare a Marzo (verbalizzazione entro il 20.02.2026)
|
||||
II consegna entro 15 Marzo 2026
|
||||
III consegna entro 26 Aprile 2026
|
||||
IV consegna entro 7 Giugno 2026
|
||||
○ per potersi laureare a Luglio (verbalizzazione entro il 1.07.2024)
|
||||
|
||||
● V consegna entro 13 Luglio 2026
|
||||
|
||||
● VI consegna entro 28 Agosto 2026
|
||||
|
||||
○ per potersi laureare a Settembre/Ottobre (con verbalizzazione entro il
|
||||
|
||||
11.09.2026)
|
||||
|
||||
● VII consegna 11 Settembre 2026
|
||||
● *** Consegna EXTRA *** 1 Dicembre 2026
|
||||
|
||||
● Questa consegna fa parte delle consegne del nuovo anno accademico
|
||||
(26/27). Questa data consente agli iscritti alla prova finale 25/26 di
|
||||
usufruire di un'ulteriore consegna nel nuovo anno accademico con la
|
||||
specifica dell’anno precedente.
|
||||
|
||||
Dopo l’ultima consegna si passa al progetto che verrà proposto per l’anno successivo.
|
||||
|
||||
Per la consegna dei progetti verrà predisposta una cartella su WeBeeP per ogni sessione
|
||||
d’esame. All’interno di questa cartella ogni studente o gruppo di studenti dovrà caricare
|
||||
esattamente due file:
|
||||
|
||||
● un solo file con il codice VHDL - Il file caricato dovrà essere nominato
|
||||
codicePersona.vhd (esempio 10499233.vhd).
|
||||
IMPORTANTE: gli studenti che
|
||||
lavorano in gruppo dovranno caricare un file solo, usando il codice persona di
|
||||
entrambi
|
||||
i due studenti (codicePersona1_codicePersona2.vhd). Deve essere
|
||||
effettuata la consegna da uno solo dei componenti del gruppo. La descrizione della
|
||||
composizione del gruppo dovrà essere anche esplicitamente menzionata nella
|
||||
documentazione allegata.
|
||||
|
||||
●
|
||||
|
||||
● un solo file PDF con la documentazione - In questo caso il nome del file caricato
|
||||
dovrà essere codicePersona.pdf, o codicePersona1_codicePersona2.pdf con lo
|
||||
stesso ordine usato per il file VHDL di cui sopra.
|
||||
IMPORTANTE: gli studenti che hanno lavorato in gruppo dovranno assicurarsi di
|
||||
specificare in modo chiaro la composizione del gruppo (max 2 persone) nella
|
||||
documentazione oltre che nel nome di file. La mancata specifica della composizione
|
||||
del gruppo farà riconoscere il voto solo allo studente il cui codice persona
|
||||
corrisponde a quello dei file caricati.
|
||||
|
||||
● La cartella di consegna verrà chiusa automaticamente dal sistema allo scadere della
|
||||
data prevista. Il progetto verrà considerato consegnato se alla scadenza saranno
|
||||
presenti i due file descritti sopra, con le caratteristiche specificate. La correzione del
|
||||
progetto non è immediata e richiede la verifica tramite diversi test prima della sua
|
||||
valutazione definitiva.
|
||||
IMPORTANTE: qualora i file caricati non rispettassero tali caratteristiche, il progetto
|
||||
verrà considerato non consegnato. !!! Non mettete nulla della descrizione del file
|
||||
quando lo caricate su Webeep, altrimenti questo cambierà nome.
|
||||
|
||||
●
|
||||
|
||||
● Come già ricordato, si utilizzerà un software di analisi per identificare eventuali
|
||||
copie del codice dei progetti che include tutte e 3 le sezioni del corso ed ogni
|
||||
consegna fatta nelle sessioni precedenti. Anche a seguito della consegna, è
|
||||
obbligatorio mantenere privato e personale il progetto sviluppato fino al 31
|
||||
Dicembre 2026, evitando ovviamente anche di pubblicarlo on-line (si presti
|
||||
attenzione alla nota sul fatto di essere sorgente di plagio e alle relative
|
||||
conseguenze).
|
||||
|
||||
Schema della Relazione
|
||||
Qui di seguito vengono riportate delle indicazioni sui punti fondamentali che devono essere
|
||||
trattati all’interno della relazione. Si presti attenzione al fatto che la relazione deve essere
|
||||
sintetica, completa e chiara; lo scopo è quello di per permettere di comprendere come il
|
||||
progetto è stato svolto.
|
||||
|
||||
1. Introduzione: L'obiettivo non è la "copia" della specifica ma una elaborazione, con un
|
||||
|
||||
esempio e, se è possibile, un disegno e/o una immagine, che spieghi cosa succede;
|
||||
|
||||
2. Architettura: L’obiettivo è quello di riportare uno schema funzionale che consenta di
|
||||
valutare come la rete sia stata progettata (schema in moduli... un bel disegno
|
||||
chiaro... i segnali i bus, il/i clock, reset… i segnali interni che interconnettono i moduli,
|
||||
… ):
|
||||
|
||||
a. Modulo 1 (la descrizione - sottoparagrafo - di ogni modulo e la scelta
|
||||
implementativa - per esempio, il modulo ... è una collezione di process che
|
||||
implementano la macchina a stati e la parte di registri, .... La macchina a stati,
|
||||
il cui schema in termini di diagramma degli stati, ha 8 stati. Il primo
|
||||
rappresenta .... e svolge le operazioni di ... il secondo... etc etc)
|
||||
|
||||
b. Modulo …
|
||||
|
||||
3. Risultati sperimentali:
|
||||
|
||||
a. Sintesi (Report del tool di sintesi adeguatamente commentato)
|
||||
b. Simulazioni: L'obiettivo non è solo riportare i risultati ottenuti attraverso la
|
||||
simulazione test bench forniti dai docenti, ma anche una analisi personale e
|
||||
una identificazione dei casi particolari; il fine è mostrare in modo convincente
|
||||
e più completo possibile, che il problema è stato esaminato a fondo e che,
|
||||
quanto sviluppato, soddisfa completamente i requisiti.
|
||||
|
||||
i.
|
||||
|
||||
test bench 1 (cosa fa e perchè lo fa e cosa verifica; per esempio,
|
||||
controlla una condizione limite)
|
||||
test bench 2 (....)
|
||||
|
||||
ii.
|
||||
iii. …
|
||||
|
||||
4. Conclusioni (mezza pagina max)
|
||||
|
||||
@@ -0,0 +1,660 @@
|
||||
Progetto di Reti Logiche
|
||||
|
||||
Prof. Fornaciari, Prof. Palermo e Prof. Salice
|
||||
Anno Accademico 2025 - 2026
|
||||
|
||||
SPECIFICA per lo svolgimento del progetto
|
||||
Revisione del 24 Febbraio 2026
|
||||
|
||||
Descrizione generale
|
||||
La specifica della “Prova Finale (Progetto di Reti Logiche)” per l’Anno Accademico
|
||||
2025/2026 chiede di implementare un modulo HW (descritto in VHDL) che si interfacci con
|
||||
una memoria e che rispetti le indicazioni riportate nella seguente specifica.
|
||||
|
||||
Si richiede di progettare e implementare in VHDL un modulo hardware che gestisce una lista
|
||||
ordinata di task memorizzati in una memoria esterna. Ogni task è rappresentato da una
|
||||
coppia di campi: ID_TASK (6 bit) e PRIORITY (2 bit). Ad esempio, 00100111 indica il task
|
||||
con ID 001001 che ha priorità 11. Le priorità vanno da 0 (più alta) a 3 (più bassa). Non
|
||||
possono esistere due task con lo stesso ID_TASK (questo implica che non possono esistere
|
||||
più di 63 task nella lista). L’ID_TASK è sempre un numero positivo e 0 rappresenta una
|
||||
condizione di errore (lista vuota).
|
||||
|
||||
La lista dei task è memorizzata in una memoria con la seguente struttura:
|
||||
|
||||
● All’indirizzo 0 è memorizzato il numero di task attualmente presenti nella lista.
|
||||
● A partire dall’indirizzo 1 sono memorizzati i task all’interno di un byte di memoria
|
||||
(ID_TASK & PRIORITY), che devono essere sempre mantenuti ordinati in base alla
|
||||
priorità (priorità più bassa numericamente = più alta gerarchicamente, e quindi prima
|
||||
nella lista). All’interno del byte, ID_TASK occupa i 6 bit più alti e PRIORITY i 2 bit più
|
||||
bassi. Ad esempio, 0x00001100 è il task con ID_TASK 3 e PRIORITY 0.
|
||||
|
||||
Il modulo deve supportare quattro operazioni, selezionate tramite un ingresso di controllo a 2
|
||||
bit denominato OP:
|
||||
|
||||
● OP = 00: decrementa la priorità di tutti i task presenti nella lista. Ogni indicatore di
|
||||
priorità deve essere incrementato di 1, senza superare il valore numerico massimo (3
|
||||
- priorità più bassa). Il valore di priorità satura a 3 (priorità minima). Tutti i task
|
||||
mantengono l’ordinamento che avevano prima dell’incremento del valore di priorità.
|
||||
In particolare, la lista dei task a priorità 3 vedrà prima tutti i task che avevano priorità
|
||||
2 e poi quelli che già erano a priorità 3 (in pratica sarà sufficiente modificare i valori di
|
||||
priorità senza alcun riordino).
|
||||
|
||||
● OP = 01: Rimuove dalla lista il primo task (indirizzo 1). Tutti i task successivi devono
|
||||
essere spostati di una posizione, il numero di task deve essere decrementato, e il
|
||||
numero del task estratto deve essere fornito in uscita dal modulo. Il primo task della
|
||||
lista potrebbe avere una priorità qualunque (0, 1, 2 o 3). In caso di lista vuota, deve
|
||||
essere fornito in uscita il valore di ID_TASK 0 (0x000000) . Il valore ID_TASK deve
|
||||
essere valido quando DONE viene portato a 1.
|
||||
|
||||
● OP = 10: Aggiunge un nuovo task alla lista, inserendolo in coda ai task a pari priorità,
|
||||
preservando l’ordine di tutti gli altri task. Se la lista è vuota, il task deve essere
|
||||
inserito in prima posizione.
|
||||
|
||||
● OP = 11: Svuota completamente la lista. Il valore in memoria all’indirizzo 0 deve
|
||||
essere posto a zero; il contenuto degli altri indirizzi può essere ignorato (quello che è
|
||||
stato scritto in passato riamane invariato) o resettato (tutti i valori sono posti a zero).
|
||||
|
||||
Il modulo utilizza un protocollo di hand-shake START-DONE per la sincronizzazione con la
|
||||
logica esterna. Il comportamento richiesto è il seguente:
|
||||
|
||||
●
|
||||
|
||||
Il segnale START, generato dall’esterno, viene posto a 1 per avviare l’operazione
|
||||
selezionata tramite OP.
|
||||
|
||||
● START deve rimanere a 1 fino a quando il modulo non porta il segnale DONE a 1,
|
||||
|
||||
indicando che l’operazione è stata completata.
|
||||
|
||||
● Quando DONE è a 1, la logica esterna deve riportare START a 0.
|
||||
● Quando START torna a 0, il modulo può riportare DONE a 0 e prepararsi a ricevere
|
||||
|
||||
una nuova operazione.
|
||||
|
||||
● Una nuova operazione può essere avviata solo quando DONE è a 0.
|
||||
|
||||
Dopo che il modulo viene resettato (quindi subito dopo la transizione RESET 1 -> 0), esso
|
||||
deve comportarsi come segue:
|
||||
|
||||
● Dopo un reset, la lista deve essere considerata vuota. Il modulo deve quindi scrivere
|
||||
|
||||
il valore zero all’indirizzo 0 della memoria.
|
||||
|
||||
● Durante questa fase di inizializzazione, il segnale DONE deve essere mantenuto a 1,
|
||||
indicando che il modulo non è ancora pronto a ricevere operazioni, e solo dopo che
|
||||
l’azzeramento è stato effettuato, il modulo può riportare DONE a 0 e rendersi
|
||||
disponibile a nuove operazioni.
|
||||
|
||||
Il modulo deve garantire:
|
||||
|
||||
Il corretto aggiornamento della memoria in seguito a ogni operazione.
|
||||
Il mantenimento dell’ordine dei task nella lista.
|
||||
|
||||
●
|
||||
●
|
||||
● La gestione appropriata dei casi limite, ad esempio lista vuota.
|
||||
●
|
||||
|
||||
Il rispetto del protocollo START-DONE come descritto.
|
||||
|
||||
Si precisa che
|
||||
la presente specifica descrive un comportamento completamente
|
||||
deterministico: a parità di sequenze di ingresso, le uscite generate e il contenuto della
|
||||
memoria nella parte valida (lista dei task) risultano invariati. Qualsiasi eventuale scenario
|
||||
che presenti ambiguità o comportamenti non univocamente determinati dovrà essere
|
||||
identificato e prontamente segnalato.
|
||||
|
||||
Interfaccia del Componente
|
||||
Il modulo da implementare ha 4 ingressi primari, uno ad 1 bit (i_start), uno a 6 bit (i_task_id),
|
||||
uno a 2 bit (i_task_priority) e uno da 2 bit (i_op), e due uscite primarie, una da 1 bit (o_done)
|
||||
e una da 6 bit (o_task_id). Inoltre, il modulo ha un segnale di clock CLK, unico per tutto il
|
||||
sistema e un segnale di reset RESET anch’esso unico per tutto il sistema. Tutti i segnali
|
||||
sono sincroni e devono essere interpretati sul fronte di salita del clock. L’unica eccezione è
|
||||
RESET che, invece, è asincrono. RESET può essere generato in qualsiasi momento
|
||||
dell’esecuzione.
|
||||
|
||||
Il componente da descrivere deve avere la seguente interfaccia.
|
||||
|
||||
entity project_reti_logiche is
|
||||
|
||||
port (
|
||||
|
||||
i_clk : in std_logic;
|
||||
|
||||
i_rst : in std_logic;
|
||||
|
||||
i_start
|
||||
|
||||
: in std_logic;
|
||||
|
||||
i_task_id
|
||||
|
||||
: in std_logic_vector(5 downto 0);
|
||||
|
||||
i_task_priority : in std_logic_vector(1 downto 0);
|
||||
|
||||
i_op : in std_logic_vector(1 downto 0);
|
||||
|
||||
o_done : out std_logic;
|
||||
|
||||
o_task_id : out std_logic_vector(5 downto 0);
|
||||
|
||||
o_mem_addr : out std_logic_vector(15 downto 0);
|
||||
|
||||
i_mem_data : in std_logic_vector(7 downto 0);
|
||||
|
||||
o_mem_data : out std_logic_vector(7 downto 0);
|
||||
|
||||
o_mem_we : out std_logic;
|
||||
|
||||
o_mem_en : out std_logic
|
||||
|
||||
);
|
||||
|
||||
end project_reti_logiche;
|
||||
|
||||
In particolare:
|
||||
|
||||
●
|
||||
|
||||
●
|
||||
●
|
||||
|
||||
●
|
||||
●
|
||||
|
||||
il nome del modulo deve essere project_reti_logiche e deve essere
|
||||
presente una sola architettura per ogni entità; la violazione di queste
|
||||
indicazioni comporta
|
||||
il Test Bench e una
|
||||
l’impossibilità di eseguire
|
||||
conseguente valutazione di zero;
|
||||
i_clk è il segnale di CLOCK in ingresso generato dal Test Bench;
|
||||
i_rst è il segnale di RESET che inizializza la macchina pronta per ricevere il
|
||||
primo segnale di START;
|
||||
i_start è il segnale di START generato dal Test Bench;
|
||||
i_task_id è il vettore di bit rappresentante il ID_TASK generato dal Test
|
||||
Bench;
|
||||
|
||||
●
|
||||
|
||||
●
|
||||
|
||||
i_task_priority è il vettore di bit rappresentante il PRIORITY generato dal Test
|
||||
Bench;
|
||||
i_op è il vettore di 2 bit rappresentante l’operazione da dover effettuare sulla
|
||||
lista di task;
|
||||
|
||||
● o_done è il segnale DONE di uscita che comunica la fine dell’elaborazione;
|
||||
● o_task_id è il vettore di bit rappresentante il ID_TASK del task a priorità più
|
||||
|
||||
alta estratto dalla memoria;
|
||||
|
||||
● o_mem_addr è il segnale (vettore) di uscita che manda l’indirizzo alla
|
||||
|
||||
●
|
||||
|
||||
memoria;
|
||||
i_mem_data è il segnale (vettore) che arriva dalla memoria e contiene il dato
|
||||
in seguito ad una richiesta di lettura;
|
||||
|
||||
● o_mem_data è il segnale (vettore) che va verso la memoria e contiene il dato
|
||||
|
||||
che verrà successivamente scritto;
|
||||
|
||||
● o_mem_en è il segnale di ENABLE da dover mandare alla memoria per poter
|
||||
|
||||
comunicare (sia in lettura che in scrittura);
|
||||
|
||||
● o_mem_we è il segnale di WRITE ENABLE da dover mandare alla memoria
|
||||
|
||||
(=1) per poter scriverci. Per leggere da memoria, esso deve essere 0.
|
||||
|
||||
APPENDICE: Descrizione Memoria
|
||||
NOTA: La memoria è già istanziata all’interno del Test Bench e non va sintetizzata
|
||||
|
||||
La memoria e il suo protocollo può essere estratto dalla seguente descrizione VHDL che fa
|
||||
parte del test bench e che è derivata dalla User guide di VIVADO disponibile al seguente
|
||||
link:
|
||||
https://www.xilinx.com/support/documentation/sw_manuals/xilinx2017_3/ug901-vivado-synth
|
||||
esis.pdf
|
||||
|
||||
-- Single-Port Block RAM Write-First Mode (recommended template)
|
||||
--
|
||||
-- File: rams_02.vhd
|
||||
--
|
||||
library ieee;
|
||||
use ieee.std_logic_1164.all;
|
||||
use ieee.std_logic_unsigned.all;
|
||||
entity rams_sp_wf is
|
||||
port(
|
||||
clk : in std_logic;
|
||||
we : in std_logic;
|
||||
en : in std_logic;
|
||||
addr : in std_logic_vector(15 downto 0);
|
||||
di : in std_logic_vector(7 downto 0);
|
||||
do : out std_logic_vector(7 downto 0)
|
||||
);
|
||||
end rams_sp_wf;
|
||||
|
||||
architecture syn of rams_sp_wf is
|
||||
type ram_type is array (65535 downto 0) of std_logic_vector(7 downto 0);
|
||||
signal RAM : ram_type;
|
||||
begin
|
||||
process(clk)
|
||||
|
||||
begin
|
||||
if clk'event and clk = '1' then
|
||||
if en = '1' then
|
||||
if we = '1' then
|
||||
|
||||
RAM(conv_integer(addr)) <= di;
|
||||
do
|
||||
|
||||
<= di after 2 ns;
|
||||
|
||||
else
|
||||
|
||||
do <= RAM(conv_integer(addr)) after 2 ns;
|
||||
|
||||
end if;
|
||||
end if;
|
||||
end if;
|
||||
end process;
|
||||
end syn;
|
||||
|
||||
ESEMPIO
|
||||
L’esempio qui di seguito mostra il comportamento a seguito dei segnali di ingresso. Qui di
|
||||
seguito è presente la situazione della memoria a seguito dell’inserimento di diversi task (fase
|
||||
non mostrata nell’esempio). I valori non espliciti sono valori di memoria che non vengono
|
||||
considerati per il normale funzionamento.
|
||||
|
||||
SITUAZIONE INIZIALE (6 task già in tabella)
|
||||
|
||||
MEMORIA
|
||||
|
||||
INDIRIZZO
|
||||
|
||||
VALORE
|
||||
|
||||
ID_TASK PRIORITY
|
||||
|
||||
0x00000110
|
||||
|
||||
0x01000000
|
||||
|
||||
0x01011000
|
||||
|
||||
0x01011100
|
||||
|
||||
0x01010101
|
||||
|
||||
0x01110010
|
||||
|
||||
0x00010011
|
||||
|
||||
16
|
||||
|
||||
22
|
||||
|
||||
23
|
||||
|
||||
21
|
||||
|
||||
28
|
||||
|
||||
4
|
||||
|
||||
0
|
||||
|
||||
0
|
||||
|
||||
0
|
||||
|
||||
1
|
||||
|
||||
2
|
||||
|
||||
3
|
||||
|
||||
0
|
||||
|
||||
1
|
||||
|
||||
2
|
||||
|
||||
3
|
||||
|
||||
4
|
||||
|
||||
5
|
||||
|
||||
6
|
||||
|
||||
7
|
||||
|
||||
OPERAZIONE: 00 (incremento valore di priorità)
|
||||
|
||||
MEMORIA
|
||||
|
||||
INDIRIZZO
|
||||
|
||||
VALORE
|
||||
|
||||
ID_TASK PRIORITY
|
||||
|
||||
0x00000110
|
||||
|
||||
0x01000001
|
||||
|
||||
0x01011001
|
||||
|
||||
0x01011101
|
||||
|
||||
0x01010110
|
||||
|
||||
0x01110011
|
||||
|
||||
0x00010011
|
||||
|
||||
16
|
||||
|
||||
22
|
||||
|
||||
23
|
||||
|
||||
21
|
||||
|
||||
28
|
||||
|
||||
4
|
||||
|
||||
1
|
||||
|
||||
1
|
||||
|
||||
1
|
||||
|
||||
2
|
||||
|
||||
3
|
||||
|
||||
3
|
||||
|
||||
0
|
||||
|
||||
1
|
||||
|
||||
2
|
||||
|
||||
3
|
||||
|
||||
4
|
||||
|
||||
5
|
||||
|
||||
6
|
||||
|
||||
7
|
||||
|
||||
OPERAZIONE: 10 (aggiunge un task) - ID_TASK: 19 - PRIORITY: 2
|
||||
|
||||
MEMORIA
|
||||
|
||||
INDIRIZZO
|
||||
|
||||
VALORE
|
||||
|
||||
ID_TASK PRIORITY
|
||||
|
||||
0x00000111
|
||||
|
||||
0x01000001
|
||||
|
||||
0x01011001
|
||||
|
||||
0x01011101
|
||||
|
||||
0x01010110
|
||||
|
||||
0x01001110
|
||||
|
||||
0x01110011
|
||||
|
||||
0x00010011
|
||||
|
||||
16
|
||||
|
||||
22
|
||||
|
||||
23
|
||||
|
||||
21
|
||||
|
||||
19
|
||||
|
||||
28
|
||||
|
||||
4
|
||||
|
||||
1
|
||||
|
||||
1
|
||||
|
||||
1
|
||||
|
||||
2
|
||||
|
||||
2
|
||||
|
||||
3
|
||||
|
||||
3
|
||||
|
||||
0
|
||||
|
||||
1
|
||||
|
||||
2
|
||||
|
||||
3
|
||||
|
||||
4
|
||||
|
||||
5
|
||||
|
||||
6
|
||||
|
||||
7
|
||||
|
||||
8
|
||||
|
||||
OPERAZIONE: 01 (rimuove il primo task)
|
||||
|
||||
MEMORIA
|
||||
|
||||
INDIRIZZO
|
||||
|
||||
VALORE
|
||||
|
||||
ID_TASK PRIORITY
|
||||
|
||||
0x00000110
|
||||
|
||||
0x01011001
|
||||
|
||||
0x01011101
|
||||
|
||||
0x01010110
|
||||
|
||||
0x01001110
|
||||
|
||||
0x01110011
|
||||
|
||||
0x00010011
|
||||
|
||||
22
|
||||
|
||||
23
|
||||
|
||||
21
|
||||
|
||||
19
|
||||
|
||||
28
|
||||
|
||||
4
|
||||
|
||||
1
|
||||
|
||||
1
|
||||
|
||||
2
|
||||
|
||||
2
|
||||
|
||||
3
|
||||
|
||||
3
|
||||
|
||||
0
|
||||
|
||||
1
|
||||
|
||||
2
|
||||
|
||||
3
|
||||
|
||||
4
|
||||
|
||||
5
|
||||
|
||||
6
|
||||
|
||||
7
|
||||
|
||||
OPERAZIONE: 11 (svuota la lista)
|
||||
|
||||
MEMORIA
|
||||
|
||||
INDIRIZZO
|
||||
|
||||
VALORE
|
||||
|
||||
ID_TASK PRIORITY
|
||||
|
||||
0x00000000
|
||||
|
||||
0
|
||||
|
||||
1
|
||||
|
||||
OPERAZIONE: 10 (aggiunge un task) - ID_TASK: 31 - PRIORITY: 3
|
||||
|
||||
MEMORIA
|
||||
|
||||
INDIRIZZO
|
||||
|
||||
VALORE
|
||||
|
||||
ID_TASK PRIORITY
|
||||
|
||||
0x00000001
|
||||
|
||||
0x01111111
|
||||
|
||||
0
|
||||
|
||||
1
|
||||
|
||||
2
|
||||
|
||||
OPERAZIONE: 10 (aggiunge un task) - ID_TASK: 15 - PRIORITY: 0
|
||||
|
||||
MEMORIA
|
||||
|
||||
INDIRIZZO
|
||||
|
||||
VALORE
|
||||
|
||||
ID_TASK PRIORITY
|
||||
|
||||
0x00000010
|
||||
|
||||
0x00111100
|
||||
|
||||
0x01111111
|
||||
|
||||
15
|
||||
|
||||
31
|
||||
|
||||
0
|
||||
|
||||
3
|
||||
|
||||
0
|
||||
|
||||
1
|
||||
|
||||
2
|
||||
|
||||
3
|
||||
|
||||
OPERAZIONE: 10 (aggiunge un task) - ID_TASK: 20 - PRIORITY: 0
|
||||
|
||||
MEMORIA
|
||||
|
||||
INDIRIZZO
|
||||
|
||||
VALORE
|
||||
|
||||
ID_TASK PRIORITY
|
||||
|
||||
0
|
||||
|
||||
1
|
||||
|
||||
2
|
||||
|
||||
3
|
||||
|
||||
0x000000011
|
||||
|
||||
0x00111100
|
||||
|
||||
0x01010000
|
||||
|
||||
0x01111111
|
||||
|
||||
15
|
||||
|
||||
20
|
||||
|
||||
31
|
||||
|
||||
0
|
||||
|
||||
0
|
||||
|
||||
3
|
||||
|
||||
Progetto di Reti Logiche
|
||||
|
||||
Prof. Fornaciari, Prof. Palermo e Prof. Salice
|
||||
Anno Accademico 2025 - 2026
|
||||
|
||||
NOTE DI AGGIORNAMENTO DELLA SPECIFICA
|
||||
|
||||
In questa pagina potete trovare le modifiche fatte alla specifica del progetto dal suo primo rilascio.
|
||||
Tutti i cambiamenti con data annessa saranno riportati qui sotto e sono mantenuti in rosso nel testo.
|
||||
|
||||
Errata Corrige:
|
||||
|
||||
- Aggiornamento 24.02.2026:
|
||||
|
||||
-
|
||||
|
||||
Il numero massimo di task nella lista non è 31 come nella versione originale ma 63.
|
||||
Questo è derivato dal fatto che il numero di bit per il task_id è 6.
|
||||
|
||||
@@ -0,0 +1,793 @@
|
||||
\documentclass[12pt,a4paper]{article}
|
||||
|
||||
% --- Preambolo ---
|
||||
\usepackage[utf8]{inputenc}
|
||||
\usepackage[T1]{fontenc}
|
||||
\usepackage[italian]{babel}
|
||||
\usepackage{amsmath, amsfonts, amssymb}
|
||||
\usepackage{geometry}
|
||||
\usepackage{graphicx}
|
||||
\usepackage{listings}
|
||||
\usepackage{xcolor}
|
||||
\usepackage{lstautogobble}
|
||||
|
||||
\usepackage{booktabs}
|
||||
\usepackage{xcolor}
|
||||
\usepackage{colortbl}
|
||||
\usepackage{float}
|
||||
|
||||
\usepackage{caption}
|
||||
|
||||
\usepackage{hyperref}
|
||||
\hypersetup{
|
||||
colorlinks=false,
|
||||
pdfborder={0 0 0}
|
||||
}
|
||||
|
||||
|
||||
\geometry{a4paper, margin=3cm}
|
||||
|
||||
% Configurazione professionale per il codice VHDL
|
||||
\lstset{
|
||||
language=VHDL,
|
||||
basicstyle=\ttfamily\small, % Font monospaziato piccolo
|
||||
keywordstyle=\color{blue}, % Parole chiave in blu
|
||||
commentstyle=\color{gray}, % Commenti in grigio
|
||||
breaklines=true, % VA A CAPO AUTOMATICAMENTE
|
||||
frame=single, % Bordo attorno al codice
|
||||
numbers=left, % Numeri di riga a sinistra
|
||||
numberstyle=\tiny\color{gray},
|
||||
xleftmargin=10pt, % Margine per far rientrare i numeri di riga
|
||||
showstringspaces=false,
|
||||
autogobble=true,
|
||||
tabsize=2,
|
||||
}
|
||||
|
||||
\begin{document}
|
||||
|
||||
\begin{titlepage}
|
||||
\centering
|
||||
{\large \textbf{POLITECNICO DI MILANO 1863}} \\
|
||||
\vspace{1cm}
|
||||
\includegraphics[width=0.4\textwidth]{logo_polimi.jpg} \\
|
||||
\vspace{2cm}
|
||||
|
||||
{\Large \textbf{Relazione Progetto Reti Logiche}} \\
|
||||
\vspace{1cm}
|
||||
|
||||
{\large Aleandro Pagani} \\
|
||||
\vspace{0.5cm}
|
||||
{\large Giugno 2026} \\
|
||||
|
||||
\vfill
|
||||
|
||||
{\large Matricola: 236992} \\
|
||||
{\large Codice persona: 10893566} \\
|
||||
\vspace{1cm}
|
||||
{\large Professore: Fabio Salice}
|
||||
\end{titlepage}
|
||||
|
||||
\newpage
|
||||
|
||||
\pagenumbering{roman}
|
||||
\tableofcontents
|
||||
\newpage
|
||||
|
||||
|
||||
|
||||
\pagenumbering{arabic}
|
||||
\section{Introduzione}
|
||||
\subsection{Specifiche generali}
|
||||
\subsubsection{Descrizione}
|
||||
|
||||
Il progetto consiste nel descrivere un modulo hardware che si interfaccia con una memoria in cui la prima cella contiene il contatore dei task e le celle successive la lista ordinata. Il modulo deve supportare quattro tipi di operazioni il cui codice identificativo è fornito in ingresso:
|
||||
\begin{itemize}
|
||||
\item \textbf{00}: Decrementa la priorità di tutti i task
|
||||
\item \textbf{01}: Rimuove il primo task della lista
|
||||
\item \textbf{10}: Aggiunge un nuovo task in lista
|
||||
\item \textbf{11}: Svuota completamente la lista
|
||||
\end{itemize}
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\begin{minipage}{0.45\textwidth}
|
||||
\centering
|
||||
\includegraphics[width=\textwidth]{INTRODUZIONE/OP_00.png}
|
||||
\caption*{OP 00.}
|
||||
\label{fig:00}
|
||||
\end{minipage}
|
||||
\hfill
|
||||
\begin{minipage}{0.45\textwidth}
|
||||
\centering
|
||||
\includegraphics[width=\textwidth]{INTRODUZIONE/OP_01.png}
|
||||
\caption*{OP 01.}
|
||||
\label{fig:01}
|
||||
\end{minipage}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\begin{minipage}{0.45\textwidth}
|
||||
\centering
|
||||
\includegraphics[width=\textwidth]{INTRODUZIONE/OP_10.png}
|
||||
\caption*{OP 10 (inserisco task 000000 01).}
|
||||
\label{fig:10}
|
||||
\end{minipage}
|
||||
\hfill
|
||||
\begin{minipage}{0.45\textwidth}
|
||||
\centering
|
||||
\includegraphics[width=\textwidth]{INTRODUZIONE/OP_11.png}
|
||||
\caption*{OP 11.}
|
||||
\label{fig:11}
|
||||
\end{minipage}
|
||||
\end{figure}
|
||||
|
||||
\newpage
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
\subsubsection{Funzionamento}
|
||||
La sincronizzazione tra la logica esterna e il modulo hardware avviene tramite un protocollo di handshake \textbf{START-DONE}.
|
||||
Il funzionamento del modulo è scandito attraverso 5 fasi:
|
||||
\begin{itemize}
|
||||
\item \textbf{Inizializzazione:} Vengono forniti i dati e posto il segnale \textbf{START} a 1.
|
||||
\item \textbf{Elaborazione:} Il modulo avvia le operazioni e interagisce con la memoria.
|
||||
\item \textbf{Completamento:} Terminate le operazioni, il modulo imposta il segnale \textbf{DONE} a 1.
|
||||
\item \textbf{Riconoscimento:} La logica esterna pone il segnale \textbf{START} a 0.
|
||||
\item \textbf{Ripristino:} Il modulo riporta il segnale \textbf{DONE} a 0 e torna in attesa di nuove direttive.
|
||||
\end{itemize}
|
||||
|
||||
\vspace{0.5cm}
|
||||
\centerline{\includegraphics[width=0.6\textwidth]{START-DONE handshake.png}}
|
||||
\newpage
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
\subsection{Descrizione modulo}
|
||||
|
||||
\begin{lstlisting}
|
||||
entity project_reti_logiche is
|
||||
port (
|
||||
i_clk: in std_logic;
|
||||
i_rst: in std_logic;
|
||||
|
||||
i_start: in std_logic;
|
||||
i_task_id: in std_logic_vector(5 downto 0);
|
||||
i_task_priority : in std_logic_vector(1 downto 0);
|
||||
i_op: in std_logic_vector(1 downto 0);
|
||||
|
||||
o_done: out std_logic;
|
||||
o_task_id: out std_logic_vector(5 downto 0);
|
||||
|
||||
o_mem_addr : out std_logic_vector(15 downto 0);
|
||||
i_mem_data : in std_logic_vector(7 downto 0);
|
||||
o_mem_data : out std_logic_vector(7 downto 0);
|
||||
o_mem_we: out std_logic;
|
||||
o_mem_en: out std_logic
|
||||
);
|
||||
end project_reti_logiche;
|
||||
\end{lstlisting}
|
||||
|
||||
\begin{itemize}
|
||||
\item \textbf{i\_clk:} Segnale di clock
|
||||
\item \textbf{i\_rst:} Segnale di reset
|
||||
\vspace{0.5cm}
|
||||
\item \textbf{i\_start:} Segnale \textbf{START} di handshake
|
||||
\item \textbf{i\_task\_id:} Codice del task da inserire
|
||||
\item \textbf{i\_task\_priority:} Priorità del task da inserire
|
||||
\item \textbf{i\_op:} ID dell'operazione da eseguire
|
||||
\vspace{0.5cm}
|
||||
\item \textbf{o\_done:} Segnale \textbf{DONE} di handshake
|
||||
\item \textbf{o\_task\_id:} Codice del task restituito dall'eliminazione
|
||||
\vspace{0.5cm}
|
||||
\item \textbf{o\_mem\_addr:} Indirizzo di memoria con cui interagire
|
||||
\item \textbf{i\_mem\_data:} Informazioni lette dalla memoria
|
||||
\item \textbf{o\_mem\_data:} Informazioni da scrivere in memoria
|
||||
\item \textbf{o\_mem\_we:} Flag per abilitare la scrittura in memoria
|
||||
\item \textbf{o\_mem\_en:} Flag per abilitare la lettura in memoria
|
||||
\end{itemize}
|
||||
\newpage
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
\subsection{Descrizione memoria}
|
||||
\subsubsection{Implementazione fornita}
|
||||
\begin{lstlisting}
|
||||
library ieee;
|
||||
use ieee.std_logic_1164.all;
|
||||
use ieee.std_logic_unsigned.all;
|
||||
|
||||
entity rams_sp_wf is
|
||||
port(
|
||||
clk : in std_logic;
|
||||
we : in std_logic;
|
||||
en : in std_logic;
|
||||
addr : in std_logic_vector(15 downto 0);
|
||||
di : in std_logic_vector(7 downto 0);
|
||||
do : out std_logic_vector(7 downto 0)
|
||||
);
|
||||
end rams_sp_wf;
|
||||
|
||||
architecture syn of rams_sp_wf is
|
||||
type ram_type is array (65535 downto 0) of std_logic_vector(7 downto 0);
|
||||
signal RAM : ram_type;
|
||||
begin
|
||||
process(clk)
|
||||
begin
|
||||
if clk'event and clk = '1' then
|
||||
if en = '1' then
|
||||
if we = '1' then
|
||||
RAM(conv_integer(addr)) <= di;
|
||||
do <= di; -- Write-First
|
||||
else
|
||||
do <= RAM(conv_integer(addr));
|
||||
end if;
|
||||
end if;
|
||||
end if;
|
||||
end process;
|
||||
end syn;
|
||||
\end{lstlisting}
|
||||
|
||||
\begin{itemize}
|
||||
\item \textbf{clk:} Segnale di clock
|
||||
\item \textbf{we:} Flag di scrittura
|
||||
\item \textbf{en:} Flag di lettura
|
||||
\item \textbf{addr:} Indirizzo con cui interagire
|
||||
\item \textbf{di:} Dati in ingresso
|
||||
\item \textbf{do:} Dati in uscita
|
||||
\end{itemize}
|
||||
\newpage
|
||||
|
||||
\subsubsection{Layout di memoria}
|
||||
La RAM indirizza 65536 celle da un byte (indirizzi a 16 bit); la lista ne utilizza al più 64: la prima (\textbf{0}) rappresenta il numero di task presenti, le successive contengono i task (al massimo 63, dato che gli ID sono a 6 bit e l'ID 0 è riservato).\\
|
||||
Per ogni task, i primi 6 bit ne identificano il codice, mentre gli ultimi 2 la priorità.
|
||||
\vspace{0.7cm}
|
||||
|
||||
|
||||
\begin{minipage}[c]{0.30\textwidth}
|
||||
\centering
|
||||
\includegraphics[width=\textwidth]{MemoryDiagram.png}
|
||||
\end{minipage}
|
||||
\hfill
|
||||
\begin{minipage}[c]{0.60\textwidth}
|
||||
|
||||
In questo esempio abbiamo 3 task:
|
||||
\begin{itemize}
|
||||
\item \textbf{001111 00:} Task con codice 15 e priorità 0
|
||||
\item \textbf{010100 00:} Task con codice 20 e priorità 0
|
||||
\item \textbf{011011 11:} Task con codice 27 e priorità 3
|
||||
\end{itemize}
|
||||
Tutti gli altri elementi in memoria non vengono considerati validi.
|
||||
\end{minipage}
|
||||
\newpage
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
\section{Architettura}
|
||||
Data la dimensione ridotta del progetto, il componente è composto da un unico modulo con due processi: uno sincrono e uno combinatorio.
|
||||
|
||||
Nell'implementazione presentata è stata privilegiata la leggibilità rispetto all'efficienza e alla minimizzazione del numero di segnali.
|
||||
|
||||
\subsection{Segnali interni}
|
||||
\begin{lstlisting}
|
||||
signal state : state_type;
|
||||
signal next_state : state_type;
|
||||
|
||||
signal current_mem_addr : std_logic_vector(15 downto 0);
|
||||
signal next_mem_addr : std_logic_vector(15 downto 0);
|
||||
|
||||
signal current_task_count : std_logic_vector(7 downto 0);
|
||||
signal next_task_count : std_logic_vector(7 downto 0);
|
||||
|
||||
signal current_popped_id : std_logic_vector(5 downto 0);
|
||||
signal next_popped_id : std_logic_vector(5 downto 0);
|
||||
|
||||
signal ctrl_done : std_logic;
|
||||
signal ctrl_mem_en : std_logic;
|
||||
signal ctrl_mem_we : std_logic;
|
||||
signal ctrl_mem_data : std_logic_vector(7 downto 0);
|
||||
signal ctrl_task_id : std_logic_vector(5 downto 0);
|
||||
\end{lstlisting}
|
||||
|
||||
I registri interni sono organizzati in coppie \textbf{current\_*}/\textbf{next\_*}: il processo combinatorio calcola il valore \textbf{next\_*}, il processo sincrono lo registra in \textbf{current\_*} sul fronte di clock.
|
||||
|
||||
\begin{itemize}
|
||||
\item \textbf{state:} Stato attuale dell'FSM
|
||||
\item \textbf{next\_state:} Prossimo stato dell'FSM
|
||||
\vspace{0.5cm}
|
||||
\item \textbf{current\_mem\_addr / next\_mem\_addr:} Indirizzo di memoria su cui la FSM sta lavorando (0 = contatore, 1..N = task)
|
||||
\item \textbf{current\_task\_count / next\_task\_count:} Copia locale del numero di task presenti in lista (cella 0 della memoria)
|
||||
\item \textbf{current\_popped\_id / next\_popped\_id:} ID estratto dall'ultima rimozione, presentato su \textbf{o\_task\_id} quando \textbf{DONE} viene alzato
|
||||
\vspace{0.5cm}
|
||||
\item \textbf{ctrl\_done:} Segnale di controllo di \textbf{DONE}
|
||||
\item \textbf{ctrl\_mem\_en:} Segnale per abilitare la lettura in memoria
|
||||
\item \textbf{ctrl\_mem\_we:} Segnale per abilitare la scrittura in memoria
|
||||
\item \textbf{ctrl\_mem\_data:} Dati da scrivere in memoria
|
||||
\item \textbf{ctrl\_task\_id:} Valore da presentare sull'uscita \textbf{o\_task\_id}
|
||||
\end{itemize}
|
||||
|
||||
\subsection{Processo sincrono}
|
||||
Questo processo registra sul fronte di salita del clock lo stato, i registri e tutte le uscite del modulo.
|
||||
\begin{lstlisting}
|
||||
process(i_clk, i_rst)
|
||||
begin
|
||||
if i_rst = '1' then
|
||||
state <= S_RESET;
|
||||
o_done <= '1';
|
||||
o_mem_en <= '0';
|
||||
o_mem_we <= '0';
|
||||
elsif rising_edge(i_clk) then
|
||||
state <= next_state;
|
||||
current_mem_addr <= next_mem_addr;
|
||||
current_task_count <= next_task_count;
|
||||
current_popped_id <= next_popped_id;
|
||||
|
||||
o_done <= ctrl_done;
|
||||
o_mem_en <= ctrl_mem_en;
|
||||
o_mem_we <= ctrl_mem_we;
|
||||
o_mem_addr <= next_mem_addr;
|
||||
o_mem_data <= ctrl_mem_data;
|
||||
o_task_id <= ctrl_task_id;
|
||||
end if;
|
||||
end process;
|
||||
\end{lstlisting}
|
||||
Sul fronte di salita del clock i registri \textbf{current\_*} vengono aggiornati con i corrispettivi valori \textbf{next\_*} e, contemporaneamente, vengono scritti sui bus di uscita \textbf{o\_*} i valori calcolati dal processo combinatorio.
|
||||
|
||||
Il reset, asincrono, porta la FSM in \textbf{S\_RESET} con \textbf{DONE} a 1 (come richiesto dalla specifica) e disabilita l'interfaccia verso la memoria: in questo modo il modulo non può produrre scritture involontarie mentre il reset è attivo, indipendentemente dall'istante in cui arriva.
|
||||
|
||||
\vspace{0.5cm}
|
||||
Due scelte progettuali meritano attenzione:
|
||||
\begin{itemize}
|
||||
\item \textbf{Uscite registrate:} I segnali interni \textbf{ctrl\_*} vengono assegnati alle uscite \textbf{o\_*} solo nel processo sincrono: oltre a separare la logica di controllo dall'aggiornamento delle uscite, questo garantisce che i segnali verso la memoria siano privi di glitch.
|
||||
\item \textbf{Indirizzo anticipato:} \textbf{o\_mem\_addr} viene registrato da \textbf{next\_mem\_addr} (e non da \textbf{current\_mem\_addr}): l'indirizzo arriva così alla memoria con un ciclo di anticipo rispetto allo stato che ne consumerà il dato. Poiché la memoria ha lettura sincrona con latenza di un ciclo, questa convenzione permette a ogni stato di richiedere una lettura e allo stato successivo (dopo un solo ciclo "cuscinetto") di usarne il risultato.
|
||||
\end{itemize}
|
||||
\newpage
|
||||
|
||||
\subsection{Processo combinatorio}
|
||||
Questo è il processo principale del modulo hardware: esso è responsabile della logica interna e della gestione degli stati FSM.\\
|
||||
Vengono di seguito analizzati tutti gli stati presenti.
|
||||
|
||||
|
||||
\begin{lstlisting}
|
||||
type state_type is (
|
||||
S_IDLE, S_RESET, S_DONE,
|
||||
|
||||
S_00_READ, S_00_WAIT, S_00_CHECK, S_00_GO_NEXT,
|
||||
|
||||
S_01_CHECK_NUMBER, S_01_WAIT, S_01_WRITE, S_01_CHECK_END, S_01_COPY, S_01_GO_NEXT, S_01_WAIT_FOR_COUNT,
|
||||
|
||||
S_10_PLACE_AT_START, S_10_WAIT_FOR_CHECK, S_10_CHECK_ID, S_10_WAIT, S_10_COMPARE, S_10_GO_NEXT, S_10_UPDATE_COUNT, S_10_WAIT_FOR_COUNT,
|
||||
|
||||
S_11_UPDATE_COUNT, S_11_WAIT_FOR_COUNT
|
||||
);
|
||||
\end{lstlisting}
|
||||
|
||||
\subsubsection{Stati di gestione del protocollo}
|
||||
\begin{itemize}
|
||||
\item \textbf{S\_IDLE:} Stato di attesa. Quando viene rilevato il segnale \textbf{START=1}, viene avviata l'operazione indicata dal codice \textbf{i\_op}. Al dispatch viene anche azzerato il registro \textbf{popped\_id}, così \textbf{o\_task\_id} varrà 0 per ogni operazione diversa da una rimozione andata a buon fine.
|
||||
\item \textbf{S\_RESET:} Stato di reset. Imposta il contatore nella prima cella di memoria a 0, invalidando tutte le altre, mentre \textbf{DONE} rimane a 1 come richiesto dalla specifica.
|
||||
\item \textbf{S\_DONE:} Alza \textbf{DONE} e lo tiene a 1 finché \textbf{START} non torna a 0, come richiesto dal protocollo di handshake. Tutte le operazioni raggiungono questo stato un ciclo dopo il proprio stato terminale: \textbf{DONE} sale quindi sempre \emph{dopo} il commit in memoria dell'ultima scrittura, e la logica esterna che campiona la memoria sul fronte di \textbf{DONE} legge dati già aggiornati.
|
||||
\end{itemize}
|
||||
\newpage
|
||||
|
||||
\subsubsection{Operazione 00}
|
||||
Questa operazione decrementa la priorità di tutti i task presenti in lista.
|
||||
Se un task ha già la priorità minima \textbf{11}, questa non viene modificata.
|
||||
\vspace{0.5cm}
|
||||
|
||||
\centerline{\includegraphics[width=0.4\textwidth]{DIAGRAMS/S_00_DIAGRAM.png}}
|
||||
|
||||
\vspace{0.5cm}
|
||||
Gli stati presenti sono 4:
|
||||
\begin{itemize}
|
||||
\item \textbf{S\_00\_READ:} Seleziona il primo elemento in lista
|
||||
\item \textbf{S\_00\_WAIT:} Stato cuscinetto. Serve per dare tempo alla RAM di leggere il contenuto del task selezionato
|
||||
\item \textbf{S\_00\_CHECK:} Controlla se l'indirizzo selezionato è un task valido. In tal caso, se possibile, ne incrementa la priorità numerica di 1.
|
||||
\item \textbf{S\_00\_GO\_NEXT:} Seleziona la cella di memoria successiva
|
||||
\end{itemize}
|
||||
\newpage
|
||||
|
||||
\subsubsection{Operazione 01}
|
||||
Questa operazione rimuove il primo task della lista e sposta in alto tutti i task sottostanti.
|
||||
\vspace{0.5cm}
|
||||
|
||||
\centerline{\includegraphics[width=0.7\textwidth]{DIAGRAMS/S_01_DIAGRAM.png}}
|
||||
|
||||
\vspace{0.5cm}
|
||||
Gli stati presenti sono 7:
|
||||
\begin{itemize}
|
||||
\item \textbf{S\_01\_CHECK\_NUMBER:} Se non ci sono task termina subito (\textbf{o\_task\_id} resterà \textbf{000000}). Altrimenti avvia la lettura del primo task.
|
||||
\item \textbf{S\_01\_WAIT:} Stato cuscinetto. Serve per dare tempo alla RAM di leggere il contenuto del task selezionato
|
||||
\item \textbf{S\_01\_WRITE:} Salva l'ID del primo task nel registro \textbf{popped\_id} (verrà presentato su \textbf{o\_task\_id} in \textbf{S\_DONE}) e avvia la lettura del task successivo.
|
||||
\item \textbf{S\_01\_CHECK\_END:} Controlla se ha raggiunto la fine della lista. In tal caso scrive nella prima cella il valore del contatore decrementato di uno.
|
||||
\item \textbf{S\_01\_COPY:} Copia il contenuto della cella \textbf{n+1} dentro alla cella \textbf{n}.
|
||||
\item \textbf{S\_01\_GO\_NEXT:} Passa al task successivo.
|
||||
\item \textbf{S\_01\_WAIT\_FOR\_COUNT:} Attende il commit della scrittura del contatore, poi transita in \textbf{S\_DONE}.
|
||||
\end{itemize}
|
||||
\newpage
|
||||
|
||||
\subsubsection{Operazione 10}
|
||||
Questa operazione inserisce un nuovo task nella posizione corretta secondo la sua priorità, in coda ai task di pari priorità. L'operazione è divisa in due fasi:
|
||||
\begin{enumerate}
|
||||
\item \textbf{Scansione duplicati:} la lista viene percorsa dall'ultimo task verso il primo; se viene trovato un task con lo stesso ID, l'inserimento viene ignorato (la specifica vieta la presenza di due task con lo stesso ID). Vengono inoltre scartate immediatamente le richieste con ID = 0, valore riservato dalla specifica come condizione di errore.
|
||||
\item \textbf{Inserimento dal fondo:} partendo dall'ultimo task e salendo, viene controllata la priorità del task corrente. Se questa risulta numericamente maggiore (gerarchicamente inferiore) rispetto a quella del task da inserire, la cella viene copiata in quella sottostante e il confronto prosegue verso l'alto. Contrariamente, se la priorità dovesse risultare minore o uguale, il nuovo task viene inserito nella cella sottostante: il confronto "minore o uguale" è ciò che colloca il nuovo task \emph{dopo} quelli di pari priorità, garantendo l'ordine FIFO richiesto.
|
||||
\end{enumerate}
|
||||
|
||||
Si fa notare come il caso limite di lista piena non può verificarsi: con ID a 6 bit e ID = 0 escluso esistono al più 63 task distinti, e un 64-esimo inserimento sarebbe necessariamente un duplicato, quindi ignorato dalla fase di scansione.
|
||||
|
||||
\vspace{0.5cm}
|
||||
Di seguito viene illustrato un esempio di inserimento del task \textbf{011110 01}.
|
||||
|
||||
Nota: la scansione iniziale per identificare i duplicati viene ignorata nell'esempio.
|
||||
|
||||
\begin{itemize}
|
||||
|
||||
\item L’ultimo task presenta una priorità gerarchicamente minore, di conseguenza viene copiato nella cella sottostante.
|
||||
|
||||
\includegraphics[width=0.7\textwidth]{S_10_EXAMPLE/S_10_ITERATION1.png}
|
||||
|
||||
\item Si passa quindi al task soprastante. Anche questo presenta una priorità inferiore e viene pertanto copiato nella cella sottostante.
|
||||
|
||||
\includegraphics[width=0.7\textwidth]{S_10_EXAMPLE/S_10_ITERATION2.png}
|
||||
|
||||
\item Il task nella cella 1 presenta invece una priorità maggiore o uguale: il nuovo task viene quindi inserito nella cella sottostante.
|
||||
|
||||
\includegraphics[width=0.87\textwidth]{S_10_EXAMPLE/S_10_ITERATION3.png}
|
||||
|
||||
\item Infine, viene aggiornato il contatore.
|
||||
|
||||
\end{itemize}
|
||||
\newpage
|
||||
|
||||
|
||||
|
||||
|
||||
\vspace{0.5cm}
|
||||
|
||||
\centerline{\includegraphics[width=0.7\textwidth]{DIAGRAMS/S_10_DIAGRAM.png}}
|
||||
\vspace{0.5cm}
|
||||
Gli stati presenti sono 8:
|
||||
\begin{itemize}
|
||||
\item \textbf{S\_10\_PLACE\_AT\_START:} Scarta le richieste con ID = 0 e avvia la scansione duplicati dall'ultimo task della lista.
|
||||
|
||||
\item \textbf{S\_10\_WAIT\_FOR\_CHECK:} Stato cuscinetto della fase di scansione. Serve per dare tempo alla RAM di leggere il contenuto del task selezionato.
|
||||
|
||||
\item \textbf{S\_10\_CHECK\_ID:} Confronta l'ID del task letto con quello da inserire. Se coincidono, l'operazione termina senza modifiche; se la scansione ha raggiunto la cima della lista, rilegge l'ultimo task e passa alla fase di inserimento; altrimenti prosegue la scansione verso l'alto.
|
||||
|
||||
\item \textbf{S\_10\_WAIT:} Stato cuscinetto della fase di inserimento. Serve per dare tempo alla RAM di leggere il contenuto del task selezionato.
|
||||
|
||||
\item \textbf{S\_10\_COMPARE:} Verifica la condizione di inserimento del nuovo task.
|
||||
Se tutta la lista è stata scorsa (o era vuota), il nuovo task viene scritto in testa.
|
||||
In caso contrario, se il task da inserire presenta una priorità numericamente maggiore o uguale rispetto al task corrente, viene scritto nella cella sottostante;
|
||||
se invece presenta una priorità numericamente minore, è il task corrente a venire copiato nella cella sottostante.
|
||||
|
||||
\item \textbf{S\_10\_GO\_NEXT:} Seleziona il task precedente nella lista, da confrontare al giro successivo.
|
||||
|
||||
\item \textbf{S\_10\_UPDATE\_COUNT:} Aggiorna il contatore con il numero totale di task presenti nella lista.
|
||||
|
||||
\item \textbf{S\_10\_WAIT\_FOR\_COUNT:} Attende il commit della scrittura del contatore, poi transita in \textbf{S\_DONE}.
|
||||
|
||||
\end{itemize}
|
||||
\newpage
|
||||
|
||||
|
||||
\subsubsection{Operazione 11}
|
||||
Questa operazione svuota completamente la lista impostando il contatore dei task a 0 (non è necessario resettare tutti i valori nella memoria).
|
||||
|
||||
\vspace{0.5cm}
|
||||
\centerline{\includegraphics[width=0.7\textwidth]{DIAGRAMS/S_11_DIAGRAM.png}}
|
||||
\vspace{0.5cm}
|
||||
Gli stati presenti sono 2:
|
||||
\begin{itemize}
|
||||
\item \textbf{S\_11\_UPDATE\_COUNT:} Imposta il contatore a 0.
|
||||
|
||||
\item \textbf{S\_11\_WAIT\_FOR\_COUNT:} Attende il commit della scrittura del contatore, poi transita in \textbf{S\_DONE}.
|
||||
|
||||
\end{itemize}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
\newpage
|
||||
\section{Risultati sperimentali}
|
||||
\subsection{Report di sintesi}
|
||||
\subsubsection{Risorse utilizzate}
|
||||
La seguente tabella mostra le risorse hardware occupate dal design sul dispositivo target Artix-7 FPGA xc7a200tfbg484-1. L'utilizzo è estremamente contenuto: le Slice LUT occupano solo lo 0.13\% delle risorse disponibili e i registri lo 0.03\%, confermando che il modulo è decisamente leggero. Inoltre, non è stato inferito alcun latch: tutti gli elementi di memoria sono flip-flop, a conferma che il processo combinatorio assegna un valore di default a ogni segnale in ogni ramo.
|
||||
|
||||
\begin{table}[H]
|
||||
\centering
|
||||
\caption{Risorse utilizzate -- Slice Logic}
|
||||
\label{tab:utilization}
|
||||
\begin{tabular}{lrrrrr}
|
||||
\toprule
|
||||
\textbf{Site Type} & \textbf{Used} & \textbf{Fixed} & \textbf{Prohibited} & \textbf{Available} & \textbf{Util\%} \\
|
||||
\midrule
|
||||
Slice LUTs* & 181 & 0 & 0 & 134600 & 0.13 \\
|
||||
\quad LUT as Logic & 181 & 0 & 0 & 134600 & 0.13 \\
|
||||
\quad LUT as Memory & 0 & 0 & 0 & 46200 & 0.00 \\
|
||||
Slice Registers & 71 & 0 & 0 & 269200 & 0.03 \\
|
||||
\quad Register as Flip Flop & 71 & 0 & 0 & 269200 & 0.03 \\
|
||||
\quad Register as Latch & 0 & 0 & 0 & 269200 & 0.00 \\
|
||||
F7 Muxes & 0 & 0 & 0 & 67300 & 0.00 \\
|
||||
F8 Muxes & 0 & 0 & 0 & 33650 & 0.00 \\
|
||||
Unique Control Sets & 6 & -- & 0 & 33650 & 0.02 \\
|
||||
\bottomrule
|
||||
\end{tabular}
|
||||
\end{table}
|
||||
\newpage
|
||||
|
||||
|
||||
\subsubsection{FSM codificata}
|
||||
La tabella riporta la codifica degli stati FSM generata automaticamente dal tool di sintesi. Sono presenti in totale 24 stati. Vivado ha scelto una codifica \textbf{one-hot} (un flip-flop per stato, 24 bit complessivi), tipica sulle FPGA: aumenta il numero di registri, risorsa abbondante, ma minimizza la logica di decodifica dello stato e ne accorcia i percorsi combinatori. Per compattezza la tabella riporta, per ogni stato, l'indice del bit attivo della codifica one-hot e la codifica sequenziale a 5 bit di partenza.
|
||||
\begin{table}[H]
|
||||
\caption{FSM -- Codifica degli stati}
|
||||
\label{tab:fsm-encoding}
|
||||
\centering
|
||||
\begin{tabular}{lcc}
|
||||
\toprule
|
||||
\textbf{Stato} & \textbf{One-hot (bit attivo)} & \textbf{Previous Encoding} \\
|
||||
\midrule
|
||||
\texttt{s\_reset} & 0 & 00001 \\
|
||||
\texttt{s\_done} & 1 & 00010 \\
|
||||
\texttt{s\_idle} & 2 & 00000 \\
|
||||
\texttt{s\_00\_read} & 3 & 00011 \\
|
||||
\texttt{s\_00\_wait} & 4 & 00100 \\
|
||||
\texttt{s\_00\_check} & 5 & 00101 \\
|
||||
\texttt{s\_00\_go\_next} & 6 & 00110 \\
|
||||
\texttt{s\_01\_check\_number} & 7 & 00111 \\
|
||||
\texttt{s\_01\_wait} & 8 & 01000 \\
|
||||
\texttt{s\_01\_write} & 9 & 01001 \\
|
||||
\texttt{s\_01\_check\_end} & 10 & 01010 \\
|
||||
\texttt{s\_01\_wait\_for\_count}& 11 & 01101 \\
|
||||
\texttt{s\_01\_copy} & 12 & 01011 \\
|
||||
\texttt{s\_01\_go\_next} & 13 & 01100 \\
|
||||
\texttt{s\_10\_place\_at\_start}& 14 & 01110 \\
|
||||
\texttt{s\_10\_wait\_for\_check}& 15 & 01111 \\
|
||||
\texttt{s\_10\_check\_id} & 16 & 10000 \\
|
||||
\texttt{s\_10\_wait} & 17 & 10001 \\
|
||||
\texttt{s\_10\_compare} & 18 & 10010 \\
|
||||
\texttt{s\_10\_update\_count} & 19 & 10100 \\
|
||||
\texttt{s\_10\_wait\_for\_count}& 20 & 10101 \\
|
||||
\texttt{s\_10\_go\_next} & 21 & 10011 \\
|
||||
\texttt{s\_11\_update\_count} & 22 & 10110 \\
|
||||
\texttt{s\_11\_wait\_for\_count}& 23 & 10111 \\
|
||||
\bottomrule
|
||||
\end{tabular}
|
||||
\end{table}
|
||||
\newpage
|
||||
|
||||
|
||||
|
||||
\subsubsection{Statistiche RTL}
|
||||
La tabella dettaglia i componenti RTL inferiti dal tool di sintesi a partire dal codice VHDL. Sono presenti sommatori a 16, 9 e 8 bit per l'aritmetica su indirizzi, priorità e contatore. I registri a 16, 8, 6 e 1 bit corrispondono ai segnali interni e alle uscite registrate del design. I multiplexer a 24 ingressi riflettono la selezione tra i 24 stati della FSM (quelli a 24 bit operano sulla codifica one-hot dello stato).
|
||||
\begin{table}[H]
|
||||
\caption{Statistiche RTL -- Componenti}
|
||||
\label{tab:rtl-stats}
|
||||
\centering
|
||||
\small
|
||||
\begin{tabular}{rlrl}
|
||||
\toprule
|
||||
\textbf{Ingressi} & \textbf{Bit} & \textbf{Tipo} & \textbf{Quantità} \\
|
||||
\midrule
|
||||
\multicolumn{4}{l}{\textit{Adders}} \\
|
||||
2 & 16 bit & Adder & 4 \\
|
||||
2 & 9 bit & Adder & 1 \\
|
||||
2 & 8 bit & Adder & 3 \\
|
||||
\midrule
|
||||
\multicolumn{4}{l}{\textit{Registers}} \\
|
||||
-- & 16 bit & Register & 1 \\
|
||||
-- & 8 bit & Register & 2 \\
|
||||
-- & 6 bit & Register & 2 \\
|
||||
-- & 1 bit & Register & 3 \\
|
||||
\midrule
|
||||
\multicolumn{4}{l}{\textit{Muxes}} \\
|
||||
24 & 24 bit & Mux & 1 \\
|
||||
4 & 24 bit & Mux & 1 \\
|
||||
2 & 24 bit & Mux & 7 \\
|
||||
2 & 16 bit & Mux & 3 \\
|
||||
24 & 16 bit & Mux & 1 \\
|
||||
2 & 8 bit & Mux & 4 \\
|
||||
24 & 8 bit & Mux & 2 \\
|
||||
2 & 6 bit & Mux & 1 \\
|
||||
24 & 6 bit & Mux & 2 \\
|
||||
2 & 1 bit & Mux & 1 \\
|
||||
24 & 1 bit & Mux & 6 \\
|
||||
\bottomrule
|
||||
\end{tabular}
|
||||
\end{table}
|
||||
\newpage
|
||||
|
||||
|
||||
|
||||
\subsubsection{Timing}
|
||||
La specifica richiede che il progetto funzioni con un periodo di clock di almeno 20 ns. Il requisito è stato verificato in sintesi applicando il vincolo \texttt{create\_clock -period 20.000} sul segnale \texttt{i\_clk}:
|
||||
|
||||
\begin{table}[H]
|
||||
\centering
|
||||
\caption{Design Timing Summary (periodo di clock 20 ns)}
|
||||
\label{tab:timing}
|
||||
\begin{tabular}{lrr}
|
||||
\toprule
|
||||
\textbf{Metrica} & \textbf{Slack (ns)} & \textbf{Endpoint in violazione} \\
|
||||
\midrule
|
||||
Worst Negative Slack (setup, WNS) & $+14.786$ & 0 / 114 \\
|
||||
Worst Hold Slack (WHS) & $+0.149$ & 0 / 114 \\
|
||||
Worst Pulse Width Slack (WPWS) & $+9.500$ & 0 / 72 \\
|
||||
\bottomrule
|
||||
\end{tabular}
|
||||
\end{table}
|
||||
|
||||
Lo slack di setup ampiamente positivo indica che il percorso critico è di circa 5.2 ns: il modulo rispetta il vincolo dei 20 ns con un margine di quasi 4 volte. La correttezza funzionale del circuito sintetizzato è inoltre confermata dalla simulazione post-sintesi (functional) di tutti i test bench descritti nella sezione successiva.
|
||||
\newpage
|
||||
|
||||
\subsection{Report di simulazioni}
|
||||
\subsubsection{Test bench 1}
|
||||
Il test bench di esempio fornito dal docente copre le operazioni base quali reset, inserimento in lista, rimozione dalla lista, decremento di priorità e svuotamento della lista.
|
||||
|
||||
Seppur non vengano coperti molti casi limite, questo test bench ci offre la possibilità di analizzare facilmente i tempi di esecuzione delle singole operazioni.
|
||||
Le 10 operazioni, infatti, vengono eseguite correttamente in 2540 ns.\\
|
||||
In particolar modo, le latenze in cicli di clock (periodo 20 ns), con \textbf{N} task presenti in lista e \textbf{k} task spostati, sono le seguenti:
|
||||
\begin{itemize}
|
||||
\item \textbf{OP 00}: $(4 + 3N) \cdot 20\,$ns
|
||||
\item \textbf{OP 01}: $(6 + 3k) \cdot 20\,$ns, con $k = N - 1$; lista vuota: $2 \cdot 20\,$ns
|
||||
\item \textbf{OP 10}: $(6 + 2\max(N,1) + 3k) \cdot 20\,$ns
|
||||
\item \textbf{OP 11}: $3 \cdot 20\,$ns
|
||||
\end{itemize}
|
||||
|
||||
Nota: nell'operazione \textbf{10} il termine $2\max(N,1)$ è il costo della scansione duplicati, che percorre sempre l'intera lista, mentre $3k$ è il costo degli spostamenti, con $k$ compreso tra 0 (inserimento in fondo) e $N$ (inserimento in testa).
|
||||
Per caratterizzare il comportamento medio, si considera una distribuzione delle priorità equiprobabile: $E[T] = \left(6 + \frac{25}{8}N\right) \cdot 20\,$ns.
|
||||
|
||||
Tutte le formule sono state verificate al ciclo esatto da un test bench dedicato (par. 3.2.3).
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=1\textwidth]{WAVEFORM/RESET.png}
|
||||
\caption{Operazione di reset.}
|
||||
\label{fig:reset}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=1\textwidth]{WAVEFORM/INSERIMENTO_VUOTA.png}
|
||||
\caption{Operazione di inserimento in lista vuota.}
|
||||
\label{fig:insert_empty}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=1\textwidth]{WAVEFORM/SVUOTA.png}
|
||||
\caption{Operazione di svuotamento della lista.}
|
||||
\label{fig:empty}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=1\textwidth]{WAVEFORM/INSERIMENTO_PIENA.png}
|
||||
\caption{Operazione di inserimento in lista popolata.}
|
||||
\label{fig:insert_full}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=1\textwidth]{WAVEFORM/RIMOZIONE.png}
|
||||
\caption{Operazione di rimozione di un task.}
|
||||
\label{fig:remove}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=1\textwidth]{WAVEFORM/DECREMENTA.png}
|
||||
\caption{Operazione di decremento della priorità.}
|
||||
\label{fig:decrease}
|
||||
\end{figure}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
\newpage
|
||||
|
||||
\subsubsection{Test bench 2 (casi limite)}
|
||||
Il secondo test bench è stato pensato per coprire i possibili casi limite che potrebbero presentarsi:
|
||||
|
||||
\begin{table}[H]
|
||||
\centering
|
||||
\renewcommand{\arraystretch}{1.6}
|
||||
\begin{tabular}{|m{6cm}|m{8cm}|}
|
||||
\hline
|
||||
\textbf{Caso testato} & \textbf{Descrizione} \\
|
||||
\hline
|
||||
DONE durante il reset & DONE rimane a 1 durante reset e inizializzazione. \\
|
||||
\hline
|
||||
Reset asincrono & Reset durante operazioni in corso: il modulo torna allo stato iniziale senza corrompere la memoria. \\
|
||||
\hline
|
||||
Operazioni su lista vuota & Rimozione, decremento e svuotamento su lista vuota non producono scritture. La rimozione restituisce ID = 000000. \\
|
||||
\hline
|
||||
Saturazione della priorità & Task già a priorità 11 non vengono modificati da ulteriori decrementi. \\
|
||||
\hline
|
||||
Ordinamento e FIFO & Inserimenti con priorità diverse e tra task di pari priorità; l'ordine di estrazione è verificato con rimozioni successive. \\
|
||||
\hline
|
||||
ID duplicati e ID = 0 & L'inserimento viene ignorato se l'ID è già presente o vale 0; DONE viene emesso comunque. \\
|
||||
\hline
|
||||
Sequenza di stress & Inserimenti, invecchiamenti, rimozioni e svuotamento in sequenza mista. \\
|
||||
\hline
|
||||
\end{tabular}
|
||||
\caption*{Casi limite testati nel test bench 2}
|
||||
\label{tab:testbench2}
|
||||
\end{table}
|
||||
|
||||
\subsubsection{Test bench 3 (latenze)}
|
||||
Un terzo test bench misura, per ciascuna operazione, il numero esatto di cicli di clock che intercorrono tra il campionamento di START e l'assertion di DONE, confrontandolo con le formule di latenza riportate nel paragrafo 3.2.1. Le 15 misure (inserimenti con 0--3 spostamenti e inserimento in fondo, rimozioni con lista vuota e con 1--4 task, invecchiamenti con 0--4 task incluso il caso di saturazione completa) coincidono tutte al ciclo esatto con il valore atteso: la FSM non contiene quindi stati morti né attese superflue.
|
||||
|
||||
Tutti e tre i test bench passano sia in simulazione comportamentale sia in simulazione post-sintesi functional.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
\newpage
|
||||
\section{Conclusioni}
|
||||
I test comportamentali e post-sintesi mostrano che il modulo funziona correttamente, rispettando la specifica.
|
||||
Il componente completa l'elaborazione del test bench di esempio in 2540 ns, con un utilizzo delle risorse hardware
|
||||
estremamente contenuto: le Slice LUT occupano lo 0.13\% delle risorse disponibili sul
|
||||
dispositivo target Artix-7 FPGA xc7a200tfbg484-1, senza alcun latch inferito, confermando la leggerezza e la pulizia del design. Il vincolo di clock di 20 ns è rispettato con ampio margine (WNS $+14.786$ ns, percorso critico $\approx 5.2$ ns).
|
||||
|
||||
In fase di progettazione ho scelto deliberatamente di adottare un numero di stati superiore allo stretto necessario, privilegiando la leggibilità rispetto all'efficienza. Questa scelta, pur garantendo la correttezza del comportamento, introduce una leggera inefficienza temporale:
|
||||
accorpando o eliminando alcuni stati intermedi sarebbe possibile ridurre la latenza complessiva di qualche punto percentuale.
|
||||
Ad esempio, gli stati iniziali di alcune operazioni possono essere accorpati nello stato \textbf{S\_IDLE}, all'interno del ramo di decodifica dell'operazione corrispondente.
|
||||
|
||||
|
||||
\end{document}
|
||||
@@ -0,0 +1,10 @@
|
||||
################################################################################
|
||||
# DONOT REMOVE THIS FILE
|
||||
# Unified simulation database file for selected simulation model for IP
|
||||
#
|
||||
# File: ssm.db (Tue Mar 3 17:54:07 2026)
|
||||
#
|
||||
# This file is generated by the unified simulation automation and contains the
|
||||
# selected simulation model information for the IP/BD instances.
|
||||
# DONOT REMOVE THIS FILE
|
||||
################################################################################
|
||||
@@ -0,0 +1,4 @@
|
||||
version:1
|
||||
6d6f64655f636f756e7465727c42617463684d6f6465:1
|
||||
6d6f64655f636f756e7465727c4755494d6f6465:39
|
||||
eof:
|
||||
@@ -0,0 +1,52 @@
|
||||
version:1
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d70617274:78633761323030746662673438342d31:00:00
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d6e616d65:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d746f70:70726f6a6563745f726574695f6c6f6769636865:00:00
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d696e636c7564655f64697273:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d67656e65726963:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d646566696e65:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d766572696c6f675f646566696e65:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d7668646c5f646566696e65:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d636f6e737472736574:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d7365755f70726f74656374:64656661756c743a3a6e6f6e65:00:00
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d666c617474656e5f686965726172636879:64656661756c743a3a72656275696c74:00:00
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d67617465645f636c6f636b5f636f6e76657273696f6e:64656661756c743a3a6f6666:00:00
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d646972656374697665:64656661756c743a3a64656661756c74:00:00
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d696e6372656d656e74616c5f6d6f6465:64656661756c743a3a64656661756c74:00:00
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d72746c:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d6c696e74:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d66696c65:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d64617461666c6f77:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d64617461666c6f775f73657474696e6773:64656661756c743a3a6e6f6e65:00:00
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d72746c5f736b69705f6970:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d72746c5f736b69705f636f6e73747261696e7473:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d6e6f5f6c63:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d6c75745f63617363616465:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d6f73:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d62756667:64656661756c743a3a3132:00:00
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d66616e6f75745f6c696d6974:64656661756c743a3a3130303030:00:00
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d73687265675f6d696e5f73697a65:64656661756c743a3a33:00:00
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d6d6f6465:64656661756c743a3a64656661756c74:00:00
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d66736d5f65787472616374696f6e:64656661756c743a3a6175746f:00:00
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d6b6565705f6571756976616c656e745f726567697374657273:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d7265736f757263655f73686172696e67:64656661756c743a3a6175746f:00:00
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d636173636164655f647370:64656661756c743a3a6175746f:00:00
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d636f6e74726f6c5f7365745f6f70745f7468726573686f6c64:64656661756c743a3a6175746f:00:00
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d6d61785f6272616d:64656661756c743a3a2d31:00:00
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d6d61785f7572616d:64656661756c743a3a2d31:00:00
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d6d61785f647370:64656661756c743a3a2d31:00:00
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d6d61785f6272616d5f636173636164655f686569676874:64656661756c743a3a2d31:00:00
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d6d61785f7572616d5f636173636164655f686569676874:64656661756c743a3a2d31:00:00
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d726574696d696e67:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d6e6f5f726574696d696e67:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d676c6f62616c5f726574696d696e67:64656661756c743a3a6175746f:00:00
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d6e6f5f73726c65787472616374:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d617373657274:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d6e6f5f74696d696e675f64726976656e:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d73666375:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d64656275675f6c6f67:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00
|
||||
73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d657374:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00
|
||||
73796e746865736973:73796e7468657369735c7573616765:656c6170736564:30303a30303a313073:00:00
|
||||
73796e746865736973:73796e7468657369735c7573616765:6d656d6f72795f7065616b:323438362e3231314d42:00:00
|
||||
73796e746865736973:73796e7468657369735c7573616765:6d656d6f72795f6761696e:3931302e3332304d42:00:00
|
||||
eof:1833720937
|
||||
@@ -0,0 +1,3 @@
|
||||
version:1
|
||||
73796e746865736973:73796e7468657369735c7573616765:686c735f6970:30:00:00
|
||||
eof:2511430288
|
||||
@@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<document>
|
||||
<!--The data in this file is primarily intended for consumption by Xilinx tools.
|
||||
The structure and the elements are likely to change over the next few releases.
|
||||
This means code written to parse this file will need to be revisited each subsequent release.-->
|
||||
<application name="pa" timeStamp="Mon Apr 13 15:06:41 2026">
|
||||
<section name="Project Information" visible="false">
|
||||
<property name="ProjectID" value="b5bf03edf4924451b20db98e12064cf7" type="ProjectID"/>
|
||||
<property name="ProjectIteration" value="5" type="ProjectIteration"/>
|
||||
</section>
|
||||
<section name="PlanAhead Usage" visible="true">
|
||||
<item name="Project Data">
|
||||
<property name="SrcSetCount" value="1" type="SrcSetCount"/>
|
||||
<property name="ConstraintSetCount" value="1" type="ConstraintSetCount"/>
|
||||
<property name="DesignMode" value="RTL" type="DesignMode"/>
|
||||
<property name="SynthesisStrategy" value="Vivado Synthesis Defaults" type="SynthesisStrategy"/>
|
||||
<property name="ImplStrategy" value="Vivado Implementation Defaults" type="ImplStrategy"/>
|
||||
</item>
|
||||
</section>
|
||||
</application>
|
||||
</document>
|
||||
@@ -0,0 +1,4 @@
|
||||
version:1
|
||||
7873696d:7873696d5c636f6d6d616e645f6c696e655f6f7074696f6e73:2d73696d5f6d6f6465:64656661756c743a3a6265686176696f72616c:00:00
|
||||
7873696d:7873696d5c636f6d6d616e645f6c696e655f6f7074696f6e73:2d73696d5f74797065:64656661756c743a3a:00:00
|
||||
eof:241934075
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Product Version: Vivado v2025.2 (64-bit) -->
|
||||
<!-- -->
|
||||
<!-- Copyright 1986-2022 Xilinx, Inc. All Rights Reserved. -->
|
||||
<!-- Copyright 2022-2025 Advanced Micro Devices, Inc. All Rights Reserved. -->
|
||||
|
||||
<labtools version="1" minor="0"/>
|
||||
@@ -0,0 +1 @@
|
||||
The files in this directory structure are automatically generated and managed by Vivado. Editing these files is not recommended.
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0"?>
|
||||
<Runs Version="1" Minor="0">
|
||||
<Run Id="synth_1" LaunchDir="/home/aleandro/progetto_reti_logiche/progetto_reti_logiche.runs/synth_1" FlowId="Vivado_Synthesis" FromStepId="vivado" ToStepId="vivado"/>
|
||||
<Parameters>
|
||||
<Parameter Name="runs.monitorLSFJobs" Val="true" Type="bool"/>
|
||||
<Parameter Name="runs.enableClusterConf" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.ignorePathLengthChecks" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.shortenLongPath" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.usePosixSpawnForFork" Val="true" Type="bool"/>
|
||||
</Parameters>
|
||||
<ProductInfo Name="vivado"/>
|
||||
</Runs>
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0"?>
|
||||
<Runs Version="1" Minor="0">
|
||||
<Run Id="synth_1" LaunchDir="/home/aleandro/progetto_reti_logiche/progetto_reti_logiche.runs/synth_1" FlowId="Vivado_Synthesis" FromStepId="vivado" ToStepId="vivado"/>
|
||||
<Parameters>
|
||||
<Parameter Name="runs.monitorLSFJobs" Val="true" Type="bool"/>
|
||||
<Parameter Name="runs.enableClusterConf" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.ignorePathLengthChecks" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.shortenLongPath" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.usePosixSpawnForFork" Val="true" Type="bool"/>
|
||||
</Parameters>
|
||||
<ProductInfo Name="vivado"/>
|
||||
</Runs>
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0"?>
|
||||
<Runs Version="1" Minor="0">
|
||||
<Run Id="impl_1" LaunchDir="/home/aleandro/progetto_reti_logiche/progetto_reti_logiche.runs/impl_1" FlowId="Vivado_Implementation" FromStepId="init_design" ToStepId="route_design"/>
|
||||
<Parameters>
|
||||
<Parameter Name="runs.monitorLSFJobs" Val="true" Type="bool"/>
|
||||
<Parameter Name="runs.enableClusterConf" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.ignorePathLengthChecks" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.shortenLongPath" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.usePosixSpawnForFork" Val="true" Type="bool"/>
|
||||
</Parameters>
|
||||
<ProductInfo Name="vivado"/>
|
||||
</Runs>
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0"?>
|
||||
<Runs Version="1" Minor="0">
|
||||
<Run Id="synth_1" LaunchDir="/home/aleandro/progetto_reti_logiche/progetto_reti_logiche.runs/synth_1" FlowId="Vivado_Synthesis" FromStepId="vivado" ToStepId="vivado"/>
|
||||
<Parameters>
|
||||
<Parameter Name="runs.monitorLSFJobs" Val="true" Type="bool"/>
|
||||
<Parameter Name="runs.enableClusterConf" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.ignorePathLengthChecks" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.shortenLongPath" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.usePosixSpawnForFork" Val="true" Type="bool"/>
|
||||
</Parameters>
|
||||
<ProductInfo Name="vivado"/>
|
||||
</Runs>
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0"?>
|
||||
<Runs Version="1" Minor="0">
|
||||
<Run Id="synth_1" LaunchDir="/home/aleandro/progetto_reti_logiche/progetto_reti_logiche.runs/synth_1" FlowId="Vivado_Synthesis" FromStepId="vivado" ToStepId="vivado"/>
|
||||
<Parameters>
|
||||
<Parameter Name="runs.monitorLSFJobs" Val="true" Type="bool"/>
|
||||
<Parameter Name="runs.enableClusterConf" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.ignorePathLengthChecks" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.shortenLongPath" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.usePosixSpawnForFork" Val="true" Type="bool"/>
|
||||
</Parameters>
|
||||
<ProductInfo Name="vivado"/>
|
||||
</Runs>
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0"?>
|
||||
<Runs Version="1" Minor="0">
|
||||
<Run Id="synth_1" LaunchDir="/home/aleandro/progetto_reti_logiche/progetto_reti_logiche.runs/synth_1" FlowId="Vivado_Synthesis" FromStepId="vivado" ToStepId="vivado"/>
|
||||
<Parameters>
|
||||
<Parameter Name="runs.monitorLSFJobs" Val="true" Type="bool"/>
|
||||
<Parameter Name="runs.enableClusterConf" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.ignorePathLengthChecks" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.shortenLongPath" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.usePosixSpawnForFork" Val="true" Type="bool"/>
|
||||
</Parameters>
|
||||
<ProductInfo Name="vivado"/>
|
||||
</Runs>
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0"?>
|
||||
<Runs Version="1" Minor="0">
|
||||
<Run Id="synth_1" LaunchDir="/home/aleandro/progetto_reti_logiche/progetto_reti_logiche.runs/synth_1" FlowId="Vivado_Synthesis" FromStepId="vivado" ToStepId="vivado"/>
|
||||
<Parameters>
|
||||
<Parameter Name="runs.monitorLSFJobs" Val="true" Type="bool"/>
|
||||
<Parameter Name="runs.enableClusterConf" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.ignorePathLengthChecks" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.shortenLongPath" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.usePosixSpawnForFork" Val="true" Type="bool"/>
|
||||
</Parameters>
|
||||
<ProductInfo Name="vivado"/>
|
||||
</Runs>
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0"?>
|
||||
<Runs Version="1" Minor="0">
|
||||
<Run Id="synth_1" LaunchDir="/home/aleandro/progetto_reti_logiche/progetto_reti_logiche.runs/synth_1" FlowId="Vivado_Synthesis" FromStepId="vivado" ToStepId="vivado"/>
|
||||
<Parameters>
|
||||
<Parameter Name="runs.monitorLSFJobs" Val="true" Type="bool"/>
|
||||
<Parameter Name="runs.enableClusterConf" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.ignorePathLengthChecks" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.shortenLongPath" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.usePosixSpawnForFork" Val="true" Type="bool"/>
|
||||
</Parameters>
|
||||
<ProductInfo Name="vivado"/>
|
||||
</Runs>
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0"?>
|
||||
<Runs Version="1" Minor="0">
|
||||
<Run Id="synth_1" LaunchDir="/home/aleandro/progetto_reti_logiche/progetto_reti_logiche.runs/synth_1" FlowId="Vivado_Synthesis" FromStepId="vivado" ToStepId="vivado"/>
|
||||
<Parameters>
|
||||
<Parameter Name="runs.monitorLSFJobs" Val="true" Type="bool"/>
|
||||
<Parameter Name="runs.enableClusterConf" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.ignorePathLengthChecks" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.shortenLongPath" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.usePosixSpawnForFork" Val="true" Type="bool"/>
|
||||
</Parameters>
|
||||
<ProductInfo Name="vivado"/>
|
||||
</Runs>
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0"?>
|
||||
<Runs Version="1" Minor="0">
|
||||
<Run Id="impl_1" LaunchDir="/home/aleandro/progetto_reti_logiche/progetto_reti_logiche.runs/impl_1" FlowId="Vivado_Implementation" FromStepId="init_design" ToStepId="route_design"/>
|
||||
<Parameters>
|
||||
<Parameter Name="runs.monitorLSFJobs" Val="true" Type="bool"/>
|
||||
<Parameter Name="runs.enableClusterConf" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.ignorePathLengthChecks" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.shortenLongPath" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.usePosixSpawnForFork" Val="true" Type="bool"/>
|
||||
</Parameters>
|
||||
<ProductInfo Name="vivado"/>
|
||||
</Runs>
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0"?>
|
||||
<Runs Version="1" Minor="0">
|
||||
<Run Id="synth_1" LaunchDir="/home/aleandro/progetto_reti_logiche/progetto_reti_logiche.runs/synth_1" FlowId="Vivado_Synthesis" FromStepId="vivado" ToStepId="vivado"/>
|
||||
<Parameters>
|
||||
<Parameter Name="runs.monitorLSFJobs" Val="true" Type="bool"/>
|
||||
<Parameter Name="runs.enableClusterConf" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.ignorePathLengthChecks" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.shortenLongPath" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.usePosixSpawnForFork" Val="true" Type="bool"/>
|
||||
</Parameters>
|
||||
<ProductInfo Name="vivado"/>
|
||||
</Runs>
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0"?>
|
||||
<Runs Version="1" Minor="0">
|
||||
<Run Id="synth_1" LaunchDir="/home/aleandro/progetto_reti_logiche/progetto_reti_logiche.runs/synth_1" FlowId="Vivado_Synthesis" FromStepId="vivado" ToStepId="vivado"/>
|
||||
<Parameters>
|
||||
<Parameter Name="runs.monitorLSFJobs" Val="true" Type="bool"/>
|
||||
<Parameter Name="runs.enableClusterConf" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.ignorePathLengthChecks" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.shortenLongPath" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.usePosixSpawnForFork" Val="true" Type="bool"/>
|
||||
</Parameters>
|
||||
<ProductInfo Name="vivado"/>
|
||||
</Runs>
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0"?>
|
||||
<Runs Version="1" Minor="0">
|
||||
<Run Id="synth_1" LaunchDir="/home/aleandro/progetto_reti_logiche/progetto_reti_logiche.runs/synth_1" FlowId="Vivado_Synthesis" FromStepId="vivado" ToStepId="vivado"/>
|
||||
<Parameters>
|
||||
<Parameter Name="runs.monitorLSFJobs" Val="true" Type="bool"/>
|
||||
<Parameter Name="runs.enableClusterConf" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.ignorePathLengthChecks" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.shortenLongPath" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.usePosixSpawnForFork" Val="true" Type="bool"/>
|
||||
</Parameters>
|
||||
<ProductInfo Name="vivado"/>
|
||||
</Runs>
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0"?>
|
||||
<Runs Version="1" Minor="0">
|
||||
<Run Id="synth_1" LaunchDir="/home/aleandro/progetto_reti_logiche/progetto_reti_logiche.runs/synth_1" FlowId="Vivado_Synthesis" FromStepId="vivado" ToStepId="vivado"/>
|
||||
<Parameters>
|
||||
<Parameter Name="runs.monitorLSFJobs" Val="true" Type="bool"/>
|
||||
<Parameter Name="runs.enableClusterConf" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.ignorePathLengthChecks" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.shortenLongPath" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.usePosixSpawnForFork" Val="true" Type="bool"/>
|
||||
</Parameters>
|
||||
<ProductInfo Name="vivado"/>
|
||||
</Runs>
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0"?>
|
||||
<Runs Version="1" Minor="0">
|
||||
<Run Id="synth_1" LaunchDir="/home/aleandro/progetto_reti_logiche/progetto_reti_logiche.runs/synth_1" FlowId="Vivado_Synthesis" FromStepId="vivado" ToStepId="vivado"/>
|
||||
<Parameters>
|
||||
<Parameter Name="runs.monitorLSFJobs" Val="true" Type="bool"/>
|
||||
<Parameter Name="runs.enableClusterConf" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.ignorePathLengthChecks" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.shortenLongPath" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.usePosixSpawnForFork" Val="true" Type="bool"/>
|
||||
</Parameters>
|
||||
<ProductInfo Name="vivado"/>
|
||||
</Runs>
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0"?>
|
||||
<Runs Version="1" Minor="0">
|
||||
<Run Id="synth_1" LaunchDir="/home/aleandro/progetto_reti_logiche/progetto_reti_logiche.runs/synth_1" FlowId="Vivado_Synthesis" FromStepId="vivado" ToStepId="vivado"/>
|
||||
<Parameters>
|
||||
<Parameter Name="runs.monitorLSFJobs" Val="true" Type="bool"/>
|
||||
<Parameter Name="runs.enableClusterConf" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.ignorePathLengthChecks" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.shortenLongPath" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.usePosixSpawnForFork" Val="true" Type="bool"/>
|
||||
</Parameters>
|
||||
<ProductInfo Name="vivado"/>
|
||||
</Runs>
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0"?>
|
||||
<Runs Version="1" Minor="0">
|
||||
<Run Id="synth_1" LaunchDir="/home/aleandro/progetto_reti_logiche/progetto_reti_logiche.runs/synth_1" FlowId="Vivado_Synthesis" FromStepId="vivado" ToStepId="vivado"/>
|
||||
<Parameters>
|
||||
<Parameter Name="runs.monitorLSFJobs" Val="true" Type="bool"/>
|
||||
<Parameter Name="runs.enableClusterConf" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.ignorePathLengthChecks" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.shortenLongPath" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.usePosixSpawnForFork" Val="true" Type="bool"/>
|
||||
</Parameters>
|
||||
<ProductInfo Name="vivado"/>
|
||||
</Runs>
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0"?>
|
||||
<Runs Version="1" Minor="0">
|
||||
<Run Id="synth_1" LaunchDir="/home/aleandro/progetto_reti_logiche/progetto_reti_logiche.runs/synth_1" FlowId="Vivado_Synthesis" FromStepId="vivado" ToStepId="vivado"/>
|
||||
<Parameters>
|
||||
<Parameter Name="runs.monitorLSFJobs" Val="true" Type="bool"/>
|
||||
<Parameter Name="runs.enableClusterConf" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.ignorePathLengthChecks" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.shortenLongPath" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.usePosixSpawnForFork" Val="true" Type="bool"/>
|
||||
</Parameters>
|
||||
<ProductInfo Name="vivado"/>
|
||||
</Runs>
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0"?>
|
||||
<Runs Version="1" Minor="0">
|
||||
<Run Id="synth_1" LaunchDir="/home/aleandro/progetto_reti_logiche/progetto_reti_logiche.runs/synth_1" FlowId="Vivado_Synthesis" FromStepId="vivado" ToStepId="vivado"/>
|
||||
<Parameters>
|
||||
<Parameter Name="runs.monitorLSFJobs" Val="true" Type="bool"/>
|
||||
<Parameter Name="runs.enableClusterConf" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.ignorePathLengthChecks" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.shortenLongPath" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.usePosixSpawnForFork" Val="true" Type="bool"/>
|
||||
</Parameters>
|
||||
<ProductInfo Name="vivado"/>
|
||||
</Runs>
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0"?>
|
||||
<Runs Version="1" Minor="0">
|
||||
<Run Id="synth_1" LaunchDir="/home/aleandro/progetto_reti_logiche/progetto_reti_logiche.runs/synth_1" FlowId="Vivado_Synthesis" FromStepId="vivado" ToStepId="vivado"/>
|
||||
<Parameters>
|
||||
<Parameter Name="runs.monitorLSFJobs" Val="true" Type="bool"/>
|
||||
<Parameter Name="runs.enableClusterConf" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.ignorePathLengthChecks" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.shortenLongPath" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.usePosixSpawnForFork" Val="true" Type="bool"/>
|
||||
</Parameters>
|
||||
<ProductInfo Name="vivado"/>
|
||||
</Runs>
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0"?>
|
||||
<Runs Version="1" Minor="0">
|
||||
<Run Id="synth_1" LaunchDir="/home/aleandro/progetto_reti_logiche/progetto_reti_logiche.runs/synth_1" FlowId="Vivado_Synthesis" FromStepId="vivado" ToStepId="vivado"/>
|
||||
<Parameters>
|
||||
<Parameter Name="runs.monitorLSFJobs" Val="true" Type="bool"/>
|
||||
<Parameter Name="runs.enableClusterConf" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.ignorePathLengthChecks" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.shortenLongPath" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.usePosixSpawnForFork" Val="true" Type="bool"/>
|
||||
</Parameters>
|
||||
<ProductInfo Name="vivado"/>
|
||||
</Runs>
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0"?>
|
||||
<Runs Version="1" Minor="0">
|
||||
<Run Id="synth_1" LaunchDir="/home/aleandro/progetto_reti_logiche/progetto_reti_logiche.runs/synth_1" FlowId="Vivado_Synthesis" FromStepId="vivado" ToStepId="vivado"/>
|
||||
<Parameters>
|
||||
<Parameter Name="runs.monitorLSFJobs" Val="true" Type="bool"/>
|
||||
<Parameter Name="runs.enableClusterConf" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.ignorePathLengthChecks" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.shortenLongPath" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.usePosixSpawnForFork" Val="true" Type="bool"/>
|
||||
</Parameters>
|
||||
<ProductInfo Name="vivado"/>
|
||||
</Runs>
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0"?>
|
||||
<Runs Version="1" Minor="0">
|
||||
<Run Id="impl_1" LaunchDir="/home/aleandro/progetto_reti_logiche/progetto_reti_logiche.runs/impl_1" FlowId="Vivado_Implementation" FromStepId="init_design" ToStepId="route_design"/>
|
||||
<Parameters>
|
||||
<Parameter Name="runs.monitorLSFJobs" Val="true" Type="bool"/>
|
||||
<Parameter Name="runs.enableClusterConf" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.ignorePathLengthChecks" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.shortenLongPath" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.usePosixSpawnForFork" Val="true" Type="bool"/>
|
||||
</Parameters>
|
||||
<ProductInfo Name="vivado"/>
|
||||
</Runs>
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0"?>
|
||||
<Runs Version="1" Minor="0">
|
||||
<Run Id="synth_1" LaunchDir="/home/aleandro/progetto_reti_logiche/progetto_reti_logiche.runs/synth_1" FlowId="Vivado_Synthesis" FromStepId="vivado" ToStepId="vivado"/>
|
||||
<Parameters>
|
||||
<Parameter Name="runs.monitorLSFJobs" Val="true" Type="bool"/>
|
||||
<Parameter Name="runs.enableClusterConf" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.ignorePathLengthChecks" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.shortenLongPath" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.usePosixSpawnForFork" Val="true" Type="bool"/>
|
||||
</Parameters>
|
||||
<ProductInfo Name="vivado"/>
|
||||
</Runs>
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0"?>
|
||||
<Runs Version="1" Minor="0">
|
||||
<Run Id="synth_1" LaunchDir="/home/aleandro/progetto_reti_logiche/progetto_reti_logiche.runs/synth_1" FlowId="Vivado_Synthesis" FromStepId="vivado" ToStepId="vivado"/>
|
||||
<Parameters>
|
||||
<Parameter Name="runs.monitorLSFJobs" Val="true" Type="bool"/>
|
||||
<Parameter Name="runs.enableClusterConf" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.ignorePathLengthChecks" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.shortenLongPath" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.usePosixSpawnForFork" Val="true" Type="bool"/>
|
||||
</Parameters>
|
||||
<ProductInfo Name="vivado"/>
|
||||
</Runs>
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0"?>
|
||||
<Runs Version="1" Minor="0">
|
||||
<Run Id="synth_1" LaunchDir="/home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.runs/synth_1" FlowId="Vivado_Synthesis" FromStepId="vivado" ToStepId="vivado"/>
|
||||
<Parameters>
|
||||
<Parameter Name="runs.monitorLSFJobs" Val="true" Type="bool"/>
|
||||
<Parameter Name="runs.enableClusterConf" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.ignorePathLengthChecks" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.shortenLongPath" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.usePosixSpawnForFork" Val="true" Type="bool"/>
|
||||
</Parameters>
|
||||
<ProductInfo Name="vivado"/>
|
||||
</Runs>
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0"?>
|
||||
<Runs Version="1" Minor="0">
|
||||
<Run Id="synth_1" LaunchDir="/home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.runs/synth_1" FlowId="Vivado_Synthesis" FromStepId="vivado" ToStepId="vivado"/>
|
||||
<Parameters>
|
||||
<Parameter Name="runs.monitorLSFJobs" Val="true" Type="bool"/>
|
||||
<Parameter Name="runs.enableClusterConf" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.ignorePathLengthChecks" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.shortenLongPath" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.usePosixSpawnForFork" Val="true" Type="bool"/>
|
||||
</Parameters>
|
||||
<ProductInfo Name="vivado"/>
|
||||
</Runs>
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0"?>
|
||||
<Runs Version="1" Minor="0">
|
||||
<Run Id="synth_1" LaunchDir="/home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.runs/synth_1" FlowId="Vivado_Synthesis" FromStepId="vivado" ToStepId="vivado"/>
|
||||
<Parameters>
|
||||
<Parameter Name="runs.monitorLSFJobs" Val="true" Type="bool"/>
|
||||
<Parameter Name="runs.enableClusterConf" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.ignorePathLengthChecks" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.shortenLongPath" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.usePosixSpawnForFork" Val="true" Type="bool"/>
|
||||
</Parameters>
|
||||
<ProductInfo Name="vivado"/>
|
||||
</Runs>
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0"?>
|
||||
<Runs Version="1" Minor="0">
|
||||
<Run Id="synth_1" LaunchDir="/home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.runs/synth_1" FlowId="Vivado_Synthesis" FromStepId="vivado" ToStepId="vivado"/>
|
||||
<Parameters>
|
||||
<Parameter Name="runs.monitorLSFJobs" Val="true" Type="bool"/>
|
||||
<Parameter Name="runs.enableClusterConf" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.ignorePathLengthChecks" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.shortenLongPath" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.usePosixSpawnForFork" Val="true" Type="bool"/>
|
||||
</Parameters>
|
||||
<ProductInfo Name="vivado"/>
|
||||
</Runs>
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0"?>
|
||||
<Runs Version="1" Minor="0">
|
||||
<Run Id="synth_1" LaunchDir="/home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.runs/synth_1" FlowId="Vivado_Synthesis" FromStepId="vivado" ToStepId="vivado"/>
|
||||
<Parameters>
|
||||
<Parameter Name="runs.monitorLSFJobs" Val="true" Type="bool"/>
|
||||
<Parameter Name="runs.enableClusterConf" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.ignorePathLengthChecks" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.shortenLongPath" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.usePosixSpawnForFork" Val="true" Type="bool"/>
|
||||
</Parameters>
|
||||
<ProductInfo Name="vivado"/>
|
||||
</Runs>
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0"?>
|
||||
<Runs Version="1" Minor="0">
|
||||
<Run Id="synth_1" LaunchDir="/home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.runs/synth_1" FlowId="Vivado_Synthesis" FromStepId="vivado" ToStepId="vivado"/>
|
||||
<Parameters>
|
||||
<Parameter Name="runs.monitorLSFJobs" Val="true" Type="bool"/>
|
||||
<Parameter Name="runs.enableClusterConf" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.ignorePathLengthChecks" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.shortenLongPath" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.usePosixSpawnForFork" Val="true" Type="bool"/>
|
||||
</Parameters>
|
||||
<ProductInfo Name="vivado"/>
|
||||
</Runs>
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0"?>
|
||||
<Runs Version="1" Minor="0">
|
||||
<Run Id="synth_1" LaunchDir="/home/aleandro/progetto_reti_logiche/progetto_reti_logiche.runs/synth_1" FlowId="Vivado_Synthesis" FromStepId="vivado" ToStepId="vivado"/>
|
||||
<Parameters>
|
||||
<Parameter Name="runs.monitorLSFJobs" Val="true" Type="bool"/>
|
||||
<Parameter Name="runs.enableClusterConf" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.ignorePathLengthChecks" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.shortenLongPath" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.usePosixSpawnForFork" Val="true" Type="bool"/>
|
||||
</Parameters>
|
||||
<ProductInfo Name="vivado"/>
|
||||
</Runs>
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0"?>
|
||||
<Runs Version="1" Minor="0">
|
||||
<Run Id="impl_1" LaunchDir="/home/aleandro/progetto_reti_logiche/progetto_reti_logiche.runs/impl_1" FlowId="Vivado_Implementation" FromStepId="init_design" ToStepId="route_design"/>
|
||||
<Parameters>
|
||||
<Parameter Name="runs.monitorLSFJobs" Val="true" Type="bool"/>
|
||||
<Parameter Name="runs.enableClusterConf" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.ignorePathLengthChecks" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.shortenLongPath" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.usePosixSpawnForFork" Val="true" Type="bool"/>
|
||||
</Parameters>
|
||||
<ProductInfo Name="vivado"/>
|
||||
</Runs>
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0"?>
|
||||
<Runs Version="1" Minor="0">
|
||||
<Run Id="synth_1" LaunchDir="/home/aleandro/progetto_reti_logiche/progetto_reti_logiche.runs/synth_1" FlowId="Vivado_Synthesis" FromStepId="vivado" ToStepId="vivado"/>
|
||||
<Parameters>
|
||||
<Parameter Name="runs.monitorLSFJobs" Val="true" Type="bool"/>
|
||||
<Parameter Name="runs.enableClusterConf" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.ignorePathLengthChecks" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.shortenLongPath" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.usePosixSpawnForFork" Val="true" Type="bool"/>
|
||||
</Parameters>
|
||||
<ProductInfo Name="vivado"/>
|
||||
</Runs>
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0"?>
|
||||
<Runs Version="1" Minor="0">
|
||||
<Run Id="impl_1" LaunchDir="/home/aleandro/progetto_reti_logiche/progetto_reti_logiche.runs/impl_1" FlowId="Vivado_Implementation" FromStepId="init_design" ToStepId="route_design"/>
|
||||
<Parameters>
|
||||
<Parameter Name="runs.monitorLSFJobs" Val="true" Type="bool"/>
|
||||
<Parameter Name="runs.enableClusterConf" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.ignorePathLengthChecks" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.shortenLongPath" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.usePosixSpawnForFork" Val="true" Type="bool"/>
|
||||
</Parameters>
|
||||
<ProductInfo Name="vivado"/>
|
||||
</Runs>
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0"?>
|
||||
<Runs Version="1" Minor="0">
|
||||
<Run Id="synth_1" LaunchDir="/home/aleandro/progetto_reti_logiche/progetto_reti_logiche.runs/synth_1" FlowId="Vivado_Synthesis" FromStepId="vivado" ToStepId="vivado"/>
|
||||
<Parameters>
|
||||
<Parameter Name="runs.monitorLSFJobs" Val="true" Type="bool"/>
|
||||
<Parameter Name="runs.enableClusterConf" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.ignorePathLengthChecks" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.shortenLongPath" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.usePosixSpawnForFork" Val="true" Type="bool"/>
|
||||
</Parameters>
|
||||
<ProductInfo Name="vivado"/>
|
||||
</Runs>
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0"?>
|
||||
<Runs Version="1" Minor="0">
|
||||
<Run Id="synth_1" LaunchDir="/home/aleandro/progetto_reti_logiche/progetto_reti_logiche.runs/synth_1" FlowId="Vivado_Synthesis" FromStepId="vivado" ToStepId="vivado"/>
|
||||
<Parameters>
|
||||
<Parameter Name="runs.monitorLSFJobs" Val="true" Type="bool"/>
|
||||
<Parameter Name="runs.enableClusterConf" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.ignorePathLengthChecks" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.shortenLongPath" Val="true" Type="bool"/>
|
||||
<Parameter Name="general.usePosixSpawnForFork" Val="true" Type="bool"/>
|
||||
</Parameters>
|
||||
<ProductInfo Name="vivado"/>
|
||||
</Runs>
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0"?>
|
||||
<ProcessHandle Version="1" Minor="0">
|
||||
<Process Command="vivado" Owner="aleandro" Host="cachyos-x8664" Pid="33434" HostCore="20" HostMemory="16115628">
|
||||
</Process>
|
||||
</ProcessHandle>
|
||||
+270
@@ -0,0 +1,270 @@
|
||||
//
|
||||
// Vivado(TM)
|
||||
// ISEWrap.js: Vivado Runs Script for WSH 5.1/5.6
|
||||
// Copyright 1986-2022 Xilinx, Inc. All Rights Reserved.
|
||||
// Copyright 2022-2023 Advanced Micro Devices, Inc. All Rights Reserved.
|
||||
//
|
||||
|
||||
// GLOBAL VARIABLES
|
||||
var ISEShell = new ActiveXObject( "WScript.Shell" );
|
||||
var ISEFileSys = new ActiveXObject( "Scripting.FileSystemObject" );
|
||||
var ISERunDir = "";
|
||||
var ISELogFile = "runme.log";
|
||||
var ISELogFileStr = null;
|
||||
var ISELogEcho = true;
|
||||
var ISEOldVersionWSH = false;
|
||||
|
||||
|
||||
|
||||
// BOOTSTRAP
|
||||
ISEInit();
|
||||
|
||||
|
||||
|
||||
//
|
||||
// ISE FUNCTIONS
|
||||
//
|
||||
function ISEInit() {
|
||||
|
||||
// 1. RUN DIR setup
|
||||
var ISEScrFP = WScript.ScriptFullName;
|
||||
var ISEScrN = WScript.ScriptName;
|
||||
ISERunDir =
|
||||
ISEScrFP.substr( 0, ISEScrFP.length - ISEScrN.length - 1 );
|
||||
|
||||
// 2. LOG file setup
|
||||
ISELogFileStr = ISEOpenFile( ISELogFile );
|
||||
|
||||
// 3. LOG echo?
|
||||
var ISEScriptArgs = WScript.Arguments;
|
||||
for ( var loopi=0; loopi<ISEScriptArgs.length; loopi++ ) {
|
||||
if ( ISEScriptArgs(loopi) == "-quiet" ) {
|
||||
ISELogEcho = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// 4. WSH version check
|
||||
var ISEOptimalVersionWSH = 5.6;
|
||||
var ISECurrentVersionWSH = WScript.Version;
|
||||
if ( ISECurrentVersionWSH < ISEOptimalVersionWSH ) {
|
||||
|
||||
ISEStdErr( "" );
|
||||
ISEStdErr( "Warning: ExploreAhead works best with Microsoft WSH " +
|
||||
ISEOptimalVersionWSH + " or higher. Downloads" );
|
||||
ISEStdErr( " for upgrading your Windows Scripting Host can be found here: " );
|
||||
ISEStdErr( " http://msdn.microsoft.com/downloads/list/webdev.asp" );
|
||||
ISEStdErr( "" );
|
||||
|
||||
ISEOldVersionWSH = true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function ISEStep( ISEProg, ISEArgs ) {
|
||||
|
||||
// CHECK for a STOP FILE
|
||||
if ( ISEFileSys.FileExists(ISERunDir + "/.stop.rst") ) {
|
||||
ISEStdErr( "" );
|
||||
ISEStdErr( "*** Halting run - EA reset detected ***" );
|
||||
ISEStdErr( "" );
|
||||
WScript.Quit( 1 );
|
||||
}
|
||||
|
||||
// WRITE STEP HEADER to LOG
|
||||
ISEStdOut( "" );
|
||||
ISEStdOut( "*** Running " + ISEProg );
|
||||
ISEStdOut( " with args " + ISEArgs );
|
||||
ISEStdOut( "" );
|
||||
|
||||
// LAUNCH!
|
||||
var ISEExitCode = ISEExec( ISEProg, ISEArgs );
|
||||
if ( ISEExitCode != 0 ) {
|
||||
WScript.Quit( ISEExitCode );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function ISEExec( ISEProg, ISEArgs ) {
|
||||
|
||||
var ISEStep = ISEProg;
|
||||
if (ISEProg == "realTimeFpga" || ISEProg == "planAhead" || ISEProg == "vivado") {
|
||||
ISEProg += ".bat";
|
||||
}
|
||||
|
||||
var ISECmdLine = ISEProg + " " + ISEArgs;
|
||||
var ISEExitCode = 1;
|
||||
|
||||
if ( ISEOldVersionWSH ) { // WSH 5.1
|
||||
|
||||
// BEGIN file creation
|
||||
ISETouchFile( ISEStep, "begin" );
|
||||
|
||||
// LAUNCH!
|
||||
ISELogFileStr.Close();
|
||||
ISECmdLine =
|
||||
"%comspec% /c " + ISECmdLine + " >> " + ISELogFile + " 2>&1";
|
||||
ISEExitCode = ISEShell.Run( ISECmdLine, 0, true );
|
||||
ISELogFileStr = ISEOpenFile( ISELogFile );
|
||||
|
||||
} else { // WSH 5.6
|
||||
|
||||
// LAUNCH!
|
||||
ISEShell.CurrentDirectory = ISERunDir;
|
||||
|
||||
// Redirect STDERR to STDOUT
|
||||
ISECmdLine = "%comspec% /c " + ISECmdLine + " 2>&1";
|
||||
var ISEProcess = ISEShell.Exec( ISECmdLine );
|
||||
|
||||
// BEGIN file creation
|
||||
var wbemFlagReturnImmediately = 0x10;
|
||||
var wbemFlagForwardOnly = 0x20;
|
||||
var objWMIService = GetObject ("winmgmts:{impersonationLevel=impersonate, (Systemtime)}!//./root/cimv2");
|
||||
var processor = objWMIService.ExecQuery("SELECT * FROM Win32_Processor", "WQL",wbemFlagReturnImmediately | wbemFlagForwardOnly);
|
||||
var computerSystem = objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystem", "WQL", wbemFlagReturnImmediately | wbemFlagForwardOnly);
|
||||
var NOC = 0;
|
||||
var NOLP = 0;
|
||||
var TPM = 0;
|
||||
var cpuInfos = new Enumerator(processor);
|
||||
for(;!cpuInfos.atEnd(); cpuInfos.moveNext()) {
|
||||
var cpuInfo = cpuInfos.item();
|
||||
NOC += cpuInfo.NumberOfCores;
|
||||
NOLP += cpuInfo.NumberOfLogicalProcessors;
|
||||
}
|
||||
var csInfos = new Enumerator(computerSystem);
|
||||
for(;!csInfos.atEnd(); csInfos.moveNext()) {
|
||||
var csInfo = csInfos.item();
|
||||
TPM += csInfo.TotalPhysicalMemory;
|
||||
}
|
||||
|
||||
var ISEHOSTCORE = NOLP
|
||||
var ISEMEMTOTAL = TPM
|
||||
|
||||
var ISENetwork = WScript.CreateObject( "WScript.Network" );
|
||||
var ISEHost = ISENetwork.ComputerName;
|
||||
var ISEUser = ISENetwork.UserName;
|
||||
var ISEPid = ISEProcess.ProcessID;
|
||||
var ISEBeginFile = ISEOpenFile( "." + ISEStep + ".begin.rst" );
|
||||
ISEBeginFile.WriteLine( "<?xml version=\"1.0\"?>" );
|
||||
ISEBeginFile.WriteLine( "<ProcessHandle Version=\"1\" Minor=\"0\">" );
|
||||
ISEBeginFile.WriteLine( " <Process Command=\"" + ISEProg +
|
||||
"\" Owner=\"" + ISEUser +
|
||||
"\" Host=\"" + ISEHost +
|
||||
"\" Pid=\"" + ISEPid +
|
||||
"\" HostCore=\"" + ISEHOSTCORE +
|
||||
"\" HostMemory=\"" + ISEMEMTOTAL +
|
||||
"\">" );
|
||||
ISEBeginFile.WriteLine( " </Process>" );
|
||||
ISEBeginFile.WriteLine( "</ProcessHandle>" );
|
||||
ISEBeginFile.Close();
|
||||
|
||||
var ISEOutStr = ISEProcess.StdOut;
|
||||
var ISEErrStr = ISEProcess.StdErr;
|
||||
|
||||
// WAIT for ISEStep to finish
|
||||
while ( ISEProcess.Status == 0 ) {
|
||||
|
||||
// dump stdout then stderr - feels a little arbitrary
|
||||
while ( !ISEOutStr.AtEndOfStream ) {
|
||||
ISEStdOut( ISEOutStr.ReadLine() );
|
||||
}
|
||||
|
||||
WScript.Sleep( 100 );
|
||||
}
|
||||
|
||||
ISEExitCode = ISEProcess.ExitCode;
|
||||
}
|
||||
|
||||
ISELogFileStr.Close();
|
||||
|
||||
// END/ERROR file creation
|
||||
if ( ISEExitCode != 0 ) {
|
||||
ISETouchFile( ISEStep, "error" );
|
||||
|
||||
} else {
|
||||
ISETouchFile( ISEStep, "end" );
|
||||
}
|
||||
|
||||
return ISEExitCode;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// UTILITIES
|
||||
//
|
||||
function ISEStdOut( ISELine ) {
|
||||
|
||||
ISELogFileStr.WriteLine( ISELine );
|
||||
|
||||
if ( ISELogEcho ) {
|
||||
WScript.StdOut.WriteLine( ISELine );
|
||||
}
|
||||
}
|
||||
|
||||
function ISEStdErr( ISELine ) {
|
||||
|
||||
ISELogFileStr.WriteLine( ISELine );
|
||||
|
||||
if ( ISELogEcho ) {
|
||||
WScript.StdErr.WriteLine( ISELine );
|
||||
}
|
||||
}
|
||||
|
||||
function ISETouchFile( ISERoot, ISEStatus ) {
|
||||
|
||||
var ISETFile =
|
||||
ISEOpenFile( "." + ISERoot + "." + ISEStatus + ".rst" );
|
||||
ISETFile.Close();
|
||||
}
|
||||
|
||||
function ISEOpenFile( ISEFilename ) {
|
||||
|
||||
// This function has been updated to deal with a problem seen in CR #870871.
|
||||
// In that case the user runs a script that runs impl_1, and then turns around
|
||||
// and runs impl_1 -to_step write_bitstream. That second run takes place in
|
||||
// the same directory, which means we may hit some of the same files, and in
|
||||
// particular, we will open the runme.log file. Even though this script closes
|
||||
// the file (now), we see cases where a subsequent attempt to open the file
|
||||
// fails. Perhaps the OS is slow to release the lock, or the disk comes into
|
||||
// play? In any case, we try to work around this by first waiting if the file
|
||||
// is already there for an arbitrary 5 seconds. Then we use a try-catch block
|
||||
// and try to open the file 10 times with a one second delay after each attempt.
|
||||
// Again, 10 is arbitrary. But these seem to stop the hang in CR #870871.
|
||||
// If there is an unrecognized exception when trying to open the file, we output
|
||||
// an error message and write details to an exception.log file.
|
||||
var ISEFullPath = ISERunDir + "/" + ISEFilename;
|
||||
if (ISEFileSys.FileExists(ISEFullPath)) {
|
||||
// File is already there. This could be a problem. Wait in case it is still in use.
|
||||
WScript.Sleep(5000);
|
||||
}
|
||||
var i;
|
||||
for (i = 0; i < 10; ++i) {
|
||||
try {
|
||||
return ISEFileSys.OpenTextFile(ISEFullPath, 8, true);
|
||||
} catch (exception) {
|
||||
var error_code = exception.number & 0xFFFF; // The other bits are a facility code.
|
||||
if (error_code == 52) { // 52 is bad file name or number.
|
||||
// Wait a second and try again.
|
||||
WScript.Sleep(1000);
|
||||
continue;
|
||||
} else {
|
||||
WScript.StdErr.WriteLine("ERROR: Exception caught trying to open file " + ISEFullPath);
|
||||
var exceptionFilePath = ISERunDir + "/exception.log";
|
||||
if (!ISEFileSys.FileExists(exceptionFilePath)) {
|
||||
WScript.StdErr.WriteLine("See file " + exceptionFilePath + " for details.");
|
||||
var exceptionFile = ISEFileSys.OpenTextFile(exceptionFilePath, 8, true);
|
||||
exceptionFile.WriteLine("ERROR: Exception caught trying to open file " + ISEFullPath);
|
||||
exceptionFile.WriteLine("\tException name: " + exception.name);
|
||||
exceptionFile.WriteLine("\tException error code: " + error_code);
|
||||
exceptionFile.WriteLine("\tException message: " + exception.message);
|
||||
exceptionFile.Close();
|
||||
}
|
||||
throw exception;
|
||||
}
|
||||
}
|
||||
}
|
||||
// If we reached this point, we failed to open the file after 10 attempts.
|
||||
// We need to error out.
|
||||
WScript.StdErr.WriteLine("ERROR: Failed to open file " + ISEFullPath);
|
||||
WScript.Quit(1);
|
||||
}
|
||||
+85
@@ -0,0 +1,85 @@
|
||||
#!/bin/bash
|
||||
|
||||
#
|
||||
# Vivado(TM)
|
||||
# ISEWrap.sh: Vivado Runs Script for UNIX
|
||||
# Copyright 1986-2022 Xilinx, Inc. All Rights Reserved.
|
||||
# Copyright 2022-2023 Advanced Micro Devices, Inc. All Rights Reserved.
|
||||
#
|
||||
|
||||
cmd_exists()
|
||||
{
|
||||
command -v "$1" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
HD_LOG=$1
|
||||
shift
|
||||
|
||||
# CHECK for a STOP FILE
|
||||
if [ -f .stop.rst ]
|
||||
then
|
||||
echo "" >> $HD_LOG
|
||||
echo "*** Halting run - EA reset detected ***" >> $HD_LOG
|
||||
echo "" >> $HD_LOG
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ISE_STEP=$1
|
||||
shift
|
||||
|
||||
# WRITE STEP HEADER to LOG
|
||||
echo "" >> $HD_LOG
|
||||
echo "*** Running $ISE_STEP" >> $HD_LOG
|
||||
echo " with args $@" >> $HD_LOG
|
||||
echo "" >> $HD_LOG
|
||||
|
||||
# LAUNCH!
|
||||
$ISE_STEP "$@" >> $HD_LOG 2>&1 &
|
||||
|
||||
# BEGIN file creation
|
||||
ISE_PID=$!
|
||||
|
||||
HostNameFile=/proc/sys/kernel/hostname
|
||||
if cmd_exists hostname
|
||||
then
|
||||
ISE_HOST=$(hostname)
|
||||
elif cmd_exists uname
|
||||
then
|
||||
ISE_HOST=$(uname -n)
|
||||
elif [ -f "$HostNameFile" ] && [ -r $HostNameFile ] && [ -s $HostNameFile ]
|
||||
then
|
||||
ISE_HOST=$(cat $HostNameFile)
|
||||
elif [ X != X$HOSTNAME ]
|
||||
then
|
||||
ISE_HOST=$HOSTNAME #bash
|
||||
else
|
||||
ISE_HOST=$HOST #csh
|
||||
fi
|
||||
|
||||
ISE_USER=$USER
|
||||
|
||||
ISE_HOSTCORE=$(awk '/^processor/{print $3}' /proc/cpuinfo | wc -l)
|
||||
ISE_MEMTOTAL=$(awk '/MemTotal/ {print $2}' /proc/meminfo)
|
||||
|
||||
ISE_BEGINFILE=.$ISE_STEP.begin.rst
|
||||
/bin/touch $ISE_BEGINFILE
|
||||
echo "<?xml version=\"1.0\"?>" >> $ISE_BEGINFILE
|
||||
echo "<ProcessHandle Version=\"1\" Minor=\"0\">" >> $ISE_BEGINFILE
|
||||
echo " <Process Command=\"$ISE_STEP\" Owner=\"$ISE_USER\" Host=\"$ISE_HOST\" Pid=\"$ISE_PID\" HostCore=\"$ISE_HOSTCORE\" HostMemory=\"$ISE_MEMTOTAL\">" >> $ISE_BEGINFILE
|
||||
echo " </Process>" >> $ISE_BEGINFILE
|
||||
echo "</ProcessHandle>" >> $ISE_BEGINFILE
|
||||
|
||||
# WAIT for ISEStep to finish
|
||||
wait $ISE_PID
|
||||
|
||||
# END/ERROR file creation
|
||||
RETVAL=$?
|
||||
if [ $RETVAL -eq 0 ]
|
||||
then
|
||||
/bin/touch .$ISE_STEP.end.rst
|
||||
else
|
||||
/bin/touch .$ISE_STEP.error.rst
|
||||
fi
|
||||
|
||||
exit $RETVAL
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<GenRun Id="synth_1" LaunchPart="xc7a200tfbg484-1" LaunchTime="1781268754" LaunchIncrCheckpoint="$PSRCDIR/utils_1/imports/synth_1/project_reti_logiche.dcp">
|
||||
<File Type="RDS-DCP" Name="project_reti_logiche.dcp"/>
|
||||
<File Type="RDS-RDS" Name="project_reti_logiche.vds"/>
|
||||
<File Type="REPORTS-TCL" Name="project_reti_logiche_reports.tcl"/>
|
||||
<File Type="PA-TCL" Name="project_reti_logiche.tcl"/>
|
||||
<File Type="RDS-UTIL" Name="project_reti_logiche_utilization_synth.rpt"/>
|
||||
<File Type="RDS-UTIL-PB" Name="project_reti_logiche_utilization_synth.pb"/>
|
||||
<FileSet Name="sources" Type="DesignSrcs" RelSrcDir="$PSRCDIR/sources_1" RelGenDir="$PGENDIR/sources_1">
|
||||
<Filter Type="Srcs"/>
|
||||
<File Path="$PSRCDIR/sources_1/new/progetto_reti_logiche.vhd">
|
||||
<FileInfo>
|
||||
<Attr Name="UsedIn" Val="synthesis"/>
|
||||
<Attr Name="UsedIn" Val="simulation"/>
|
||||
</FileInfo>
|
||||
</File>
|
||||
<Config>
|
||||
<Option Name="DesignMode" Val="RTL"/>
|
||||
<Option Name="TopModule" Val="project_reti_logiche"/>
|
||||
<Option Name="TopAutoSet" Val="TRUE"/>
|
||||
</Config>
|
||||
</FileSet>
|
||||
<FileSet Name="constrs_in" Type="Constrs" RelSrcDir="$PSRCDIR/constrs_1" RelGenDir="$PGENDIR/constrs_1">
|
||||
<Filter Type="Constrs"/>
|
||||
<Config>
|
||||
<Option Name="ConstrsType" Val="XDC"/>
|
||||
</Config>
|
||||
</FileSet>
|
||||
<FileSet Name="utils" Type="Utils" RelSrcDir="$PSRCDIR/utils_1" RelGenDir="$PGENDIR/utils_1">
|
||||
<Filter Type="Utils"/>
|
||||
<File Path="$PSRCDIR/utils_1/imports/synth_1/project_reti_logiche.dcp">
|
||||
<FileInfo>
|
||||
<Attr Name="UsedIn" Val="synthesis"/>
|
||||
<Attr Name="UsedIn" Val="implementation"/>
|
||||
<Attr Name="UsedInSteps" Val="synth_1"/>
|
||||
<Attr Name="AutoDcp" Val="1"/>
|
||||
</FileInfo>
|
||||
</File>
|
||||
<Config>
|
||||
<Option Name="TopAutoSet" Val="TRUE"/>
|
||||
</Config>
|
||||
</FileSet>
|
||||
<Strategy Version="1" Minor="2">
|
||||
<StratHandle Name="Vivado Synthesis Defaults" Flow="Vivado Synthesis 2025"/>
|
||||
<Step Id="synth_design"/>
|
||||
</Strategy>
|
||||
</GenRun>
|
||||
@@ -0,0 +1,10 @@
|
||||
#
|
||||
# Vivado(TM)
|
||||
# htr.txt: a Vivado-generated description of how-to-repeat the
|
||||
# the basic steps of a run. Note that runme.bat/sh needs
|
||||
# to be invoked for Vivado to track run status.
|
||||
# Copyright 1986-2022 Xilinx, Inc. All Rights Reserved.
|
||||
# Copyright 2022-2025 Advanced Micro Devices, Inc. All Rights Reserved.
|
||||
#
|
||||
|
||||
vivado -log project_reti_logiche.vds -m64 -product Vivado -mode batch -messageDb vivado.pb -notrace -source project_reti_logiche.tcl
|
||||
@@ -0,0 +1 @@
|
||||
Â6No compile time benefit to using incremental synthesis
|
||||
@@ -0,0 +1,31 @@
|
||||
version:1
|
||||
70726f6a656374:76697661646f5f75736167655c70726f6a6563745f64617461:737263736574636f756e74:31:00:00
|
||||
70726f6a656374:76697661646f5f75736167655c70726f6a6563745f64617461:636f6e73747261696e74736574636f756e74:30:00:00
|
||||
70726f6a656374:76697661646f5f75736167655c70726f6a6563745f64617461:64657369676e6d6f6465:52544c:00:00
|
||||
70726f6a656374:76697661646f5f75736167655c70726f6a6563745f64617461:73796e7468657369737374726174656779:56697661646f2053796e7468657369732044656661756c7473:00:00
|
||||
70726f6a656374:76697661646f5f75736167655c70726f6a6563745f64617461:696d706c7374726174656779:56697661646f20496d706c656d656e746174696f6e2044656661756c7473:00:00
|
||||
70726f6a656374:76697661646f5f75736167655c70726f6a6563745f64617461:63757272656e7473796e74686573697372756e:73796e74685f31:00:00
|
||||
70726f6a656374:76697661646f5f75736167655c70726f6a6563745f64617461:63757272656e74696d706c72756e:696d706c5f31:00:00
|
||||
70726f6a656374:76697661646f5f75736167655c70726f6a6563745f64617461:746f74616c73796e74686573697372756e73:31:00:00
|
||||
70726f6a656374:76697661646f5f75736167655c70726f6a6563745f64617461:746f74616c696d706c72756e73:31:00:00
|
||||
70726f6a656374:76697661646f5f75736167655c70726f6a6563745f64617461:636f72655f636f6e7461696e6572:66616c7365:00:00
|
||||
70726f6a656374:76697661646f5f75736167655c70726f6a6563745f64617461:73696d756c61746f725f6c616e6775616765:4d69786564:00:00
|
||||
70726f6a656374:76697661646f5f75736167655c70726f6a6563745f64617461:7461726765745f6c616e6775616765:566572696c6f67:00:00
|
||||
70726f6a656374:76697661646f5f75736167655c70726f6a6563745f64617461:64656661756c745f6c696272617279:78696c5f64656661756c746c6962:00:00
|
||||
70726f6a656374:76697661646f5f75736167655c70726f6a6563745f64617461:7461726765745f73696d756c61746f72:5853696d:00:00
|
||||
70726f6a656374:76697661646f5f75736167655c70726f6a6563745f64617461:6c61756e63685f73696d756c6174696f6e5f7873696d:333536:00:00
|
||||
70726f6a656374:76697661646f5f75736167655c70726f6a6563745f64617461:6c61756e63685f73696d756c6174696f6e5f6d6f64656c73696d:30:00:00
|
||||
70726f6a656374:76697661646f5f75736167655c70726f6a6563745f64617461:6c61756e63685f73696d756c6174696f6e5f717565737461:30:00:00
|
||||
70726f6a656374:76697661646f5f75736167655c70726f6a6563745f64617461:6c61756e63685f73696d756c6174696f6e5f696573:30:00:00
|
||||
70726f6a656374:76697661646f5f75736167655c70726f6a6563745f64617461:6c61756e63685f73696d756c6174696f6e5f766373:30:00:00
|
||||
70726f6a656374:76697661646f5f75736167655c70726f6a6563745f64617461:6c61756e63685f73696d756c6174696f6e5f72697669657261:30:00:00
|
||||
70726f6a656374:76697661646f5f75736167655c70726f6a6563745f64617461:6c61756e63685f73696d756c6174696f6e5f61637469766568646c:30:00:00
|
||||
70726f6a656374:76697661646f5f75736167655c70726f6a6563745f64617461:6578706f72745f73696d756c6174696f6e5f7873696d:30:00:00
|
||||
70726f6a656374:76697661646f5f75736167655c70726f6a6563745f64617461:6578706f72745f73696d756c6174696f6e5f6d6f64656c73696d:30:00:00
|
||||
70726f6a656374:76697661646f5f75736167655c70726f6a6563745f64617461:6578706f72745f73696d756c6174696f6e5f717565737461:30:00:00
|
||||
70726f6a656374:76697661646f5f75736167655c70726f6a6563745f64617461:6578706f72745f73696d756c6174696f6e5f696573:30:00:00
|
||||
70726f6a656374:76697661646f5f75736167655c70726f6a6563745f64617461:6578706f72745f73696d756c6174696f6e5f766373:30:00:00
|
||||
70726f6a656374:76697661646f5f75736167655c70726f6a6563745f64617461:6578706f72745f73696d756c6174696f6e5f72697669657261:30:00:00
|
||||
70726f6a656374:76697661646f5f75736167655c70726f6a6563745f64617461:6578706f72745f73696d756c6174696f6e5f61637469766568646c:30:00:00
|
||||
5f5f48494444454e5f5f:5f5f48494444454e5f5f:50726f6a65637455554944:3630353136636534303563393461656261623931373435306630653133333835:506172656e742050412070726f6a656374204944:00
|
||||
eof:2983737119
|
||||
Binary file not shown.
@@ -0,0 +1,107 @@
|
||||
#
|
||||
# Synthesis run script generated by Vivado
|
||||
#
|
||||
|
||||
set TIME_start [clock seconds]
|
||||
namespace eval ::optrace {
|
||||
variable script "/home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.runs/synth_1/project_reti_logiche.tcl"
|
||||
variable category "vivado_synth"
|
||||
}
|
||||
|
||||
# Try to connect to running dispatch if we haven't done so already.
|
||||
# This code assumes that the Tcl interpreter is not using threads,
|
||||
# since the ::dispatch::connected variable isn't mutex protected.
|
||||
if {![info exists ::dispatch::connected]} {
|
||||
namespace eval ::dispatch {
|
||||
variable connected false
|
||||
if {[llength [array get env XILINX_CD_CONNECT_ID]] > 0} {
|
||||
set result "true"
|
||||
if {[catch {
|
||||
if {[lsearch -exact [package names] DispatchTcl] < 0} {
|
||||
set result [load librdi_cd_clienttcl[info sharedlibextension]]
|
||||
}
|
||||
if {$result eq "false"} {
|
||||
puts "WARNING: Could not load dispatch client library"
|
||||
}
|
||||
set connect_id [ ::dispatch::init_client -mode EXISTING_SERVER ]
|
||||
if { $connect_id eq "" } {
|
||||
puts "WARNING: Could not initialize dispatch client"
|
||||
} else {
|
||||
puts "INFO: Dispatch client connection id - $connect_id"
|
||||
set connected true
|
||||
}
|
||||
} catch_res]} {
|
||||
puts "WARNING: failed to connect to dispatch server - $catch_res"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if {$::dispatch::connected} {
|
||||
# Remove the dummy proc if it exists.
|
||||
if { [expr {[llength [info procs ::OPTRACE]] > 0}] } {
|
||||
rename ::OPTRACE ""
|
||||
}
|
||||
proc ::OPTRACE { task action {tags {} } } {
|
||||
::vitis_log::op_trace "$task" $action -tags $tags -script $::optrace::script -category $::optrace::category
|
||||
}
|
||||
# dispatch is generic. We specifically want to attach logging.
|
||||
::vitis_log::connect_client
|
||||
} else {
|
||||
# Add dummy proc if it doesn't exist.
|
||||
if { [expr {[llength [info procs ::OPTRACE]] == 0}] } {
|
||||
proc ::OPTRACE {{arg1 \"\" } {arg2 \"\"} {arg3 \"\" } {arg4 \"\"} {arg5 \"\" } {arg6 \"\"}} {
|
||||
# Do nothing
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
OPTRACE "synth_1" START { ROLLUP_AUTO }
|
||||
set_param general.usePosixSpawnForFork 1
|
||||
OPTRACE "Creating in-memory project" START { }
|
||||
create_project -in_memory -part xc7a200tfbg484-1
|
||||
|
||||
set_param project.singleFileAddWarning.threshold 0
|
||||
set_param project.compositeFile.enableAutoGeneration 0
|
||||
set_param synth.vivado.isSynthRun true
|
||||
set_property webtalk.parent_dir /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.cache/wt [current_project]
|
||||
set_property parent.project_path /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.xpr [current_project]
|
||||
set_property default_lib xil_defaultlib [current_project]
|
||||
set_property target_language Verilog [current_project]
|
||||
set_property ip_output_repo /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.cache/ip [current_project]
|
||||
set_property ip_cache_permissions {read write} [current_project]
|
||||
OPTRACE "Creating in-memory project" END { }
|
||||
OPTRACE "Adding files" START { }
|
||||
read_vhdl -library xil_defaultlib /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sources_1/new/progetto_reti_logiche.vhd
|
||||
OPTRACE "Adding files" END { }
|
||||
# Mark all dcp files as not used in implementation to prevent them from being
|
||||
# stitched into the results of this synthesis run. Any black boxes in the
|
||||
# design are intentionally left as such for best results. Dcp files will be
|
||||
# stitched into the design at a later time, either when this synthesis run is
|
||||
# opened, or when it is stitched into a dependent implementation run.
|
||||
foreach dcp [get_files -quiet -all -filter file_type=="Design\ Checkpoint"] {
|
||||
set_property used_in_implementation false $dcp
|
||||
}
|
||||
set_param ips.enableIPCacheLiteLoad 1
|
||||
|
||||
read_checkpoint -auto_incremental -incremental /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/utils_1/imports/synth_1/project_reti_logiche.dcp
|
||||
close [open __synthesis_is_running__ w]
|
||||
|
||||
OPTRACE "synth_design" START { }
|
||||
synth_design -top project_reti_logiche -part xc7a200tfbg484-1
|
||||
OPTRACE "synth_design" END { }
|
||||
if { [get_msg_config -count -severity {CRITICAL WARNING}] > 0 } {
|
||||
send_msg_id runtcl-6 info "Synthesis results are not added to the cache due to CRITICAL_WARNING"
|
||||
}
|
||||
|
||||
|
||||
OPTRACE "write_checkpoint" START { CHECKPOINT }
|
||||
# disable binary constraint mode for synth run checkpoints
|
||||
set_param constraints.enableBinaryConstraints false
|
||||
write_checkpoint -force -noxdef project_reti_logiche.dcp
|
||||
OPTRACE "write_checkpoint" END { }
|
||||
OPTRACE "synth reports" START { REPORT }
|
||||
generate_parallel_reports -reports { "report_utilization -file project_reti_logiche_utilization_synth.rpt -pb project_reti_logiche_utilization_synth.pb" }
|
||||
OPTRACE "synth reports" END { }
|
||||
file delete __synthesis_is_running__
|
||||
close [open __synthesis_is_complete__ w]
|
||||
OPTRACE "synth_1" END { }
|
||||
@@ -0,0 +1,257 @@
|
||||
#-----------------------------------------------------------
|
||||
# Vivado v2025.2 (64-bit)
|
||||
# SW Build 6299465 on Fri Nov 14 12:34:56 MST 2025
|
||||
# IP Build 6300035 on Fri Nov 14 10:48:45 MST 2025
|
||||
# SharedData Build 6298862 on Thu Nov 13 04:50:51 MST 2025
|
||||
# Start of session at: Fri Jun 12 14:52:36 2026
|
||||
# Process ID : 33507
|
||||
# Current directory : /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.runs/synth_1
|
||||
# Command line : vivado -log project_reti_logiche.vds -product Vivado -mode batch -messageDb vivado.pb -notrace -source project_reti_logiche.tcl
|
||||
# Log file : /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.runs/synth_1/project_reti_logiche.vds
|
||||
# Journal file : /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.runs/synth_1/vivado.jou
|
||||
# Running On : cachyos-x8664
|
||||
# Platform : cachyos
|
||||
# Operating System : CachyOS
|
||||
# Processor Detail : 12th Gen Intel(R) Core(TM) i7-12700F
|
||||
# CPU Frequency : 4313.234 MHz
|
||||
# CPU Physical cores : 12
|
||||
# CPU Logical cores : 20
|
||||
# Host memory : 16502 MB
|
||||
# Swap memory : 16501 MB
|
||||
# Total Virtual : 33003 MB
|
||||
# Available Virtual : 19387 MB
|
||||
#-----------------------------------------------------------
|
||||
source project_reti_logiche.tcl -notrace
|
||||
Command: read_checkpoint -auto_incremental -incremental /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/utils_1/imports/synth_1/project_reti_logiche.dcp
|
||||
INFO: [Vivado 12-5825] Read reference checkpoint from /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/utils_1/imports/synth_1/project_reti_logiche.dcp for incremental synthesis
|
||||
INFO: [Vivado 12-7989] Please ensure there are no constraint changes
|
||||
Command: synth_design -top project_reti_logiche -part xc7a200tfbg484-1
|
||||
Starting synth_design
|
||||
Attempting to get a license for feature 'Synthesis' and/or device 'xc7a200t'
|
||||
INFO: [Common 17-349] Got license for feature 'Synthesis' and/or device 'xc7a200t'
|
||||
INFO: [Designutils 20-5440] No compile time benefit to using incremental synthesis; A full resynthesis will be run
|
||||
INFO: [Designutils 20-4379] Flow is switching to default flow due to incremental criteria not met. If you would like to alter this behaviour and have the flow terminate instead, please set the following parameter config_implementation {autoIncr.Synth.RejectBehavior Terminate}
|
||||
INFO: [Synth 8-7079] Multithreading enabled for synth_design using a maximum of 7 processes.
|
||||
INFO: [Synth 8-7078] Launching helper process for spawning children vivado processes
|
||||
INFO: [Synth 8-7075] Helper process launched with PID 33546
|
||||
---------------------------------------------------------------------------------
|
||||
Starting Synthesize : Time (s): cpu = 00:00:02 ; elapsed = 00:00:03 . Memory (MB): peak = 2025.719 ; gain = 449.828 ; free physical = 1656 ; free virtual = 17391
|
||||
---------------------------------------------------------------------------------
|
||||
INFO: [Synth 8-638] synthesizing module 'project_reti_logiche' [/home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sources_1/new/progetto_reti_logiche.vhd:51]
|
||||
INFO: [Synth 8-226] default block is never used [/home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sources_1/new/progetto_reti_logiche.vhd:151]
|
||||
INFO: [Synth 8-256] done synthesizing module 'project_reti_logiche' (0#1) [/home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sources_1/new/progetto_reti_logiche.vhd:51]
|
||||
---------------------------------------------------------------------------------
|
||||
Finished Synthesize : Time (s): cpu = 00:00:03 ; elapsed = 00:00:03 . Memory (MB): peak = 2111.688 ; gain = 535.797 ; free physical = 1586 ; free virtual = 17326
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Finished Constraint Validation : Time (s): cpu = 00:00:04 ; elapsed = 00:00:04 . Memory (MB): peak = 2126.531 ; gain = 550.641 ; free physical = 1570 ; free virtual = 17310
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Start Loading Part and Timing Information
|
||||
---------------------------------------------------------------------------------
|
||||
Loading part: xc7a200tfbg484-1
|
||||
INFO: [Device 21-403] Loading part xc7a200tfbg484-1
|
||||
---------------------------------------------------------------------------------
|
||||
Finished Loading Part and Timing Information : Time (s): cpu = 00:00:04 ; elapsed = 00:00:04 . Memory (MB): peak = 2126.531 ; gain = 550.641 ; free physical = 1570 ; free virtual = 17310
|
||||
---------------------------------------------------------------------------------
|
||||
INFO: [Synth 8-802] inferred FSM for state register 'state_reg' in module 'project_reti_logiche'
|
||||
---------------------------------------------------------------------------------------------------
|
||||
State | New Encoding | Previous Encoding
|
||||
---------------------------------------------------------------------------------------------------
|
||||
s_reset | 000000000000000000000001 | 00001
|
||||
s_done | 000000000000000000000010 | 00010
|
||||
s_idle | 000000000000000000000100 | 00000
|
||||
s_00_read | 000000000000000000001000 | 00011
|
||||
s_00_wait | 000000000000000000010000 | 00100
|
||||
s_00_check | 000000000000000000100000 | 00101
|
||||
s_00_go_next | 000000000000000001000000 | 00110
|
||||
s_01_check_number | 000000000000000010000000 | 00111
|
||||
s_01_wait | 000000000000000100000000 | 01000
|
||||
s_01_write | 000000000000001000000000 | 01001
|
||||
s_01_check_end | 000000000000010000000000 | 01010
|
||||
s_01_wait_for_count | 000000000000100000000000 | 01101
|
||||
s_01_copy | 000000000001000000000000 | 01011
|
||||
s_01_go_next | 000000000010000000000000 | 01100
|
||||
s_10_place_at_start | 000000000100000000000000 | 01110
|
||||
s_10_wait_for_check | 000000001000000000000000 | 01111
|
||||
s_10_check_id | 000000010000000000000000 | 10000
|
||||
s_10_wait | 000000100000000000000000 | 10001
|
||||
s_10_compare | 000001000000000000000000 | 10010
|
||||
s_10_update_count | 000010000000000000000000 | 10100
|
||||
s_10_wait_for_count | 000100000000000000000000 | 10101
|
||||
s_10_go_next | 001000000000000000000000 | 10011
|
||||
s_11_update_count | 010000000000000000000000 | 10110
|
||||
s_11_wait_for_count | 100000000000000000000000 | 10111
|
||||
---------------------------------------------------------------------------------------------------
|
||||
INFO: [Synth 8-3354] encoded FSM with state register 'state_reg' using encoding 'one-hot' in module 'project_reti_logiche'
|
||||
---------------------------------------------------------------------------------
|
||||
Finished RTL Optimization Phase 2 : Time (s): cpu = 00:00:04 ; elapsed = 00:00:04 . Memory (MB): peak = 2142.547 ; gain = 566.656 ; free physical = 1579 ; free virtual = 17303
|
||||
---------------------------------------------------------------------------------
|
||||
No constraint files found.
|
||||
---------------------------------------------------------------------------------
|
||||
Start RTL Component Statistics
|
||||
---------------------------------------------------------------------------------
|
||||
Detailed RTL Component Info :
|
||||
+---Adders :
|
||||
2 Input 16 Bit Adders := 4
|
||||
2 Input 9 Bit Adders := 1
|
||||
2 Input 8 Bit Adders := 3
|
||||
+---Registers :
|
||||
16 Bit Registers := 1
|
||||
8 Bit Registers := 2
|
||||
6 Bit Registers := 2
|
||||
1 Bit Registers := 3
|
||||
+---Muxes :
|
||||
24 Input 24 Bit Muxes := 1
|
||||
4 Input 24 Bit Muxes := 1
|
||||
2 Input 24 Bit Muxes := 7
|
||||
2 Input 16 Bit Muxes := 3
|
||||
24 Input 16 Bit Muxes := 1
|
||||
2 Input 8 Bit Muxes := 4
|
||||
24 Input 8 Bit Muxes := 2
|
||||
2 Input 6 Bit Muxes := 1
|
||||
24 Input 6 Bit Muxes := 2
|
||||
2 Input 1 Bit Muxes := 1
|
||||
24 Input 1 Bit Muxes := 6
|
||||
---------------------------------------------------------------------------------
|
||||
Finished RTL Component Statistics
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Start Part Resource Summary
|
||||
---------------------------------------------------------------------------------
|
||||
Part Resources:
|
||||
DSPs: 740 (col length:100)
|
||||
BRAMs: 730 (col length: RAMB18 100 RAMB36 50)
|
||||
---------------------------------------------------------------------------------
|
||||
Finished Part Resource Summary
|
||||
---------------------------------------------------------------------------------
|
||||
No constraint files found.
|
||||
---------------------------------------------------------------------------------
|
||||
Start Cross Boundary and Area Optimization
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Finished Cross Boundary and Area Optimization : Time (s): cpu = 00:00:07 ; elapsed = 00:00:07 . Memory (MB): peak = 2329.445 ; gain = 753.555 ; free physical = 1430 ; free virtual = 17108
|
||||
---------------------------------------------------------------------------------
|
||||
No constraint files found.
|
||||
---------------------------------------------------------------------------------
|
||||
Start Timing Optimization
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Finished Timing Optimization : Time (s): cpu = 00:00:07 ; elapsed = 00:00:07 . Memory (MB): peak = 2335.383 ; gain = 759.492 ; free physical = 1435 ; free virtual = 17103
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Start Technology Mapping
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Finished Technology Mapping : Time (s): cpu = 00:00:07 ; elapsed = 00:00:07 . Memory (MB): peak = 2343.391 ; gain = 767.500 ; free physical = 1433 ; free virtual = 17097
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Start IO Insertion
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Start Flattening Before IO Insertion
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Finished Flattening Before IO Insertion
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Start Final Netlist Cleanup
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Finished Final Netlist Cleanup
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Finished IO Insertion : Time (s): cpu = 00:00:09 ; elapsed = 00:00:09 . Memory (MB): peak = 2486.203 ; gain = 910.312 ; free physical = 1673 ; free virtual = 17328
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Start Renaming Generated Instances
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Finished Renaming Generated Instances : Time (s): cpu = 00:00:09 ; elapsed = 00:00:09 . Memory (MB): peak = 2486.203 ; gain = 910.312 ; free physical = 1673 ; free virtual = 17327
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Start Rebuilding User Hierarchy
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Finished Rebuilding User Hierarchy : Time (s): cpu = 00:00:09 ; elapsed = 00:00:09 . Memory (MB): peak = 2486.203 ; gain = 910.312 ; free physical = 1674 ; free virtual = 17327
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Start Renaming Generated Ports
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Finished Renaming Generated Ports : Time (s): cpu = 00:00:09 ; elapsed = 00:00:09 . Memory (MB): peak = 2486.203 ; gain = 910.312 ; free physical = 1673 ; free virtual = 17326
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Start Handling Custom Attributes
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Finished Handling Custom Attributes : Time (s): cpu = 00:00:09 ; elapsed = 00:00:09 . Memory (MB): peak = 2486.203 ; gain = 910.312 ; free physical = 1674 ; free virtual = 17326
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Start Renaming Generated Nets
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Finished Renaming Generated Nets : Time (s): cpu = 00:00:09 ; elapsed = 00:00:09 . Memory (MB): peak = 2486.203 ; gain = 910.312 ; free physical = 1675 ; free virtual = 17326
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Start Writing Synthesis Report
|
||||
---------------------------------------------------------------------------------
|
||||
|
||||
Report BlackBoxes:
|
||||
+-+--------------+----------+
|
||||
| |BlackBox name |Instances |
|
||||
+-+--------------+----------+
|
||||
+-+--------------+----------+
|
||||
|
||||
Report Cell Usage:
|
||||
+------+-------+------+
|
||||
| |Cell |Count |
|
||||
+------+-------+------+
|
||||
|1 |BUFG | 1|
|
||||
|2 |CARRY4 | 18|
|
||||
|3 |LUT1 | 34|
|
||||
|4 |LUT2 | 16|
|
||||
|5 |LUT3 | 25|
|
||||
|6 |LUT4 | 44|
|
||||
|7 |LUT5 | 22|
|
||||
|8 |LUT6 | 78|
|
||||
|9 |FDCE | 25|
|
||||
|10 |FDPE | 2|
|
||||
|11 |FDRE | 44|
|
||||
|12 |IBUF | 21|
|
||||
|13 |OBUF | 33|
|
||||
+------+-------+------+
|
||||
|
||||
Report Instance Areas:
|
||||
+------+---------+-------+------+
|
||||
| |Instance |Module |Cells |
|
||||
+------+---------+-------+------+
|
||||
|1 |top | | 363|
|
||||
+------+---------+-------+------+
|
||||
---------------------------------------------------------------------------------
|
||||
Finished Writing Synthesis Report : Time (s): cpu = 00:00:09 ; elapsed = 00:00:09 . Memory (MB): peak = 2486.203 ; gain = 910.312 ; free physical = 1675 ; free virtual = 17325
|
||||
---------------------------------------------------------------------------------
|
||||
Synthesis finished with 0 errors, 0 critical warnings and 0 warnings.
|
||||
Synthesis Optimization Runtime : Time (s): cpu = 00:00:09 ; elapsed = 00:00:09 . Memory (MB): peak = 2486.203 ; gain = 910.312 ; free physical = 1677 ; free virtual = 17323
|
||||
Synthesis Optimization Complete : Time (s): cpu = 00:00:09 ; elapsed = 00:00:09 . Memory (MB): peak = 2486.211 ; gain = 910.312 ; free physical = 1669 ; free virtual = 17315
|
||||
INFO: [Project 1-571] Translating synthesized netlist
|
||||
Netlist sorting complete. Time (s): cpu = 00:00:00.01 ; elapsed = 00:00:00.01 . Memory (MB): peak = 2500.078 ; gain = 0.000 ; free physical = 1831 ; free virtual = 17463
|
||||
INFO: [Netlist 29-17] Analyzing 18 Unisim elements for replacement
|
||||
INFO: [Netlist 29-28] Unisim Transformation completed in 1 CPU seconds
|
||||
INFO: [Project 1-570] Preparing netlist for logic optimization
|
||||
INFO: [Opt 31-138] Pushed 0 inverter(s) to 0 load pin(s).
|
||||
Netlist sorting complete. Time (s): cpu = 00:00:00 ; elapsed = 00:00:00 . Memory (MB): peak = 2645.660 ; gain = 0.000 ; free physical = 1835 ; free virtual = 17379
|
||||
INFO: [Project 1-111] Unisim Transformation Summary:
|
||||
No Unisim elements were transformed.
|
||||
|
||||
Synth Design complete | Checksum: 3d7ece1d
|
||||
INFO: [Common 17-83] Releasing license: Synthesis
|
||||
21 Infos, 0 Warnings, 0 Critical Warnings and 0 Errors encountered.
|
||||
synth_design completed successfully
|
||||
synth_design: Time (s): cpu = 00:00:13 ; elapsed = 00:00:12 . Memory (MB): peak = 2645.695 ; gain = 1069.805 ; free physical = 1881 ; free virtual = 17374
|
||||
INFO: [Common 17-2834] synth_design peak Physical Memory [PSS] (MB): overall = 1976.781; main = 1976.781; forked = 0.000
|
||||
INFO: [Common 17-2834] synth_design peak Virtual Memory [VSS] (MB): overall = 2645.664; main = 2645.664; forked = 0.000
|
||||
Write ShapeDB Complete: Time (s): cpu = 00:00:00.01 ; elapsed = 00:00:00 . Memory (MB): peak = 2669.672 ; gain = 0.000 ; free physical = 1881 ; free virtual = 17374
|
||||
INFO: [Common 17-1381] The checkpoint '/home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.runs/synth_1/project_reti_logiche.dcp' has been generated.
|
||||
INFO: [Vivado 12-24828] Executing command : report_utilization -file project_reti_logiche_utilization_synth.rpt -pb project_reti_logiche_utilization_synth.pb
|
||||
INFO: [Common 17-206] Exiting Vivado at Fri Jun 12 14:52:50 2026...
|
||||
Binary file not shown.
@@ -0,0 +1,188 @@
|
||||
Copyright 1986-2022 Xilinx, Inc. All Rights Reserved. Copyright 2022-2025 Advanced Micro Devices, Inc. All Rights Reserved.
|
||||
---------------------------------------------------------------------------------------------------------------------------------------------
|
||||
| Tool Version : Vivado v.2025.2 (lin64) Build 6299465 Fri Nov 14 12:34:56 MST 2025
|
||||
| Date : Fri Jun 12 14:52:50 2026
|
||||
| Host : cachyos-x8664 running 64-bit CachyOS
|
||||
| Command : report_utilization -file project_reti_logiche_utilization_synth.rpt -pb project_reti_logiche_utilization_synth.pb
|
||||
| Design : project_reti_logiche
|
||||
| Device : xc7a200tfbg484-1
|
||||
| Speed File : -1
|
||||
| Design State : Synthesized
|
||||
---------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
Utilization Design Information
|
||||
|
||||
Table of Contents
|
||||
-----------------
|
||||
1. Slice Logic
|
||||
1.1 Summary of Registers by Type
|
||||
2. Memory
|
||||
3. DSP
|
||||
4. IO and GT Specific
|
||||
5. Clocking
|
||||
6. Specific Feature
|
||||
7. Primitives
|
||||
8. Black Boxes
|
||||
9. Instantiated Netlists
|
||||
|
||||
1. Slice Logic
|
||||
--------------
|
||||
|
||||
+-------------------------+------+-------+------------+-----------+-------+
|
||||
| Site Type | Used | Fixed | Prohibited | Available | Util% |
|
||||
+-------------------------+------+-------+------------+-----------+-------+
|
||||
| Slice LUTs* | 181 | 0 | 0 | 134600 | 0.13 |
|
||||
| LUT as Logic | 181 | 0 | 0 | 134600 | 0.13 |
|
||||
| LUT as Memory | 0 | 0 | 0 | 46200 | 0.00 |
|
||||
| Slice Registers | 71 | 0 | 0 | 269200 | 0.03 |
|
||||
| Register as Flip Flop | 71 | 0 | 0 | 269200 | 0.03 |
|
||||
| Register as Latch | 0 | 0 | 0 | 269200 | 0.00 |
|
||||
| F7 Muxes | 0 | 0 | 0 | 67300 | 0.00 |
|
||||
| F8 Muxes | 0 | 0 | 0 | 33650 | 0.00 |
|
||||
| Unique Control Sets | 6 | | 0 | 33650 | 0.02 |
|
||||
+-------------------------+------+-------+------------+-----------+-------+
|
||||
* Warning! The Final LUT count, after physical optimizations and full implementation, is typically lower. Run opt_design after synthesis, if not already completed, for a more realistic count.
|
||||
Warning! LUT value is adjusted to account for LUT combining.
|
||||
Warning! For any ECO changes, please run place_design if there are unplaced instances
|
||||
** Note: Available Control Sets calculated as Slice * 1, Review the Control Sets Report for more information regarding control sets.
|
||||
|
||||
|
||||
1.1 Summary of Registers by Type
|
||||
--------------------------------
|
||||
|
||||
+-------+--------------+-------------+--------------+
|
||||
| Total | Clock Enable | Synchronous | Asynchronous |
|
||||
+-------+--------------+-------------+--------------+
|
||||
| 0 | _ | - | - |
|
||||
| 0 | _ | - | Set |
|
||||
| 0 | _ | - | Reset |
|
||||
| 0 | _ | Set | - |
|
||||
| 0 | _ | Reset | - |
|
||||
| 0 | Yes | - | - |
|
||||
| 2 | Yes | - | Set |
|
||||
| 25 | Yes | - | Reset |
|
||||
| 0 | Yes | Set | - |
|
||||
| 44 | Yes | Reset | - |
|
||||
+-------+--------------+-------------+--------------+
|
||||
|
||||
|
||||
2. Memory
|
||||
---------
|
||||
|
||||
+----------------+------+-------+------------+-----------+-------+
|
||||
| Site Type | Used | Fixed | Prohibited | Available | Util% |
|
||||
+----------------+------+-------+------------+-----------+-------+
|
||||
| Block RAM Tile | 0 | 0 | 0 | 365 | 0.00 |
|
||||
| RAMB36/FIFO* | 0 | 0 | 0 | 365 | 0.00 |
|
||||
| RAMB18 | 0 | 0 | 0 | 730 | 0.00 |
|
||||
+----------------+------+-------+------------+-----------+-------+
|
||||
* Note: Each Block RAM Tile only has one FIFO logic available and therefore can accommodate only one FIFO36E1 or one FIFO18E1. However, if a FIFO18E1 occupies a Block RAM Tile, that tile can still accommodate a RAMB18E1
|
||||
|
||||
|
||||
3. DSP
|
||||
------
|
||||
|
||||
+-----------+------+-------+------------+-----------+-------+
|
||||
| Site Type | Used | Fixed | Prohibited | Available | Util% |
|
||||
+-----------+------+-------+------------+-----------+-------+
|
||||
| DSPs | 0 | 0 | 0 | 740 | 0.00 |
|
||||
+-----------+------+-------+------------+-----------+-------+
|
||||
|
||||
|
||||
4. IO and GT Specific
|
||||
---------------------
|
||||
|
||||
+-----------------------------+------+-------+------------+-----------+-------+
|
||||
| Site Type | Used | Fixed | Prohibited | Available | Util% |
|
||||
+-----------------------------+------+-------+------------+-----------+-------+
|
||||
| Bonded IOB | 54 | 0 | 0 | 285 | 18.95 |
|
||||
| Bonded IPADs | 0 | 0 | 0 | 14 | 0.00 |
|
||||
| Bonded OPADs | 0 | 0 | 0 | 8 | 0.00 |
|
||||
| PHY_CONTROL | 0 | 0 | 0 | 10 | 0.00 |
|
||||
| PHASER_REF | 0 | 0 | 0 | 10 | 0.00 |
|
||||
| OUT_FIFO | 0 | 0 | 0 | 40 | 0.00 |
|
||||
| IN_FIFO | 0 | 0 | 0 | 40 | 0.00 |
|
||||
| IDELAYCTRL | 0 | 0 | 0 | 10 | 0.00 |
|
||||
| IBUFDS | 0 | 0 | 0 | 274 | 0.00 |
|
||||
| GTPE2_CHANNEL | 0 | 0 | 0 | 4 | 0.00 |
|
||||
| PHASER_OUT/PHASER_OUT_PHY | 0 | 0 | 0 | 40 | 0.00 |
|
||||
| PHASER_IN/PHASER_IN_PHY | 0 | 0 | 0 | 40 | 0.00 |
|
||||
| IDELAYE2/IDELAYE2_FINEDELAY | 0 | 0 | 0 | 500 | 0.00 |
|
||||
| IBUFDS_GTE2 | 0 | 0 | 0 | 2 | 0.00 |
|
||||
| ILOGIC | 0 | 0 | 0 | 285 | 0.00 |
|
||||
| OLOGIC | 0 | 0 | 0 | 285 | 0.00 |
|
||||
+-----------------------------+------+-------+------------+-----------+-------+
|
||||
|
||||
|
||||
5. Clocking
|
||||
-----------
|
||||
|
||||
+------------+------+-------+------------+-----------+-------+
|
||||
| Site Type | Used | Fixed | Prohibited | Available | Util% |
|
||||
+------------+------+-------+------------+-----------+-------+
|
||||
| BUFGCTRL | 1 | 0 | 0 | 32 | 3.13 |
|
||||
| BUFIO | 0 | 0 | 0 | 40 | 0.00 |
|
||||
| MMCME2_ADV | 0 | 0 | 0 | 10 | 0.00 |
|
||||
| PLLE2_ADV | 0 | 0 | 0 | 10 | 0.00 |
|
||||
| BUFMRCE | 0 | 0 | 0 | 20 | 0.00 |
|
||||
| BUFHCE | 0 | 0 | 0 | 120 | 0.00 |
|
||||
| BUFR | 0 | 0 | 0 | 40 | 0.00 |
|
||||
+------------+------+-------+------------+-----------+-------+
|
||||
|
||||
|
||||
6. Specific Feature
|
||||
-------------------
|
||||
|
||||
+-------------+------+-------+------------+-----------+-------+
|
||||
| Site Type | Used | Fixed | Prohibited | Available | Util% |
|
||||
+-------------+------+-------+------------+-----------+-------+
|
||||
| BSCANE2 | 0 | 0 | 0 | 4 | 0.00 |
|
||||
| CAPTUREE2 | 0 | 0 | 0 | 1 | 0.00 |
|
||||
| DNA_PORT | 0 | 0 | 0 | 1 | 0.00 |
|
||||
| EFUSE_USR | 0 | 0 | 0 | 1 | 0.00 |
|
||||
| FRAME_ECCE2 | 0 | 0 | 0 | 1 | 0.00 |
|
||||
| ICAPE2 | 0 | 0 | 0 | 2 | 0.00 |
|
||||
| PCIE_2_1 | 0 | 0 | 0 | 1 | 0.00 |
|
||||
| STARTUPE2 | 0 | 0 | 0 | 1 | 0.00 |
|
||||
| XADC | 0 | 0 | 0 | 1 | 0.00 |
|
||||
+-------------+------+-------+------------+-----------+-------+
|
||||
|
||||
|
||||
7. Primitives
|
||||
-------------
|
||||
|
||||
+----------+------+---------------------+
|
||||
| Ref Name | Used | Functional Category |
|
||||
+----------+------+---------------------+
|
||||
| LUT6 | 78 | LUT |
|
||||
| LUT4 | 44 | LUT |
|
||||
| FDRE | 44 | Flop & Latch |
|
||||
| LUT1 | 34 | LUT |
|
||||
| OBUF | 33 | IO |
|
||||
| LUT3 | 25 | LUT |
|
||||
| FDCE | 25 | Flop & Latch |
|
||||
| LUT5 | 22 | LUT |
|
||||
| IBUF | 21 | IO |
|
||||
| CARRY4 | 18 | CarryLogic |
|
||||
| LUT2 | 16 | LUT |
|
||||
| FDPE | 2 | Flop & Latch |
|
||||
| BUFG | 1 | Clock |
|
||||
+----------+------+---------------------+
|
||||
|
||||
|
||||
8. Black Boxes
|
||||
--------------
|
||||
|
||||
+----------+------+
|
||||
| Ref Name | Used |
|
||||
+----------+------+
|
||||
|
||||
|
||||
9. Instantiated Netlists
|
||||
------------------------
|
||||
|
||||
+----------+------+
|
||||
| Ref Name | Used |
|
||||
+----------+------+
|
||||
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
//
|
||||
// Vivado(TM)
|
||||
// rundef.js: a Vivado-generated Runs Script for WSH 5.1/5.6
|
||||
// Copyright 1986-2022 Xilinx, Inc. All Rights Reserved.
|
||||
// Copyright 2022-2025 Advanced Micro Devices, Inc. All Rights Reserved.
|
||||
//
|
||||
|
||||
echo "This script was generated under a different operating system."
|
||||
echo "Please update the PATH variable below, before executing this script"
|
||||
exit
|
||||
|
||||
var WshShell = new ActiveXObject( "WScript.Shell" );
|
||||
var ProcEnv = WshShell.Environment( "Process" );
|
||||
var PathVal = ProcEnv("PATH");
|
||||
if ( PathVal.length == 0 ) {
|
||||
PathVal = "/opt/Xilinx/2025.2/Vitis/bin:/opt/Xilinx/2025.2/Vivado/ids_lite/ISE/bin/lin64;/opt/Xilinx/2025.2/Vivado/bin;";
|
||||
} else {
|
||||
PathVal = "/opt/Xilinx/2025.2/Vitis/bin:/opt/Xilinx/2025.2/Vivado/ids_lite/ISE/bin/lin64;/opt/Xilinx/2025.2/Vivado/bin;" + PathVal;
|
||||
}
|
||||
|
||||
ProcEnv("PATH") = PathVal;
|
||||
|
||||
var RDScrFP = WScript.ScriptFullName;
|
||||
var RDScrN = WScript.ScriptName;
|
||||
var RDScrDir = RDScrFP.substr( 0, RDScrFP.length - RDScrN.length - 1 );
|
||||
var ISEJScriptLib = RDScrDir + "/ISEWrap.js";
|
||||
eval( EAInclude(ISEJScriptLib) );
|
||||
|
||||
|
||||
ISEStep( "vivado",
|
||||
"-log project_reti_logiche.vds -m64 -product Vivado -mode batch -messageDb vivado.pb -notrace -source project_reti_logiche.tcl" );
|
||||
|
||||
|
||||
|
||||
function EAInclude( EAInclFilename ) {
|
||||
var EAFso = new ActiveXObject( "Scripting.FileSystemObject" );
|
||||
var EAInclFile = EAFso.OpenTextFile( EAInclFilename );
|
||||
var EAIFContents = EAInclFile.ReadAll();
|
||||
EAInclFile.Close();
|
||||
return EAIFContents;
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
@echo off
|
||||
|
||||
rem Vivado (TM)
|
||||
rem runme.bat: a Vivado-generated Script
|
||||
rem Copyright 1986-2022 Xilinx, Inc. All Rights Reserved.
|
||||
rem Copyright 2022-2025 Advanced Micro Devices, Inc. All Rights Reserved.
|
||||
|
||||
|
||||
set HD_SDIR=%~dp0
|
||||
cd /d "%HD_SDIR%"
|
||||
set PATH=%SYSTEMROOT%\system32;%PATH%
|
||||
cscript /nologo /E:JScript "%HD_SDIR%\rundef.js" %*
|
||||
@@ -0,0 +1,247 @@
|
||||
|
||||
*** Running vivado
|
||||
with args -log project_reti_logiche.vds -m64 -product Vivado -mode batch -messageDb vivado.pb -notrace -source project_reti_logiche.tcl
|
||||
|
||||
|
||||
****** Vivado v2025.2 (64-bit)
|
||||
**** SW Build 6299465 on Fri Nov 14 12:34:56 MST 2025
|
||||
**** IP Build 6300035 on Fri Nov 14 10:48:45 MST 2025
|
||||
**** SharedData Build 6298862 on Thu Nov 13 04:50:51 MST 2025
|
||||
**** Start of session at: Fri Jun 12 14:52:36 2026
|
||||
** Copyright 1986-2022 Xilinx, Inc. All Rights Reserved.
|
||||
** Copyright 2022-2025 Advanced Micro Devices, Inc. All Rights Reserved.
|
||||
|
||||
source project_reti_logiche.tcl -notrace
|
||||
Command: read_checkpoint -auto_incremental -incremental /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/utils_1/imports/synth_1/project_reti_logiche.dcp
|
||||
INFO: [Vivado 12-5825] Read reference checkpoint from /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/utils_1/imports/synth_1/project_reti_logiche.dcp for incremental synthesis
|
||||
INFO: [Vivado 12-7989] Please ensure there are no constraint changes
|
||||
Command: synth_design -top project_reti_logiche -part xc7a200tfbg484-1
|
||||
Starting synth_design
|
||||
Attempting to get a license for feature 'Synthesis' and/or device 'xc7a200t'
|
||||
INFO: [Common 17-349] Got license for feature 'Synthesis' and/or device 'xc7a200t'
|
||||
INFO: [Designutils 20-5440] No compile time benefit to using incremental synthesis; A full resynthesis will be run
|
||||
INFO: [Designutils 20-4379] Flow is switching to default flow due to incremental criteria not met. If you would like to alter this behaviour and have the flow terminate instead, please set the following parameter config_implementation {autoIncr.Synth.RejectBehavior Terminate}
|
||||
INFO: [Synth 8-7079] Multithreading enabled for synth_design using a maximum of 7 processes.
|
||||
INFO: [Synth 8-7078] Launching helper process for spawning children vivado processes
|
||||
INFO: [Synth 8-7075] Helper process launched with PID 33546
|
||||
---------------------------------------------------------------------------------
|
||||
Starting Synthesize : Time (s): cpu = 00:00:02 ; elapsed = 00:00:03 . Memory (MB): peak = 2025.719 ; gain = 449.828 ; free physical = 1656 ; free virtual = 17391
|
||||
---------------------------------------------------------------------------------
|
||||
INFO: [Synth 8-638] synthesizing module 'project_reti_logiche' [/home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sources_1/new/progetto_reti_logiche.vhd:51]
|
||||
INFO: [Synth 8-226] default block is never used [/home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sources_1/new/progetto_reti_logiche.vhd:151]
|
||||
INFO: [Synth 8-256] done synthesizing module 'project_reti_logiche' (0#1) [/home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sources_1/new/progetto_reti_logiche.vhd:51]
|
||||
---------------------------------------------------------------------------------
|
||||
Finished Synthesize : Time (s): cpu = 00:00:03 ; elapsed = 00:00:03 . Memory (MB): peak = 2111.688 ; gain = 535.797 ; free physical = 1586 ; free virtual = 17326
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Finished Constraint Validation : Time (s): cpu = 00:00:04 ; elapsed = 00:00:04 . Memory (MB): peak = 2126.531 ; gain = 550.641 ; free physical = 1570 ; free virtual = 17310
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Start Loading Part and Timing Information
|
||||
---------------------------------------------------------------------------------
|
||||
Loading part: xc7a200tfbg484-1
|
||||
INFO: [Device 21-403] Loading part xc7a200tfbg484-1
|
||||
---------------------------------------------------------------------------------
|
||||
Finished Loading Part and Timing Information : Time (s): cpu = 00:00:04 ; elapsed = 00:00:04 . Memory (MB): peak = 2126.531 ; gain = 550.641 ; free physical = 1570 ; free virtual = 17310
|
||||
---------------------------------------------------------------------------------
|
||||
INFO: [Synth 8-802] inferred FSM for state register 'state_reg' in module 'project_reti_logiche'
|
||||
---------------------------------------------------------------------------------------------------
|
||||
State | New Encoding | Previous Encoding
|
||||
---------------------------------------------------------------------------------------------------
|
||||
s_reset | 000000000000000000000001 | 00001
|
||||
s_done | 000000000000000000000010 | 00010
|
||||
s_idle | 000000000000000000000100 | 00000
|
||||
s_00_read | 000000000000000000001000 | 00011
|
||||
s_00_wait | 000000000000000000010000 | 00100
|
||||
s_00_check | 000000000000000000100000 | 00101
|
||||
s_00_go_next | 000000000000000001000000 | 00110
|
||||
s_01_check_number | 000000000000000010000000 | 00111
|
||||
s_01_wait | 000000000000000100000000 | 01000
|
||||
s_01_write | 000000000000001000000000 | 01001
|
||||
s_01_check_end | 000000000000010000000000 | 01010
|
||||
s_01_wait_for_count | 000000000000100000000000 | 01101
|
||||
s_01_copy | 000000000001000000000000 | 01011
|
||||
s_01_go_next | 000000000010000000000000 | 01100
|
||||
s_10_place_at_start | 000000000100000000000000 | 01110
|
||||
s_10_wait_for_check | 000000001000000000000000 | 01111
|
||||
s_10_check_id | 000000010000000000000000 | 10000
|
||||
s_10_wait | 000000100000000000000000 | 10001
|
||||
s_10_compare | 000001000000000000000000 | 10010
|
||||
s_10_update_count | 000010000000000000000000 | 10100
|
||||
s_10_wait_for_count | 000100000000000000000000 | 10101
|
||||
s_10_go_next | 001000000000000000000000 | 10011
|
||||
s_11_update_count | 010000000000000000000000 | 10110
|
||||
s_11_wait_for_count | 100000000000000000000000 | 10111
|
||||
---------------------------------------------------------------------------------------------------
|
||||
INFO: [Synth 8-3354] encoded FSM with state register 'state_reg' using encoding 'one-hot' in module 'project_reti_logiche'
|
||||
---------------------------------------------------------------------------------
|
||||
Finished RTL Optimization Phase 2 : Time (s): cpu = 00:00:04 ; elapsed = 00:00:04 . Memory (MB): peak = 2142.547 ; gain = 566.656 ; free physical = 1579 ; free virtual = 17303
|
||||
---------------------------------------------------------------------------------
|
||||
No constraint files found.
|
||||
---------------------------------------------------------------------------------
|
||||
Start RTL Component Statistics
|
||||
---------------------------------------------------------------------------------
|
||||
Detailed RTL Component Info :
|
||||
+---Adders :
|
||||
2 Input 16 Bit Adders := 4
|
||||
2 Input 9 Bit Adders := 1
|
||||
2 Input 8 Bit Adders := 3
|
||||
+---Registers :
|
||||
16 Bit Registers := 1
|
||||
8 Bit Registers := 2
|
||||
6 Bit Registers := 2
|
||||
1 Bit Registers := 3
|
||||
+---Muxes :
|
||||
24 Input 24 Bit Muxes := 1
|
||||
4 Input 24 Bit Muxes := 1
|
||||
2 Input 24 Bit Muxes := 7
|
||||
2 Input 16 Bit Muxes := 3
|
||||
24 Input 16 Bit Muxes := 1
|
||||
2 Input 8 Bit Muxes := 4
|
||||
24 Input 8 Bit Muxes := 2
|
||||
2 Input 6 Bit Muxes := 1
|
||||
24 Input 6 Bit Muxes := 2
|
||||
2 Input 1 Bit Muxes := 1
|
||||
24 Input 1 Bit Muxes := 6
|
||||
---------------------------------------------------------------------------------
|
||||
Finished RTL Component Statistics
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Start Part Resource Summary
|
||||
---------------------------------------------------------------------------------
|
||||
Part Resources:
|
||||
DSPs: 740 (col length:100)
|
||||
BRAMs: 730 (col length: RAMB18 100 RAMB36 50)
|
||||
---------------------------------------------------------------------------------
|
||||
Finished Part Resource Summary
|
||||
---------------------------------------------------------------------------------
|
||||
No constraint files found.
|
||||
---------------------------------------------------------------------------------
|
||||
Start Cross Boundary and Area Optimization
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Finished Cross Boundary and Area Optimization : Time (s): cpu = 00:00:07 ; elapsed = 00:00:07 . Memory (MB): peak = 2329.445 ; gain = 753.555 ; free physical = 1430 ; free virtual = 17108
|
||||
---------------------------------------------------------------------------------
|
||||
No constraint files found.
|
||||
---------------------------------------------------------------------------------
|
||||
Start Timing Optimization
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Finished Timing Optimization : Time (s): cpu = 00:00:07 ; elapsed = 00:00:07 . Memory (MB): peak = 2335.383 ; gain = 759.492 ; free physical = 1435 ; free virtual = 17103
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Start Technology Mapping
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Finished Technology Mapping : Time (s): cpu = 00:00:07 ; elapsed = 00:00:07 . Memory (MB): peak = 2343.391 ; gain = 767.500 ; free physical = 1433 ; free virtual = 17097
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Start IO Insertion
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Start Flattening Before IO Insertion
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Finished Flattening Before IO Insertion
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Start Final Netlist Cleanup
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Finished Final Netlist Cleanup
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Finished IO Insertion : Time (s): cpu = 00:00:09 ; elapsed = 00:00:09 . Memory (MB): peak = 2486.203 ; gain = 910.312 ; free physical = 1673 ; free virtual = 17328
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Start Renaming Generated Instances
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Finished Renaming Generated Instances : Time (s): cpu = 00:00:09 ; elapsed = 00:00:09 . Memory (MB): peak = 2486.203 ; gain = 910.312 ; free physical = 1673 ; free virtual = 17327
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Start Rebuilding User Hierarchy
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Finished Rebuilding User Hierarchy : Time (s): cpu = 00:00:09 ; elapsed = 00:00:09 . Memory (MB): peak = 2486.203 ; gain = 910.312 ; free physical = 1674 ; free virtual = 17327
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Start Renaming Generated Ports
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Finished Renaming Generated Ports : Time (s): cpu = 00:00:09 ; elapsed = 00:00:09 . Memory (MB): peak = 2486.203 ; gain = 910.312 ; free physical = 1673 ; free virtual = 17326
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Start Handling Custom Attributes
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Finished Handling Custom Attributes : Time (s): cpu = 00:00:09 ; elapsed = 00:00:09 . Memory (MB): peak = 2486.203 ; gain = 910.312 ; free physical = 1674 ; free virtual = 17326
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Start Renaming Generated Nets
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Finished Renaming Generated Nets : Time (s): cpu = 00:00:09 ; elapsed = 00:00:09 . Memory (MB): peak = 2486.203 ; gain = 910.312 ; free physical = 1675 ; free virtual = 17326
|
||||
---------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------
|
||||
Start Writing Synthesis Report
|
||||
---------------------------------------------------------------------------------
|
||||
|
||||
Report BlackBoxes:
|
||||
+-+--------------+----------+
|
||||
| |BlackBox name |Instances |
|
||||
+-+--------------+----------+
|
||||
+-+--------------+----------+
|
||||
|
||||
Report Cell Usage:
|
||||
+------+-------+------+
|
||||
| |Cell |Count |
|
||||
+------+-------+------+
|
||||
|1 |BUFG | 1|
|
||||
|2 |CARRY4 | 18|
|
||||
|3 |LUT1 | 34|
|
||||
|4 |LUT2 | 16|
|
||||
|5 |LUT3 | 25|
|
||||
|6 |LUT4 | 44|
|
||||
|7 |LUT5 | 22|
|
||||
|8 |LUT6 | 78|
|
||||
|9 |FDCE | 25|
|
||||
|10 |FDPE | 2|
|
||||
|11 |FDRE | 44|
|
||||
|12 |IBUF | 21|
|
||||
|13 |OBUF | 33|
|
||||
+------+-------+------+
|
||||
|
||||
Report Instance Areas:
|
||||
+------+---------+-------+------+
|
||||
| |Instance |Module |Cells |
|
||||
+------+---------+-------+------+
|
||||
|1 |top | | 363|
|
||||
+------+---------+-------+------+
|
||||
---------------------------------------------------------------------------------
|
||||
Finished Writing Synthesis Report : Time (s): cpu = 00:00:09 ; elapsed = 00:00:09 . Memory (MB): peak = 2486.203 ; gain = 910.312 ; free physical = 1675 ; free virtual = 17325
|
||||
---------------------------------------------------------------------------------
|
||||
Synthesis finished with 0 errors, 0 critical warnings and 0 warnings.
|
||||
Synthesis Optimization Runtime : Time (s): cpu = 00:00:09 ; elapsed = 00:00:09 . Memory (MB): peak = 2486.203 ; gain = 910.312 ; free physical = 1677 ; free virtual = 17323
|
||||
Synthesis Optimization Complete : Time (s): cpu = 00:00:09 ; elapsed = 00:00:09 . Memory (MB): peak = 2486.211 ; gain = 910.312 ; free physical = 1669 ; free virtual = 17315
|
||||
INFO: [Project 1-571] Translating synthesized netlist
|
||||
Netlist sorting complete. Time (s): cpu = 00:00:00.01 ; elapsed = 00:00:00.01 . Memory (MB): peak = 2500.078 ; gain = 0.000 ; free physical = 1831 ; free virtual = 17463
|
||||
INFO: [Netlist 29-17] Analyzing 18 Unisim elements for replacement
|
||||
INFO: [Netlist 29-28] Unisim Transformation completed in 1 CPU seconds
|
||||
INFO: [Project 1-570] Preparing netlist for logic optimization
|
||||
INFO: [Opt 31-138] Pushed 0 inverter(s) to 0 load pin(s).
|
||||
Netlist sorting complete. Time (s): cpu = 00:00:00 ; elapsed = 00:00:00 . Memory (MB): peak = 2645.660 ; gain = 0.000 ; free physical = 1835 ; free virtual = 17379
|
||||
INFO: [Project 1-111] Unisim Transformation Summary:
|
||||
No Unisim elements were transformed.
|
||||
|
||||
Synth Design complete | Checksum: 3d7ece1d
|
||||
INFO: [Common 17-83] Releasing license: Synthesis
|
||||
21 Infos, 0 Warnings, 0 Critical Warnings and 0 Errors encountered.
|
||||
synth_design completed successfully
|
||||
synth_design: Time (s): cpu = 00:00:13 ; elapsed = 00:00:12 . Memory (MB): peak = 2645.695 ; gain = 1069.805 ; free physical = 1881 ; free virtual = 17374
|
||||
INFO: [Common 17-2834] synth_design peak Physical Memory [PSS] (MB): overall = 1976.781; main = 1976.781; forked = 0.000
|
||||
INFO: [Common 17-2834] synth_design peak Virtual Memory [VSS] (MB): overall = 2645.664; main = 2645.664; forked = 0.000
|
||||
Write ShapeDB Complete: Time (s): cpu = 00:00:00.01 ; elapsed = 00:00:00 . Memory (MB): peak = 2669.672 ; gain = 0.000 ; free physical = 1881 ; free virtual = 17374
|
||||
INFO: [Common 17-1381] The checkpoint '/home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.runs/synth_1/project_reti_logiche.dcp' has been generated.
|
||||
INFO: [Vivado 12-24828] Executing command : report_utilization -file project_reti_logiche_utilization_synth.rpt -pb project_reti_logiche_utilization_synth.pb
|
||||
INFO: [Common 17-206] Exiting Vivado at Fri Jun 12 14:52:50 2026...
|
||||
Executable
+40
@@ -0,0 +1,40 @@
|
||||
#!/bin/bash
|
||||
|
||||
#
|
||||
# Vivado(TM)
|
||||
# runme.sh: a Vivado-generated Runs Script for UNIX
|
||||
# Copyright 1986-2022 Xilinx, Inc. All Rights Reserved.
|
||||
# Copyright 2022-2025 Advanced Micro Devices, Inc. All Rights Reserved.
|
||||
#
|
||||
|
||||
if [ -z "$PATH" ]; then
|
||||
PATH=/opt/Xilinx/2025.2/Vitis/bin:/opt/Xilinx/2025.2/Vivado/ids_lite/ISE/bin/lin64:/opt/Xilinx/2025.2/Vivado/bin
|
||||
else
|
||||
PATH=/opt/Xilinx/2025.2/Vitis/bin:/opt/Xilinx/2025.2/Vivado/ids_lite/ISE/bin/lin64:/opt/Xilinx/2025.2/Vivado/bin:$PATH
|
||||
fi
|
||||
export PATH
|
||||
|
||||
if [ -z "$LD_LIBRARY_PATH" ]; then
|
||||
LD_LIBRARY_PATH=
|
||||
else
|
||||
LD_LIBRARY_PATH=:$LD_LIBRARY_PATH
|
||||
fi
|
||||
export LD_LIBRARY_PATH
|
||||
|
||||
HD_PWD='/home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.runs/synth_1'
|
||||
cd "$HD_PWD"
|
||||
|
||||
HD_LOG=runme.log
|
||||
/bin/touch $HD_LOG
|
||||
|
||||
ISEStep="./ISEWrap.sh"
|
||||
EAStep()
|
||||
{
|
||||
$ISEStep $HD_LOG "$@" >> $HD_LOG 2>&1
|
||||
if [ $? -ne 0 ]
|
||||
then
|
||||
exit
|
||||
fi
|
||||
}
|
||||
|
||||
EAStep vivado -log project_reti_logiche.vds -m64 -product Vivado -mode batch -messageDb vivado.pb -notrace -source project_reti_logiche.tcl
|
||||
@@ -0,0 +1,24 @@
|
||||
#-----------------------------------------------------------
|
||||
# Vivado v2025.2 (64-bit)
|
||||
# SW Build 6299465 on Fri Nov 14 12:34:56 MST 2025
|
||||
# IP Build 6300035 on Fri Nov 14 10:48:45 MST 2025
|
||||
# SharedData Build 6298862 on Thu Nov 13 04:50:51 MST 2025
|
||||
# Start of session at: Fri Jun 12 14:52:36 2026
|
||||
# Process ID : 33507
|
||||
# Current directory : /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.runs/synth_1
|
||||
# Command line : vivado -log project_reti_logiche.vds -product Vivado -mode batch -messageDb vivado.pb -notrace -source project_reti_logiche.tcl
|
||||
# Log file : /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.runs/synth_1/project_reti_logiche.vds
|
||||
# Journal file : /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.runs/synth_1/vivado.jou
|
||||
# Running On : cachyos-x8664
|
||||
# Platform : cachyos
|
||||
# Operating System : CachyOS
|
||||
# Processor Detail : 12th Gen Intel(R) Core(TM) i7-12700F
|
||||
# CPU Frequency : 4313.234 MHz
|
||||
# CPU Physical cores : 12
|
||||
# CPU Logical cores : 20
|
||||
# Host memory : 16502 MB
|
||||
# Swap memory : 16501 MB
|
||||
# Total Virtual : 33003 MB
|
||||
# Available Virtual : 19387 MB
|
||||
#-----------------------------------------------------------
|
||||
source project_reti_logiche.tcl -notrace
|
||||
Binary file not shown.
@@ -0,0 +1,2 @@
|
||||
INFO: [VRFC 10-163] Analyzing VHDL file "/home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sources_1/new/progetto_reti_logiche.vhd" into library xil_defaultlib
|
||||
INFO: [VRFC 10-3107] analyzing entity 'project_reti_logiche'
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
#!/bin/bash -f
|
||||
# ****************************************************************************
|
||||
# Vivado (TM) v2025.2 (64-bit)
|
||||
#
|
||||
# Filename : compile.sh
|
||||
# Simulator : AMD Vivado Simulator
|
||||
# Description : Script for compiling the simulation design source files
|
||||
#
|
||||
# Generated by Vivado on Fri Jun 12 15:55:43 CEST 2026
|
||||
# SW Build 6299465 on Fri Nov 14 12:34:56 MST 2025
|
||||
#
|
||||
# Copyright 1986-2022 Xilinx, Inc. All Rights Reserved.
|
||||
# Copyright 2022-2025 Advanced Micro Devices, Inc. All Rights Reserved.
|
||||
#
|
||||
# usage: compile.sh
|
||||
#
|
||||
# ****************************************************************************
|
||||
export SIM_VER_XSIM=2025.2
|
||||
export GCC_VER_XSIM=9.3.0
|
||||
|
||||
# catch pipeline exit status
|
||||
set -Eeuo pipefail
|
||||
# compile VHDL design sources
|
||||
echo "xvhdl --incr --relax -prj project_tb_edge_vhdl.prj"
|
||||
xvhdl --incr --relax -prj project_tb_edge_vhdl.prj 2>&1 | tee compile.log
|
||||
|
||||
echo "Waiting for jobs to finish..."
|
||||
echo "No pending jobs, compilation finished."
|
||||
@@ -0,0 +1,17 @@
|
||||
Vivado Simulator v2025.2
|
||||
Copyright 1986-2022 Xilinx, Inc. All Rights Reserved.
|
||||
Copyright 2022-2025 Advanced Micro Devices, Inc. All Rights Reserved.
|
||||
Running: /opt/Xilinx/2025.2/Vivado/bin/unwrapped/lnx64.o/xelab --incr --debug typical --relax --mt 8 -L xil_defaultlib -L secureip --snapshot project_tb_edge_behav xil_defaultlib.project_tb_edge -log elaborate.log
|
||||
Using 8 slave threads.
|
||||
Starting static elaboration
|
||||
Completed static elaboration
|
||||
Starting simulation data flow analysis
|
||||
Completed simulation data flow analysis
|
||||
Time Resolution for simulation is 1ps
|
||||
Compiling package std.standard
|
||||
Compiling package std.textio
|
||||
Compiling package ieee.std_logic_1164
|
||||
Compiling package ieee.numeric_std
|
||||
Compiling architecture fsm of entity xil_defaultlib.project_reti_logiche [project_reti_logiche_default]
|
||||
Compiling architecture project_tb_edge_arch of entity xil_defaultlib.project_tb_edge
|
||||
Built simulation snapshot project_tb_edge_behav
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
#!/bin/bash -f
|
||||
# ****************************************************************************
|
||||
# Vivado (TM) v2025.2 (64-bit)
|
||||
#
|
||||
# Filename : elaborate.sh
|
||||
# Simulator : AMD Vivado Simulator
|
||||
# Description : Script for elaborating the compiled design
|
||||
#
|
||||
# Generated by Vivado on Fri Jun 12 15:55:44 CEST 2026
|
||||
# SW Build 6299465 on Fri Nov 14 12:34:56 MST 2025
|
||||
#
|
||||
# Copyright 1986-2022 Xilinx, Inc. All Rights Reserved.
|
||||
# Copyright 2022-2025 Advanced Micro Devices, Inc. All Rights Reserved.
|
||||
#
|
||||
# usage: elaborate.sh
|
||||
#
|
||||
# ****************************************************************************
|
||||
export SIM_VER_XSIM=2025.2
|
||||
export GCC_VER_XSIM=9.3.0
|
||||
|
||||
# catch pipeline exit status
|
||||
set -Eeuo pipefail
|
||||
# elaborate design
|
||||
echo "xelab --incr --debug typical --relax --mt 8 -L xil_defaultlib -L secureip --snapshot project_tb_edge_behav xil_defaultlib.project_tb_edge -log elaborate.log"
|
||||
xelab --incr --debug typical --relax --mt 8 -L xil_defaultlib -L secureip --snapshot project_tb_edge_behav xil_defaultlib.project_tb_edge -log elaborate.log
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
#
|
||||
# An unexpected error has occurred (11) Segmentation fault
|
||||
#
|
||||
Stack:
|
||||
/opt/vivado/2025.2/Vivado/tps/lnx64/jre21.0.5_11/lib//server/libjvm.so(+0xe7195c) [0x7fd51747195c]
|
||||
/opt/vivado/2025.2/Vivado/tps/lnx64/jre21.0.5_11/lib//server/libjvm.so(JVM_handle_linux_signal+0x23e) [0x7fd51747242e]
|
||||
/usr/lib/libc.so.6(+0x3e2d0) [0x7fd556e4d2d0]
|
||||
/opt/vivado/2025.2/Vivado/lib/lnx64.o/libxv_wavedata.so(+0x34ebcb) [0x7fd52434ebcb]
|
||||
/opt/vivado/2025.2/Vivado/lib/lnx64.o/libxv_wavedata.so(SimBridge::DataObjMgr::createDrawingBTree(std::vector<SimBridge::IDataObj const*, std::allocator<SimBridge::IDataObj const*> > const&, ISIM::IGuiStatus*, bool)+0x211) [0x7fd52434f1e1]
|
||||
/opt/vivado/2025.2/Vivado/lib/lnx64.o/libxv_wavedata.so(SimBridge::DataReader::getTransitions(SimBridge::IDataObj const*, long long, long long, long long, SimBridge::ValueFormat const&, std::vector<SimBridge::Transition, std::allocator<SimBridge::Transition> >&) const+0x6f) [0x7fd52436a6ff]
|
||||
/opt/vivado/2025.2/Vivado/lib/lnx64.o/libxv_wavedata.so(SG_Model::ModelImp::getTransitions(SimBridge::IDataObj const*, SG_Model::IDatabase*, long long, long long, long long, SimBridge::ValueFormat const&, bool, std::vector<SimBridge::Transition, std::allocator<SimBridge::Transition> >&) const+0xb7) [0x7fd5243c2cd7]
|
||||
/opt/vivado/2025.2/Vivado/lib/lnx64.o/libxv_wavedata.so(SG_Model::Model::getTransitions(SG_Model::WVDataObject const*, long long, long long, long long, SimBridge::ValueFormat const&, bool, std::vector<SimBridge::Transition, std::allocator<SimBridge::Transition> >&) const+0x128) [0x7fd5243c60c8]
|
||||
/opt/vivado/2025.2/Vivado/lib/lnx64.o/libxv_wavedata.so(+0x3a9596) [0x7fd5243a9596]
|
||||
/opt/vivado/2025.2/Vivado/lib/lnx64.o/libxv_wavedata.so(SG_Model::WaveformRender::render(SG_Model::WVDataObject const&)+0x294) [0x7fd5243a3f64]
|
||||
/opt/vivado/2025.2/Vivado/lib/lnx64.o/libxv_wavedata.so(WaveViewer::WVWaveformPanel::WaveformTraverser::drawWaveform(SG_Model::WVDataObject const*, int, int)+0x2cf) [0x7fd5243f1b2f]
|
||||
/opt/vivado/2025.2/Vivado/lib/lnx64.o/libxv_wavedata.so(WaveViewer::WVWaveformPanel::WaveformTraverser::handleItemSize(WaveViewer::WVTreeWVObjectModel::ITraverseHandler::TraverseItem const&)+0x54) [0x7fd5243f1ca4]
|
||||
/opt/vivado/2025.2/Vivado/lib/lnx64.o/libxv_wavedata.so(WaveViewer::WVTreeWVObjectModel::traverseYRange(SG_Model::WVDataObject const*, WaveViewer::WVTreeWVObjectModel::ITraverseHandler&, int, int, int&, int&) const+0x1a7) [0x7fd5242391a7]
|
||||
/opt/vivado/2025.2/Vivado/lib/lnx64.o/libxv_wavedata.so(WaveViewer::WVTreeWVObjectModel::traverseYRange(SG_Model::WVDataObject const*, WaveViewer::WVTreeWVObjectModel::ITraverseHandler&, int, int, int&, int&) const+0x22c) [0x7fd52423922c]
|
||||
/opt/vivado/2025.2/Vivado/lib/lnx64.o/libxv_wavedata.so(WaveViewer::WVTreeWVObjectModel::traverseYRange(WaveViewer::WVTreeWVObjectModel::ITraverseHandler&, int, int) const+0x58) [0x7fd52423a8e8]
|
||||
/opt/vivado/2025.2/Vivado/lib/lnx64.o/libxv_wavedata.so(WaveViewer::WVWaveformPanel::getGraphics(HDGDStringStream&, long&)+0x3de) [0x7fd5243f137e]
|
||||
/opt/vivado/2025.2/Vivado/lib/lnx64.o/libxv_wavedata.so(WVExecutiveImp::getGraphicsDataSize()+0x9a) [0x7fd5244037da]
|
||||
/opt/vivado/2025.2/Vivado/lib/lnx64.o/libxv_wavedata.so(WVExecutive::getGraphicsDataSize()+0x12) [0x7fd524403c62]
|
||||
/opt/vivado/2025.2/Vivado/lib/lnx64.o/libxv_wavedata.so(Java_ui_views_waveform_waveformi_WVExecutive_1getGraphicsDataSize+0x1c) [0x7fd5242050dc]
|
||||
[0x7fd506f7a1ea]
|
||||
@@ -0,0 +1,11 @@
|
||||
set curr_wave [current_wave_config]
|
||||
if { [string length $curr_wave] == 0 } {
|
||||
if { [llength [get_objects]] > 0} {
|
||||
add_wave /
|
||||
set_property needs_save false [current_wave_config]
|
||||
} else {
|
||||
send_msg_id Add_Wave-1 WARNING "No top level signals found. Simulator will start without a wave window. If you want to open a wave window go to 'File->New Waveform Configuration' or type 'create_wave_config' in the TCL console."
|
||||
}
|
||||
}
|
||||
|
||||
run 1000ns
|
||||
Binary file not shown.
@@ -0,0 +1,11 @@
|
||||
set curr_wave [current_wave_config]
|
||||
if { [string length $curr_wave] == 0 } {
|
||||
if { [llength [get_objects]] > 0} {
|
||||
add_wave /
|
||||
set_property needs_save false [current_wave_config]
|
||||
} else {
|
||||
send_msg_id Add_Wave-1 WARNING "No top level signals found. Simulator will start without a wave window. If you want to open a wave window go to 'File->New Waveform Configuration' or type 'create_wave_config' in the TCL console."
|
||||
}
|
||||
}
|
||||
|
||||
run 1000ns
|
||||
Binary file not shown.
@@ -0,0 +1,11 @@
|
||||
set curr_wave [current_wave_config]
|
||||
if { [string length $curr_wave] == 0 } {
|
||||
if { [llength [get_objects]] > 0} {
|
||||
add_wave /
|
||||
set_property needs_save false [current_wave_config]
|
||||
} else {
|
||||
send_msg_id Add_Wave-1 WARNING "No top level signals found. Simulator will start without a wave window. If you want to open a wave window go to 'File->New Waveform Configuration' or type 'create_wave_config' in the TCL console."
|
||||
}
|
||||
}
|
||||
|
||||
run all
|
||||
Binary file not shown.
@@ -0,0 +1,7 @@
|
||||
# compile vhdl design source files
|
||||
vhdl xil_defaultlib \
|
||||
"../../../../progetto_reti_logiche.srcs/sources_1/new/progetto_reti_logiche.vhd" \
|
||||
"../../../../progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd" \
|
||||
|
||||
# Do not sort compile order
|
||||
nosort
|
||||
@@ -0,0 +1,11 @@
|
||||
set curr_wave [current_wave_config]
|
||||
if { [string length $curr_wave] == 0 } {
|
||||
if { [llength [get_objects]] > 0} {
|
||||
add_wave /
|
||||
set_property needs_save false [current_wave_config]
|
||||
} else {
|
||||
send_msg_id Add_Wave-1 WARNING "No top level signals found. Simulator will start without a wave window. If you want to open a wave window go to 'File->New Waveform Configuration' or type 'create_wave_config' in the TCL console."
|
||||
}
|
||||
}
|
||||
|
||||
run 1000ns
|
||||
Binary file not shown.
@@ -0,0 +1,147 @@
|
||||
Time resolution is 1 ps
|
||||
Note: === GRUPPO 0: Reset ===
|
||||
Time: 50 ns Iteration: 0 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 0.0 OK: reset base
|
||||
Time: 200 ns Iteration: 0 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 0.1 OK: reset asincrono durante operazione
|
||||
Time: 1900 ns Iteration: 0 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: === GRUPPO 1: Inserimento ===
|
||||
Time: 1900 ns Iteration: 0 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 1.0 OK: insert in lista vuota
|
||||
Time: 3670 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 1.1 OK: insert con priorità massima in testa
|
||||
Time: 6010 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 1.2 OK: insert con priorità minima in fondo
|
||||
Time: 8230 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 1.3 OK: insert stesso prio -> va in coda agli uguali
|
||||
Time: 10450 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 1.4 OK: insert con tutti uguale prio -> sempre in fondo
|
||||
Time: 12950 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 1.5 OK: insert con ID duplicato ignorato
|
||||
Time: 15330 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: === GRUPPO 2: Rimozione ===
|
||||
Time: 15330 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 2.0 OK: rimozione da lista vuota -> o_task_id=0
|
||||
Time: 16990 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 2.1 OK: rimozione unico task -> lista vuota, task_id corretto
|
||||
Time: 18930 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 2.2 OK: rimozione con prio uguali -> FIFO rispettato
|
||||
Time: 21430 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: === GRUPPO 3: Decremento priorità ===
|
||||
Time: 21430 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 3.0 OK: decremento su lista vuota
|
||||
Time: 23130 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 3.1 OK: saturazione a priorità 3
|
||||
Time: 25350 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 3.2 OK: tutti a prio 3 -> nessuna modifica
|
||||
Time: 27870 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 3.3 OK: ex-prio2 vengono prima di ex-prio3 (no riordino)
|
||||
Time: 30730 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: === GRUPPO 4: Svuota lista ===
|
||||
Time: 30730 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 4.0 OK: svuota lista popolata
|
||||
Time: 33050 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 4.1 OK: svuota lista già vuota
|
||||
Time: 34730 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 4.2 OK: svuota poi rimozione -> o_task_id=0
|
||||
Time: 36690 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 4.3 OK: svuota poi decrementa -> nessun effetto
|
||||
Time: 38690 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: === GRUPPO 5: Sequenze composite ===
|
||||
Time: 38690 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 5.0 OK: insert->dec->remove, ID estratto corretto
|
||||
Time: 41490 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 5.1 OK: ordinamento completo con priorità miste
|
||||
Time: 44730 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: === GRUPPO 6: Rimozione multipla e ordinamento ===
|
||||
Time: 44730 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 6.0 OK: rimozioni multiple consecutive fino a lista vuota
|
||||
Time: 48310 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 6.1 OK: rimozione da lista con prio miste -> sempre posizione 1
|
||||
Time: 50750 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: === GRUPPO 7: Decremento ripetuto ===
|
||||
Time: 50750 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 7.0 OK: saturazione progressiva 0->1->2->3->3->3
|
||||
Time: 53430 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 7.0b OK: decremento ripetuto su prio miste, saturazione indipendente
|
||||
Time: 57010 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 7.1 OK: decremento su lista con un solo task
|
||||
Time: 59330 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 7.2 OK: decrementa -> svuota -> rimozione su vuota
|
||||
Time: 61730 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: === GRUPPO 8: Insert dopo rimozione e casi limite ===
|
||||
Time: 61730 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 8.0 OK: insert dopo rimozione parziale, ordinamento corretto
|
||||
Time: 64950 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 8.1 OK: insert prio=0 in lista tutto-prio=0, FIFO rispettato
|
||||
Time: 67830 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 8.2 OK: insert prio=3 in lista tutto-prio=3, FIFO rispettato
|
||||
Time: 70710 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: === GRUPPO 9: o_task_id per OP diverso da 01 ===
|
||||
Time: 70710 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 9.0 OK: OP=10 -> o_task_id=0 quando DONE=1
|
||||
Time: 72490 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 9.1 OK: OP=00 -> o_task_id=0 quando DONE=1
|
||||
Time: 74450 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 9.2 OK: OP=11 -> o_task_id=0 quando DONE=1
|
||||
Time: 76330 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 9.3 OK: OP=01 lista vuota -> o_task_id=0 quando DONE=1
|
||||
Time: 77990 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: === GRUPPO 10: Protocollo, reset avanzato, stress ===
|
||||
Time: 77990 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 10.0 OK: operazione immediata dopo DONE->0 post-reset
|
||||
Time: 79750 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 10.1 OK: stress test completo (insert/dec/remove/re-insert)
|
||||
Time: 92030 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 10.2 OK: reset dopo svuota, modulo correttamente reinizializzato
|
||||
Time: 94630 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: === GRUPPO 11: Insert con ID=0 ===
|
||||
Time: 94630 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 11.0 OK: insert ID=0 su lista vuota ignorato
|
||||
Time: 96290 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 11.1 OK: insert ID=0 su lista popolata ignorato
|
||||
Time: 98430 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: === GRUPPO 12: Capacita' massima 63 task ===
|
||||
Time: 98430 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 12.0 OK: 63 task inseriti, memoria completa verificata
|
||||
Time: 231450 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 12.1 OK: inserimenti oltre il 63esimo tutti ignorati
|
||||
Time: 235970 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 12.2 OK: drain di 63 task nell'ordine atteso
|
||||
Time: 363310 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: === GRUPPO 13: Stale memory e duplicati ai bordi ===
|
||||
Time: 363310 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 13.0 OK: re-insert di ID appena rimosso
|
||||
Time: 365710 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 13.1 OK: duplicato in prima posizione ignorato
|
||||
Time: 368130 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 13.2 OK: duplicato in ultima posizione ignorato
|
||||
Time: 368250 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 13.3 OK: re-insert stesso ID dopo clear
|
||||
Time: 370330 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: === GRUPPO 14: Reset asincrono avanzato ===
|
||||
Time: 370330 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 14.0 OK: reset a meta' shift di OP=01
|
||||
Time: 373150 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 14.1 OK: reset durante la scrittura del count
|
||||
Time: 375930 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 14.2 OK: reset durante OP=00
|
||||
Time: 378470 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 14.3 OK: reset mentre DONE=1
|
||||
Time: 380550 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 14.4 OK: reset corto non allineato
|
||||
Time: 382970 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: === GRUPPO 15: START lento dopo DONE=1 ===
|
||||
Time: 382970 ns Iteration: 1 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 15.0 OK: nessun doppio pop con START lento
|
||||
Time: 385480 ns Iteration: 0 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 15.1 OK: nessun doppio age con START lento
|
||||
Time: 387740 ns Iteration: 0 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Note: Test 15.2 OK: insert con START tenuto 2 cicli extra
|
||||
Time: 389840 ns Iteration: 0 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
Failure: ======================================
|
||||
Tutti i test edge case sono PASSATI
|
||||
======================================
|
||||
Time: 389840 ns Iteration: 0 Process: /project_tb_edge/main_test File: /home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd
|
||||
$finish called at time : 389840 ns : File "/home/aleandro/Projects/progetto_reti_logiche/progetto_reti_logiche.srcs/sim_1/new/project_tb_edge.vhd" Line 1616
|
||||
INFO: xsimkernel Simulation Memory Usage: 291592 KB (Peak: 337672 KB), Simulation CPU Usage: 710 ms
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
#!/bin/bash -f
|
||||
# ****************************************************************************
|
||||
# Vivado (TM) v2025.2 (64-bit)
|
||||
#
|
||||
# Filename : simulate.sh
|
||||
# Simulator : AMD Vivado Simulator
|
||||
# Description : Script for simulating the design by launching the simulator
|
||||
#
|
||||
# Generated by Vivado on Fri Jun 12 15:55:46 CEST 2026
|
||||
# SW Build 6299465 on Fri Nov 14 12:34:56 MST 2025
|
||||
#
|
||||
# Copyright 1986-2022 Xilinx, Inc. All Rights Reserved.
|
||||
# Copyright 2022-2025 Advanced Micro Devices, Inc. All Rights Reserved.
|
||||
#
|
||||
# usage: simulate.sh
|
||||
#
|
||||
# ****************************************************************************
|
||||
export SIM_VER_XSIM=2025.2
|
||||
export GCC_VER_XSIM=9.3.0
|
||||
|
||||
# catch pipeline exit status
|
||||
set -Eeuo pipefail
|
||||
# simulate design
|
||||
echo "xsim project_tb_edge_behav -key {Behavioral:sim_1:Functional:project_tb_edge} -tclbatch project_tb_edge.tcl -view /home/aleandro/Projects/progetto_reti_logiche/project_tb_edge_behav1.wcfg -log simulate.log"
|
||||
xsim project_tb_edge_behav -key {Behavioral:sim_1:Functional:project_tb_edge} -tclbatch project_tb_edge.tcl -view /home/aleandro/Projects/progetto_reti_logiche/project_tb_edge_behav1.wcfg -log simulate.log
|
||||
|
||||
Binary file not shown.
+1
@@ -0,0 +1 @@
|
||||
--incr --debug "typical" --relax --mt "8" -L "xil_defaultlib" -L "secureip" --snapshot "project_reti_logiche_behav" "xil_defaultlib.project_reti_logiche" -log "elaborate.log"
|
||||
+1
@@ -0,0 +1 @@
|
||||
Breakpoint File Version 1.0
|
||||
BIN
Binary file not shown.
+110
@@ -0,0 +1,110 @@
|
||||
/**********************************************************************/
|
||||
/* ____ ____ */
|
||||
/* / /\/ / */
|
||||
/* /___/ \ / */
|
||||
/* \ \ \/ */
|
||||
/* \ \ Copyright (c) 2003-2020 Xilinx, Inc. */
|
||||
/* / / All Right Reserved. */
|
||||
/* /---/ /\ */
|
||||
/* \ \ / \ */
|
||||
/* \___\/\___\ */
|
||||
/**********************************************************************/
|
||||
|
||||
#if defined(_WIN32)
|
||||
#include "stdio.h"
|
||||
#define IKI_DLLESPEC __declspec(dllimport)
|
||||
#else
|
||||
#define IKI_DLLESPEC
|
||||
#endif
|
||||
#include "iki.h"
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
#ifdef __GNUC__
|
||||
#include <stdlib.h>
|
||||
#else
|
||||
#include <malloc.h>
|
||||
#define alloca _alloca
|
||||
#endif
|
||||
/**********************************************************************/
|
||||
/* ____ ____ */
|
||||
/* / /\/ / */
|
||||
/* /___/ \ / */
|
||||
/* \ \ \/ */
|
||||
/* \ \ Copyright (c) 2003-2020 Xilinx, Inc. */
|
||||
/* / / All Right Reserved. */
|
||||
/* /---/ /\ */
|
||||
/* \ \ / \ */
|
||||
/* \___\/\___\ */
|
||||
/**********************************************************************/
|
||||
|
||||
#if defined(_WIN32)
|
||||
#include "stdio.h"
|
||||
#define IKI_DLLESPEC __declspec(dllimport)
|
||||
#else
|
||||
#define IKI_DLLESPEC
|
||||
#endif
|
||||
#include "iki.h"
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
#ifdef __GNUC__
|
||||
#include <stdlib.h>
|
||||
#else
|
||||
#include <malloc.h>
|
||||
#define alloca _alloca
|
||||
#endif
|
||||
typedef void (*funcp)(char *, char *);
|
||||
extern int main(int, char**);
|
||||
IKI_DLLESPEC extern void execute_26(char*, char *);
|
||||
IKI_DLLESPEC extern void execute_27(char*, char *);
|
||||
IKI_DLLESPEC extern void transaction_0(char*, char*, unsigned, unsigned, unsigned);
|
||||
IKI_DLLESPEC extern void vhdl_transfunc_eventcallback(char*, char*, unsigned, unsigned, unsigned, char *);
|
||||
funcp funcTab[4] = {(funcp)execute_26, (funcp)execute_27, (funcp)transaction_0, (funcp)vhdl_transfunc_eventcallback};
|
||||
const int NumRelocateId= 4;
|
||||
|
||||
void relocate(char *dp)
|
||||
{
|
||||
iki_relocate(dp, "xsim.dir/project_reti_logiche_behav/xsim.reloc", (void **)funcTab, 4);
|
||||
iki_vhdl_file_variable_register(dp + 9192);
|
||||
iki_vhdl_file_variable_register(dp + 9248);
|
||||
|
||||
|
||||
/*Populate the transaction function pointer field in the whole net structure */
|
||||
}
|
||||
|
||||
void sensitize(char *dp)
|
||||
{
|
||||
iki_sensitize(dp, "xsim.dir/project_reti_logiche_behav/xsim.reloc");
|
||||
}
|
||||
|
||||
void simulate(char *dp)
|
||||
{
|
||||
iki_schedule_processes_at_time_zero(dp, "xsim.dir/project_reti_logiche_behav/xsim.reloc");
|
||||
// Initialize Verilog nets in mixed simulation, for the cases when the value at time 0 should be propagated from the mixed language Vhdl net
|
||||
iki_execute_processes();
|
||||
|
||||
// Schedule resolution functions for the multiply driven Verilog nets that have strength
|
||||
// Schedule transaction functions for the singly driven Verilog nets that have strength
|
||||
|
||||
}
|
||||
#include "iki_bridge.h"
|
||||
void relocate(char *);
|
||||
|
||||
void sensitize(char *);
|
||||
|
||||
void simulate(char *);
|
||||
|
||||
extern SYSTEMCLIB_IMP_DLLSPEC void local_register_implicit_channel(int, char*);
|
||||
extern SYSTEMCLIB_IMP_DLLSPEC int xsim_argc_copy ;
|
||||
extern SYSTEMCLIB_IMP_DLLSPEC char** xsim_argv_copy ;
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
iki_heap_initialize("ms", "isimmm", 0, 2147483648) ;
|
||||
iki_set_xsimdir_location_if_remapped(argc, argv) ;
|
||||
iki_set_sv_type_file_path_name("xsim.dir/project_reti_logiche_behav/xsim.svtype");
|
||||
iki_set_crvs_dump_file_path_name("xsim.dir/project_reti_logiche_behav/xsim.crvsdump");
|
||||
void* design_handle = iki_create_design("xsim.dir/project_reti_logiche_behav/xsim.mem", (void *)relocate, (void *)sensitize, (void *)simulate, (void*)0, 0, isimBridge_getWdbWriter(), 0, argc, argv);
|
||||
iki_set_rc_trial_count(100);
|
||||
(void) design_handle;
|
||||
return iki_simulate_design();
|
||||
}
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
+12
@@ -0,0 +1,12 @@
|
||||
|
||||
{
|
||||
crc : 13885744666178239796 ,
|
||||
ccp_crc : 0 ,
|
||||
cmdline : " --incr --debug typical --relax --mt 8 -L xil_defaultlib -L secureip --snapshot project_reti_logiche_behav xil_defaultlib.project_reti_logiche" ,
|
||||
buildDate : "Nov 14 2025" ,
|
||||
buildTime : "12:36:23" ,
|
||||
linkCmd : "/opt/vivado/2025.2/Vivado/lib/lnx64.o/../../tps/lnx64/gcc-9.3.0/bin/g++ -Wa,-W -O -fPIC -m64 -Wl,--no-as-needed -Wl,--unresolved-symbols=ignore-all -o \"xsim.dir/project_reti_logiche_behav/xsimk\" \"xsim.dir/project_reti_logiche_behav/obj/xsim_0.lnx64.o\" \"xsim.dir/project_reti_logiche_behav/obj/xsim_1.lnx64.o\" -L\"/opt/vivado/2025.2/Vivado/lib/lnx64.o\" -lxv_simulator_kernel -L/opt/vivado/2025.2/Vivado/lib/lnx64.o/../../tps/lnx64/gcc-9.3.0/bin/../lib64 -Wl,--disable-new-dtags -Wl,-rpath=/opt/vivado/2025.2/Vivado/lib/lnx64.o/../../tps/lnx64/gcc-9.3.0/bin/../lib64 -lxv_simbridge_kernel" ,
|
||||
aggregate_nets :
|
||||
[
|
||||
]
|
||||
}
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
+1
@@ -0,0 +1 @@
|
||||
hjhoth
|
||||
BIN
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user