Как мне указать разрешение по времени в 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 для определения шкалы времени независимо от симулятора.

Другие вопросы по тегам