|
Временное моделирование, странности в работе |
|
|
|
May 14 2005, 12:25
|
Знающий
   
Группа: Свой
Сообщений: 646
Регистрация: 21-06-04
Пользователь №: 71

|
Цитата(Alexandr @ May 14 2005, 14:59) . Однако часть процессов для удобства работают по переднему фронту CLK, часть по заднему. Сделал все процессы по переднему и все заработало В общем и целом, при тактировании от одного фронта запас временной устойчивости схемы больше - может дело в этом ?
|
|
|
|
|
May 14 2005, 13:17
|
Знающий
   
Группа: Свой
Сообщений: 646
Регистрация: 21-06-04
Пользователь №: 71

|
Цитата(vetal @ May 14 2005, 15:41) В этом случае должны быть произвольные значения(гонки),но не 'X'. Модели триггеров могут проверять нарушения hold/setup и реагировать на них выдачей 'X' Это, конечно, зависит от библиотеки. Алтеровская так делает, а как у Xilinx не знаю.
|
|
|
|
|
May 14 2005, 13:50
|

Знающий
   
Группа: Модераторы
Сообщений: 804
Регистрация: 1-12-04
Пользователь №: 1 283

|
To vetal Попробовал тактировать все по заднему фронту.  Красные линии появились практически во всех цепях. Аж страшно стало. Поменял местами в базовой версии передние и задние фронты. Глюк не исчез, но переместился с одной цепи на другую, однако надо отдать должное общая работоспособность проекта восстановилась. To 3.14 Цитата Если моделируете в VHDL, можно выключить детектор метастабильности (ключики ModelSim), правда весь проект не будет анализироваться на метастабильность. Использую VHDL. А как выключить детектор метастабильности, можно поподробнее?
--------------------
Иван Сусанин - первый полупроводник
|
|
|
|
|
May 14 2005, 14:25
|

Гуру
     
Группа: Модераторы
Сообщений: 2 095
Регистрация: 27-08-04
Из: Россия, СПб
Пользователь №: 553

|
Цитата Попробовал тактировать все по заднему фронту.  Красные линии появились практически во всех цепях. Аж страшно стало. Поменял местами в базовой версии передние и задние фронты. Глюк не исчез, но переместился с одной цепи на другую, однако надо отдать должное общая работоспособность проекта восстановилась. Странности какие-то. Думаю, что дело тут в библиотете. В окне DataFlow можно попробовать более детально выяснить причину возникновения 'X', но трудоемкая это работа.
|
|
|
|
|
May 14 2005, 18:44
|
Участник

Группа: Свой
Сообщений: 48
Регистрация: 14-04-05
Пользователь №: 4 146

|
Цитата(Alexandr @ May 14 2005, 14:59) Не поверите - дело оказалось вот в чем. В проекте есть несколько процессов, все синхронные, тактируются одним CLK. Однако часть процессов для удобства работают по переднему фронту CLK, часть по заднему. Сделал все процессы по переднему и все заработало  . Видимо это какое-то ограничение ISE или ModelSim, потому как более ничего не менял. Может кто объяснит в чем дело? На самом деле, при таком построении проекта никакого криминала нет, и ModelSim здесь не виноват (временную модель то генерит ISE). Однако не ясен один момент: устанавливаете ли Вы временные ограничения при трансляции проекта в кристалл или нет. Поскольку Ваш проет работает только одной тактовой частоты, то выполнение этих ограничений (с вероятностью 99%) автоматически даст положительный результат. При трансляции в кристалл анализируется как поведение тактовой частоты, так и поведение логики итриггеров, включая анализ hold/setup. Ниже прилагаю фрагмент ucf-файла для Fт=10МГц. # -------------------------- # FROM:TO TIME-SPECs # -------------------------- # FROM:TO стиль временных ограничений может быть использован для определения путей между # группами. ПРИМЕЧАНИЕ: Ключевые слова: RAMS, FFS, PADS, and LATCHES определены предварительно # временные группы (TIMEGRP) используются, чтобы определить все элементы каждого типа в проекте. TIMEGRP RFFS = RISING FFS ("*"); // создает группу триггеров, работающих по фронту RFFS TIMEGRP FFFS = FALLING FFS ("*"); // создает группу триггеров, работающих по срезу FFFS TIMESPEC TSF2F = FROM : FFS : TO : FFS : 50 ns; // Триггеры, работающие по одинаковому перепаду TIMESPEC TSR2F = FROM : RFFS : TO : FFFS : 25 ns; // фронт к срезу TIMESPEC TSF2R = FROM : FFFS : TO : RFFS : 25 ns; // срез к фронту
|
|
|
|
|
May 15 2005, 18:47
|

Знающий
   
Группа: Свой
Сообщений: 541
Регистрация: 11-04-05
Из: Москва
Пользователь №: 4 045

|
Предыдущий оратор, наверно прав. Вы просто превышаете частотные ограничения при моделировании - попробуйте уменьшить частоту при временном моделировании (относительно той, что выдал ISE), например, в 2 раза. Или можно попробовать не цеплять SDF-ы (я иногда этим пользуюсь - при этом не учитывается большинство задержек, а схема - такая же, как будет в кристалле). Если все заработает - то боритесь с задержками.
Вот если в проекте несколько тактовых сигналов (не связанных), тогда при временном моделировании просто необходимо отключать "детектор метастабильности" ((С) 3.14, как это точно в моделсиме называется на память не скажу). Поскольку иначе при пересечении клоковых доменов начинают возникать X-ы, даже, если применять асинхронные FIFO, подтверждения и т.п.
--------------------
Дурак, занимающий высокий пост, подобен человеку на вершине горы - все ему кажется маленьким, а всем остальным кажется маленьким он сам. /Законы Мерфи/
|
|
|
|
|
Jun 3 2005, 06:15
|
Частый гость
 
Группа: Свой
Сообщений: 77
Регистрация: 17-05-05
Из: Красноярск
Пользователь №: 5 108

|
Цитата(Alexandr @ May 14 2005, 17:43) Использую ISE 6.3 и ModelSim 5.8 Проблема вот в чем. Написал код на VHDL. Провел функциональное моделирование. Все нормально. Запускаю временное (которое Simulate Post-Place & Route VHDL Model) и в некоторых местах появляются красные полоски вместо сигналов. По их месту и характеру понимаю, что пропадает один импульс. Ввожу дополнительный контакт в порт, подключаю его к этой цепи, чтобы посмотреть когда он пропадает И..... Все нормально работает, все красные линии исчезают и критическая цепь выглядит как надо. Убираю контакт из порта - все как прежде не работает. Что делать? Ваше мнение. Наложить временные ограничения. Думаю конструкция PERIOD на clk здесь будет вполне уместна. И еще, для того чтобы посмотреть внутренние сигналы при моделировании вовсе не обязательно вводить дополнительные порты. Там есть окно workspace, если в это окне поставить курсор на Ваш блок (по умолчанию UUT), то в окне Objects должны появиться все сигналы, которые есть внутри блока.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|