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

Vengin

Свой
  • Публикаций

    84
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о Vengin

  • Звание
    Частый гость

Контакты

  • Сайт
    http://
  • ICQ
    438549118

Информация

  • Город
    Беларусь, г. Минск

Посетители профиля

938 просмотров профиля
  1. На тот момент был "несвой". Теперь уже обновился.
  2. Стыдно спросить, но никак не могу понять в чём затык. Есть некий простейший package, в котором определяются следующие alias: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; USE IEEE.MATH_REAL.ALL; package FUNCTIONS_PKG is alias conv_slv is ieee.std_logic_arith.CONV_STD_LOGIC_VECTOR [integer,integer return STD_LOGIC_VECTOR]; alias conv_int is ieee.std_logic_unsigned.CONV_INTEGER [STD_LOGIC_VECTOR return INTEGER]; end FUNCTIONS_PKG; package body FUNCTIONS_PKG is end FUNCTIONS_PKG; Пытаюсь компилировать это в ModelSim SE-64 10.5. Когда делаю просто "vcom functions_pkg.vhd" (по умолчанию стандарт 2002) всё норм. Когда же пытаюсь скомпилить под 2008 "vcom -2008 functions_pkg.vhd" , получаем: # ** Error: d:/tmp/functions_pkg.vhd(9): Cannot find subprogram "CONV_STD_LOGIC_VECTOR" with corresponding signature. # ** Error: d:/tmp/functions_pkg.vhd(10): Cannot find subprogram "CONV_INTEGER" with corresponding signature. Не совсем улавливаю в чём причина. Когда делаю то же самое в Active-HDL - проблем нет. functions_pkg.vhd
  3. Здравствуйте. Осваивал нынче Sublime Text - конечно вещь! Гибкость, а уж тем более программируемость самой среды разработки это что-то. В процессе настройки под себя для работы с HDL наткнулся на package SublimeLinter-contrib-vcom, который позволяет подсвечивать errors/warnings генерируемые компилятором vcom от Modelsim/Questasim. Решил добавить поддержку vlog для Verilog/SysemVerilog и чуток подпилил vcom (по возможности подсвечивается конкретное место ошибки (колонка в строке), а не вся строка). В итоге выглядит это как в традиционных IDE как-то так: Этот подход (linting) немного пересекатеся с build_systems (как пример настройки предложенные здесь), но лично мне привычнее "традиционный вид" (да и можно использовать оба подхода). Вроде достаточно удобно, может кому пригодится. P.S.: после добавления поддержки компилятора vlog, автор переименовал репозиторий на SublimeLinter-contrib-modelsim, но процесс переименования самого package что-то подвис и поэтому в Package Control он по прежнему пока под старым именем SublimeLinter-contrib-vcom.
  4. Действительно работает. А я (т.к. смысла команды eval до конца честно говоря не понимаю), пытался делать как в экзамплах, со всякими доп скобками: eval {vcom $arg} eval "vcom $arg" eval [list vcom $arg] и всё выдавало ошибки. А тут было так просто! Спасибо, будем знать.
  5. Опять небольшие грабли. Исходники открываются в режиме ReadOnly. Если открывать "обычным" способом (File -> Open), то файлы открываются и на запись. В то же время, когда файл открывается по другому (судя по всему внутренней командой edit), например, во время симуляции при дабл-клике в окнах Structure, Objects, Process и т.п. файл в окне Source открывается ReadOnly. Вроде как есть специальная опция, отвечающая за это дело (ModelSim® SE User's Manua -> Chapter 17:Source Window -> Changing File Permissions): Поменял через GUI (Tools -> Edit Preferences -> вкладка By Name -> Source -> ReadOnly = 0) - по-прежнему открываются в ReadOnly. Поменял в скрипте pref.tcl: set PrefSource(ReadOnly) 0 - ничего. Может кто знает, как это побороть? Приходится каждый раз в окне Source делать правый клик и снимать флажок ReadOnly. Мелочь, но неприятно (тем более что по идее этого быть не должно).
  6. То, что у меня Active-HDL v9.1, а нужно компилить корки Xilinx Vivado 2017.4. Долго пытался, часть удалось, но думаю в этой версии Active-HDL не светит (а более новую найти и попробовать увы не удалось).
  7. Не до конца уловил смысл всех этих махинаций. Насколько я понял, этот скрипт позволит парсить некую сложную строку/лист аргументов $args, анализируя инидвидуальные опции/флаги при помощи switch -regexp (а также анализировать составные элементы/sub_lst как в "-my_options2"). Всё это в итоге компонуется в лист $cmd_line, который потом во flatten виде (поэлементно) передаётся на вход vcom, вроде так? Но если я правильно понимаю, при однократном вызове vcom всё равно применит опции/аргументы все сразу ко всем файлам (а не каждому файлу свой параметр)? Т.е. если есть 10 файлов и, допустим один с флагом -2008, то все 10 файлов будут компилится с этим флагом. А это некорректно (не то, что надо). И ещё немного оффтопик. RobFPGA, если не секрет, что используете для дебага TCL скриптов (я так думаю не просто текствые файлы интерпретатору скармливаете)? Я в своё время остановился на связке Eclipse+Komodo Remote Debugging Package.
  8. Работать-то работает. Но для большого количества файлов дейстивтельно быстрее получается компилировать не "поштучно" (на каждый файл свой vcom), а пачкой. Плюс всё равно мне нужно делать более сложный скрипт, чтобы учитывать разные конфигурации и прочие нюансы. Так что есть смысл заморочиться, да и полезно "для общего развития".
  9. Да уж, даже мысли такой не было. Как-то этот "параллелизм" боком вылазит. По поводу всяких извращиней - что-то мне подсказывает что оно того не будет стоить. Имеется пара сотня файлов, и комплитиь нужно смешанно - часть из них с параметрами, а часть нет. А так как для компиляции vhdl важен порядок, то эти отдельные .f файлы может чуть и помогут, но в целом ситуация конечно грустная. Ладно, благодарю за помощь, будем дальше сражаться. :smile3009:
  10. Очередная странность. Надо скопмилить vhdl файл с поддержкой 2008 стандарта. Например, vcom -2008 version.vhd отрабатывает нормально. В то же время, если параметры для vcom передать через переменную, имеем ошибку: > set arg "-2008 version.vhd" > vcom $arg # Model Technology ModelSim SE-64 vcom 10.5 Compiler 2016.02 Feb 13 2016 # ** Error (suppressible): (vcom-1902) Option "-2008 version.vhd" is either unknown, requires an argument, or was given with a bad argument. # Use the -help option for complete vcom usage. # Errors: 1, Warnings: 0 Почему-то при замене переменной возникают "кавычки", которые вводят vcom в ступор. Как это перебороть пока не понимаю. Вообще изначально пытаюсь скомпилить множество файлов используюя опцию vcom (-F | -file | -f) <filename>. Некоторые (не все) файлы нужно скомпилить с поддержкой 2008 стандарта. Т.е. делаю лист файлов с аргументами и без, пишу в файл и этот файл пытаюсь скармливать vcom. Когда индивидуальный аргрумент это имя файла (без доп параметров) - процесс нормальный. Т.е. если есть файл flist.tmp: functions_pkg.vhd version.vhd то vcom -f flist.tmp отрабатывает без проблем. Если же нужно скажем какой-то файл скомпилить с доп аргументом, то всё ломается: flist2008.tmp: functions_pkg.vhd -2008 version.vhd параметр -2008 как бы "передаётся" первому файлу, а тот выдаёт ошибку > vcom -f flist2008.tmp # Model Technology ModelSim SE-64 vcom 10.5 Compiler 2016.02 Feb 13 2016 # Start time: 15:29:09 on Aug 13,2018 # vcom -reportprogress 300 -2008 functions_pkg.vhd # -- Loading package STANDARD # -- Loading package TEXTIO # -- Loading package std_logic_1164 # -- Loading package MATH_REAL # -- Compiling package FUNCTIONS_PKG # -- Loading package std_logic_arith # ** Error: functions_pkg.vhd(19): Cannot find subprogram "CONV_STD_LOGIC_VECTOR" with corresponding signature. # -- Loading package STD_LOGIC_UNSIGNED # ** Error: functions_pkg.vhd(20): Cannot find subprogram "CONV_INTEGER" with corresponding signature. # ** Error: functions_pkg.vhd(34): VHDL Compiler exiting # End time: 15:29:09 on Aug 13,2018, Elapsed time: 0:00:00 # Errors: 3, Warnings: 0 Как по человечески это сделать? Пока только нашёл полуобходной вариант: если строка аргумента "составная" вручную разбивать её на индивидуальные элементы и передавать их поотделности, но это ерунда какая-то: set arg {-2008 version.vhd} vcom [lindex $arg 0] [lindex $arg 1]; #ok vcom_2008_example.zip
  11. Ещё кстати, как вариант решения проблемы со startup скриптом, можно работать с файлом проекта .mpf (который по структуре во многом копирует modelsim.ini) и в этом файле проекта закоментировать/не использовать VSIM Startup command.
  12. Cудя по отсутствию комментариев, придётся набивать шишки самому. Э-эх. Вот конкретная проблема. Не могу до конца разобраться со скриптом startup.do. Пытаюсь заставить Modelsim стартовать окно во весь экран (как описано в этой теме). Создаём файл $MODEL_TECH/startup.do, в котором одна строчка, которая максимизирует окно Моделсима: wm state . zoomed В файле modelsim.ini прописываем следующее: ; VSIM Startup command Startup = do $MODEL_TECH/startup.do Запускаем Modelsim и видим следующую ошибку: ... # do $MODEL_TECH/startup.do can't read "MODEL_TECH": no such variable Хотя в самом файле modelsim.ini переменнамя $MODEL_TECH фигурирует неоднократно. Попытался сделать через $env(), т.е. в modelsim.ini пишем: ; VSIM Startup command Startup = do $env(MODEL_TECH)/startup.do Modelsim успешно запускается, и окно во весь экран. Однако затем, при дальнейше работе в Modelsim проблема всё равно всплывает. Для примера, пытаемся прогнать простейший example входящий в состав моделсима (лежит в папке $MODEL_TECH/../examples/vhdl/io_utils/: cd ../examples/vhdl/io_utils source run.do Скрипт run.do успешно создаёт библиотеку, комплит в ней исходники. Но когда дело доходит до симуляции, и вызывается команда vsim, вываливается ошибка # Cannot open macro file: (MODEL_TECH)/startup.do Т.е. непосредственно в самом моделсиме при любом явном вызове команды vsim повторно пытается запуститься скрикт startup.do (видно заново парсится файл modelsim.ini), но при этом почему-то конструкция $env(MODEL_TECH) уже не срабатывает (хотя если написать только $MODEL_TECH/startup.do то сработает, но, как и описывалось выше, будет ошибка при первоначальном запуске Моделсим). Как разорвать этот порочный круг? Можно конечно прописать абсолютный путь к startup.do, но неужто нельзя через относительный с переменной $MODEL_TECH? P.S.: в аттаче описанный экзампл и полный транскрипт (ошибка на строке 44). examples.zip
  13. Ну, начать хотя бы с того, что GUI кривой. Для сравнения, в Active-HDL множество мелких вещей лично мне удобнее/быстрее делать через GUI/hotkeys. Более сложыне уже скриптами. В ModelSim пока даже многие мелкие вещи мне делать иногда проще в командной строке. Та же компиляция файлов, и симуляция ИМХО в ModelSim гораздо удобнее скриптом. По поводу автоматизации - это не самоцель, а скорее необходимость. Просто вместо того чтобы тыкать десять кнопок, можно же упростить себе жизнь и сделать скрипт. Ну а в больших проектах по любому нужны скрипты. Да и можно ведь ModelSim вообще без GUI использовать, в режиме командой строки. Можете посоветовать что-то конкретное? В своё время посматривал на всякие OVM и разные другие методы тестирования и автоматизации. Но пока особо не прижилось, т.к. затраты времени на освоение или зависимость от сторонних ресурсов не особо оправдывают себя.
  14. Добрый день. В очередной раз пытаюсь «пересеть» на ModelSim, и уже вроде пошёл процесс, но как-то всё весьма своеобразно. Уже закрыл глаза на убогийсвоеобразный и постоянно «прыгающий» GUI. И пока лишь только настораживают не столь уж редкие подвисания/вылеты без явных вроде причин. Сейчас больше интересует непосредственно основной функционал моделсима, то бишь симуляция/верификация. Пытаюсь максимально всё делать через консоль и скриптами. Со «стандартными» командами (типа vcom, vsim и т.п.) всё очевидно - есть документация, примеры. Но в то же время есть ещё, скажем так, «второстепенные» команды, с которыми не всё так понятно. Как правило, это команды в формате CamelCase с более длинными названиями. Для примера, при экспорте wavefrom в файле wave.do появляются такие команды как WaveActivateNextPane, TreeUpdate, WaveRestoreCursors и т.п. И вот как именно с этими «второстепенными» командами работать не совсем понятно. В лучшем случае они мимоходом упоминаются в доках, но лишь поверхностно. В худшем и поисковики не выдают ничего вразумительного. Да, с одной стороны «общее назначение» команды можно уловить исходя из названия. Но, для начала было бы неплохо хотя бы представлять количество таких команд. Например, если набирать в командной строке ModelSim скажем Wave, то в списке подсказанных команд насчиталось 13 штук. Или вот, например команда WaveActivateNextPane. Поначалу не придавал ей внимания. Потом поэкспериментировал и оказалось, что например "WaveActivateNextPane {} 2" добавляет (или активирует уже добавленное) подокно (Wave Pane), т.е. разбивает единое окно wave на несколько подокон. Как раз нужен такой функционал при большом количестве сигналов, а найти это удалось лишь случайно, методом тыка. И пока по-прежнему не понятно, как закрывать эти самые добавленные подокна (panes). В GUI меню есть такое дело (Wave->”Delete Window Pane”), но соответствующей команды найти пока не удалось. А где и как искать неизвестно. И это кстати не первый пример в ModelSIm, когда какое-то действие можно выполнить в GUI, а прямого аналога команд консоли вроде как нет. И зачастую нет прямого «отражения» (вывода) GUI действий в консоли, что уж совсем странно. Может, есть какие-то команды, которые посылают события в GUI, имитация нажатия меню/иконок, макросы, хуки, …? Ещё, не всегда понятно как интерпретировать вывод стандартных/второстепенных команд. Например, команда view выдаёт список открытых окон типа такого >view # .main_pane.objects .main_pane.source .main_pane.structure .main_pane.transcript .main_pane.wave .main_pane.process .main_pane.library .main_pane.memory .main_pane.project Тут ещё более менее понятно из названий. Но скажем, когда глубина элементов увеличивается, уже малопонятно. Та же команда WaveActivateNextPane может выдать что-то такое: .main_pane.wave.interior.cs.body.pw.wf.tree.tree1 Откуда вообще эта структура, как вообще устроена вся эта иерархия? И насколько вообще нужно/желательно её знать понимать (опять таки для управления через командную строку)? С одной стороны это представляет больше академический интерес. Но из-за определённой кривости ModelSim приходится ковыряться в этих дебрях. Опять-таки, в качестве примера, можно привести вот эту тему: "Как сделать главное окно Modelsim при старте во весь экран?". Решение, подсказанное RobFPGA, выглядит так: wm state . zoomed Вот только откуда всё это? В документации ModelSim этого нет. Судя по всему, это уже имеет отношение к Tcl/Tk, на котором вроде построен ModelSim? Пожалуй хватит для начала для одного сообщения :). Хотелось бы услышать мнения общества по этому поводу. И может заодно ответы на пару конкретных вопросов: 1) Есть ли где-то какой-то список/документация на «второстепенные» команды (API)? 2) Может есть команды «имитации» событий GUI (нажатия меню/иконок)? 3) Какой командой можно закрыть подокно (Wave Pane), открытое командой "WaveActivateNextPane {} 2" (без закрытия переоткрытия всего кона Wave)?