Jump to content

    

Quartus/Modelsim и командная строка

Хотелось бы увидеть тут последовательность механизма дружбы. Если не трудно.

Вот ссылки для справки:

http://azjio.narod.ru/NppHelp/Plugins/NppExec.html ссылка где достаточно подробно описываются настройки командой строки.

https://habrahabr.ru/post/147870/ ссылка где описано как запускать внешние приложения через командную сроку.

Процесс прикручивания достаточно простой:

1. Итак для начала необходимо установить плагин для Notepad ++, который называется NppExec. Устанавливается через Plugin Manager (плагины --> Plugin Manager --> Show Plugin Manager)

2.Далее проверяем поставились ли у нас вместе с Modelsim переменные среды. Для Win7 это делаем так ПУСК-->Компьютер-->Свойства системы-->Дополнительные параметры системы -->Дополнительно-->Переменные среды. Смотрим есть ли у нас переменная среда с названием MODEL_TECH и путём к исполняемым файлам Modelsima. Если нет, то создаём сами.

image.png

3. Основные приготовления закончены, и осталось только настроить плагин NppExec для вызова компиляции файла. Для этого нажимаем клавишу F6 в текстовом редакторе Notepad ++ и пишем следующие строки:

cd $(SYS.MODEL_TECH)
vlib "$(CURRENT_DIRECTORY)\syntax_check"
vcom -work "$(CURRENT_DIRECTORY)\syntax_check" -O0 "$(FULL_CURRENT_PATH)"

cd $(SYS.MODEL_TECH)

Команда cd - обычная dos'овская команда означающая change directory т.е смены текущей директории. Нужна чтобы не писать полный путь до каждой команды.

$(SYS.MODEL_TECH)- устанавливает текущую папку ту, которую мы указали в переменных средах. Напомню, что данная папка содержит исполняемые файлы Modelsim'а котороые мы и будет вызывать через командную строку.

vlib "$(CURRENT_DIRECTORY)\syntax_check"

команда vlib создает библиотеку (папку с файлами необходимыми для компиляции по адресу где расположен текущий файл, открытый в Notepad ++.

Т.е в папке где содержится файл VHDL\VERILOG описания.

syntax_check означает, что название папки, куда будтут "складываться" файлы, создаваемые при компиляции, будет syntax_check

vcom -work "$(CURRENT_DIRECTORY)\syntax_check" -O0 "$(FULL_CURRENT_PATH)"

Собственно сама команда компиляции. -work указывает пользовательскую библиотеку "$(CURRENT_DIRECTORY)\syntax_check" которую мы создали

-O0 говорит не оптимизировать при компиляции

"$(FULL_CURRENT_PATH)" - это полный путь до текущего файла, который у нас открыт в Notepad ++, который мы хотим скомпилировать

Обратите внимание, что если работаете с verilog то вроде как надо компилятор вызывать командой vlog а не vcom.

Далее подробно описывать процесс настройки командной строки я не буду, поскольку это уже красивости. Но просто приведу пару настроек, которые я сделал, чтобы упростить себе жизнь и не выводить ненужные мне сообщения компилятора:

 

Не сообщать о подключении всяких библиотек при компиляции

image.png

 

Строку содержащую фразу об ошибке окрасить в красный цвет, а строку с предупреждением в желтый.

image.png

 

Вот как это работает у меня:

 

image.png

 

Edited by Flip-fl0p

Share this post


Link to post
Share on other sites

Обратите внимание, если вы подключаете компонент, то чтобы правильно скомпилировался модуль, содержащий применяемый компонент необходимо этот компонент скомпилироваьть. Как обойти это я не придумал, да и не думал пока.

Share this post


Link to post
Share on other sites
А можно поподробнее про "достаточно ткнуть на соответствующее сообщение". Также пользуюсь SlickEdit и для прерки синтаксиса прикрутил ему VHDL компилятор vcom, но не моделсимовский, а от Acitive-HDL. И в результате компиляции (при наличии ошибок) в консоль выводится просто текст с указанием кодов ошибок и позиции (строка-столбец). Т.е. гиперссылок, на которые можно было бы кликать нет. Это можно где-то дополнительно настроить?

О гиперссылках речь и не шла, штатное поведение "программерских" редакторов - это возможность перехвата вывода запускаемой внешней программы (типично - компилятора) с возможностью обработки перехваченного текста и перехода к месту ошибки (с показом текста ошибки в строке статуса). У слика для перехода можно сделать даблклик на строке сообщения или по горячей клавише (Ctrl-Shift-Down/Ctrl-Shift-Up для перехода на следующую/предыдущую ошибку).

 

Для того, чтобы это работало, надо в настройках проекта во вкладке Tools установить соответствующие опции, у меня установлены:

 

* Capture output

* Output to build window

* Clear build window

 

Далее нужно настроить фильтр регулярных выражений: меню Build->Configure Error Parsing... Там нужно добавить паттерн регулярного выражения, соответствующего формату сообщения об ошибке, что бы программа могла выделить имя файла, номер строки (и опционально столбца) и собственно текст сообщения. Настройка и формат регулярного выражения описаны в документации на слик. У меня это успешно использовалось для компиляторов IAR, VisualDSP++, GCC, Model/Questasim, CodeComposer Studio. В общем, подход универсальный, к конкретному запускаемому инструменту не привязан. Для облегчения настройки регулярного выражения у слика есть подходящее средство Tools->Regеx Evaluator...

Share this post


Link to post
Share on other sites
...В общем, подход универсальный, к конкретному запускаемому инструменту не привязан....
Спасибо, то что надо!

А можем ещё можно цветами выделять тип сообщений/ошибок (Info, Warning, Error), чтоб уж совсем красиво было? :rolleyes:

 

Share this post


Link to post
Share on other sites

Чтобы при повторном компилировании не возникало сообщение

 ** Warning: (vlib-34) Library already exists at "xxx\syntax_check".

и, заодно, чистить консоль (при необходимости), надо добавить пару строк:

cls
cd $(SYS.MODEL_TECH)
vdel -lib "$(CURRENT_DIRECTORY)\syntax_check" -all

и далее как раньше

Share this post


Link to post
Share on other sites
Спасибо, то что надо!

А можем ещё можно цветами выделять тип сообщений/ошибок (Info, Warning, Error), чтоб уж совсем красиво было? :rolleyes:

На эту тему не заморачивался. Это уже свойства сликовского окна, надо разбираться с его возможностями. Я как правило не вчитываюсь в список сообщений об ошибках - если что-то есть, то сразу жму Ctrl-Shift-Down и оказываюсь в файле и на строке с ошибкой, а текст ошибки вижу в строке состояния. Так мне удобнее понять причину, видя весь контекст.

Share this post


Link to post
Share on other sites

Поскольку я продолжаю упрощать себе жизнь и настраиваю средства разработки на максимальное выполнение рутинных задач, у меня возник вопрос по запуску TCL скриптов.

На данный момент я смог настроить Notepad ++ на проверку текущего открытого файла. Но когда в проекте используется несколько модулей, то модуль верхнего уровня не будет работать пока не скомпилировать все остальные модули. Я планирую написать простенький TCL скрипт который исправит этот недостаток. Да вот другая беда, никак не могу запустить TCL скрипт через консоль. Может вы сможете навести на мысль в чем моя ошибка ?

На данный момент команду пытаюсь запустить так:

cd $(SYS.MODEL_TECH)                           -- Делаем текущую папку с основными исполняемыми файлами Modlesim
vlib "$(CURRENT_DIRECTORY)\syntax_check"       -- Создаю библиотеку с названием syntax_check в папке с открытм файлом, который надо проверить
vsim "$(CURRENT_DIRECTORY)\" do.tcl            -- Пытаюсь запустить TCL скрипт. -do и другие аргументы не помогают в запуске

Edited by Flip-fl0p

Share this post


Link to post
Share on other sites

Путём проб и ошибок выявил следующую закономерность. Если устанавливаемый компонент объявить "как раньше" т.е объявить в архитектурном теле секцию:

COMPONENT MODULE1
....
....
END COMPONENT

 

И устанавливать этот компонент соответственно как раньше:

MODULE1_COMP : MODULE1
PORT MAP ( .......... );

 

То проблема проверки файла содержащего компоненты пропадает.

Т.е. Modelsim'у не нравиться установка компонента таким образом:

MODULE1_COMP : ENTITY WORK.MODULE1

Возникает вопрос, а собственно почему так ?

Edited by Flip-fl0p

Share this post


Link to post
Share on other sites
MODULE1_COMP : ENTITY WORK.MODULE1

Возникает вопрос, а собственно почему так ?

А вы добавляете в начало объявление библиотеки?

library work;

Ну это так, на всякий случай.

А основной проблемой может быть то, что вы создаете свою библиотеку и указываете ее в качестве work. Т.е. компонент уже будет

UUT : entity syntax_check.comp_name

 

Или я не так понял?

 

 

Share this post


Link to post
Share on other sites
А вы добавляете в начало объявление библиотеки?

library work;

Ну это так, на всякий случай.

А основной проблемой может быть то, что вы создаете свою библиотеку и указываете ее в качестве work. Т.е. компонент уже будет

UUT : entity syntax_check.comp_name

 

Или я не так понял?

Библиотеку объявляю.

Но сдаётся мне, что всё-же надо TCL писать. Поскольку хотелось бы проверки всей иерархии проекта. Поскольку даже если найти способ что-бы Modelsim не ругался на:

UUT : entity syntax_check.comp_name

Появляется другая проблема: если компонент, содержащий ошибку, был изменён, но не был скомпилирован, то компиляция верхнего модуля не выявит ошибку в модуле нижнего уровня.

А хотелось бы, чтобы начиная с верхнего уровня компиляция проверяла бы и нижние уровни... Вернее наоборот. Чтобы начиная с нижних уровней, компиляция доходила до верхних, т.о. отслеживая все изменения во всех файлах проекта.

Edited by Flip-fl0p

Share this post


Link to post
Share on other sites

Подниму свою старую темку.

А как можно сделать проверку синтаксиса всего проекта без работы в GUI таких программ как Vivado\Quartus\Modelsim ?

Share this post


Link to post
Share on other sites

Запустить компилятор (этих программ) в консоли. Я компилирую проект для симулятора прямо из редактора (нажав хоткей), в котором работаю с исходниками. Компилятор симулятора запускается и отрабатывает очень быстро (в отличие от компиляторов синтезаторов, которые запускаются сами по себе дольше, чем симуляторный компиляет проект), и если есть ошибки, то редактор позволяет быстро (по хоткею) переходить к месту ошибки (это штатная фича любого приличного программерского редатора).

Share this post


Link to post
Share on other sites
21 hours ago, Flip-fl0p said:

Подниму свою старую темку.

А как можно сделать проверку синтаксиса всего проекта без работы в GUI таких программ как Vivado\Quartus\Modelsim ?

Попалась на глаза ваша тема, вспомнил давно интересующий вопрос.

 

В большей части модулей пользуюсь типами, которые объявлены где-то (допустим, ./inc/types.svh). Так вот, что бы корректно откомпилировался текущий модуль - нужно компилятору объяснить, где типы лежат. В квесте собираю полный тестбенч - там это описано. В квартусе - тоже. А вот для одиночного модуля, проверямого прямо из редактора - не понятно, как делать.

Я вижу два пути:

1. Более-менее унверсальный. В каждом модулей явно прописывать файлик с типами (#include "./inc/types.svh") - не красиво, лишняя писанина, некоторые компиляторы не любят, когда так делают (пример - Libero);

2. Не универсальный. Для каждого проекта нужно в скриптах запуска прописывать путь до файла с типами. Тоже неудобно - скрипты разные под каждый проект, что-то куда-то переложилось - нужно править скрипты.

 

В общем, оба варианта не нравятся. Подскажите, как знающие люди делают? Может быть, есть что-то покрасивше?

Share this post


Link to post
Share on other sites
7 часов назад, dxp сказал:

Запустить компилятор (этих программ) в консоли. Я компилирую проект для симулятора прямо из редактора (нажав хоткей), в котором работаю с исходниками. Компилятор симулятора запускается и отрабатывает очень быстро (в отличие от компиляторов синтезаторов, которые запускаются сами по себе дольше, чем симуляторный компиляет проект), и если есть ошибки, то редактор позволяет быстро (по хоткею) переходить к месту ошибки (это штатная фича любого приличного программерского редатора).

Так я так и делаю с модельсимом (с Vivado пока не пробовал). Но проблема возникает когда есть сложная иерархия проекта: компилятор проверяет только тот файл, который в данный момент открыт в редакторе. Файлы уровнем ниже - он не проверяет поскольку не может найти. 

И собственно есть 2 пути как писал Уважаемый nice_vladi. Вот я и думаю может есть какой TCL скрипт который парсит иерархию проекта, и компиляцию начинает с самого низкого уровня.

Share this post


Link to post
Share on other sites

Приветствую!

5 hours ago, nice_vladi said:

В большей части модулей пользуюсь типами, которые объявлены где-то (допустим, ./inc/types.svh). Так вот, что бы корректно откомпилировался текущий модуль - нужно компилятору объяснить, где типы лежат. В квесте собираю полный тестбенч - там это описано. В квартусе - тоже. А вот для одиночного модуля, проверямого прямо из редактора - не понятно, как делать.

Не совсем понял в чем проблема? Если типы объявлены в .svh, то как ни крути его надо включать в модуле через include.

Если проблема в том как объяснить, где искать эти .svh, то я например делаю в каждой папке с исходниками файл sv_opt.f. В которых пишу опции компиляции при симуляции.  А в редакторе универсальная команда запуска (в данном случае для  Sublime)

"shell_cmd": "%MODEL_TECH%/vlog.exe -F $file_path/sv_opt.f +incdir+$file_path $file"

Удачи! Rob.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this