Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как объяснить ModelSim, что clock глобальный?
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Среды разработки - обсуждаем САПРы
videoscan
Народ!
Работаю на Quartus 16. Пишу на VHDL. При симуляции на ModelSim столкнулся со следующей проблемой:
- ModelSim не может понять, что Clock в схеме глобальный. Этот Clock в проекте, путешествуя из модуля в модуль, называется по разному, но по сути остаётся одним и тем же сигналом(при разводке в кристалле превращается в один и тот же сигнал - я проверял и он является Global). Однако ModelSim этого не понимает с в каждой ипостаси дает этому сигналу свою задержку относительно исходного.
Как ModelSDim объяснить, что этот сигнал глобальный, и он не должен быть одномоментным, не смотря на то, что в других блоках он называется по другому и несколько раз переприсваивается.
iosifk
Цитата(videoscan @ Sep 24 2017, 19:52) *
Народ!
Работаю на Quartus 16. Пишу на VHDL. При симуляции на ModelSim столкнулся со следующей проблемой:
- ModelSim не может понять, что Clock в схеме глобальный. Этот Clock в проекте, путешествуя из модуля в модуль, называется по разному, но по сути остаётся одним и тем же сигналом(при разводке в кристалле превращается в один и тот же сигнал - я проверял и он является Global). Однако ModelSim этого не понимает с в каждой ипостаси дает этому сигналу свою задержку относительно исходного.
Как ModelSDim объяснить, что этот сигнал глобальный, и он не должен быть одномоментным, не смотря на то, что в других блоках он называется по другому и несколько раз переприсваивается.

1. У Вас что нет соглашения об именах сигналов? И что так сложно в редакторе текста заменить одно название на другое в десятке файлов?
2. "каждой ипостаси дает этому сигналу свою задержку" - это каким же образом Моделсим "дает"? Задержка формируется из списка связей после размещения проекта, а к этому Моделсим никакого отношения не имеет. Он получает все это из Квартуса.
3. А что Вы хотите увидеть на симуляции с задержками?
videoscan
Цитата(iosifk @ Sep 24 2017, 19:01) *
1. У Вас что нет соглашения об именах сигналов? И что так сложно в редакторе текста заменить одно название на другое в десятке файлов?
2. "каждой ипостаси дает этому сигналу свою задержку" - это каким же образом Моделсим "дает"? Задержка формируется из списка связей после размещения проекта, а к этому Моделсим никакого отношения не имеет. Он получает все это из Квартуса.
3. А что Вы хотите увидеть на симуляции с задержками?

1-2. См. рис. Каждый Clock здесь суть один и тот же сигнал, но спустившийся на один уровень ниже в иерархии. Конечно, если все сигналы назвать одинаково, этих задержек не будет, но это не всегда выполнимо.

3. Я хочу, что бы все события от моего глобального клока происходили в симуляции одномоментно.


Пока писал все это нашёл ответ в ModelSim User Manual. Оказывается никак эта проблема автоматически не решается. Предлагают самим следить за этим:







iosifk
Цитата(videoscan @ Sep 24 2017, 22:14) *
Я хочу, что бы все события от моего глобального клока происходили в симуляции одномоментно.

Так какая Вам симуляция нужна?
RTL или с задержками, после размещения проекта на кристалле?
videoscan
Цитата(iosifk @ Sep 24 2017, 20:27) *
Так какая Вам симуляция нужна?
RTL или с задержками, после размещения проекта на кристалле?

Нужна с задержками, после размещения проекта на кристалле, но сейчас Quartus и ModelSim ее не делает.
Поэтому я согласен на RTL, но с учетом того, что определённые сигналы являются глобальными в проекте и происходят всегда одномоментно. По-моему это естественное желание. У меня симуляция без этого всякую ерунду изображает.
Я думал, что если буду использовать IP ALTCLKCTRL это решит проблему, ан нет. Та же фигня.
iosifk
Цитата(videoscan @ Sep 24 2017, 22:36) *
Нужна с задержками, после размещения проекта на кристалле, но сейчас Quartus и ModelSim ее не делает.
Поэтому я согласен на RTL, но с учетом того, что определённые сигналы являются глобальными в проекте и происходят всегда одномоментно. По-моему это естественное желание. У меня симуляция без этого всякую ерунду изображает.
Я думал, что если буду использовать IP ALTCLKCTRL это решит проблему, ан нет. Та же фигня.

Тяжело! У Вас в голове какая-то странная каша. При RTL симуляции задержки вообще не учитываются. И для RTL симуляции Квартус не только не нужен, а даже вреден. Поскольку бесполезно жрет память. Сформируйте в тестбенче клок и подайте его на Ваш проект...

Чтобы запустить симулятор с задержками Моделсиму надо скормить файл задержек. Правда если МС установлет вместе с Ква, то может они сами договорились...
Но вот что хочу сказать. На кой черт Вам вообще нужны графики с задержками?
Если говорить о проекте после размещения, то при выполнении заданных констрейнов рассматривать графики с задержками для тысяч сигналов - это не реально. И после оптимизации компилятором там половина сигналов будет удалена или будет названа по-другому...
videoscan
Цитата(iosifk @ Sep 24 2017, 20:46) *
Тяжело! У Вас в голове какая-то странная каша. При RTL симуляции задержки вообще не учитываются. И для RTL симуляции Квартус не только не нужен, а даже вреден. Поскольку бесполезно жрет память. Сформируйте в тестбенче клок и подайте его на Ваш проект...

Чтобы запустить симулятор с задержками Моделсиму надо скормить файл задержек. Правда если МС установлет вместе с Ква, то может они сами договорились...
Но вот что хочу сказать. На кой черт Вам вообще нужны графики с задержками?
Если говорить о проекте после размещения, то при выполнении заданных констрейнов рассматривать графики с задержками для тысяч сигналов - это не реально. И после оптимизации компилятором там половина сигналов будет удалена или будет названа по-другому...

Я понимаю, что при RTL симуляции задержки не фигурируют, а все происходит по событиям, но кто просит ModelSim строку типа clk1 <= clk2 считать процессом и создавать на этом месте отдельное событие?
Что касается симуляции моего проекта на уровне задержек, Quartus мне прямо заявил, что моё семейство это не поддерживает (Array V).

Мне не нужны графики этих клоков, я знаю, что после разводки все они превратятся в один сигнал, но я хочу проверить логику работы схемы, а она получается неправильной.
iosifk
Цитата(videoscan @ Sep 24 2017, 22:57) *
Я понимаю, что при RTL симуляции задержки не фигурируют, а все происходит по событиям, но кто просит ModelSim строку типа clk1 <= clk2 считать процессом и создавать на этом месте отдельное событие?
Что касается симуляции моего проекта на уровне задержек, Quartus мне прямо заявил, что моё семейство это не поддерживает (Array V).

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

Если говорить о "логике работы", то это RTL и ничего более. Вы же скармливаете Моделсиму clk1 и clk2... Зачем? Уберите лишнее, отредактируйте исходники и все...
videoscan
Цитата(iosifk @ Sep 24 2017, 21:22) *
Если говорить о "логике работы", то это RTL и ничего более. Вы же скармливаете Моделсиму clk1 и clk2... Зачем? Уберите лишнее, отредактируйте исходники и все...


Не всегда это удобно и даже возможно, но что делать. Сейчас как раз этим и занялся.
iosifk
Цитата(videoscan @ Sep 24 2017, 23:34) *
Не всегда это удобно и даже возможно, но что делать. Сейчас как раз этим и занялся.

Так это Вы "по-Суворовски, через Альпы" проекты начинаете делать. Тут никто не виноват. Сначала пишется соглашение о названиях сигналов в проекте, потом блок-схема проекта, потом уже куча файлов на HDL...
Откуда в верхнем файле берутся разные клоки в одном клоковом домене?
И что для Вас "не удобно"?
videoscan
Цитата(iosifk @ Sep 24 2017, 21:38) *
Так это Вы "по-Суворовски, через Альпы" проекты начинаете делать. Тут никто не виноват. Сначала пишется соглашение о названиях сигналов в проекте, потом блок-схема проекта, потом уже куча файлов на HDL...
Откуда в верхнем файле берутся разные клоки в одном клоковом домене?
И что для Вас "не удобно"?

Блок-схему, я конечно нарисовал, но соглашение о названии сигналов подписать забыл. Сейчас разбираюсь.
iosifk
Цитата(videoscan @ Sep 25 2017, 00:00) *
Блок-схему, я конечно нарисовал, но соглашение о названии сигналов подписать забыл. Сейчас разбираюсь.

Завтра после 11 я буду на связи. Можем поговорить о Ваших проблемах.
andrew_b
Цитата(videoscan @ Sep 24 2017, 22:57) *
кто просит ModelSim строку типа clk1 <= clk2 считать процессом и создавать на этом месте отдельное событие?
"Просит" его об этом стандарт языка VHDL. Каждый драйвер порождает дельта-задержку со всеми вытекающими из этого нюансами.
warrior-2001
Именно дельта задержку! На картинке с моделсимом не указан масштаб. А там вероятно 1 пс.
Flip-fl0p
Цитата(warrior-2001 @ Sep 25 2017, 09:11) *
Именно дельта задержку! На картинке с моделсимом не указан масштаб. А там вероятно 1 пс.

Так а разве дельта задержку можно увидеть при увеличении масштаба ?
andrew_b
Цитата(warrior-2001 @ Sep 25 2017, 09:11) *
Именно дельта задержку! На картинке с моделсимом не указан масштаб. А там вероятно 1 пс.
Дельта-задержка -- это не задержка в привычном понимании, она не измеряется ни петасекундах, ни в чём. Дельта-задержка -- это гругря отражение причинно-следственной связи: сначала происходит что-то, после чего происходит ещё что-то, и т. д.
Например, сначала приходит фронт клока. Только после фронта -- после, а не в тот же момент -- происходит инкремент счётчика. После инкремента счётчика происходит срабатывание компаратора. Поскольку значения всех этих "после" на этапе RTL-симуляции принципиально неизвестны (так как до P'n'R ещё далеко), а учитывать их как-то надо, то и используется механизм дельта-задержки.

Ваша ситуация с клоком
Код
clk2 <= clk;

с точки зрения языка принципиально ничем не отличается от ситуациии с компаратором после счётчика
Код
Cnt5 <= '1' when (Counter = 5) else '0';


Драйвер есть? Есть. Получите дельта-задержку.
Nick Potapov
Может быть поможет использование псевдонимов?

alias clk_copy : std_logic is clk_original;
Flip-fl0p
А зачем вообще применять конструкцию типа:
Код
clk1 <= clk2

Какой в этом практический смысл ?
andrew_b
Цитата(Flip-fl0p @ Sep 25 2017, 10:07) *
А зачем вообще применять конструкцию типа:
Код
clk1 <= clk2

Какой в этом практический смысл ?

Ну я, например, так иногда делаю в тестбенчах, если мне нужны два разных клока одинаковой частоты.
warrior-2001
Цитата(Flip-fl0p @ Sep 25 2017, 09:13) *
Так а разве дельта задержку можно увидеть при увеличении масштаба ?

В QuestaSim отображается. Думаю, так же и в ModelSim.

А измеряется дельта задержка в переменной (TimeScale -t 1ps для сткрипта). Для корректной симуляции IP фирмы Intel(Altera) необходимо указывать 1 пс.
andrew_b
Цитата(warrior-2001 @ Sep 25 2017, 12:43) *
А измеряется дельта задержка в переменной (TimeScale -t 1ps для сткрипта).
Это не дельта-задержка.
videoscan
Цитата(iosifk @ Sep 24 2017, 21:12) *
Завтра после 11 я буду на связи. Можем поговорить о Ваших проблемах.


Сегодня до вечера занят. Только после 20 или завтра с утра.

Цитата(Flip-fl0p @ Sep 25 2017, 06:13) *
Так а разве дельта задержку можно увидеть при увеличении масштаба ?

Можно, нужно только перейти в режим отображения, который называется Expended time deltas mode.

yes
Цитата(Flip-fl0p @ Sep 25 2017, 09:13) *
Так а разве дельта задержку можно увидеть при увеличении масштаба ?

нужно перейти в режим просмотра дельтазадержек (что-то типа expanded time и т.п.)
upd: долго тормозил с ответом sm.gif

вот в моделсиме не сталкивался с тем, чтобы дельтазадержки тактового сигнала нарушали синхронность дизайна (нк то есть когда на данных проскакивает цикл), может проекты маленькие.. а вот в ncsim-e такое видел часто, особенно при миксед vhdl-verilog дизайне. насколько я понимаю, в sv приложили дополнительные усилия для того, чтобы тактовые сигналы гарантировано "щелкали" раньше
ну типа initial forever clk=~clk и т.п.
videoscan
Цитата(andrew_b @ Sep 25 2017, 05:28) *
"Просит" его об этом стандарт языка VHDL. Каждый драйвер порождает дельта-задержку со всеми вытекающими из этого нюансами.

Скажите, а у Verylog HDL по этой части по другому?
andrew_b
Не знаю. Я верилог "читаю со словарём", утирая слезящиеся глаза.
EugeneS
QUOTE (Nick Potapov @ Sep 25 2017, 09:51) *
Может быть поможет использование псевдонимов?

alias clk_copy : std_logic is clk_original;


применял, работает
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.