Prova finale del corso di Reti Logiche, Anno Accademico 2024/2025
Politecnico di Milano
Valutazione finale: 30 e lode
Autori: Stefano Ungaro e Alessandro Ferdinando Verrengia
Questo progetto ha lβobiettivo di implementare in VHDL un componente hardware in grado di:
- interfacciarsi con una memoria RAM,
- leggere una sequenza di Byte da elaborare,
- applicare un filtro differenziale selezionabile (ordine 3 o 5),
- scrivere in memoria i risultati filtrati.
Il sistema si presta a essere integrato in pipeline digitali per elaborazioni di segnali, e rispetta vincoli stringenti di compattezza, efficienza e correttezza funzionale e temporale.
-
La sequenza da elaborare Γ¨ preceduta da un preambolo di 17 Byte, che specifica:
- lunghezza della sequenza
K(2 Byte), - selezione del filtro (
S: 1 Byte il cui LSB determina quale utilizzare tra ordine 3 o 5), - 14 coefficienti (entrambi i filtri sono codificati nel preambolo).
- lunghezza della sequenza
-
I filtri disponibili sono:
- Ordine 3:
[0, -1, 8, 0, -8, 1, 0]con normalizzazionen = 12 - Ordine 5:
[1, -9, 45, 0, -45, 9, -1]con normalizzazionen = 60NB: Γ¨ possibile cambiare i coefficienti (ma non il valore di normalizzazione) modificando gli array istanziati nel Testbench.
- Ordine 3:
-
Normalizzazione:
- Implementata tramite shift logici a destra e compensazioni per valori negativi,
- Approccio efficiente per l'uso in hardware (no divisione esplicita).
-
I risultati (
R1...Rk) vengono scritti in memoria subito dopo i valori di ingresso.
Il componente Γ¨ realizzato con:
- Un unico processo VHDL, che integra una FSM completamente specificata.
- Sette stati principali:
IDLEβSET_READβWAIT_MEMβFETCHβPREβNORM_WRITEβDONE
- Ottimizzazione del percorso critico tramite separazione dei calcoli nei due stati
PREeNORM_WRITE, migliorando lo slack e la stabilitΓ .
i_clk,i_rst,i_start,i_add,i_mem_dataβ controllo e indirizzamentoo_mem_addr,o_mem_data,o_mem_en,o_mem_weβ output del componente (interfaccia con la RAM)o_doneβ segnale di fine elaborazione
Sintesi effettuata con Xilinx Vivado Webpack su FPGA Artix-7 (xc7a200tfbg484-1).
| Risorsa | Utilizzo | Totale disponibile | Utilizzo % |
|---|---|---|---|
| Slice LUTs | 773 | 134600 | 0.57% |
| Slice Registers | 171 | 269200 | 0.06% |
| Latch | 0 | 269200 | 0.00% |
β±οΈ Worst Negative Slack: 6.995 ns su clock di 20 ns β il percorso critico impiega circa 13 ns
π§ Nessun latch generato β logica sintetizzabile e pulita
Le simulazioni sono state svolte in modalitΓ Behavioral, Post-Synthesis Functional e Post-Synthesis Timing (facoltativa ma superata).
- β Lunghezza minima (7 byte) β Verifica della correttezza
- π Reset asincrono β Interruzione e ripartenza
- π§΅ Lunghezza massima (32.759 byte) β Stress test temporale e funzionale
- π’ Valori estremi β Saturazione corretta oltre Β±127
- π Multi-esecuzione β Elaborazioni consecutive con filtri diversi
- π§ Verifica con esempi manuali e da specifica
Tutti i test sono stati superati con risultati conformi alle attese.
π progetto_reti_logiche
βββ CONSEGNA/
β βββ progetto.vhd # Componente principale
β βββ relazione.pdf # Relazione di progetto
βββ Testbench/
β βββ *.vhd # Test bench utilizzati
βββ README.md