test: Updated regression test for instrumentation
This commit is contained in:
parent
e44089774a
commit
c9476cf4ca
|
|
@ -9,34 +9,43 @@
|
||||||
#include <verilated.h>
|
#include <verilated.h>
|
||||||
#include <verilated_vcd_c.h>
|
#include <verilated_vcd_c.h>
|
||||||
|
|
||||||
#include <fstream>
|
#include <iostream>
|
||||||
|
|
||||||
#include VM_PREFIX_INCLUDE
|
#include VM_PREFIX_INCLUDE
|
||||||
|
|
||||||
unsigned long long main_time = 0;
|
vluint64_t main_time = 0;
|
||||||
double sc_time_stamp() { return main_time; }
|
double sc_time_stamp() { return main_time; }
|
||||||
|
|
||||||
int main(int argc, char** argv) {
|
int main(int argc, char** argv) {
|
||||||
Verilated::debug(0);
|
Verilated::debug(0);
|
||||||
Verilated::commandArgs(argc, argv);
|
Verilated::commandArgs(argc, argv);
|
||||||
|
|
||||||
std::unique_ptr<VM_PREFIX> top{new VM_PREFIX{"top"}};
|
const std::unique_ptr<VM_PREFIX> top{new VM_PREFIX{"TOP"}};
|
||||||
|
|
||||||
std::ofstream logFile("obj_vlt/t_instrument/simulation_output.log");
|
|
||||||
if (!logFile.is_open()) {
|
|
||||||
printf("Error: Could not open log file\n");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
while (main_time <= 100) {
|
while (main_time <= 100) {
|
||||||
|
if (main_time < 20) {
|
||||||
|
top->in1a = 5;
|
||||||
|
top->in2a = 10;
|
||||||
|
top->in1b = 20;
|
||||||
|
top->in2b = 30;
|
||||||
|
} else if (main_time >= 20 && main_time < 63) {
|
||||||
|
top->in1a = 0;
|
||||||
|
top->in2a = 5;
|
||||||
|
top->in1b = 15;
|
||||||
|
top->in2b = 25;
|
||||||
|
} else if (main_time > 78) {
|
||||||
|
top->in1a = 10;
|
||||||
|
top->in2a = 15;
|
||||||
|
top->in1b = 25;
|
||||||
|
top->in2b = 35;
|
||||||
|
}
|
||||||
top->eval();
|
top->eval();
|
||||||
logFile << "$time: " << main_time << " | "
|
std::cout << "$time: " << main_time << " | "
|
||||||
<< "Output outa: " << static_cast<int>(top->outa) << " | "
|
<< "Output outa: " << static_cast<int>(top->outa) << " | "
|
||||||
<< "Output outb: " << static_cast<int>(top->outb) << std::endl;
|
<< "Output outb: " << static_cast<int>(top->outb) << std::endl;
|
||||||
++main_time;
|
++main_time;
|
||||||
}
|
}
|
||||||
top->final();
|
top->final();
|
||||||
top.reset();
|
|
||||||
printf("*-* All Finished *-*\n");
|
printf("*-* All Finished *-*\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
$time: 0 | Output outa: 0 | Output outb: 50
|
$time: 0 | Output outa: 15 | Output outb: 1
|
||||||
$time: 1 | Output outa: 0 | Output outb: 50
|
$time: 1 | Output outa: 15 | Output outb: 1
|
||||||
$time: 2 | Output outa: 0 | Output outb: 50
|
$time: 2 | Output outa: 15 | Output outb: 1
|
||||||
$time: 3 | Output outa: 0 | Output outb: 50
|
$time: 3 | Output outa: 15 | Output outb: 50
|
||||||
$time: 4 | Output outa: 0 | Output outb: 50
|
$time: 4 | Output outa: 15 | Output outb: 50
|
||||||
$time: 5 | Output outa: 0 | Output outb: 50
|
$time: 5 | Output outa: 15 | Output outb: 50
|
||||||
$time: 6 | Output outa: 0 | Output outb: 50
|
$time: 6 | Output outa: 15 | Output outb: 50
|
||||||
$time: 7 | Output outa: 0 | Output outb: 50
|
$time: 7 | Output outa: 15 | Output outb: 50
|
||||||
$time: 8 | Output outa: 0 | Output outb: 50
|
$time: 8 | Output outa: 15 | Output outb: 50
|
||||||
$time: 9 | Output outa: 0 | Output outb: 50
|
$time: 9 | Output outa: 15 | Output outb: 50
|
||||||
$time: 10 | Output outa: 0 | Output outb: 50
|
$time: 10 | Output outa: 0 | Output outb: 50
|
||||||
$time: 11 | Output outa: 0 | Output outb: 50
|
$time: 11 | Output outa: 0 | Output outb: 50
|
||||||
$time: 12 | Output outa: 0 | Output outb: 50
|
$time: 12 | Output outa: 0 | Output outb: 50
|
||||||
|
|
@ -18,84 +18,85 @@ $time: 16 | Output outa: 0 | Output outb: 50
|
||||||
$time: 17 | Output outa: 0 | Output outb: 50
|
$time: 17 | Output outa: 0 | Output outb: 50
|
||||||
$time: 18 | Output outa: 0 | Output outb: 50
|
$time: 18 | Output outa: 0 | Output outb: 50
|
||||||
$time: 19 | Output outa: 0 | Output outb: 50
|
$time: 19 | Output outa: 0 | Output outb: 50
|
||||||
$time: 20 | Output outa: 0 | Output outb: 50
|
$time: 20 | Output outa: 5 | Output outb: 40
|
||||||
$time: 21 | Output outa: 0 | Output outb: 50
|
$time: 21 | Output outa: 5 | Output outb: 40
|
||||||
$time: 22 | Output outa: 0 | Output outb: 50
|
$time: 22 | Output outa: 5 | Output outb: 40
|
||||||
$time: 23 | Output outa: 0 | Output outb: 50
|
$time: 23 | Output outa: 5 | Output outb: 40
|
||||||
$time: 24 | Output outa: 0 | Output outb: 50
|
$time: 24 | Output outa: 5 | Output outb: 40
|
||||||
$time: 25 | Output outa: 0 | Output outb: 50
|
$time: 25 | Output outa: 5 | Output outb: 40
|
||||||
$time: 26 | Output outa: 0 | Output outb: 50
|
$time: 26 | Output outa: 5 | Output outb: 40
|
||||||
$time: 27 | Output outa: 0 | Output outb: 50
|
$time: 27 | Output outa: 5 | Output outb: 40
|
||||||
$time: 28 | Output outa: 0 | Output outb: 50
|
$time: 28 | Output outa: 5 | Output outb: 40
|
||||||
$time: 29 | Output outa: 0 | Output outb: 50
|
$time: 29 | Output outa: 5 | Output outb: 40
|
||||||
$time: 30 | Output outa: 0 | Output outb: 50
|
$time: 30 | Output outa: 5 | Output outb: 40
|
||||||
$time: 31 | Output outa: 0 | Output outb: 50
|
$time: 31 | Output outa: 5 | Output outb: 40
|
||||||
$time: 32 | Output outa: 0 | Output outb: 50
|
$time: 32 | Output outa: 5 | Output outb: 1
|
||||||
$time: 33 | Output outa: 0 | Output outb: 50
|
$time: 33 | Output outa: 5 | Output outb: 1
|
||||||
$time: 34 | Output outa: 0 | Output outb: 50
|
$time: 34 | Output outa: 5 | Output outb: 1
|
||||||
$time: 35 | Output outa: 0 | Output outb: 50
|
$time: 35 | Output outa: 5 | Output outb: 1
|
||||||
$time: 36 | Output outa: 0 | Output outb: 50
|
$time: 36 | Output outa: 5 | Output outb: 1
|
||||||
$time: 37 | Output outa: 0 | Output outb: 50
|
$time: 37 | Output outa: 5 | Output outb: 1
|
||||||
$time: 38 | Output outa: 0 | Output outb: 50
|
$time: 38 | Output outa: 5 | Output outb: 1
|
||||||
$time: 39 | Output outa: 0 | Output outb: 50
|
$time: 39 | Output outa: 5 | Output outb: 1
|
||||||
$time: 40 | Output outa: 0 | Output outb: 50
|
$time: 40 | Output outa: 5 | Output outb: 1
|
||||||
$time: 41 | Output outa: 0 | Output outb: 50
|
$time: 41 | Output outa: 5 | Output outb: 1
|
||||||
$time: 42 | Output outa: 0 | Output outb: 50
|
$time: 42 | Output outa: 5 | Output outb: 1
|
||||||
$time: 43 | Output outa: 0 | Output outb: 50
|
$time: 43 | Output outa: 5 | Output outb: 1
|
||||||
$time: 44 | Output outa: 0 | Output outb: 50
|
$time: 44 | Output outa: 5 | Output outb: 1
|
||||||
$time: 45 | Output outa: 0 | Output outb: 50
|
$time: 45 | Output outa: 5 | Output outb: 1
|
||||||
$time: 46 | Output outa: 0 | Output outb: 50
|
$time: 46 | Output outa: 5 | Output outb: 1
|
||||||
$time: 47 | Output outa: 0 | Output outb: 50
|
$time: 47 | Output outa: 5 | Output outb: 1
|
||||||
$time: 48 | Output outa: 0 | Output outb: 50
|
$time: 48 | Output outa: 5 | Output outb: 1
|
||||||
$time: 49 | Output outa: 0 | Output outb: 50
|
$time: 49 | Output outa: 5 | Output outb: 1
|
||||||
$time: 50 | Output outa: 0 | Output outb: 50
|
$time: 50 | Output outa: 5 | Output outb: 1
|
||||||
$time: 51 | Output outa: 0 | Output outb: 50
|
$time: 51 | Output outa: 5 | Output outb: 1
|
||||||
$time: 52 | Output outa: 0 | Output outb: 50
|
$time: 52 | Output outa: 5 | Output outb: 1
|
||||||
$time: 53 | Output outa: 0 | Output outb: 50
|
$time: 53 | Output outa: 5 | Output outb: 1
|
||||||
$time: 54 | Output outa: 0 | Output outb: 50
|
$time: 54 | Output outa: 5 | Output outb: 1
|
||||||
$time: 55 | Output outa: 0 | Output outb: 50
|
$time: 55 | Output outa: 5 | Output outb: 1
|
||||||
$time: 56 | Output outa: 0 | Output outb: 50
|
$time: 56 | Output outa: 5 | Output outb: 1
|
||||||
$time: 57 | Output outa: 0 | Output outb: 50
|
$time: 57 | Output outa: 5 | Output outb: 1
|
||||||
$time: 58 | Output outa: 0 | Output outb: 50
|
$time: 58 | Output outa: 5 | Output outb: 1
|
||||||
$time: 59 | Output outa: 0 | Output outb: 50
|
$time: 59 | Output outa: 5 | Output outb: 1
|
||||||
$time: 60 | Output outa: 0 | Output outb: 50
|
$time: 60 | Output outa: 5 | Output outb: 1
|
||||||
$time: 61 | Output outa: 0 | Output outb: 50
|
$time: 61 | Output outa: 5 | Output outb: 1
|
||||||
$time: 62 | Output outa: 0 | Output outb: 50
|
$time: 62 | Output outa: 5 | Output outb: 1
|
||||||
$time: 63 | Output outa: 0 | Output outb: 50
|
$time: 63 | Output outa: 5 | Output outb: 1
|
||||||
$time: 64 | Output outa: 0 | Output outb: 50
|
$time: 64 | Output outa: 5 | Output outb: 1
|
||||||
$time: 65 | Output outa: 0 | Output outb: 50
|
$time: 65 | Output outa: 5 | Output outb: 1
|
||||||
$time: 66 | Output outa: 0 | Output outb: 50
|
$time: 66 | Output outa: 5 | Output outb: 1
|
||||||
$time: 67 | Output outa: 0 | Output outb: 50
|
$time: 67 | Output outa: 5 | Output outb: 1
|
||||||
$time: 68 | Output outa: 0 | Output outb: 50
|
$time: 68 | Output outa: 5 | Output outb: 1
|
||||||
$time: 69 | Output outa: 0 | Output outb: 50
|
$time: 69 | Output outa: 5 | Output outb: 40
|
||||||
$time: 70 | Output outa: 0 | Output outb: 50
|
$time: 70 | Output outa: 5 | Output outb: 40
|
||||||
$time: 71 | Output outa: 0 | Output outb: 50
|
$time: 71 | Output outa: 5 | Output outb: 40
|
||||||
$time: 72 | Output outa: 0 | Output outb: 50
|
$time: 72 | Output outa: 5 | Output outb: 40
|
||||||
$time: 73 | Output outa: 0 | Output outb: 50
|
$time: 73 | Output outa: 5 | Output outb: 40
|
||||||
$time: 74 | Output outa: 0 | Output outb: 50
|
$time: 74 | Output outa: 5 | Output outb: 40
|
||||||
$time: 75 | Output outa: 0 | Output outb: 50
|
$time: 75 | Output outa: 5 | Output outb: 40
|
||||||
$time: 76 | Output outa: 0 | Output outb: 50
|
$time: 76 | Output outa: 5 | Output outb: 40
|
||||||
$time: 77 | Output outa: 0 | Output outb: 50
|
$time: 77 | Output outa: 5 | Output outb: 40
|
||||||
$time: 78 | Output outa: 0 | Output outb: 50
|
$time: 78 | Output outa: 5 | Output outb: 40
|
||||||
$time: 79 | Output outa: 0 | Output outb: 50
|
$time: 79 | Output outa: 25 | Output outb: 60
|
||||||
$time: 80 | Output outa: 0 | Output outb: 50
|
$time: 80 | Output outa: 25 | Output outb: 60
|
||||||
$time: 81 | Output outa: 0 | Output outb: 50
|
$time: 81 | Output outa: 25 | Output outb: 60
|
||||||
$time: 82 | Output outa: 0 | Output outb: 50
|
$time: 82 | Output outa: 25 | Output outb: 60
|
||||||
$time: 83 | Output outa: 0 | Output outb: 50
|
$time: 83 | Output outa: 25 | Output outb: 60
|
||||||
$time: 84 | Output outa: 0 | Output outb: 50
|
$time: 84 | Output outa: 25 | Output outb: 60
|
||||||
$time: 85 | Output outa: 0 | Output outb: 50
|
$time: 85 | Output outa: 0 | Output outb: 60
|
||||||
$time: 86 | Output outa: 0 | Output outb: 50
|
$time: 86 | Output outa: 0 | Output outb: 60
|
||||||
$time: 87 | Output outa: 0 | Output outb: 50
|
$time: 87 | Output outa: 0 | Output outb: 60
|
||||||
$time: 88 | Output outa: 0 | Output outb: 50
|
$time: 88 | Output outa: 0 | Output outb: 60
|
||||||
$time: 89 | Output outa: 0 | Output outb: 50
|
$time: 89 | Output outa: 0 | Output outb: 60
|
||||||
$time: 90 | Output outa: 0 | Output outb: 50
|
$time: 90 | Output outa: 0 | Output outb: 60
|
||||||
$time: 91 | Output outa: 0 | Output outb: 50
|
$time: 91 | Output outa: 0 | Output outb: 60
|
||||||
$time: 92 | Output outa: 0 | Output outb: 50
|
$time: 92 | Output outa: 0 | Output outb: 60
|
||||||
$time: 93 | Output outa: 0 | Output outb: 50
|
$time: 93 | Output outa: 0 | Output outb: 60
|
||||||
$time: 94 | Output outa: 0 | Output outb: 50
|
$time: 94 | Output outa: 0 | Output outb: 60
|
||||||
$time: 95 | Output outa: 0 | Output outb: 50
|
$time: 95 | Output outa: 0 | Output outb: 60
|
||||||
$time: 96 | Output outa: 0 | Output outb: 50
|
$time: 96 | Output outa: 0 | Output outb: 60
|
||||||
$time: 97 | Output outa: 0 | Output outb: 50
|
$time: 97 | Output outa: 0 | Output outb: 60
|
||||||
$time: 98 | Output outa: 0 | Output outb: 50
|
$time: 98 | Output outa: 0 | Output outb: 60
|
||||||
$time: 99 | Output outa: 0 | Output outb: 50
|
$time: 99 | Output outa: 0 | Output outb: 60
|
||||||
$time: 100 | Output outa: 0 | Output outb: 50
|
$time: 100 | Output outa: 0 | Output outb: 60
|
||||||
|
*-* All Finished *-*
|
||||||
|
|
|
||||||
|
|
@ -15,13 +15,11 @@ test.top_filename = "t/t_instrument.v"
|
||||||
sim_filename = "t/" + test.name + ".cpp"
|
sim_filename = "t/" + test.name + ".cpp"
|
||||||
dpi_filename = "t/t_instrumentDPI.cpp"
|
dpi_filename = "t/t_instrumentDPI.cpp"
|
||||||
vlt_filename = "t/" + test.name + ".vlt"
|
vlt_filename = "t/" + test.name + ".vlt"
|
||||||
log_filename = "obj_vlt/t_instrument/simulation_output.log"
|
|
||||||
|
|
||||||
test.compile(make_top_shell=False,
|
test.compile(
|
||||||
|
make_top_shell=False,
|
||||||
make_main=False,
|
make_main=False,
|
||||||
v_flags2=["--trace --exe --instrument", sim_filename, vlt_filename, dpi_filename])
|
v_flags2=["--trace --timing --exe --instrument", sim_filename, vlt_filename, dpi_filename])
|
||||||
test.execute()
|
test.execute(expect_filename=test.golden_filename)
|
||||||
|
|
||||||
test.files_identical(log_filename, test.golden_filename)
|
|
||||||
|
|
||||||
test.passes()
|
test.passes()
|
||||||
|
|
|
||||||
|
|
@ -5,17 +5,17 @@
|
||||||
// SPDX-License-Identifier: CC0-1.0
|
// SPDX-License-Identifier: CC0-1.0
|
||||||
|
|
||||||
module top_module(
|
module top_module(
|
||||||
|
input reg [7:0] in1a,
|
||||||
|
input reg [7:0] in2a,
|
||||||
|
input reg [7:0] in1b,
|
||||||
|
input reg [7:0] in2b,
|
||||||
output logic [7:0] outa,
|
output logic [7:0] outa,
|
||||||
output logic [7:0] outb
|
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 a1 (.in1(in1a), .in2(in2a), .out(outa));
|
||||||
module_a a2 (.in1(in1b), .in2(in2b), .out(outb));
|
module_a a2 (.in1(in1b), .in2(in2b), .out(outb));
|
||||||
|
|
||||||
endmodule
|
endmodule
|
||||||
|
|
||||||
module module_a(
|
module module_a(
|
||||||
|
|
|
||||||
|
|
@ -6,4 +6,6 @@
|
||||||
|
|
||||||
`verilator_config
|
`verilator_config
|
||||||
|
|
||||||
instrument -model "instrument_var" -id 0 -target "top_module.a1.b1.out"
|
instrument -callback "instrument_var" -id 0 -target "top_module.a1.b1.out"
|
||||||
|
|
||||||
|
instrument -callback "instrument_var" -id 1 -target "top_module.a2.out"
|
||||||
|
|
|
||||||
|
|
@ -8,18 +8,23 @@
|
||||||
|
|
||||||
#include <verilated.h>
|
#include <verilated.h>
|
||||||
|
|
||||||
#include <iostream>
|
|
||||||
#include <svdpi.h>
|
#include <svdpi.h>
|
||||||
|
|
||||||
extern "C" short instrument_var(int id, const svLogic* x) {
|
extern "C" int instrument_var(int id, int trigger, const svLogic* x) {
|
||||||
switch (id) {
|
switch (id) {
|
||||||
case 0: return 0;
|
case 0:
|
||||||
|
if ((VL_TIME_Q() >= 10 && VL_TIME_Q() < 20) || VL_TIME_Q() >= 85) {
|
||||||
|
return 0;
|
||||||
|
} else {
|
||||||
|
return *x;
|
||||||
|
}
|
||||||
|
//return 0;
|
||||||
case 1:
|
case 1:
|
||||||
// Stuck at 1 Fault Injection
|
if ((VL_TIME_Q() >= 0 && VL_TIME_Q() < 3) || (VL_TIME_Q() >= 32 && VL_TIME_Q() < 69)) {
|
||||||
return 1;
|
return 1;
|
||||||
case 2:
|
} else {
|
||||||
// Inverter/Bit flip Fault injection (provisional)
|
return *x;
|
||||||
return !x;
|
}
|
||||||
default: return *x;
|
default: return *x;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue