Перейти к содержанию
    

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

 

Изменено пользователем Flip-fl0p

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А можно поподробнее про "достаточно ткнуть на соответствующее сообщение". Также пользуюсь 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...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо, то что надо!

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

Изменено пользователем Flip-fl0p

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

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

 

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

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

MODULE1_COMP : ENTITY WORK.MODULE1

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

Изменено пользователем Flip-fl0p

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

MODULE1_COMP : ENTITY WORK.MODULE1

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

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

library work;

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

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

UUT : entity syntax_check.comp_name

 

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

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

library work;

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

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

UUT : entity syntax_check.comp_name

 

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

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

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

UUT : entity syntax_check.comp_name

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

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

Изменено пользователем Flip-fl0p

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

21 hours ago, Flip-fl0p said:

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

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

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

 

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

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

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 часов назад, dxp сказал:

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...