Skip to content

Latest commit

Β 

History

49 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

βš™οΈ Progetto di Reti Logiche – Filtro Differenziale su RAM

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


🧠 Descrizione del Progetto

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.


πŸ“š Specifica Tecnica

  • 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).
  • I filtri disponibili sono:

    • Ordine 3: [0, -1, 8, 0, -8, 1, 0] con normalizzazione n = 12
    • Ordine 5: [1, -9, 45, 0, -45, 9, -1] con normalizzazione n = 60 NB: Γ¨ possibile cambiare i coefficienti (ma non il valore di normalizzazione) modificando gli array istanziati nel Testbench.
  • 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.


πŸ—οΈ Architettura Hardware

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 PRE e NORM_WRITE, migliorando lo slack e la stabilitΓ .

Segnali principali

  • i_clk, i_rst, i_start, i_add, i_mem_data – controllo e indirizzamento
  • o_mem_addr, o_mem_data, o_mem_en, o_mem_we – output del componente (interfaccia con la RAM)
  • o_done – segnale di fine elaborazione

⏱️ Risultati di Sintesi

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


πŸ§ͺ Test Bench e Simulazioni

Le simulazioni sono state svolte in modalitΓ  Behavioral, Post-Synthesis Functional e Post-Synthesis Timing (facoltativa ma superata).

Test principali eseguiti:

  • βœ… 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.


πŸ“¦ Struttura del Progetto

πŸ“ progetto_reti_logiche
β”œβ”€β”€ CONSEGNA/
β”‚   └── progetto.vhd                   # Componente principale
β”‚   └── relazione.pdf                  # Relazione di progetto
β”œβ”€β”€ Testbench/
β”‚   └── *.vhd                          # Test bench utilizzati
β”œβ”€β”€ README.md

About

Prova Finale: Progetto di Reti Logiche, A.A. 2024/25

Resources

Stars

0 stars

Watchers

1 watching

Forks

Contributors

Languages