#tcl #vhdl #verilog #system-verilog #modelsim
#tcl #vhdl #verilog #system-verilog #modelsim
Вопрос:
Я использую modelsim для имитации моих проектов HDL. Я хотел бы создать рабочий процесс на основе сценариев, чтобы мне не приходилось использовать графический интерфейс и можно было быстрее моделировать.
Мое типичное дерево каталогов:
rtl/
includes/
module1/
module2/
Что мне нужно сделать, так это скомпилировать все файлы .sv и .vhd, которые могут находиться в папке rtl, и загрузить дизайн в modelsim.
У меня есть скелетон для моего скрипта, который:
quit -sim
vdel -all -lib work
vlib work
vmap work work
# compile systemverilog
vlog -work work -svinputport=net rtl/file1.sv
vlog -work work -svinputport=net rtl/module1/file2.sv
# compile vhdl
vcom -work rtl/file3.vhd
vcom -work rtl/module2/file4.vhd
# Load design
vsim work.top_name -voptargs= acc
run -all
Что я хотел бы сделать, так это автоматизировать поиск файлов .sv и .vhd и скомпилировать их в правильном порядке.
Базовое решение, которое я пробовал, использует цикл foreach:
foreach file [fileutil::findByPattern $basepath *.sv] {
vlog -work work -svinputport=net $file
}
Но modelsim это не устраивает, так как файл может быть не всегда скомпилирован в правильном порядке.
Любой намек будет оценен, заранее спасибо.
Андреа
Комментарии:
1. Что определяет «правильный» порядок?
2. modelsim жалуется, если модуль, который импортирует пакет, компилируется перед пакетом, например
3. Тогда вам понадобится топологическая сортировка.
4. Звучит сложно. Пытаюсь ли я сделать что-то необычное? Я не эксперт, но я думал, что мой подход был простым.
5. Вы можете использовать такой инструмент, как «make», и определить зависимости в файле Makefile, или использовать более динамичный / программный подход, который потребует поиска всего импорта, создания списка всех модулей и пакетов с зависимостями и выполнения топологической сортировки. Возможно, стоит покопаться в Интернете и посмотреть, делал ли кто-нибудь это раньше.
Ответ №1:
Невозможно автоматически упорядочивать файлы SystemVerilog, если вы не установите некоторые соглашения о кодировании. Макросы и другие директивы компилятора чувствительны к порядку компиляции, и слишком много случаев, когда единственный способ справиться с этим с помощью явно упорядоченного списка файлов. С макросами вы обычно обычно используете `include "file.svh"
там, где когда-либо нужны макросы, и файл.svh не отображается в командной строке.
Ссылки на пакеты требуют синтаксического анализа файла, и если единственная ссылка на пакет import
— это инструкция, вы можете написать скрипт для создания списка зависимостей путем синтаксического анализа всех файлов.
Но большинство людей просто вручную создают файлы, в которых есть необходимые файлы в правильном порядке. Это всегда будет более эффективным, потому что файлы нужно анализировать только один раз в правильном порядке.
Ответ №2:
В VHDL можно было бы автоматически создавать допустимый порядок компиляции из информации в исходных файлах : зависимости указаны в исходном коде, а не где-то еще, например, в makefiles.
К сожалению, Modelsim не использует это преимущество, поэтому вам остается самостоятельно создавать порядок компиляции или писать makefile, как в SV.