This thesis presents the design and implementation of a portable constraint randomizer for SystemVerilog, addressing the primary limitations of current commercial verification tools in terms of randomization stability, reproducibility, and licensing constraints. In particular, it aims to preserve test reproducibility even across different simulators and to overcome the limitations imposed by commercial licenses regarding the randomization of real-type variables. The randomizer consists of a pipeline architecture with four main stages, each with a distinct purpose: separating responsibilities among SystemVerilog language analysis, intermediate representation construction, constraint solving, and simulator interface. The Slang parser is used for data extraction from SystemVerilog code, while the Gecode constraint-solving library, capable of handling constraints on integers, booleans, and reals, is employed for constraint resolution. Integration with the simulator is achieved through DPI and VPI interfaces. The implementation supports the main SystemVerilog randomization features, including constraints with relational operators, inside constraints, the foreach construct for arrays, dist-type constraints for non-uniform randomization, and uniqueness constraints. Through the application of the randomizer to a case study based on the Ibex RISC-V Demo System, it was possible to demonstrate its effectiveness in realistic contexts. The developed testbench performs memory operations and tracks their functional coverage through a covergroup. The latter also allowed highlighting a significant improvement in verification efficiency. The modular architecture of this work offers a solid foundation for future developments, such as support for more complex constraints and nested classes, and optimization of solver performance. This research demonstrates that SystemVerilog constraint solving can be made portable and simulator-independent, while simultaneously overcoming the limitations of commercial licenses.

In questa tesi si presenta la progettazione e l'implementazione di un randomizzatore di vincoli portatile per SystemVerilog, affrontando le principali limitazioni degli attuali strumenti di verifica commerciali in termini di stabilità della randomizzazione, riproducibilità e vincoli di licenza. In particolare si pone l'obiettivo di conservare la riproducibilità dei test anche su simulatori diversi e di superare le limitazioni imposte dalle licenze commerciali riguardo alla randomizzazione di variabili di tipo real. Il randomizzatore è composto da un'architettura a pipeline con quattro stadi principali, con il fine di separare le responsabilità tra analisi del linguaggio SystemVerilog, costruzione di una rappresentazione intermedia, risoluzione dei vincoli e interfaccia con il simulatore. Il parser Slang è utilizzato per l'estrazione dei dati dal codice SystemVerilog, mentre la libreria di constraint solving Gecode, in grado di gestire vincoli su interi, booleani e reali, è impiegata per la risoluzione dei vincoli. L'integrazione con il simulatore è realizzata tramite le interfacce DPI e VPI. L'implementazione supporta le principali funzionalità di randomizzazione di SystemVerilog, tra cui i vincoli con operatori relazionali, i vincoli inside, il costrutto foreach per gli array, i vincoli di tipo dist per la randomizzazione non uniforme e i vincoli di unicità. Attraverso l'applicazione del randomizzatore ad un caso di studio basato sull'Ibex RISC-V Demo System, è stato possibile dimostrare la sua efficacia in contesti realistici. Il testbench sviluppato effettua operazioni di memoria e ne traccia la copertura funzionale attraverso un covergroup. Quest'ultimo ha inoltre permesso di evidenziare un miglioramento significativo dell'efficienza della verifica. L'architettura modulare di questo lavoro offre una base solida per sviluppi futuri, come il supporto per vincoli più complessi e classi annidate e l'ottimizzazione delle prestazioni del solver. Questa ricerca dimostra che la risoluzione dei vincoli di SystemVerilog può essere resa portatile e indipendente dal simulatore, superando al contempo le limitazioni delle licenze commerciali.

Portable randomizer for the verification of complex systems

Tedesco, Dario
2024/2025

Abstract

This thesis presents the design and implementation of a portable constraint randomizer for SystemVerilog, addressing the primary limitations of current commercial verification tools in terms of randomization stability, reproducibility, and licensing constraints. In particular, it aims to preserve test reproducibility even across different simulators and to overcome the limitations imposed by commercial licenses regarding the randomization of real-type variables. The randomizer consists of a pipeline architecture with four main stages, each with a distinct purpose: separating responsibilities among SystemVerilog language analysis, intermediate representation construction, constraint solving, and simulator interface. The Slang parser is used for data extraction from SystemVerilog code, while the Gecode constraint-solving library, capable of handling constraints on integers, booleans, and reals, is employed for constraint resolution. Integration with the simulator is achieved through DPI and VPI interfaces. The implementation supports the main SystemVerilog randomization features, including constraints with relational operators, inside constraints, the foreach construct for arrays, dist-type constraints for non-uniform randomization, and uniqueness constraints. Through the application of the randomizer to a case study based on the Ibex RISC-V Demo System, it was possible to demonstrate its effectiveness in realistic contexts. The developed testbench performs memory operations and tracks their functional coverage through a covergroup. The latter also allowed highlighting a significant improvement in verification efficiency. The modular architecture of this work offers a solid foundation for future developments, such as support for more complex constraints and nested classes, and optimization of solver performance. This research demonstrates that SystemVerilog constraint solving can be made portable and simulator-independent, while simultaneously overcoming the limitations of commercial licenses.
BARBATI, MATTEO
CORONA, UMBERTO
ING - Scuola di Ingegneria Industriale e dell'Informazione
10-dic-2025
2024/2025
In questa tesi si presenta la progettazione e l'implementazione di un randomizzatore di vincoli portatile per SystemVerilog, affrontando le principali limitazioni degli attuali strumenti di verifica commerciali in termini di stabilità della randomizzazione, riproducibilità e vincoli di licenza. In particolare si pone l'obiettivo di conservare la riproducibilità dei test anche su simulatori diversi e di superare le limitazioni imposte dalle licenze commerciali riguardo alla randomizzazione di variabili di tipo real. Il randomizzatore è composto da un'architettura a pipeline con quattro stadi principali, con il fine di separare le responsabilità tra analisi del linguaggio SystemVerilog, costruzione di una rappresentazione intermedia, risoluzione dei vincoli e interfaccia con il simulatore. Il parser Slang è utilizzato per l'estrazione dei dati dal codice SystemVerilog, mentre la libreria di constraint solving Gecode, in grado di gestire vincoli su interi, booleani e reali, è impiegata per la risoluzione dei vincoli. L'integrazione con il simulatore è realizzata tramite le interfacce DPI e VPI. L'implementazione supporta le principali funzionalità di randomizzazione di SystemVerilog, tra cui i vincoli con operatori relazionali, i vincoli inside, il costrutto foreach per gli array, i vincoli di tipo dist per la randomizzazione non uniforme e i vincoli di unicità. Attraverso l'applicazione del randomizzatore ad un caso di studio basato sull'Ibex RISC-V Demo System, è stato possibile dimostrare la sua efficacia in contesti realistici. Il testbench sviluppato effettua operazioni di memoria e ne traccia la copertura funzionale attraverso un covergroup. Quest'ultimo ha inoltre permesso di evidenziare un miglioramento significativo dell'efficienza della verifica. L'architettura modulare di questo lavoro offre una base solida per sviluppi futuri, come il supporto per vincoli più complessi e classi annidate e l'ottimizzazione delle prestazioni del solver. Questa ricerca dimostra che la risoluzione dei vincoli di SystemVerilog può essere resa portatile e indipendente dal simulatore, superando al contempo le limitazioni delle licenze commerciali.
File allegati
File Dimensione Formato  
2025_12_Tedesco_Tesi.pdf

accessibile in internet per tutti

Descrizione: Testo Tesi
Dimensione 1.83 MB
Formato Adobe PDF
1.83 MB Adobe PDF Visualizza/Apri
2025_12_Tedesco_ExecutiveSummary.pdf

accessibile in internet per tutti

Descrizione: Testo Executive Summary
Dimensione 450.04 kB
Formato Adobe PDF
450.04 kB Adobe PDF Visualizza/Apri

I documenti in POLITesi sono protetti da copyright e tutti i diritti sono riservati, salvo diversa indicazione.

Utilizza questo identificativo per citare o creare un link a questo documento: https://hdl.handle.net/10589/247473