Как мне указать разрешение по времени в Cocotb?
Я получаю другой период времени, когда я моделирую пример Cocan-кодера Endian Swapper в режиме VHDL и Verilog с использованием QuestaSim. Часы генерируются одинаково для обоих режимов в приведенном примере кода:
@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 нс (одна тысяча наносекунд), и, таким образом, временное разрешение составляет 100 пс.
При работе в режиме VHDL с:
make SIM=questa GUI=1 TOPLEVEL_LANG=vhdl
тактовый период составляет 10000 нс (десять тысяч нано-секунд), и, таким образом, временное разрешение составляет 1 нс.
Я использую то же поколение часов в двух других проектах VHDL. В одном я получаю тактовый период 10000 нс (разрешение 1 нс). Но в другой период синхронизации составляет всего 10 нс, что дает разрешение 1 пс.
Почему разрешение по времени отличается во всех этих режимах и проектах?
Как правильно указать разрешение по времени?
2 ответа
Не указано разрешение по времени для vsim
командование в runsim.do
файл, сгенерированный Makefiles. Таким образом, разрешение по умолчанию для симулятора используется, как указано в modelsim.ini
, Один из других проектов VHDL имел частный modelsim.ini
с разрешением по времени, установленным на 1 пс (Resolution = ps
) вместо значения по умолчанию 1 нс (Resolution = ns
).
дополнительный vsim
аргументы могут быть указаны в переменной Makefile VSIM_ARGS
системы сборки Cocotb. Но установив эту переменную в командной строке:
make SIM=questa GUI=1 "VSIM_ARGS=-t 1ps"
не работает должным образом, потому что требуется другое vsim
аргументы были теперь лишены.
Вместо этого нужно установить эту переменную в специфичном для проекта Makefile, например, непосредственно перед включением общесистемных Makefile:
VSIM_ARGS=-t 1ps
include $(COCOTB)/makefiles/Makefile.inc
include $(COCOTB)/makefiles/Makefile.sim
Таким образом, можно получить согласованное разрешение по времени для VHDL и Verilog. Параметр должен быть установлен для каждого проекта соответственно.
Начиная с версии cocotb 1.3.0, вы можете использовать переменные make-файла COCOTB_HDL_TIMEUNIT и COCOTB_HDL_TIMEPRECISION для определения шкалы времени независимо от симулятора.