Рекурсивная компиляция файлов в каталоге с использованием Modelsim и сценария TCL

#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.