diff --git a/test_regress/t/t_instrument.cpp b/test_regress/t/t_instrument.cpp index ea67c40b0..ef8af0cf7 100644 --- a/test_regress/t/t_instrument.cpp +++ b/test_regress/t/t_instrument.cpp @@ -9,34 +9,43 @@ #include #include -#include +#include #include VM_PREFIX_INCLUDE -unsigned long long main_time = 0; +vluint64_t 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 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; - } + const std::unique_ptr top{new VM_PREFIX{"TOP"}}; 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(); - logFile << "$time: " << main_time << " | " - << "Output outa: " << static_cast(top->outa) << " | " - << "Output outb: " << static_cast(top->outb) << std::endl; + std::cout << "$time: " << main_time << " | " + << "Output outa: " << static_cast(top->outa) << " | " + << "Output outb: " << static_cast(top->outb) << std::endl; ++main_time; } top->final(); - top.reset(); printf("*-* All Finished *-*\n"); return 0; } diff --git a/test_regress/t/t_instrument.out b/test_regress/t/t_instrument.out index 7ba39071f..7f87814a2 100644 --- a/test_regress/t/t_instrument.out +++ b/test_regress/t/t_instrument.out @@ -1,13 +1,13 @@ -$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: 0 | Output outa: 15 | Output outb: 1 +$time: 1 | Output outa: 15 | Output outb: 1 +$time: 2 | Output outa: 15 | Output outb: 1 +$time: 3 | Output outa: 15 | Output outb: 50 +$time: 4 | Output outa: 15 | Output outb: 50 +$time: 5 | Output outa: 15 | Output outb: 50 +$time: 6 | Output outa: 15 | Output outb: 50 +$time: 7 | Output outa: 15 | Output outb: 50 +$time: 8 | Output outa: 15 | Output outb: 50 +$time: 9 | Output outa: 15 | 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 @@ -18,84 +18,85 @@ $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 +$time: 20 | Output outa: 5 | Output outb: 40 +$time: 21 | Output outa: 5 | Output outb: 40 +$time: 22 | Output outa: 5 | Output outb: 40 +$time: 23 | Output outa: 5 | Output outb: 40 +$time: 24 | Output outa: 5 | Output outb: 40 +$time: 25 | Output outa: 5 | Output outb: 40 +$time: 26 | Output outa: 5 | Output outb: 40 +$time: 27 | Output outa: 5 | Output outb: 40 +$time: 28 | Output outa: 5 | Output outb: 40 +$time: 29 | Output outa: 5 | Output outb: 40 +$time: 30 | Output outa: 5 | Output outb: 40 +$time: 31 | Output outa: 5 | Output outb: 40 +$time: 32 | Output outa: 5 | Output outb: 1 +$time: 33 | Output outa: 5 | Output outb: 1 +$time: 34 | Output outa: 5 | Output outb: 1 +$time: 35 | Output outa: 5 | Output outb: 1 +$time: 36 | Output outa: 5 | Output outb: 1 +$time: 37 | Output outa: 5 | Output outb: 1 +$time: 38 | Output outa: 5 | Output outb: 1 +$time: 39 | Output outa: 5 | Output outb: 1 +$time: 40 | Output outa: 5 | Output outb: 1 +$time: 41 | Output outa: 5 | Output outb: 1 +$time: 42 | Output outa: 5 | Output outb: 1 +$time: 43 | Output outa: 5 | Output outb: 1 +$time: 44 | Output outa: 5 | Output outb: 1 +$time: 45 | Output outa: 5 | Output outb: 1 +$time: 46 | Output outa: 5 | Output outb: 1 +$time: 47 | Output outa: 5 | Output outb: 1 +$time: 48 | Output outa: 5 | Output outb: 1 +$time: 49 | Output outa: 5 | Output outb: 1 +$time: 50 | Output outa: 5 | Output outb: 1 +$time: 51 | Output outa: 5 | Output outb: 1 +$time: 52 | Output outa: 5 | Output outb: 1 +$time: 53 | Output outa: 5 | Output outb: 1 +$time: 54 | Output outa: 5 | Output outb: 1 +$time: 55 | Output outa: 5 | Output outb: 1 +$time: 56 | Output outa: 5 | Output outb: 1 +$time: 57 | Output outa: 5 | Output outb: 1 +$time: 58 | Output outa: 5 | Output outb: 1 +$time: 59 | Output outa: 5 | Output outb: 1 +$time: 60 | Output outa: 5 | Output outb: 1 +$time: 61 | Output outa: 5 | Output outb: 1 +$time: 62 | Output outa: 5 | Output outb: 1 +$time: 63 | Output outa: 5 | Output outb: 1 +$time: 64 | Output outa: 5 | Output outb: 1 +$time: 65 | Output outa: 5 | Output outb: 1 +$time: 66 | Output outa: 5 | Output outb: 1 +$time: 67 | Output outa: 5 | Output outb: 1 +$time: 68 | Output outa: 5 | Output outb: 1 +$time: 69 | Output outa: 5 | Output outb: 40 +$time: 70 | Output outa: 5 | Output outb: 40 +$time: 71 | Output outa: 5 | Output outb: 40 +$time: 72 | Output outa: 5 | Output outb: 40 +$time: 73 | Output outa: 5 | Output outb: 40 +$time: 74 | Output outa: 5 | Output outb: 40 +$time: 75 | Output outa: 5 | Output outb: 40 +$time: 76 | Output outa: 5 | Output outb: 40 +$time: 77 | Output outa: 5 | Output outb: 40 +$time: 78 | Output outa: 5 | Output outb: 40 +$time: 79 | Output outa: 25 | Output outb: 60 +$time: 80 | Output outa: 25 | Output outb: 60 +$time: 81 | Output outa: 25 | Output outb: 60 +$time: 82 | Output outa: 25 | Output outb: 60 +$time: 83 | Output outa: 25 | Output outb: 60 +$time: 84 | Output outa: 25 | Output outb: 60 +$time: 85 | Output outa: 0 | Output outb: 60 +$time: 86 | Output outa: 0 | Output outb: 60 +$time: 87 | Output outa: 0 | Output outb: 60 +$time: 88 | Output outa: 0 | Output outb: 60 +$time: 89 | Output outa: 0 | Output outb: 60 +$time: 90 | Output outa: 0 | Output outb: 60 +$time: 91 | Output outa: 0 | Output outb: 60 +$time: 92 | Output outa: 0 | Output outb: 60 +$time: 93 | Output outa: 0 | Output outb: 60 +$time: 94 | Output outa: 0 | Output outb: 60 +$time: 95 | Output outa: 0 | Output outb: 60 +$time: 96 | Output outa: 0 | Output outb: 60 +$time: 97 | Output outa: 0 | Output outb: 60 +$time: 98 | Output outa: 0 | Output outb: 60 +$time: 99 | Output outa: 0 | Output outb: 60 +$time: 100 | Output outa: 0 | Output outb: 60 +*-* All Finished *-* diff --git a/test_regress/t/t_instrument.py b/test_regress/t/t_instrument.py index 668cf3856..34ef9eccc 100755 --- a/test_regress/t/t_instrument.py +++ b/test_regress/t/t_instrument.py @@ -15,13 +15,11 @@ test.top_filename = "t/t_instrument.v" sim_filename = "t/" + test.name + ".cpp" dpi_filename = "t/t_instrumentDPI.cpp" vlt_filename = "t/" + test.name + ".vlt" -log_filename = "obj_vlt/t_instrument/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.compile( + make_top_shell=False, + make_main=False, + v_flags2=["--trace --timing --exe --instrument", sim_filename, vlt_filename, dpi_filename]) +test.execute(expect_filename=test.golden_filename) test.passes() diff --git a/test_regress/t/t_instrument.v b/test_regress/t/t_instrument.v index 674f8293e..5a7a8a2b8 100644 --- a/test_regress/t/t_instrument.v +++ b/test_regress/t/t_instrument.v @@ -5,17 +5,17 @@ // SPDX-License-Identifier: CC0-1.0 module top_module( - output logic [7:0] outa, - output logic [7:0] outb + 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] 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( diff --git a/test_regress/t/t_instrument.vlt b/test_regress/t/t_instrument.vlt index e96535c09..b0b8351f4 100644 --- a/test_regress/t/t_instrument.vlt +++ b/test_regress/t/t_instrument.vlt @@ -6,4 +6,6 @@ `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" diff --git a/test_regress/t/t_instrumentDPI.cpp b/test_regress/t/t_instrumentDPI.cpp index 78eb0a723..b5e565435 100644 --- a/test_regress/t/t_instrumentDPI.cpp +++ b/test_regress/t/t_instrumentDPI.cpp @@ -8,18 +8,23 @@ #include -#include #include -extern "C" short instrument_var(int id, const svLogic* x) { +extern "C" int instrument_var(int id, int trigger, const svLogic* x) { 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: - // Stuck at 1 Fault Injection - return 1; - case 2: - // Inverter/Bit flip Fault injection (provisional) - return !x; + if ((VL_TIME_Q() >= 0 && VL_TIME_Q() < 3) || (VL_TIME_Q() >= 32 && VL_TIME_Q() < 69)) { + return 1; + } else { + return *x; + } default: return *x; } }