仿真器控制
Verilua 提供了一些接口用来控制底层的仿真器:
-
sim.dump_wave(trace_file_path)用来控制仿真器开始生成波形。
- 参数:
trace_file_path(可选, string):波形文件名。如果未指定,默认生成test.vcd(或test.vcd.fsdb)。
- 说明:
- 对于 Verilator,需要在
xmake.lua中添加add_values("verilator.flags", "--trace", "--no-trace-top")以启用波形生成。 - 对于 Xcelium,若未指定文件名,将使用
waves.shm;若指定,则根据文件扩展名决定波形格式(.vcd为 VCD,.fsdb为 FSDB)。FSDB 格式需设置VERDI_HOME并启用相应宏。
- 对于 Verilator,需要在
- 示例:
sim.dump_wave() -- 默认 test.vcd
sim.dump_wave("./wave/trace.vcd")
- 参数:
-
sim.disable_trace()用来控制仿真器停止生成波形。
-
sim.finish()用来控制结束仿真。
-
sim.get_sim_time(unit?)获取当前仿真时间。
- 参数:
unit(可选, string):时间单位,支持"fs","ps","ns","us","ms","s"。若不指定,返回仿真器原始步数(steps)。
- 返回值:number 类型的仿真时间值。
- 说明:
- 返回的时间值与仿真器的时间精度相关。默认 Verilua 的
timescale为1ns/1ps,因此原始步数单位是 1ps。 - 可通过
cfg.time_precision和cfg.time_unit查看当前精度。
- 返回的时间值与仿真器的时间精度相关。默认 Verilua 的
- 示例:
local steps = sim.get_sim_time() -- 原始步数
local ns = sim.get_sim_time("ns") -- 转换为纳秒
local ps = sim.get_sim_time("ps") -- 转换为皮秒
print(string.format("Time: %d ns", ns))
- 参数: