Ich bekomme eine andere Taktperiode, wenn ich das Endian Swapper Beispiel von Cocotb im VHDL- und Verilog-Modus mit QuestaSim simuliere. Die Uhr wird in den provided example code für beiden Modi auf die gleiche Art und Weise erzeugt:Wie lege ich die Zeitauflösung in Cocotb fest?
@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))
Wenn in Verilog-Modus ausgeführt werden mit:
make SIM=questa GUI=1
die Taktperiode 1000 ns (ein tausend Nanosekunden) und somit beträgt die Zeitauflösung 100 ps.
Wenn in VHDL-Modus ausgeführt werden mit:
make SIM=questa GUI=1 TOPLEVEL_LANG=vhdl
die Taktperiode 10000 ns (zehn tausend Nanosekunden), und somit ist die Zeitauflösung 1 ns.
Ich verwende die gleiche Taktgenerierung in zwei anderen VHDL-Projekten. In einem bekomme ich auch eine Taktperiode von 10000 ns (1 ns Auflösung). Im anderen Fall beträgt die Taktperiode nur 10 ns, was eine Auflösung von 1 ps ergibt.
Warum unterscheidet sich die Zeitauflösung in all diesen Betriebsmodi und Projekten?
Wie lege ich die Zeitauflösung konsistent fest?
Bemerkenswert ist, dass es eine 'cocotb.clock.Clock'-Klasse für die Bequemlichkeit gibt, die es erspart, wiederholt eine 'clock_gen'-Coroutine zu definieren. – Chiggs