2016-03-30 8 views
2

Я получаю другой период синхронизации, когда я имитирую пример Cocotb в режиме VHDL и Verilog, используя QuestaSim. Часов генерируется таким же образом, для обоих режимов в provided example code:Как указать временное разрешение в Cocotb?

@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 пс.

Почему отличается временным разрешением во всех этих режимах и проектах?

Как я могу указать временное разрешение последовательно?

+0

Стоит отметить, что для удобства есть класс 'cocotb.clock.Clock', который сохраняет необходимость неоднократного определения coroutine' clock_gen'. – Chiggs

ответ

2

Не определено время для команды vsim в файле runsim.do, созданном Make-файлами. Таким образом, временное разрешение по умолчанию для симулятора используется, как указано в 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 вместо этого, например, как раз перед включением всей системы Makefiles:

VSIM_ARGS=-t 1ps 

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

Таким образом, один получает последовательное разрешение по времени через VHDL и Verilog. Параметр должен быть установлен для каждого проекта соответственно.

+0

См. Также [выпуск 115] (https://github.com/potentialventures/cocotb/issues/115), где мы обсуждаем определение времени в абсолютных единицах, которое разрешило бы это на уровне Python. После объединения [# 383] (https://github.com/potentialventures/cocotb/pull/383) мы знаем абсолютную точность времени, поэтому определение таймеров с точки зрения единиц не должно быть слишком сложным. – Chiggs

+0

@Chiggs Что касается вопроса # 383, существует ли уже функция Python для вызова 'vhpi_get_phys (vhpiResolutionLimitP, NULL)'? Я не нашел его в источниках. –