当我使用 QuestaSim 在 VHDL 和 Verilog 模式下模拟 Cocotb 的Endian Swapper示例时,我得到了不同的时钟周期。在提供的示例代码中,两种模式的时钟都以相同的方式生成:
@cocotb.coroutine
def clock_gen(signal):
while True:
signal <= 0
yield Timer(5000)
signal <= 1
yield Timer(5000)
@cocotb.coroutine
def run_test(dut): # stripped un
cocotb.fork(clock_gen(dut.clk))
在 Verilog 模式下运行时:
make SIM=questa GUI=1
时钟周期为 1000 ns(一千纳秒),因此时间分辨率为 100 ps。
在 VHDL 模式下运行时:
make SIM=questa GUI=1 TOPLEVEL_LANG=vhdl
时钟周期为10000 ns(万纳秒),因此时间分辨率为1 ns。
我在其他两个 VHDL 项目中使用相同的时钟生成。在一个中,我也得到了 10000 ns 的时钟周期(1 ns 分辨率)。但在另一个中,时钟周期仅为 10 ns,分辨率为 1 ps。
为什么所有这些运行模式和项目的时间分辨率不同?
如何一致地指定时间分辨率?