SystemVerilog RTL verification
UVM like (non-UVM) verification environment verifying a DUT with handshake controlled input and output
A case of the non-UVM (but UVM-like) Verification Environment of a DUT that features a handshake-controlled input and output data transfers
Introduction 2
Verification environment architecture 2
Individual functioning (and interconnection between them), of all verification architecture elements 2
DUT 5
Interface 7
testbench.sv ( top testbench module ) 7
Transaction Class 9
Generator Class 10
Driver Class 11
Environment Class 15
Test Program 17
Monitor Class 18
Scoreboard Class 19
Verification waveforms 20
Simulation/Verification log 21
Introduction
The Universal Verification Methodology (UVM) has long been the go-to framework for system verification, providing a robust and standardized approach. In this blog post we delve into a System VerilogUVM-like verification infrastructure , an UVM alternative verification infrastructure that offers similar benefits while diverging from the UVM framework of dedicated UVM specific verification code.
Verification environment architecture
Individual functioning (and interconnection between them), of all verification architecture elements
Here is how all System Verilog verification elements are connected in this architecture and an explanation of their individual functioning.
testbench.sv (architecture block diagram: TestBench_Top)
Generatest POR ( lines 24-29) and system clock ( lines: 21-22)
Instantiates and connects following parts together: random_test.sv ( the verification test: lines: 10 and 36 ), DUT RTL( lines: 39-49) and interface.sv (DUT’s interface: lines: 6 and 33)
Count clock ticks to finish simulation after a predetermined number of clock ticks is reached (lines: 58-67).
Capture waveforms data ( vcd file,lines: 52-55 )
random_test.sv (architecture block diagram: test)
System Verilog test in the present System Verilog testbench verification architecture. Only one test can be executes at the time in the architecture.
It is implemented using SystemVerilog “program” that interface with the testbench.sv/DUT via interface.sv.
Declares and creates environment.sv and then executes environments main task “run”
environment.sv (architecture block diagram: env)
declare interface and gets the interface from the test
declare and create two mailboxes (to pack transactions in them):
gen2driver ( transactions passed from generator to driver)
mon2scb ( transactions passed from monitor to scoreboard)
declare and create:
generator.sv
Input argument: gen2driver
driver.sv
Input arguments: gen2driver and interface
monitor.sv
Input arguments: mon2scb and interface
scoreboard.sv
Input argument: mon2scb
main verification test task: “run” executes the System Verilog verification test in the present architecture
end of “run” task execution is the end of the verification test.
“run” activity can be divided and controlled in three methods:
pre_test() - Method to call Initialization. i.e, reset method.
e.g. The reset task is defined inside driver ( The reset task is driver class “method” )
test()
Execute in parallel the main task (“main”) in all four main verification architecture components: generator, driver, monitor and scoreboard.
post_test() - Method to wait for the completion of the verification test
First it waits end that all transactions are generated. The number of the transactions is previously determined, in other words it is programmable.
Finally it waits until the scoreboard finishes checking all results stored in transactions.
generator.sv (architecture block diagram: generator)
declares mailbox handle and get the environments mailbox: gen2driver through constructor
generates predetermined number of transactions for the driver and stores the generated transactions into environments mailbox: gen2driver
Indicates ( by triggering an event) the end of packets generation
driver.sv (architecture block diagram: driver)
declares mailbox handle and gets the environments mailbox: gen2driver through constructor
declares interface handle and gets the interface ( from the test: random_test.sv ) through constructor
The reset task is defined inside driver ( The reset task is driver class “method” )
The reset task is later used by the environment in its main verification test task: “run” in sub-task: pre_test() a method to call Initialization (i.e, reset method).
The main driver task: “main”
provides two loops in parallel ( using fork …. join): one loop is interfacing to provide input data to DUT as a producer and the other is interfacing to do output data take over from DUT, as a consumer.
“producer” loop first waits a randomized number of clock cycles ( between 1 and 20) before it signals to DUT that there is a random input data( from the mailbox: gen2driv) available. This will take place only if output data ( if any available ) already left DUT or there is no previous input data not yet accepted by DUT.
“producer” loop will provide to DUT, a predetermined number of iterations, input data each waiting for a previous DUT output data to be “consumed” first.
when a random input data is accepted by DUT, the driver sets up a flag that that “transaction is available” necessary for the “consumer” loop to execute. The “consumer” loop will clear the flag “transaction is available” every time a DUT output data is “consumed”.
when DUT signals that an output data is available, the “consumer” loop first waits a randomized number of clock cycles ( between 1 and 20) before it “consumes” the data . After this the “consumer” loop will clear the flag “transaction is available” to signal the “producer” loop to make next randomized input data available to DUT.
monitor.sv (architecture block diagram: monitor)
declares mailbox handle and gets the environments mailbox: mon2scb through constructor
declares interface handle and gets the interface ( from the test: random_test.sv ) through constructor
provides two “waits” in parallel ( using fork …. join): one “wait” is waiting until DUT accepts input data and the other “wait” is waiting until DUT’s output data is “consumed”. After the both “waits” are individually executed, after the first “wait” a data input is saved in a transaction and in the same manner after the second “wait” the output data is sampled and saved in the same transaction. Every clock cycle the transaction is “pushed” in the mailbox mon2scb, later to be used by scoreboard in a verification self-checking.
scoreboard.sv (architecture block diagram: scoreboard)
declares mailbox handle and gets the environments mailbox: mon2scb through constructor
For every transaction from mailbox mon2scb, the scoreboards checks that input data is the same as output data because the functionality of our simple DUT was just that: transfer the same data in and out of the DUT using the handshake control on both ends: input and output.
DUT
DUT input and output data exchange controls using handshake interfaces is based on Producer/Consumer exchange of data. The same DUT and the handshake mechanism were already described in one of the previous blog posts: https://asicstoic.blogspot.com/2023/06/verilog-rtl-verification-cocotb-based.html
Interface
The name of the file is: interface.sv .
testbench.sv ( top testbench module )
Transaction Class
The name of the file is: transaction.sv .
Generator Class
Generating the randomized DUT input data, a part of the transaction class. The produced data is used by the driver class as DUT input data stimulus.
The name of the file is: generator.sv .
Driver Class
Receive the stimulus (randomized DUT input data, one of transaction class values) generated from the generator and drive it to DUT using randomized DUT input handshake control signal. Also using randomized DUT output handshake control signal causes DUT output data “consumption”.
The name of the file is: driver.sv
Environment Class
Environment is a container class containing Mailbox, Generator, Driver, Monitor and Scoreboard. For each of them, declare the handles and create them individually in the Construct Method.
The name of the file is: environment.sv .
Test Program
In Verilog there is a concept of only one design entity and that is: module ( used for both design and testbench ):
to have clear separation between testbench and design, SystemVerilog introduces “program”, which contains a full environment for testbench.
Test code is written with the program block. The test is responsible for creating the environment and configuring the testbench i.e, setting a number of transactions to be generated.
The name of the file is: random_test.sv.
Monitor Class
Scoreboard Class
Scoreboard receives the sampled packet from the monitor and compares it with the expected result so an error will be reported if the comparison results in a mismatch.
Verification waveforms
Simulation/Verification log
[2023-07-17 13:41:39 UTC] vcs -licqueue '-timescale=1ns/1ns' '+vcs+flush+all' '+warn=all' '-sverilog' design.sv testbench.sv && ./simv +vcs+lic+wait
Warning-[LINX_KRNL] Unsupported Linux kernel
Linux kernel '5.4.0-152-generic' is not supported.
Supported versions are 2.4* or 2.6*.
Chronologic VCS (TM)
Version S-2021.09 -- Mon Jul 17 09:41:40 2023
Copyright (c) 1991 - 2021 Synopsys, Inc.
Parsing design file 'design.sv'
Parsing design file 'testbench.sv'
Parsing included file 'interface.sv'.
Back to file 'testbench.sv'.
Parsing included file 'random_test.sv'.
Parsing included file 'environment.sv'.
Parsing included file 'transaction.sv'.
Back to file 'environment.sv'.
Parsing included file 'generator.sv'.
Back to file 'environment.sv'.
Parsing included file 'driver.sv'.
Back to file 'environment.sv'.
Parsing included file 'monitor.sv'.
Back to file 'environment.sv'.
Parsing included file 'scoreboard.sv'.
Back to file 'environment.sv'.
Back to file 'random_test.sv'.
Back to file 'testbench.sv'.
Top Level Modules:
tbench_top
TimeScale is 1 ns / 1 ns
CPU time: .327 seconds to compile + .398 seconds to elab + .217 seconds to link
Chronologic VCS simulator copyright 1991-2021
Contains Synopsys proprietary information.
Compiler version S-2021.09; Runtime version S-2021.09; Jul 17 09:41 2023
[ DRIVER ] ----- Reset Started -----
[ DRIVER ] ----- Reset Ended -----
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 13
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 6
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 15
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 15
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 7
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 15
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 4
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 12
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 4
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 7
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 13
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 11
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 1
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 6
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 3
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 2
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 11
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 1
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 9
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 2
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 11
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 12
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 1
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 0
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 15
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 3
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 5
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 1
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 15
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 14
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 6
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 5
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 6
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 12
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 12
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 11
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 11
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 13
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 13
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 6
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 4
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 7
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 15
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 11
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 11
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 4
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 14
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 11
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 2
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 9
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 1
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 10
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 5
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 9
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 0
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 13
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 7
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 5
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 9
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 10
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 4
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 5
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 6
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 11
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 4
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 5
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 0
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 8
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 0
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 5
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 8
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 13
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 4
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 14
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 11
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 15
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 2
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 8
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 4
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 13
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 10
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 11
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 15
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 15
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 12
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 6
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 1
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 9
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 4
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 12
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 8
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 12
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 4
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 9
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 1
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 9
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 7
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 10
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 6
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Generator ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 11
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Driver ]
-------------------------
- en_din_i = 1, rdy_din_o = 0, din_i = 13
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Monitor ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 13
- en_dout_i = x, rdy_dout_o = x, dout_o = 13
-------------------------
Result is as Expected
-------------------------
- [ Scoreboard ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 13
- en_dout_i = x, rdy_dout_o = x, dout_o = 13
-------------------------
-------------------------
- [ Driver ]
-------------------------
- en_din_i = 1, rdy_din_o = 0, din_i = 6
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Monitor ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 6
- en_dout_i = x, rdy_dout_o = x, dout_o = 6
-------------------------
Result is as Expected
-------------------------
- [ Scoreboard ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 6
- en_dout_i = x, rdy_dout_o = x, dout_o = 6
-------------------------
-------------------------
- [ Driver ]
-------------------------
- en_din_i = 1, rdy_din_o = 0, din_i = 15
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Monitor ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 15
- en_dout_i = x, rdy_dout_o = x, dout_o = 15
-------------------------
Result is as Expected
-------------------------
- [ Scoreboard ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 15
- en_dout_i = x, rdy_dout_o = x, dout_o = 15
-------------------------
-------------------------
- [ Driver ]
-------------------------
- en_din_i = 1, rdy_din_o = 0, din_i = 15
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Monitor ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 15
- en_dout_i = x, rdy_dout_o = x, dout_o = 15
-------------------------
Result is as Expected ( ETC. ETC.)
-------------------------
- [ Scoreboard ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 15
- en_dout_i = x, rdy_dout_o = x, dout_o = 15
-------------------------
-------------------------
- [ Driver ]
-------------------------
- en_din_i = 1, rdy_din_o = 0, din_i = 7
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Monitor ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 7
- en_dout_i = x, rdy_dout_o = x, dout_o = 7
-------------------------
Result is as Expected
-------------------------
- [ Scoreboard ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 7
- en_dout_i = x, rdy_dout_o = x, dout_o = 7
-------------------------
-------------------------
- [ Driver ]
-------------------------
- en_din_i = 1, rdy_din_o = 0, din_i = 15
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Monitor ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 15
- en_dout_i = x, rdy_dout_o = x, dout_o = 15
-------------------------
Result is as Expected
-------------------------
- [ Scoreboard ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 15
- en_dout_i = x, rdy_dout_o = x, dout_o = 15
-------------------------
-------------------------
- [ Driver ]
-------------------------
- en_din_i = 1, rdy_din_o = 0, din_i = 4
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Monitor ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 4
- en_dout_i = x, rdy_dout_o = x, dout_o = 4
-------------------------
Result is as Expected
-------------------------
- [ Scoreboard ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 4
- en_dout_i = x, rdy_dout_o = x, dout_o = 4
-------------------------
-------------------------
- [ Driver ]
-------------------------
- en_din_i = 1, rdy_din_o = 0, din_i = 12
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Monitor ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 12
- en_dout_i = x, rdy_dout_o = x, dout_o = 12
-------------------------
Result is as Expected
-------------------------
- [ Scoreboard ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 12
- en_dout_i = x, rdy_dout_o = x, dout_o = 12
-------------------------
-------------------------
- [ Driver ]
-------------------------
- en_din_i = 1, rdy_din_o = 0, din_i = 4
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Monitor ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 4
- en_dout_i = x, rdy_dout_o = x, dout_o = 4
-------------------------
Result is as Expected
-------------------------
- [ Scoreboard ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 4
- en_dout_i = x, rdy_dout_o = x, dout_o = 4
-------------------------
-------------------------
- [ Driver ]
-------------------------
- en_din_i = 1, rdy_din_o = 0, din_i = 7
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Monitor ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 7
- en_dout_i = x, rdy_dout_o = x, dout_o = 7
-------------------------
Result is as Expected
-------------------------
- [ Scoreboard ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 7
- en_dout_i = x, rdy_dout_o = x, dout_o = 7
-------------------------
-------------------------
- [ Driver ]
-------------------------
- en_din_i = 1, rdy_din_o = 0, din_i = 13
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Monitor ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 13
- en_dout_i = x, rdy_dout_o = x, dout_o = 13
-------------------------
Result is as Expected
-------------------------
- [ Scoreboard ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 13
- en_dout_i = x, rdy_dout_o = x, dout_o = 13
-------------------------
-------------------------
- [ Driver ]
-------------------------
- en_din_i = 1, rdy_din_o = 0, din_i = 11
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Monitor ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 11
- en_dout_i = x, rdy_dout_o = x, dout_o = 11
-------------------------
Result is as Expected
-------------------------
- [ Scoreboard ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 11
- en_dout_i = x, rdy_dout_o = x, dout_o = 11
-------------------------
-------------------------
- [ Driver ]
-------------------------
- en_din_i = 1, rdy_din_o = 0, din_i = 1
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Monitor ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 1
- en_dout_i = x, rdy_dout_o = x, dout_o = 1
-------------------------
Result is as Expected
-------------------------
- [ Scoreboard ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 1
- en_dout_i = x, rdy_dout_o = x, dout_o = 1
-------------------------
-------------------------
- [ Driver ]
-------------------------
- en_din_i = 1, rdy_din_o = 0, din_i = 6
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Monitor ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 6
- en_dout_i = x, rdy_dout_o = x, dout_o = 6
-------------------------
Result is as Expected
-------------------------
- [ Scoreboard ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 6
- en_dout_i = x, rdy_dout_o = x, dout_o = 6
-------------------------
-------------------------
- [ Driver ]
-------------------------
- en_din_i = 1, rdy_din_o = 0, din_i = 3
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Monitor ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 3
- en_dout_i = x, rdy_dout_o = x, dout_o = 3
-------------------------
Result is as Expected
-------------------------
- [ Scoreboard ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 3
- en_dout_i = x, rdy_dout_o = x, dout_o = 3
-------------------------
-------------------------
- [ Driver ]
-------------------------
- en_din_i = 1, rdy_din_o = 0, din_i = 2
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Monitor ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 2
- en_dout_i = x, rdy_dout_o = x, dout_o = 2
-------------------------
Result is as Expected
-------------------------
- [ Scoreboard ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 2
- en_dout_i = x, rdy_dout_o = x, dout_o = 2
-------------------------
-------------------------
- [ Driver ]
-------------------------
- en_din_i = 1, rdy_din_o = 0, din_i = 11
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Monitor ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 11
- en_dout_i = x, rdy_dout_o = x, dout_o = 11
-------------------------
Result is as Expected
-------------------------
- [ Scoreboard ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 11
- en_dout_i = x, rdy_dout_o = x, dout_o = 11
-------------------------
-------------------------
- [ Driver ]
-------------------------
- en_din_i = 1, rdy_din_o = 0, din_i = 1
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Monitor ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 1
- en_dout_i = x, rdy_dout_o = x, dout_o = 1
-------------------------
Result is as Expected
-------------------------
- [ Scoreboard ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 1
- en_dout_i = x, rdy_dout_o = x, dout_o = 1
-------------------------
-------------------------
- [ Driver ]
-------------------------
- en_din_i = 1, rdy_din_o = 0, din_i = 9
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Monitor ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 9
- en_dout_i = x, rdy_dout_o = x, dout_o = 9
-------------------------
Result is as Expected
-------------------------
- [ Scoreboard ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 9
- en_dout_i = x, rdy_dout_o = x, dout_o = 9
-------------------------
-------------------------
- [ Driver ]
-------------------------
- en_din_i = 1, rdy_din_o = 0, din_i = 2
- en_dout_i = x, rdy_dout_o = x, dout_o = x
-------------------------
-------------------------
- [ Monitor ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 2
- en_dout_i = x, rdy_dout_o = x, dout_o = 2
-------------------------
Result is as Expected
-------------------------
- [ Scoreboard ]
-------------------------
- en_din_i = x, rdy_din_o = x, din_i = 2
- en_dout_i = x, rdy_dout_o = x, dout_o = 2
-------------------------
Simulation stopped after 500 clock cycles
$finish called from file "testbench.sv", line 65.
$finish at simulation time 4995
V C S S i m u l a t i o n R e p o r t
Time: 4995 ns
CPU Time: 0.540 seconds; Data structure size: 0.0Mb
Mon Jul 17 09:41:42 2023
Finding VCD file...
./dump.vcd
[2023-07-17 13:41:42 UTC] Opening EPWave...
Done
© 2023 ASIC Stoic. All rights reserved.
No comments:
Post a Comment