реклама на сайте
подробности

 
 
> Особенности ModelSim, и сопутствующие вопросы
Vengin
сообщение Jul 11 2018, 08:15
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 82
Регистрация: 7-02-07
Из: Беларусь, г. Минск
Пользователь №: 25 149



Добрый день. В очередной раз пытаюсь «пересеть» на 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?

Пожалуй хватит для начала для одного сообщения sm.gif. Хотелось бы услышать мнения общества по этому поводу.
И может заодно ответы на пару конкретных вопросов:
1) Есть ли где-то какой-то список/документация на «второстепенные» команды (API)?
2) Может есть команды «имитации» событий GUI (нажатия меню/иконок)?
3) Какой командой можно закрыть подокно (Wave Pane), открытое командой "WaveActivateNextPane {} 2" (без закрытия переоткрытия всего кона Wave)?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Vengin
сообщение Aug 13 2018, 12:12
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 82
Регистрация: 7-02-07
Из: Беларусь, г. Минск
Пользователь №: 25 149



Очередная странность. Надо скопмилить 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
 
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Aug 13 2018, 13:32
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!
Цитата(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.
Go to the top of the page
 
+Quote Post
Vengin
сообщение Aug 15 2018, 08:07
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 82
Регистрация: 7-02-07
Из: Беларусь, г. Минск
Пользователь №: 25 149



Цитата(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"
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Aug 15 2018, 14:30
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!
Цитата(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.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Vengin   Особенности ModelSim   Jul 11 2018, 08:15
- - AVR   Цитата(Vengin @ Jul 11 2018, 11:15) Пожал...   Jul 11 2018, 10:21
|- - Vengin   Цитата(AVR @ Jul 11 2018, 13:21) Вынужден...   Jul 11 2018, 10:51
|- - Tpeck   Цитата(Vengin @ Jul 11 2018, 13:51) Ну, н...   Aug 16 2018, 08:46
|- - Vengin   Цитата(Tpeck @ Aug 16 2018, 11:46) Немног...   Aug 16 2018, 08:49
- - Vengin   Cудя по отсутствию комментариев, придётся набивать...   Aug 3 2018, 11:44
|- - RobFPGA   Приветствую! Цитата(Vengin @ Aug 3 2018, ...   Aug 3 2018, 13:28
|- - Vengin   Ещё кстати, как вариант решения проблемы со startu...   Aug 5 2018, 10:25
- - AVR   Вот мой пример как работать с ModelSim: Тут и тес...   Aug 5 2018, 15:46
|- - Vengin   Цитата(RobFPGA @ Aug 13 2018, 16:32) Пара...   Aug 13 2018, 13:51
||- - RobFPGA   Приветствую! Цитата(Vengin @ Aug 13 2018,...   Aug 13 2018, 14:16
|- - Kluwert   Слушайте, Моделсим, конечно, убожество ещё то. У м...   Aug 15 2018, 09:01
||- - RobFPGA   Приветствую! Цитата(Kluwert @ Aug 15 201...   Aug 15 2018, 11:30
||- - AVR   Цитата(Kluwert @ Aug 15 2018, 12:01) Слуш...   Aug 15 2018, 19:11
||- - Kluwert   Цитата(AVR @ Aug 15 2018, 22:11) И да, Qu...   Aug 21 2018, 20:00
|- - RobFPGA   Приветствую! Цитата(Vengin @ Aug 15 2018,...   Aug 15 2018, 09:52
||- - Vengin   Цитата(RobFPGA @ Aug 15 2018, 12:52) Прав...   Aug 15 2018, 10:37
|- - Vengin   Цитата(RobFPGA @ Aug 15 2018, 17:30) вста...   Aug 16 2018, 07:27
|- - RobFPGA   Приветствую! Цитата(Vengin @ Aug 16 2018,...   Aug 16 2018, 08:07
- - Vengin   Опять небольшие грабли. Исходники открываются в ре...   Aug 20 2018, 08:01
- - Timmy   Для косвенной передачи списков параметров в произв...   Aug 20 2018, 09:33
|- - Vengin   Цитата(Timmy @ Aug 20 2018, 12:33) Для ко...   Aug 20 2018, 09:56
- - dxp   Мои 5 копеек. Насколько помню, квеста всегда была ...   Aug 22 2018, 03:36


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 20:31
Рейтинг@Mail.ru


Страница сгенерированна за 0.0145 секунд с 7
ELECTRONIX ©2004-2016