Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум разработчиков электроники ELECTRONIX.ru _ Среды разработки - обсуждаем САПРы _ Особенности ModelSim

Автор: Vengin Jul 11 2018, 08:15

Добрый день. В очередной раз пытаюсь «пересеть» на 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 приходится ковыряться в этих дебрях.
Опять-таки, в качестве примера, можно привести вот эту тему: http://electronix.ru/redirect.php?https://electronix.ru/forum/index.php?showtopic=122907&hl=modelsim. Решение, подсказанное RobFPGA, выглядит так:
Код
wm state . zoomed
Вот только откуда всё это? В документации ModelSim этого нет. Судя по всему, это уже имеет отношение к Tcl/Tk, на котором вроде построен ModelSim?

Пожалуй хватит для начала для одного сообщения sm.gif. Хотелось бы услышать мнения общества по этому поводу.
И может заодно ответы на пару конкретных вопросов:
1) Есть ли где-то какой-то список/документация на «второстепенные» команды (API)?
2) Может есть команды «имитации» событий GUI (нажатия меню/иконок)?
3) Какой командой можно закрыть подокно (Wave Pane), открытое командой "WaveActivateNextPane {} 2" (без закрытия переоткрытия всего кона Wave)?

Автор: AVR Jul 11 2018, 10:21

Цитата(Vengin @ Jul 11 2018, 11:15) *
Пожалуй хватит для начала для одного сообщения sm.gif. Хотелось бы услышать мнения общества по этому поводу.
И может заодно ответы на пару конкретных вопросов:
1) Есть ли где-то какой-то список/документация на «второстепенные» команды (API)?
2) Может есть команды «имитации» событий GUI (нажатия меню/иконок)?
3) Какой командой можно закрыть подокно (Wave Pane), открытое командой "WaveActivateNextPane {} 2" (без закрытия переоткрытия всего кона Wave)?

Вынужден спросить - зачем автоматизировать работу с GUI? Какой от этого выигрыш? Я бы посоветовал сменить принципы отладки и тестирования своих проектов, раз возникли такие вопросы, просто подозреваю недопонимание принципов тестирования и назначения такого инструмента как Modelsim...

Автор: Vengin Jul 11 2018, 10:51

Цитата(AVR @ Jul 11 2018, 13:21) *
Вынужден спросить - зачем автоматизировать работу с GUI? Какой от этого выигрыш?
Ну, начать хотя бы с того, что GUI кривой. Для сравнения, в Active-HDL множество мелких вещей лично мне удобнее/быстрее делать через GUI/hotkeys. Более сложыне уже скриптами. В ModelSim пока даже многие мелкие вещи мне делать иногда проще в командной строке. Та же компиляция файлов, и симуляция ИМХО в ModelSim гораздо удобнее скриптом.
По поводу автоматизации - это не самоцель, а скорее необходимость. Просто вместо того чтобы тыкать десять кнопок, можно же упростить себе жизнь и сделать скрипт. Ну а в больших проектах по любому нужны скрипты. Да и можно ведь ModelSim вообще без GUI использовать, в режиме командой строки.

Цитата(AVR @ Jul 11 2018, 13:21) *
Я бы посоветовал сменить принципы отладки и тестирования своих проектов, раз возникли такие вопросы, просто подозреваю недопонимание принципов тестирования и назначения такого инструмента как Modelsim...
Можете посоветовать что-то конкретное? В своё время посматривал на всякие OVM и разные другие методы тестирования и автоматизации. Но пока особо не прижилось, т.к. затраты времени на освоение или зависимость от сторонних ресурсов не особо оправдывают себя.

Автор: Vengin Aug 3 2018, 11:44

Cудя по отсутствию комментариев, придётся набивать шишки самому. Э-эх.

Вот конкретная проблема. Не могу до конца разобраться со скриптом startup.do. Пытаюсь заставить Modelsim стартовать окно во весь экран (как описано в http://electronix.ru/redirect.php?https://electronix.ru/forum/index.php?showtopic=122907&view=findpost&p=1306569).
Создаём файл $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 ( 4.27 килобайт ) : 6
 

Автор: RobFPGA Aug 3 2018, 13:28

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

Цитата(Vengin @ Aug 3 2018, 14:44) *
Cудя по отсутствию комментариев, придётся набивать шишки самому. Э-эх.
...
А то - нам в чужих синяках облом ходить sm.gif
Тут видимо проблемы в контексте запуска vsim. Можно с ними бодаться - а можно и подстроится.
Я обычно держу startup.tcl файл в локальных sim папках проектов. А в нем уже можно сделать ссылку и на глобальный в $::env(MODEL_TECH)/..

Хотя вот попробовал задать как и Вы
Код
Startup = source "$::env(MODEL_TECH)/../setup.tcl"

То при запуске на симуляцию vsim действительно ругается НО при этом потом все равно запускает
Код
Error: (vsim-21) Unable to expand "$::env(MODEL_TECH)../setup.tcl".
> execute source of .../Msim64/win64/../setup.tcl

Успехов! Rob.

Автор: Vengin Aug 5 2018, 10:25

Ещё кстати, как вариант решения проблемы со startup скриптом, можно работать с файлом проекта .mpf (который по структуре во многом копирует modelsim.ini) и в этом файле проекта закоментировать/не использовать VSIM Startup command.

Автор: AVR Aug 5 2018, 15:46

Вот мой пример как работать с ModelSim:  test_msim.rar ( 773 байт ) : 24

Тут и тестовый модуль и тестбенч, и bat-файл для запуска (на Linux тоже работает именно этот же пример, по аналогии bat на bash, только modelsim заменить на vsim в скрипте запуска). Только свои пути прописать и оно полетит.

Автор: Vengin Aug 13 2018, 12:12

Очередная странность. Надо скопмилить 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 ( 2.06 килобайт ) : 3
 

Автор: RobFPGA Aug 13 2018, 13:32

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

Цитата(Vengin @ Aug 13 2018, 15:12) *
Очередная странность. Надо скопмилить vhdl файл с поддержкой 2008 стандарта. ...
В то же время, если параметры для vcom передать через переменную, имеем ошибку:
Код
> set arg "-2008 version.vhd"
> vcom $arg
Это особенность TCL а не MdelSim. Параметром для proc (коими являются vcom/vlog ..) должен быть list аргументов - то есть когда вы пишете vcom -opt1 -opt2 agr2 file1 file2 то на вход vcom поступает vcom [list -opt1 -opt2 agr2 file1 file2]
Естественно если задать set arg "-2008 version.vhd" то это будет одна строка которая сама по себе в list не разобьется
тут надо извращаться например так:
Код
vcom [lappend [list [split $arg " "]] version.vhd]


Цитата(Vengin @ Aug 13 2018, 15:12) *
Вообще изначально пытаюсь скомпилить множество файлов используюя опцию vcom (-F | -file | -f) <filename>. Некоторые (не все) файлы нужно скомпилить с поддержкой 2008 стандарта. Т.е. делаю лист файлов с аргументами и без, пишу в файл и этот файл пытаюсь скармливать vcom. Когда индивидуальный аргрумент это имя файла (без доп параметров) - процесс нормальный. Т.е. если есть файл flist.tmp:
Код
functions_pkg.vhd
version.vhd
то vcom -f flist.tmp отрабатывает без проблем. Если же нужно скажем какой-то файл скомпилить с доп аргументом, то всё ломается:
Ясный х. пень - Параметры в .f файле применяются все сразу а не по очереди. Поэтому не получится менять опции для отдельных файлов! Делайте отдельные .f файлы с разными параметрами. Ну или пишите свой велосипед для структурирования файлов проекта. У меня когда то был такой трех-колесник:
CODE

#{
# {work library} {vlog options} {vcom options} {
# source_file
# }
#}

{
{CoreGen} {+define+GLBL +incdir+$DSN/src/Core/CoreGen} {} {
$DSN/src/Core/CoreGen/*.v
}
{misc} {-sv} {-2008} {
$DSN/src/misc/module1.v
$DSN/src/misc/module2.vhd
}
{work} {} {} {
[file normalize $env(XILINX)/verilog/src/glbl.v]

$DSN/src/top_pq.sv
$DSN/src/top.sv
}
}

# process all .src files
# read next .src file to module_src
...
foreach {lib opt_sv opt_vhd srclist} $module_src{
foreach srcline [split $srclist "\n"] {
set fext [string tolower [file extension $srcline]]
switch $fext {
".v" {...}
".vhd" {...}
...
default { }
}
}
}


Удачи! Rob.

Автор: Vengin Aug 13 2018, 13:51

Цитата(RobFPGA @ Aug 13 2018, 16:32) *
Параметры в .f файле применяются все сразу а не по очереди.
Да уж, даже мысли такой не было. Как-то этот "параллелизм" боком вылазит.
По поводу всяких извращиней - что-то мне подсказывает что оно того не будет стоить. Имеется пара сотня файлов, и комплитиь нужно смешанно - часть из них с параметрами, а часть нет. А так как для компиляции vhdl важен порядок, то эти отдельные .f файлы может чуть и помогут, но в целом ситуация конечно грустная.
Ладно, благодарю за помощь, будем дальше сражаться. smile3009.gif

Автор: RobFPGA Aug 13 2018, 14:16

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

Цитата(Vengin @ Aug 13 2018, 16:51) *
Да уж, даже мысли такой не было. Как-то этот "параллелизм" боком вылазит.
Это не "параллелизм" это просто другой вариант командной строки. Соответственно сначала все что попало в нее (непосредственно из строки или из .f файлов) парсится и только потом запускается компиляция с одним набором параметров.

Цитата(Vengin @ Aug 13 2018, 16:51) *
По поводу всяких извращиней - что-то мне подсказывает что оно того не будет стоить. Имеется пара сотня файлов, и комплитиь нужно смешанно - часть из них с параметрами, а часть нет. А так как для компиляции vhdl важен порядок, то эти отдельные .f файлы может чуть и помогут, но в целом ситуация конечно грустная.
Наоборот - чем более "извращенее" придумаете тем проще будет в последствии.
Ну пара сотен файлов это немного - можно тупо забить в локальном setup.tcl например так и не парится.
Код
proc com_module_abc {{mode ""}} {
  if {$mode!=""} {
    puts "$mode:  Compile module_abc"
    return
  }
  vcom -opt1 -opt2 arg2 \
    $::DSN/src/module1.vhd \
    $::DSN/src/module2.vhd
}
proc com_module_def {{mode ""}} { .. }

proc com_all {{mode ""}} {
  com_module_abc  $mode
  com_module_def  $mode
}

proc help {} {
  com_all "help"
}


Удачи! Rob.

Автор: Vengin Aug 15 2018, 08:07

Цитата(RobFPGA @ Aug 13 2018, 16:32) *
Это особенность TCL а не MdelSim. Параметром для proc (коими являются vcom/vlog ..) должен быть list аргументов - то есть когда вы пишете vcom -opt1 -opt2 agr2 file1 file2 то на вход vcom поступает vcom [list -opt1 -opt2 agr2 file1 file2]
Естественно если задать set arg "-2008 version.vhd" то это будет одна строка которая сама по себе в list не разобьется
тут надо извращаться например так:
Код
vcom [lappend [list [split $arg " "]] version.vhd]
Так как раз передавать через list и не получается:
Код
> vcom [list -2008 verions.vhd]
# ** Error (suppressible): (vcom-1902) Option "-2008 version.vhd" is either unknown, requires an argument, or was given with a bad argument.
В идеале удобнее всего работать через лист (один общий или несколько поменьше). И не надо этот же лист писать во временный файл и передавать его c опцией vcom -f f.tmp.
Пока мне в vcom удаётся скормить только "ручками прописанные" файлы с параметрами. Но чем мне не нравится такой подход:
Код
vcom -opt1 -opt2 arg2 \
  $::DSN/src/module1.vhd \
  $::DSN/src/module2.vhd
нельзя закомментировать какую-то строку/файл (т.к. комментируется всё до конца бэкслешей).
Кстати vcom Active-HDL позволяет такие вольности. И нормально хавает список файлов с составными строками аргументов типа "-opt1 file1"

Автор: Kluwert Aug 15 2018, 09:01

Слушайте, Моделсим, конечно, убожество ещё то. У меня по этому поводу в совё время даже язвительная статья на другом ресурсе была. Но, с другой стороны, без него сейчас никуда. Ну можно ещё DSPbuilder задействовать, но он удобен для ваяния алгоритмических вещей, "тупой" HDL-код лучше мучать в Моделсиме (ну или его урезанной версии - Квестасиме).

А по поводу всех этих ваших проблем с синтаксисом я, например, не заморачиваюсь даже особо: генерю вхолостую какую-нибудь кору, поставив галочку "сгенерить тестбенчы для Моделсим", дальше эти тестбенчи вместе с командным батничком (тоже терпеть не могу копаться в убогом моделсимовском gui) копирую себе и подставляю свои файлы. Всегда так работало, никаких проблем. Ещё учтите, что у Моделсима часто случается несварение желудка от верилоговского кода. Он по-моему нормально поедает только vhdl.

Автор: RobFPGA Aug 15 2018, 09:52

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

Цитата(Vengin @ Aug 15 2018, 11:07) *
Так как раз передавать через list и не получается:
Виноват - как говорится поспешиш людей насмешиш sad.gif
Правильнее наверное будет vcom {*}[list -2008 file1.vhd file2.vhd]

Цитата(Vengin @ Aug 15 2018, 11:07) *
Код
vcom -opt1 -opt2 arg2 \
  $::DSN/src/module1.vhd \
  $::DSN/src/module2.vhd
нельзя закомментировать какую-то строку/файл (т.к. комментируется всё до конца бэкслешей).
Тут уж уж выбирайте как проще - либо городить какую либо надстройку со структурой фалов и парсингом либо так побыстренькому. Мне это не мешает - не так уж и часто приходится коментить файлы в списке.

Цитата(Vengin @ Aug 15 2018, 11:07) *
Кстати vcom Active-HDL позволяет такие вольности. И нормально хавает список файлов с составными строками аргументов типа "-opt1 file1"
Увы нет в мире идеала. Хотя в этом случае я пердпочитаю единобразие - тогда не болит голова при смене интрументов. А то например привык использовать опцию -F file.f а ее оказывется в старых ModelSim (у заказчика) нет sad.gif Пришлось часть скриптов "упрощать"

Удачи! Rob.

Автор: Vengin Aug 15 2018, 10:37

Цитата(RobFPGA @ Aug 15 2018, 12:52) *
Правильнее наверное будет vcom {*}[list -2008 file1.vhd file2.vhd]
То что надо! yeah.gif

Цитата(Kluwert @ Aug 15 2018, 12:01) *
А по поводу всех этих ваших проблем с синтаксисом я, например, не заморачиваюсь даже особо: генерю вхолостую какую-нибудь кору, поставив галочку "сгенерить тестбенчы для Моделсим", дальше эти тестбенчи вместе с командным батничком (тоже терпеть не могу копаться в убогом моделсимовском gui) копирую себе и подставляю свои файлы. Всегда так работало, никаких проблем.
Работать-то работает. Но для большого количества файлов дейстивтельно быстрее получается компилировать не "поштучно" (на каждый файл свой vcom), а пачкой. Плюс всё равно мне нужно делать более сложный скрипт, чтобы учитывать разные конфигурации и прочие нюансы. Так что есть смысл заморочиться, да и полезно "для общего развития".

Автор: RobFPGA Aug 15 2018, 11:30

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

Цитата(Kluwert @ Aug 15 2018, 12:01) *
Слушайте, Моделсим, конечно, убожество ещё то. У меня по этому поводу в совё время даже язвительная статья на другом ресурсе была. Но, с другой стороны, без него сейчас никуда. Ну можно ещё DSPbuilder задействовать, но он удобен для ваяния ...
Конечно - язвительная статья это веский аргумент. Учтем!

Цитата(Kluwert @ Aug 15 2018, 12:01) *
... алгоритмических вещей, "тупой" HDL-код лучше мучать в Моделсиме (ну или его урезанной версии - Квестасиме).
Ха ха ха ... QuestaSim обрезанная версия ModelSim .. повеселили sm.gif

Цитата(Kluwert @ Aug 15 2018, 12:01) *
Ещё учтите, что у Моделсима часто случается несварение желудка от верилоговского кода. Он по-моему нормально поедает только vhdl.
Вы наверно готовите ему прокисший верилог код crying.gif

Удачи! Rob.

Автор: RobFPGA Aug 15 2018, 14:30

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

Цитата(Vengin @ Aug 15 2018, 11:07) *
... Кстати vcom Active-HDL позволяет такие вольности. И нормально хавает список файлов с составными строками аргументов типа "-opt1 file1"
Кстати! - совсем забыл - можно ведь и так над собой приколоться
Код
if {[llength [namespace which {vcom_}]]==0} {
  rename ::vcom vcom_

  proc ::vcom args {
    puts "Hook of vcom"

    # processing input options
    set cmd_line [list]
    
    for {set i 0} {$i < [llength $args]} {incr i} {
      set option [string trim [lindex $args $i]]
      switch -regexp -- $option {
        "-my_options1"  {
          lappend cmd_line [lindex $args [incr i]]]
        }
        "-my_options2"  {
          set sub_lst [lindex $args [incr i]]
          foreach sub_opt $sub_lst {
            lappend cmd_line $sub_opt
            # ...
          }
        default {
          lappend cmd_line $option
          # ...
        }
      }
    }
    vcom_ {*}$cmd_line
  }  
}
вставляете это в startup.tcl и получаете собственный уникальный vcom|vlog|... (c блэкджеком и ш...) sm.gif
Главное не забыть со временем про это smile3046.gif

Удачи! Rob.

Автор: AVR Aug 15 2018, 19:11

Цитата(Kluwert @ Aug 15 2018, 12:01) *
Слушайте, Моделсим, конечно, убожество ещё то. У меня по этому поводу в совё время даже язвительная статья на другом ресурсе была. Но, с другой стороны, без него сейчас никуда. Ну можно ещё DSPbuilder задействовать, но он удобен для ваяния алгоритмических вещей, "тупой" HDL-код лучше мучать в Моделсиме (ну или его урезанной версии - Квестасиме).

Если симулятор оценивать по GUI, то Modelsim убог, но что если любить его внутреннюю красоту? sm.gif
А вообще, я чего нередко из консоли дергаю без "междумордия", под тот же UVM.
И да, Questasim >> Modelsim, не наоборот.

Автор: Vengin Aug 16 2018, 07:27

Цитата(RobFPGA @ Aug 15 2018, 17:30) *
вставляете это в startup.tcl и получаете собственный уникальный vcom|vlog|... (c блэкджеком и ш...) sm.gif
Не до конца уловил смысл всех этих махинаций. Насколько я понял, этот скрипт позволит парсить некую сложную строку/лист аргументов $args, анализируя инидвидуальные опции/флаги при помощи switch -regexp (а также анализировать составные элементы/sub_lst как в "-my_options2"). Всё это в итоге компонуется в лист $cmd_line, который потом во flatten виде (поэлементно) передаётся на вход vcom, вроде так?
Но если я правильно понимаю, при однократном вызове vcom всё равно применит опции/аргументы все сразу ко всем файлам (а не каждому файлу свой параметр)? Т.е. если есть 10 файлов и, допустим один с флагом -2008, то все 10 файлов будут компилится с этим флагом. А это некорректно (не то, что надо).

И ещё немного оффтопик. RobFPGA, если не секрет, что используете для дебага TCL скриптов (я так думаю не просто текствые файлы интерпретатору скармливаете)? Я в своё время остановился на связке Eclipse+Komodo Remote Debugging Package.

Автор: RobFPGA Aug 16 2018, 08:07

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

Цитата(Vengin @ Aug 16 2018, 10:27) *
Не до конца уловил смысл всех этих махинаций. Насколько я понял, этот скрипт позволит парсить некую сложную строку/лист аргументов $args, анализируя инидвидуальные опции/флаги при помощи switch -regexp (а также анализировать составные элементы/sub_lst как в "-my_options2"). Всё это в итоге компонуется в лист $cmd_line, который потом во flatten виде (поэлементно) передаётся на вход vcom, вроде так?
Tcl позволяет подменить любой proc на свою реализацию. Для того чтобы подправит/изменить что то в поведении подменяемого proc, (ну или обрушить мозг коллеге блокируя какую либо опцию или выдавая черное за белое wink.gif)
Это всего лишь пример как можно порезвится в этом направлении. Добавить свои опции, развернуть список файлов в формат cmd строки, ну либо корректно распарсить сложный .f файл в вашем уникальном формате с несколькими запусками vcom_ для разных опций, и.т.д ... думаю Вы идею поняли biggrin.gif

Цитата(Vengin @ Aug 16 2018, 10:27) *
И ещё немного оффтопик. RobFPGA, если не секрет, что используете для дебага TCL скриптов (я так думаю не просто текствые файлы интерпретатору скармливаете)? Я в своё время остановился на связке Eclipse+Komodo Remote Debugging Package.
В основном хватает puts laughing.gif . Увы я не пишу профессионально на TCL. Для отладки больших и сложных скриптов иногда использую Komodo.

Удачи! Rob.


Автор: Tpeck Aug 16 2018, 08:46

Цитата(Vengin @ Jul 11 2018, 13:51) *
Ну, начать хотя бы с того, что GUI кривой. Для сравнения, в Active-HDL множество мелких вещей лично мне удобнее/быстрее делать через GUI/hotkeys. Более сложыне уже скриптами. В ModelSim пока даже многие мелкие вещи мне делать иногда проще в командной строке. Та же компиляция файлов, и симуляция ИМХО в ModelSim гораздо удобнее скриптом.

Немного оффтопа.
Подскажите, а что стало причиной перехода с Active-HDL на ModelSim?


Автор: Vengin Aug 16 2018, 08:49

Цитата(Tpeck @ Aug 16 2018, 11:46) *
Немного оффтопа.
Подскажите, а что стало причиной перехода с Active-HDL на ModelSim?
То, что у меня Active-HDL v9.1, а нужно компилить корки Xilinx Vivado 2017.4. Долго пытался, часть удалось, но думаю в этой версии Active-HDL не светит (а более новую найти и попробовать увы не удалось).

Автор: Vengin Aug 20 2018, 08:01

Опять небольшие грабли. Исходники открываются в режиме ReadOnly. Если открывать "обычным" способом (File -> Open), то файлы открываются и на запись. В то же время, когда файл открывается по другому (судя по всему внутренней командой edit), например, во время симуляции при дабл-клике в окнах Structure, Objects, Process и т.п. файл в окне Source открывается ReadOnly.
Вроде как есть специальная опция, отвечающая за это дело (ModelSim® SE User's Manua -> Chapter 17:Source Window -> Changing File Permissions):

Цитата
By default, files open in read-only mode even if the original source document file permissions allow you to edit the document. To change this behavior, set the PrefSource(ReadOnly) preference variable to 0.
Поменял через GUI (Tools -> Edit Preferences -> вкладка By Name -> Source -> ReadOnly = 0) - по-прежнему открываются в ReadOnly. Поменял в скрипте pref.tcl: set PrefSource(ReadOnly) 0 - ничего.

Может кто знает, как это побороть? Приходится каждый раз в окне Source делать правый клик и снимать флажок ReadOnly. Мелочь, но неприятно (тем более что по идее этого быть не должно).

Автор: Timmy Aug 20 2018, 09:33

Для косвенной передачи списков параметров в произвольную команду нужно использовать стандартную команду tcl eval:

Код
set arg "-2008 version.vhd"
eval vcom $arg
И никаких извращенийsm.gif.

Автор: Vengin Aug 20 2018, 09:56

Цитата(Timmy @ Aug 20 2018, 12:33) *
Для косвенной передачи списков параметров в произвольную команду нужно использовать стандартную команду tcl eval:
Код
set arg "-2008 version.vhd"
eval vcom $arg
И никаких извращенийsm.gif.
Действительно работает. А я (т.к. смысла команды eval до конца честно говоря не понимаю), пытался делать как в экзамплах, со всякими доп скобками:
Код
eval {vcom $arg}
eval "vcom $arg"
eval [list vcom $arg]
и всё выдавало ошибки. А тут было так просто! Спасибо, будем знать.

Автор: Kluwert Aug 21 2018, 20:00

Цитата(AVR @ Aug 15 2018, 22:11) *
И да, Questasim >> Modelsim, не наоборот.

Видимо что-то поменялось с тех времён, когда я последний раз юзал Квестасим. На тот момент Квестасим даже не понимал расширенного объявления входов и выходов в заголовках верилоговских модулей, в то время как даже урезанная альтеровская версия Моделсима прекрасно понимала объявления и в "старом" и в "новом" стиле. С тех пор к Квестасиму я потерял интерес.

Сейчас глянул на "Менторовский" сайт, да, теперь, типа, Квестасим в флагманах, ну рад за него.

Автор: dxp Aug 22 2018, 03:36

Мои 5 копеек. Насколько помню, квеста всегда была расширенной версией моделсима, по сути квеста = моделсим + верификационные шняжки.

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)