|
Симуляция multicycle на стадии RTL верификации, вопрос |
|
|
|
Mar 17 2014, 10:55
|
Участник

Группа: Свой
Сообщений: 65
Регистрация: 13-09-10
Из: Israel
Пользователь №: 59 464

|
Здравствуйте, Подскажите, пожалуйста, статью / методологию / инструмент по теме. Вкратце, есть большой ASIC проект, много клоков, много констрейнов. Проблема в том, чтобы на стадии RTL тестов выявить неправильные multicycle констрейны и/или несоответствие функционирования этим констрейнам. То есть, заставить симулятор вставить соответствующую задержку там где есть m.c. (и только там). Написал туманно, попробую на примере пояснить. Допустим, есть схема:
Во время симуляции вся комбинаторная логика работает за 0 сек. И если сигнал enable придет раньше чем нужно (из-за какой-либо ошибки), результат в регистре Flop_B будет все равно валидным. Значит тест ошибку не выявит. Вопрос, как, например в ModelSim, автоматически добавить в такой контур, Flop_A-->Flop_B, задержку эмулирующую multicycle. Или каким-то другим способм такое тестируется?.. Буду благодарен за любой совет  (на всякий случай отмечу, что знаю о том что это не заменяет GLS и последующие проверки; задача - выявить баги в проекте ДО синтезирования)
|
|
|
|
|
 |
Ответов
|
Mar 25 2014, 11:22
|

Местный
  
Группа: Свой
Сообщений: 426
Регистрация: 23-02-12
Пользователь №: 70 424

|
Цитата(Cordroy @ Mar 17 2014, 14:55)  Здравствуйте,
Подскажите, пожалуйста, статью / методологию / инструмент по теме.
Вкратце, есть большой ASIC проект, много клоков, много констрейнов. Проблема в том, чтобы на стадии RTL тестов выявить неправильные multicycle констрейны и/или несоответствие функционирования этим констрейнам. То есть, заставить симулятор вставить соответствующую задержку там где есть m.c. (и только там). при симуляции вставлять задержку не проблема... Правда это "не симулятор заставить", а вручную в RTL написать на сколько и что задерживать.... правда это вам никак не поможет верифицировать правильность STA констрейнов.... В общем случае, STA констрейны верифицировать\доказать нельзя. Есть правда некоторые косвенные возможности. - Пост-роут симуляция с SDF. Если не работает - неправильные констрейны использованы при SP&R. Правда, какой у вас при этом тест каверидж - никому не известно....и посчитать его нечем (т.е все ли тайминг пасы проверены во время прогона вашего тесбенча)..... - кое что можно верифицировать... Например Cadence Conformal кое что проверяет в STA констрейнах, особенно в сложных проектах (на непротеворечивость этих констрейнов, на их непересекаемость и т.п., но не на функиональную адекватность реальности.) - мой совет - имей ясное описание структуры проекта и тех мест где RTL дизайнер требует задать мультисайклы и т.п. (если он на это способен конечно  ). Ну и дальше - не лепи констрейны куда попало. Лутше вначале не иметь констрейнов (мультисайклов), а добавлять их по мере "всплытия" во время SP&R и по согласованию с RTL дизайнером. Кстати... все STA констрейны нужны исключительно для коректного SP&R, а не для функциональной верификации
|
|
|
|
|
Mar 25 2014, 11:48
|
Участник

Группа: Свой
Сообщений: 65
Регистрация: 13-09-10
Из: Israel
Пользователь №: 59 464

|
Цитата(Torpeda @ Mar 25 2014, 15:22)  при симуляции вставлять задержку не проблема... Правда это "не симулятор заставить", а вручную в RTL написать на сколько и что задерживать.... правда это вам никак не поможет верифицировать правильность STA констрейнов....
В общем случае, STA констрейны верифицировать\доказать нельзя. Есть правда некоторые косвенные возможности. - Пост-роут симуляция с SDF. Если не работает - неправильные констрейны использованы при реализации. Правда, какой у вас при этом тест каверидж - никому не известно....и посчитать его нечем (т.е все ли тайминг пасы проверены во время прогона вашего тесбенча)..... - кое что можно верифицировать... Например Cadence Conformal кое что проверяет в STA констрейнах, особенно в сложных проектах (на непротеворечивость этих констрейнов, на их непересекаемость и т.п., но не на функиональную адекватность реальности.) - мой совет - имей ясное описание структуры проекта и тех мест где RTL дизайнер требует задать мультисайклы и т.п. Ну и дальше - не лепи констрейны куда попало. Спасибо за ответ. Да, пост-роут с аннотацией делается, конечно, потом. Это и была методолоия до сих пор. Просто из-за сложностях в бэкенде, мы добавляем много "облегчающих" констрейнов, типа multicycle, false path, unbalanced clocks, и т.д. И это иногда на код написанный много лет назад. Проблема - как убедиться что ничего не испортилось, еще ДО синтеза и аннотации (которые занимают массу времени).
|
|
|
|
|
Apr 10 2014, 15:39
|

Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 1-03-05
Из: Spb
Пользователь №: 2 972

|
Цитата(Cordroy @ Mar 25 2014, 15:48)  Спасибо за ответ. Да, пост-роут с аннотацией делается, конечно, потом. Это и была методолоия до сих пор.
Просто из-за сложностях в бэкенде, мы добавляем много "облегчающих" констрейнов, типа multicycle, false path, unbalanced clocks, и т.д. И это иногда на код написанный много лет назад. Проблема - как убедиться что ничего не испортилось, еще ДО синтеза и аннотации (которые занимают массу времени). А почему не попробовали просто в нужном месте в RTL вставить задержку эквивалентную задержке при multicycle. На синтез это не повлияет, а тесты будут адекватней. Единственное: не проверял, как ваш симмулятор отреагирует на задержку больше периода клока. (по идеи он не должен выйти из always на новое событие фронта пока не выполнил текущий до конца ) В присвоении указать задержку, когда на приемном триггере должно появиться новое значение. Код always @(posedge clock) ... reg <= #n value //n= (multicycle-1)*clock_period - те задержку эквивалентную задержке при multicycle
--------------------
Насколько проще была бы жизнь, если бы она была в исходниках
|
|
|
|
|
Apr 13 2014, 05:25
|
Участник

Группа: Свой
Сообщений: 65
Регистрация: 13-09-10
Из: Israel
Пользователь №: 59 464

|
Цитата(NiOS @ Apr 10 2014, 18:39)  А почему не попробовали просто в нужном месте в RTL вставить задержку эквивалентную задержке при multicycle. Спасибо за ответ. Это первое же над чем думали. Проблема автоматически, в существующем большом коде, найти "нужное место". В начале поста я показал картинку для примера: один и тот же флоп может принимать данные и по multicycle контуру, и по обычному, без задержек (предположите что внутри облака просто mux). Т.е. чтобы поставить на его вход задержку, нужно знать функциональность логики (состояние mux'a). Автоматом (скриптом) пройтись по коду и добавить задержки очень сложно, я пока не представляю как. А метод, подобный тому что вы описали, обязательно будем использовать на стадии написания кода.
|
|
|
|
|
Apr 13 2014, 05:48
|

Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 1-03-05
Из: Spb
Пользователь №: 2 972

|
Цитата(Cordroy @ Apr 13 2014, 09:25)  Это первое же над чем думали. Проблема автоматически, в существующем большом коде, найти "нужное место". В начале поста я показал картинку для примера: один и тот же флоп может принимать данные и по multicycle контуру, и по обычному, без задержек (предположите что внутри облака просто mux). Я так понял, что вы писали в предположении, что есть те кто писал этот код и добавлял констрейны multicycle. А если код пришел как есть, то в принципе по самому констрейну, если его перепроверить тоже можно добавить такие задержки руками. Скриптом - не пройдет, тк он не проверит какой путь и где удобней вставить задержку. Как минимум вижу два варианта, даже для случая, который вы описали 1. Внутри есть mux (если он описан не через assign, а через always * - то также можно вставить задержку перед нужным присваиванием в пути (подобно как в регистре). * assign при это надо будет переписать через always * 2. По констрейну multicycle - видно что есть инициирующий триггер. И если он имеет только одно подключение через mux к нужному триггеру - то можно задержку присваивания перенести на инициирующий триггер, как задержку выдачи. Это конечно, не сделать с помощью скрипта, но эти два варианта при ручной проверки частично реализуют задачу проверки multicycle уже на уровне RTL.
--------------------
Насколько проще была бы жизнь, если бы она была в исходниках
|
|
|
|
|
Apr 13 2014, 05:53
|
Участник

Группа: Свой
Сообщений: 65
Регистрация: 13-09-10
Из: Israel
Пользователь №: 59 464

|
Цитата(NiOS @ Apr 13 2014, 08:48)  Это конечно, не сделать с помощью скрипта, но эти два варианта при ручной проверки частично реализуют задачу проверки multicycle уже на уровне RTL. В этом все дело - отсутствии автоматического метода. Речь идет о тысячах констрейнов, руками оччччень не хочется это делать.
|
|
|
|
Сообщений в этой теме
Cordroy Симуляция multicycle на стадии RTL верификации Mar 17 2014, 10:55 eugen_pcad_ru Для симуляции используйте модели, в которых привед... Mar 17 2014, 12:13 Cordroy Цитата(eugen_pcad_ru @ Mar 17 2014, 16:13... Mar 17 2014, 12:17 MadGarry В multicycle путях всегда есть инициирущее событи... Mar 17 2014, 12:17 MadGarry Ну или как вариант - если код написан на VHDL то и... Mar 17 2014, 12:22 Cordroy Цитата(MadGarry @ Mar 17 2014, 16:22) Ну ... Mar 17 2014, 12:36 eugen_pcad_ru 1 используйте модель после синтеза
2 используйте м... Mar 17 2014, 15:10 Cordroy Цитата(eugen_pcad_ru @ Mar 17 2014, 19:10... Mar 17 2014, 15:26 Shivers Вы пишете о верификации - так используйте SVA. Я о... Mar 18 2014, 02:03 Cordroy Цитата(Shivers @ Mar 18 2014, 06:03) Вы п... Mar 18 2014, 06:13  Torpeda Цитата(Cordroy @ Mar 25 2014, 15:48) Прос... Mar 25 2014, 11:54 Torpeda Цитата(Cordroy @ Mar 17 2014, 14:55) Подс... Apr 16 2014, 14:21 Cordroy Цитата(Torpeda @ Apr 16 2014, 17:21) Как ... Apr 17 2014, 07:34 lexx Совет: меняйте дизайн, никаких мальтисайклов. Дели... Apr 17 2014, 12:56 Fat Robot Это плохой совет. Особенно для low power, или когд... Apr 17 2014, 20:01
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|