test: Add regression tests for instrumentation
This commit is contained in:
parent
5f2cb6545a
commit
300001bcdd
|
|
@ -0,0 +1,42 @@
|
||||||
|
// -*- mode: C++; c-file-style: "cc-mode" -*-
|
||||||
|
//
|
||||||
|
// DESCRIPTION: Verilator: Verilog Test module
|
||||||
|
//
|
||||||
|
// This file ONLY is placed under the Creative Commons Public Domain, for
|
||||||
|
// any use, without warranty, 2024 by Wilson Snyder.
|
||||||
|
// SPDX-License-Identifier: CC0-1.0
|
||||||
|
|
||||||
|
#include <verilated.h>
|
||||||
|
#include <verilated_vcd_c.h>
|
||||||
|
|
||||||
|
#include <fstream>
|
||||||
|
|
||||||
|
#include VM_PREFIX_INCLUDE
|
||||||
|
|
||||||
|
unsigned long long main_time = 0;
|
||||||
|
double sc_time_stamp() { return main_time; }
|
||||||
|
|
||||||
|
int main(int argc, char** argv) {
|
||||||
|
Verilated::debug(0);
|
||||||
|
Verilated::commandArgs(argc, argv);
|
||||||
|
|
||||||
|
std::unique_ptr<VM_PREFIX> top{new VM_PREFIX{"top"}};
|
||||||
|
|
||||||
|
std::ofstream logFile("obj_vlt/t_instrumentation/simulation_output.log");
|
||||||
|
if (!logFile.is_open()) {
|
||||||
|
printf("Error: Could not open log file\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (main_time <= 100) {
|
||||||
|
top->eval();
|
||||||
|
logFile << "$time: " << main_time << " | "
|
||||||
|
<< "Output outa: " << static_cast<int>(top->outa) << " | "
|
||||||
|
<< "Output outb: " << static_cast<int>(top->outb) << std::endl;
|
||||||
|
++main_time;
|
||||||
|
}
|
||||||
|
top->final();
|
||||||
|
top.reset();
|
||||||
|
printf("*-* All Finished *-*\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,101 @@
|
||||||
|
$time: 0 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 1 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 2 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 3 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 4 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 5 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 6 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 7 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 8 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 9 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 10 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 11 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 12 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 13 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 14 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 15 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 16 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 17 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 18 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 19 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 20 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 21 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 22 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 23 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 24 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 25 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 26 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 27 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 28 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 29 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 30 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 31 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 32 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 33 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 34 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 35 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 36 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 37 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 38 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 39 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 40 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 41 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 42 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 43 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 44 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 45 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 46 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 47 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 48 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 49 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 50 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 51 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 52 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 53 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 54 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 55 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 56 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 57 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 58 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 59 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 60 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 61 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 62 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 63 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 64 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 65 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 66 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 67 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 68 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 69 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 70 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 71 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 72 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 73 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 74 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 75 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 76 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 77 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 78 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 79 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 80 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 81 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 82 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 83 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 84 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 85 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 86 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 87 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 88 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 89 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 90 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 91 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 92 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 93 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 94 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 95 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 96 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 97 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 98 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 99 | Output outa: 0 | Output outb: 50
|
||||||
|
$time: 100 | Output outa: 0 | Output outb: 50
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
|
||||||
|
#
|
||||||
|
# Copyright 2025 by Wilson Snyder. This program is free software; you
|
||||||
|
# can redistribute it and/or modify it under the terms of either the GNU
|
||||||
|
# Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
|
# Version 2.0.
|
||||||
|
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
|
import vltest_bootstrap
|
||||||
|
|
||||||
|
test.scenarios('simulator')
|
||||||
|
test.top_filename = "t/t_instrumentation.v"
|
||||||
|
|
||||||
|
sim_filename = "t/" + test.name + ".cpp"
|
||||||
|
dpi_filename = "t/t_instrumentationDPI.cpp"
|
||||||
|
vlt_filename = "t/" + test.name + ".vlt"
|
||||||
|
log_filename = "obj_vlt/t_instrumentation/simulation_output.log"
|
||||||
|
|
||||||
|
test.compile(make_top_shell=False,
|
||||||
|
make_main=False,
|
||||||
|
v_flags2=["--trace --exe --instrument", sim_filename, vlt_filename, dpi_filename])
|
||||||
|
test.execute()
|
||||||
|
|
||||||
|
test.files_identical(log_filename, test.golden_filename)
|
||||||
|
|
||||||
|
test.passes()
|
||||||
|
|
@ -0,0 +1,37 @@
|
||||||
|
// DESCRIPTION: Verilator: Verilog Test module
|
||||||
|
//
|
||||||
|
// This file ONLY is placed under the Creative Commons Public Domain, for
|
||||||
|
// any use, without warranty, 2012 by Wilson Snyder.
|
||||||
|
// SPDX-License-Identifier: CC0-1.0
|
||||||
|
|
||||||
|
module top_module(
|
||||||
|
output logic [7:0] outa,
|
||||||
|
output logic [7:0] outb
|
||||||
|
);
|
||||||
|
logic [7:0] in1a = 8'd5;
|
||||||
|
logic [7:0] in2a = 8'd10;
|
||||||
|
|
||||||
|
logic [7:0] in1b = 8'd20;
|
||||||
|
logic [7:0] in2b = 8'd30;
|
||||||
|
|
||||||
|
module_a a1 (.in1(in1a), .in2(in2a), .out(outa));
|
||||||
|
module_a a2 (.in1(in1b), .in2(in2b), .out(outb));
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
module module_a(
|
||||||
|
input logic [7:0] in1,
|
||||||
|
input logic [7:0] in2,
|
||||||
|
output logic [7:0] out
|
||||||
|
);
|
||||||
|
module_b b1 (.in1(in1), .in2(in2), .out(out));
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
module module_b (
|
||||||
|
input logic [7:0] in1,
|
||||||
|
input logic [7:0] in2,
|
||||||
|
output logic [7:0] out
|
||||||
|
);
|
||||||
|
always_comb begin
|
||||||
|
out = in1 + in2;
|
||||||
|
end
|
||||||
|
endmodule
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
// DESCRIPTION: Verilator: Verilog Test module
|
||||||
|
//
|
||||||
|
// This file ONLY is placed into the Public Domain, for any use,
|
||||||
|
// without warranty, 2025 by Wilson Snyder.
|
||||||
|
// SPDX-License-Identifier: CC0-1.0
|
||||||
|
|
||||||
|
`verilator_config
|
||||||
|
|
||||||
|
instrument -model "instrument_var" -id 0 -target "top_module.a1.b1.out"
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
// -*- mode: C++; c-file-style: "cc-mode" -*-
|
||||||
|
//
|
||||||
|
// DESCRIPTION: Verilator: Verilog Test module
|
||||||
|
//
|
||||||
|
// This file ONLY is placed under the Creative Commons Public Domain, for
|
||||||
|
// any use, without warranty, 2025 by Wilson Snyder.
|
||||||
|
// SPDX-License-Identifier: CC0-1.0
|
||||||
|
|
||||||
|
#include <verilated.h>
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
#include <svdpi.h>
|
||||||
|
|
||||||
|
extern "C" short instrument_var(int id, const svLogic *x) {
|
||||||
|
switch (id)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
return 0;
|
||||||
|
case 1:
|
||||||
|
// Stuck at 1 Fault Injection
|
||||||
|
return 1;
|
||||||
|
case 2:
|
||||||
|
// Inverter/Bit flip Fault injection (provisional)
|
||||||
|
return !x;
|
||||||
|
default:
|
||||||
|
return *x;
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue