2016-03-30 6 views
2

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?

+0

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

Antwort

2

Für den vsim-Befehl in der runsim.do-Datei, die von den Makefiles generiert wird, ist keine Zeitauflösung angegeben. Daher wird die Standardzeitauflösung des Simulators verwendet, wie in modelsim.ini spezifiziert. Eines der anderen VHDL-Projekte hatte eine private modelsim.ini mit einer Zeitauflösung von 1 ps (Resolution = ps) anstelle der Standard 1 ns (Resolution = ns).

Zusätzliche vsim Argumente können durch die Makefile-Variable VSIM_ARGS des Cocotb-Build-Systems angegeben werden. Aber diese Variable Einstellung auf der Kommandozeile mit:

make SIM=questa GUI=1 "VSIM_ARGS=-t 1ps" 

funktioniert nicht wie erwartet, weil andere erforderliche vsim Argumente wurden jetzt beraubt.

Man hat diese Variable in der projektspezifischen Makefile zu setzen statt, zum Beispiel kurz vor den systemweiten Makefiles einschließlich:

VSIM_ARGS=-t 1ps 

include $(COCOTB)/makefiles/Makefile.inc 
include $(COCOTB)/makefiles/Makefile.sim 

Auf diese Weise erhält man eine konsistente Zeitauflösung über VHDL und Verilog. Der Parameter muss für jedes Projekt entsprechend eingestellt werden.

+0

Siehe auch [Problem 115] (https://github.com/potentialventures/cocotb/issues/115), wo wir diskutieren, Zeit in absoluten Einheiten zu definieren, die dies auf der Python-Ebene lösen würde. Nachdem [# 383] (https://github.com/potentialventures/cocotb/pull/383) zusammengeführt wurde, kennen wir die absolute Zeitgenauigkeit, daher sollte die Definition von Zeiteinheiten in Einheiten nicht zu schwierig sein. – Chiggs

+0

@Chiggs Zum Thema # 383 gibt es bereits eine Python-Funktion zum Aufrufen von 'vhpi_get_phys (vhpiResolutionLimitP, NULL)' '? Ich habe keinen in den Quellen gefunden. –