vlsiquest

SystemVerilog `timescale: Simulation timeunit and timeprecision

In SystemVerilog, simulation time units and precision are crucial aspects that determine how time is modeled and controlled during simulation. They help define the scale and accuracy of time-related operations within the simulation environment. Simulator is used to imitate the operation of a real-world process of the system description or model being simulated. Maintaining system […]

SystemVerilog `timescale: Simulation timeunit and timeprecision Read More »

SystemVerilog Clocking Block

[wpbread] In digital design and verification, precise signal timing is paramount to prevent race conditions and ensure the system operates reliably. Signals must be driven or sampled concerning specific clock edges to maintain synchronization between the Design Under Test (DUT) and the testbench. Table of Contents SystemVerilog Clocking Block SystemVerilog clocking blocks are invaluable for

SystemVerilog Clocking Block Read More »

SystemVerilog New logic specific processes: always_comb, always_latch, and always_ff

[wpbread] In SystemVerilog, always_comb, always_latch, and always_ff are procedural blocks that are used for different types of hardware modeling. They provide different timing and sensitivity control to describe the behavior of combinational logic, latches, and flip-flops respectively. All forms of always procedures repeat continuously throughout the duration of the simulation. In this post we will discuss about these always procedures. Table of Contents

SystemVerilog New logic specific processes: always_comb, always_latch, and always_ff Read More »

SystemVerilog Concurrency: A Comprehensive Guide to Fork-Join Constructs and Their Variants

[wpbread] Concurrency enhances the efficiency of digital design and verification. In SystemVerilog, a language that plays a pivotal role in hardware design and verification, the fork-join construct is the key to unlocking the potential of parallel execution. It’s a fundamental mechanism that allows for concurrent execution of statements, threads, and processes. The Verilog fork-join block

SystemVerilog Concurrency: A Comprehensive Guide to Fork-Join Constructs and Their Variants Read More »

Fine-grain process control – How to use SV built-in class “process”

[wpbread] SystemVerilog defines a built-in class “Process” that allows one process to access and control another process once it has started. It allows users to define variables of type process and safely pass them through tasks. It is powerful technique of fine-grain process control. The process class cannot be extended. Object of type process is

Fine-grain process control – How to use SV built-in class “process” Read More »

Writing SystemVerilog Testbenches for beginner

Introduction: This guide serves as a foundational resource for beginners looking to understand SystemVerilog testbench structure. It focuses on a simple Design Under Test (DUT) to provide clear insights into the various components of a testbench. By the end of this guide, users will have a solid understanding of different testbench components and will be

Writing SystemVerilog Testbenches for beginner Read More »

Regular Expression in UVM – uvm_re_match

Table of Contents [wpbread] uvm_re_match Sometimes it is useful to use a regular expression within the testbench, such as filtering based on instance hierarchy. To do this, UVM has a function called uvm_pkg::uvm_re_match(), which is a DPI-C function that makes use of the POSIX function regexec() to perform a string match. import “DPI-C” function int uvm_re_match

Regular Expression in UVM – uvm_re_match Read More »

UVM_Phases categories and how are phases executed

[wpbread] UVM (Universal Verification Methodology) provides a framework for organizing the execution of a testbench into different phases, known as the UVM phases. The UVM phases help to structure the testbench creation and execution, making it easier to build and debug complex testbenches. UVM Phases also provide synchronizing mechanism for the environment. UVM phasing interface

UVM_Phases categories and how are phases executed Read More »

What is uvm_config_db and how to use it

uvm_config_db provides infrastructure to share configuration and other parameters between two or more testbench components or objects and it is the recommended way to access the resource database in UVM. uvm_config_db::set is used to put the information into the database uvm_config_db::get is used to retrieve the information from the database. This database can be populated and accessed using strings.

What is uvm_config_db and how to use it Read More »