Skip to content

Commit d5476f5

Browse files
authored
Merge branch 'main' into test-sandbox
2 parents 85f9763 + d94ae23 commit d5476f5

File tree

3 files changed

+52
-4
lines changed

3 files changed

+52
-4
lines changed

svsim/src/main/resources/simulation-driver.cpp

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -830,17 +830,25 @@ static bool processCommand() {
830830
}
831831

832832
switch (argument) {
833-
case '1':
833+
case '1': {
834834
if (!traceInitialized) {
835835
traceInitialized = true;
836836
simulation_initializeTrace(state.simulationTraceFilepath);
837837
}
838-
simulation_enableTrace();
838+
int success;
839+
simulation_enableTrace(&success);
840+
if (!success)
841+
failWithError("Cannot enable traces as simulator was not compiled to support them");
839842
break;
840-
case '0':
841-
simulation_disableTrace();
843+
}
844+
case '0': {
845+
int success;
846+
simulation_disableTrace(&success);
847+
if (!success)
848+
failWithError("Cannot enable traces as simulator was not compiled to support them");
842849
break;
843850
}
851+
}
844852

845853
sendAck();
846854
break;

svsim/src/main/scala/Workspace.scala

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,25 +175,31 @@ final class Workspace(
175175
l()
176176

177177
l(" // Tracing")
178+
l(" int traceSupported = 0;")
178179
l(" export \"DPI-C\" function simulation_initializeTrace;")
179180
l(" function void simulation_initializeTrace;")
180181
l(" input string traceFilePath;")
181182
l(" `ifdef SVSIM_ENABLE_VCD_TRACING_SUPPORT")
182183
l(" $dumpfile({traceFilePath,\".vcd\"});")
183184
l(" $dumpvars(0, ", dut.instanceName,");")
185+
l(" traceSupported = 1;")
184186
l(" `endif")
185187
l(" `ifdef SVSIM_ENABLE_VPD_TRACING_SUPPORT")
186188
l(" $vcdplusfile({traceFilePath,\".vpd\"});")
187189
l(" $dumpvars(0, ", dut.instanceName,");")
188190
l(" $vcdpluson(0, ", dut.instanceName,");")
191+
l(" traceSupported = 1;")
189192
l(" `endif")
190193
l(" `ifdef SVSIM_ENABLE_FSDB_TRACING_SUPPORT")
191194
l(" $fsdbDumpfile({traceFilePath,\".fsdb\"});")
192195
l(" $fsdbDumpvars(0, ", dut.instanceName,");")
196+
l(" traceSupported = 1;")
193197
l(" `endif")
194198
l(" endfunction")
195199
l(" export \"DPI-C\" function simulation_enableTrace;")
196200
l(" function void simulation_enableTrace;")
201+
l(" output int success;")
202+
l(" success = traceSupported;")
197203
l(" `ifdef SVSIM_ENABLE_VCD_TRACING_SUPPORT")
198204
l(" $dumpon;")
199205
l(" `elsif SVSIM_ENABLE_VPD_TRACING_SUPPORT")
@@ -205,6 +211,8 @@ final class Workspace(
205211
l(" endfunction")
206212
l(" export \"DPI-C\" function simulation_disableTrace;")
207213
l(" function void simulation_disableTrace;")
214+
l(" output int success;")
215+
l(" success = traceSupported;")
208216
l(" `ifdef SVSIM_ENABLE_VCD_TRACING_SUPPORT")
209217
l(" $dumpoff;")
210218
l(" `elsif SVSIM_ENABLE_VPD_TRACING_SUPPORT")

svsim/src/test/scala/BackendSpec.scala

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,38 @@ class VerilatorSpec extends BackendSpec {
6565
traceStyle = Some(TraceStyle.Vcd(traceUnderscore = false))
6666
)
6767
test("verilator", backend)(compilationSettings)
68+
69+
describe("trace enablement") {
70+
71+
it("should error if a user requests traces in a simulation that doesn't support them ") {
72+
val workspace = new svsim.Workspace(path = s"test_run_dir/${getClass().getSimpleName()}")
73+
74+
import Resources._
75+
workspace.reset()
76+
workspace.elaborateGCD()
77+
workspace.generateAdditionalSources()
78+
val simulation = workspace.compile(
79+
backend
80+
)(
81+
workingDirectoryTag = "verilator",
82+
commonSettings = CommonCompilationSettings(),
83+
backendSpecificSettings = compilationSettings.copy(traceStyle = None),
84+
customSimulationWorkingDirectory = None,
85+
verbose = false
86+
)
87+
88+
intercept[svsim.Simulation.Message.Error] {
89+
simulation.run(
90+
verbose = false,
91+
executionScriptLimit = None
92+
) { controller =>
93+
controller.setTraceEnabled(true)
94+
}
95+
}.getMessage must include("Cannot enable traces as simulator was not compiled to support them")
96+
}
97+
98+
}
99+
68100
}
69101

70102
trait BackendSpec extends AnyFunSpec with Matchers {

0 commit comments

Comments
 (0)