Перейти к содержанию
    

Временной анализ в QuestaSim

Создаю проект в FPGA Advantage, прописываю логику, пишу тестовое окружение, все это компилируется, в QuestaSim логика отлично работает. Без сучка без задоринки, как говорится.

Загоняю проект (без тестового окружения, естественно) в Leonardo Spectrum, генерирую нетлист формата verilog, тут же генерирую SDF файл с задержками по элементам (технологию беру SCL05u, она там дана в качестве примера). В FPGA Advantage через Add-existing files добавляю нетлист, ставлю ему опции default view и gate level, потом ему через Properties в закладке Simulation добавляю .sdf файл задержек. Запускаю моделирование - ругается:

Warning: (vsim-SDF-3261) C:/FPGAdv82LSPS/Hds/work/my_project1/my_project_lib/ls/and_or_arch/netlists/and_or_arch.sdf(<здесь номер строки>): Failed to find matching specify module path

Ругается в .sdf на строки с IOPATH. В строках с PORT вроде как все читает нормально, если там поставить ненулевые числа, то задержки будут проявляться на графиках. Других строк, определяющих задержки, кроме IOPATH и PORT в .sdf файле нет. В остальном моделирование идет нормально, т.е. логика работает правильно.

 

Подскажите, может я что-то не так делаю или пропустил какой-то шаг?

Изменено пользователем LiNED

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я был бы очень рад если бы мне подарили самый простенький пример проекта, в котором все было бы правильно подключено и запускалось бы. Так хоть я мог бы попытаться запустить его у себя, и уже делать выводы по результатам: или компилятор битый, или код не такой сгенерен, или еще чего... читал много документации по SDF, пытался гуглить по коду ошибки, но там гроб - на 10 страниц поиска один и тот же случай, который к тому же вообще для меня не понятен . . . А если смотреть по синтаксису, то SDF и verilog вроде как соответствуют друг другу полностью

Изменено пользователем LiNED

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У вас не к тому уровню иерархии sdf цепляется. Либо ищите где это можно вписать в вашем каде, либо попробуйте прямо в топ левел верилог файле указать

$sdf_annotate("путь",топлевел.модуль,,,"maximum",,);

где путь -путь к файлу Sdf, топлевел.модуль -иерархия до точки привязки sdf (начиная с "модуль"), ну и maximum/minimum/typical - это какая температурная модель будет использоваться. Опущенные параметры - ищите в мануалах, я их не использую и поэтому не помню.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хотел бы я, чтобы все было так просто. Вот нетлист для проекта из одной ячейки:

module and_or ( in1, in2, in3, in4, outM );
    input in1;
    input in2;
    input in3;
    input in4;
    output outM;

    ao22 ix5 (.Y (outM), .A0 (in4), .A1 (in3), .B0 (in2), .B1 (in1));
    initial begin
      $sdf_annotate("C:/FPGAdv82LSPS/Hds/work/my_project1/my_project_lib/ls/and_or_arch/netlists/and_or_arch.sdf", and_or);
    end
endmodule

module ao22 ( Y, A0, A1, B0, B1 );

    output Y;
    input A0;
    input A1;
    input B0;
    input B1;

    wire nx0, nx2;

    and (nx0, B0, B1);
    and (nx2, A0, A1);
    or (Y, nx0, nx2);
endmodule

 

И .sdf файл

 

(DELAYFILE
(SDFVERSION "2.0")
(DESIGN "and_or")
(DATE "02/06/12 11:17:31")
(VENDOR "Exemplar Logic, Inc., Alameda")
(PROGRAM "LeonardoSpectrum Level 3")
(VERSION "2008a.5")
(DIVIDER /)
(VOLTAGE)
(PROCESS)
(TEMPERATURE)
(TIMESCALE 1 ns)
(CELL
(CELLTYPE "ao22")
(INSTANCE ix5)
(DELAY
  (ABSOLUTE
   (PORT A0 (::0.00) (::0.00))
   (PORT A1 (::0.00) (::0.00))
   (PORT B0 (::0.00) (::0.00))
   (PORT B1 (::0.00) (::0.00))
   (IOPATH A0 Y (::0.22) (::0.26))
   (IOPATH A1 Y (::0.24) (::0.30))
   (IOPATH B0 Y (::0.15) (::0.18))
   (IOPATH B1 Y (::0.16) (::0.21)))))
)

 

Если взять его и скомпилировать прям так, то мне QuestaSim выдаст ошибки, про которые я писал в заголовке. Вырезка из транскрипта:

# Loading timing data from C:/FPGAdv82LSPS/Hds/work/my_project1/my_project_lib/ls/and_or_arch/netlists/and_or_arch.sdf
# ** Warning: (vsim-SDF-3261) C:/FPGAdv82LSPS/Hds/work/my_project1/my_project_lib/ls/and_or_arch/netlists/and_or_arch.sdf(22): Failed to find matching specify module path.
# ** Warning: (vsim-SDF-3261) C:/FPGAdv82LSPS/Hds/work/my_project1/my_project_lib/ls/and_or_arch/netlists/and_or_arch.sdf(23): Failed to find matching specify module path.
# ** Warning: (vsim-SDF-3261) C:/FPGAdv82LSPS/Hds/work/my_project1/my_project_lib/ls/and_or_arch/netlists/and_or_arch.sdf(24): Failed to find matching specify module path.
# ** Warning: (vsim-SDF-3261) C:/FPGAdv82LSPS/Hds/work/my_project1/my_project_lib/ls/and_or_arch/netlists/and_or_arch.sdf(25): Failed to find matching specify module path.
# ** Note: (vsim-3587) SDF Backannotation Successfully Completed.

При этом если я, скажем, внезапно переименую один из портов (порт B1 на B например), то транскрипт будет выглядеть по-другому:

# ** Warning: (vsim-SDF-3251) C:/FPGAdv82LSPS/Hds/work/my_project1/my_project_lib/ls/and_or_arch/netlists/and_or_arch.sdf(21): Failed to find port '/and_or/ix5/B1'.
# ** Warning: (vsim-SDF-3261) C:/FPGAdv82LSPS/Hds/work/my_project1/my_project_lib/ls/and_or_arch/netlists/and_or_arch.sdf(22): Failed to find matching specify module path.
# ** Warning: (vsim-SDF-3261) C:/FPGAdv82LSPS/Hds/work/my_project1/my_project_lib/ls/and_or_arch/netlists/and_or_arch.sdf(23): Failed to find matching specify module path.
# ** Warning: (vsim-SDF-3261) C:/FPGAdv82LSPS/Hds/work/my_project1/my_project_lib/ls/and_or_arch/netlists/and_or_arch.sdf(24): Failed to find matching specify module path.
# ** Warning: (vsim-SDF-3251) C:/FPGAdv82LSPS/Hds/work/my_project1/my_project_lib/ls/and_or_arch/netlists/and_or_arch.sdf(25): Failed to find port '/and_or/ix5/B1'.
# ** Note: (vsim-3587) SDF Backannotation Successfully Completed.

Отсюда я и делаю вывод, что он как минимум ищет эти порты в правильных местах. Более того, сами порты он находит прекрасно (коль скоро он не жалуется на 18-21 строки), он не находит путей между этими портами. Это даже если не брать в расчет все те способы и варианты, которыми я пытался подключить SDF ко всему подряд что есть в проекте...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А мне все же кажется, что надо было цеплять так:

$sdf_annotate("C:/FPGAdv82LSPS/Hds/work/my_project1/my_project_lib/ls/and_or_arch/netlists/and_or_arch.sdf", and_or.ix5);

и не забывайте, что температура у вас - 27 градусов, т.е. typical в таком использовании

попробуйте

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А мне все же кажется, что надо было цеплять так:

$sdf_annotate("C:/FPGAdv82LSPS/Hds/work/my_project1/my_project_lib/ls/and_or_arch/netlists/and_or_arch.sdf", and_or.ix5);

и не забывайте, что температура у вас - 27 градусов, т.е. typical в таком использовании

попробуйте

Пробовал, результат тот же. Порты кушает, пути - нет.

Выбор задержек выставлен уже в самом симуляторе в maximum, просто потому что в LeonardoSpectrum, который у меня генерит SDF файл, только для максимума и ставит временные задержки. Если ставить typical:

$sdf_annotate("C:/FPGAdv82LSPS/Hds/work/my_project1/my_project_lib/ls/and_or_arch/netlists/and_or_arch.sdf", and_or.ix5, , ,"typical");

то оно вместо всех ошибок просто проругается на NULL values:

# Loading timing data from C:/FPGAdv82LSPS/Hds/work/my_project1/my_project_lib/ls/and_or_arch/netlists/and_or_arch.sdf
# ** Warning: (vsim-SDF-3924) C:/FPGAdv82LSPS/Hds/work/my_project1/my_project_lib/ls/and_or_arch/netlists/and_or_arch.sdf: Out of 8 SDF statements, 8 had null values.
# ** Note: (vsim-3587) SDF Backannotation Successfully Completed.

Попробовал выставить в SDF в поля для typical цифры - получил все те же четыре ошибки с "Failed to find matching specify module path".

 

Среди кипы пересмотренных страниц, документов и форумов замечал упоминание о том, что якобы в FPGA Compiler II временные задержки внутри ячейки то ли опускаются по умолчанию, то ли не учитываются вообще, но никаких подтверждений или настроек на эту тему в своем FPGA Advantage не нашел, может вы что-то слышали по этому поводу?

И здесь же на форуме читал о том, что QuestaSim 10.0с , которую я и использую, тоже имеет свои заморочки. Версию 6.4 увы поставить себе не могу, может в глубине 10.0с есть какие-то настройки (кроме modelsim.ini файла), которые надо дополнительно подкрутить, чтобы все заработало?

Чесслово, меньше всего хочется обвинять во всем САПРы (тем более что с удалением поддержки времянок им было бы место на помойке), но я вообще не вижу ошибок в двух строках кода, сгенерированного автоматикой и сверенного с документацией по синтаксису и правилам соответствия SDF и verilog :crying:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

меньше всего хочется обвинять во всем САПРы (тем более что с удалением поддержки времянок им было бы место на помойке)

 

Вы знаете, я первый раз слышу, чтобы SDF-файл подключали к нелисту после синтеза. Проверку "времянок" обычно делают после трассировки

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы знаете, я первый раз слышу, чтобы SDF-файл подключали к нелисту после синтеза. Проверку "времянок" обычно делают после трассировки

Содержание подключаемого SDF файла у вас перед глазами. Я не сам его рисовал, у LeonardoSpectrum есть библиотеки технологий, в которых некоторые стандартные задержки по элементам прописаны, и этот файл был сгерерирован на основе этих задержек автоматически. Естественно, о достоверности тут речи не идет, т.к. не было разводки/трассировки платы, не было экстракции. Я могу с уверенностью сказать, что задержки дорожек как раз будут писаться в строки PORT, которые как раз прекрасно читаются, и при моделировании это видно. Но без возможности прочесть задержки на самих элементах, с чем как раз и возникают проблемы, трассировку выполнять бессмысленно.

 

Лишний раз уточню, что меня в текущей теме волнует совсем не достоверность SDF файла, и не соответствие полученной модели реальному устройству, а возможность пройти цепочку проектирования от начала до конца, на примере любого простого устройства, то есть это:

поведенческое описание(чистая логика) -> моделирование и отладка -> создание нетлиста на основе некоторой технологии -> моделирование с учетом задержек по элементам, оптимизация -> трассировка, экстракция паразитных параметров, расчет задержек по соединениям -> моделирование с учетом всех задержек (и элементов, и дорожек), коррекция топологии при необходимости -> генерация GDSII файла для производства устройства кремниевых мастерских.

Пока этот маршрут не будет проложен с имеющимися инструментами, о реализации каких-либо "боевых" проектов не может быть и речи. На данный момент встала проблема с подключением SDF, для её решения я и создал эту тему.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вроде нашел частичное решение проблемы, после особо тщательного вчитывания в документацию квесты по SDF to verilog соответствиям и в синтаксис команды vsim. Флаг +sdf_iopath_to_prim_ok заставляет компилятор при ненахождении описанного пути применять задержку к выходному порту этого пути. Но это полумера, если будет несколько таких путей (как у меня сейчас), то будут получаться нехорошие вещи. В данном случае с этим флагом он берет в качестве задержки последний IOPATH, который встретил в SDF файле, что, вообще говоря, не есть хорошо, т.к. по длительности есть пути и побольше.

Есть еще, конечно, альтернатива - использовать DEVICE вместо IOPATH, но эта опция не учитывает разное время распространения сигнала от разных входов. Да и как заставить Леонардо делать правильный SDF для этого - тоже вопрос.

 

В принципе, хотя бы в отношении IOPATH вопрос можно считать условно решенным. Сейчас попробую устройство пострашнее, счетчик какой-нибудь, попробую, может он на что-то еще ругаться будет...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пожалуй, я погорячился: Путь вы действительно указали правильно, поскольку: (DESIGN "and_or"). И с температурой вам надо указывать maximum, поскольку на другие нет цифр: (::0.24).

К сожалению, больше ничего в голову не приходит.

 

p.s.

Правда, есть еще отличие с имеющимися у меня нетлистами в плане синтаксиса: отдельные селлы заключаются в конструкцию `celldefine -`endcelldefine, но насколько это критично я не знаю.

заключите модуль ao22 в эту конструкцию, может каду надо явно указать что это отдельный селл для беканнотейта.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробовал `celldefine -`endcelldefine применять, но никакой реакции. В документации Квесты этот параметр упоминается исключительно в сочетании с понятием Code Coverage. Насколько я понимаю, Code Coverage - проверка на то, насколько полно тестовое окружение проверяет тестируемую ячейку. Модули, заключенные в `celldefine -`endcelldefine, по умолчанию не обрабатываются этой функцией.

 

На самом деле у меня растет уверенность, что во всем таки виноват LeonardoSpectrum. Сейчас взял счетчик прямо из примеров в самом FPGA Advantage, пропустил через Леонардо с минимумом оптимизаций, с сохранением иерархии, в общем чтобы только самый нижний уровень переделал под технологию. Сгенерил он мне нетлист и sdf. Я уже даже не знаю, смеяться или плакать над вот таким чудом(запускал со включенной опцией +sdf_iopath_to_prim_ok):

# ** Warning: (vsim-SDF-3260) F:/FPGA_WORKS_DESIGN/HDS/timer/tutorial_ref/TIMER_Vlog/ls/Timer/netlists/Timer_full_hierarchy.sdf(32): Nothing to which to annotate IOPATH in module.
# ** Warning: (vsim-SDF-3261) F:/FPGA_WORKS_DESIGN/HDS/timer/tutorial_ref/TIMER_Vlog/ls/Timer/netlists/Timer_full_hierarchy.sdf(32): Failed to find matching specify module path.

Также он начал браковать вот такую конструкцию:

 (TIMINGCHECK
   (SETUP D (posedge CK) (0.30))
   (HOLD D (posedge CK) (0.30))))

выдает вот такие две одинаковые ошибки:

# ** Warning: (vsim-SDF-3262) F:/FPGA_WORKS_DESIGN/HDS/timer/tutorial_ref/TIMER_Vlog/ls/Timer/netlists/Timer_full_hierarchy.sdf(288): Failed to find matching specify timing constraint.
# ** Warning: (vsim-SDF-3262) F:/FPGA_WORKS_DESIGN/HDS/timer/tutorial_ref/TIMER_Vlog/ls/Timer/netlists/Timer_full_hierarchy.sdf(289): Failed to find matching specify timing constraint.

Проверил код, соответствующих такой конструкции $setup и $hold строчек по всему нетлисту не обнаружил. Вот и думай теперь, то ли я чего недопонимаю, то ли где опцию какую не поставил, то ли у Леонардо действительно так мастерски генерирует файлы что они друг с другом не совпадают =_=

Он еще EDIF файлы может генерировать, как подключить такой файл с SDF в Квесту чтобы он скомпилировался? А то FPGA, похоже, этого делать не умеет

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

>Failed to find matching specify timing constraint.

внутри вашего модуля ао22 действительно пропущена конструкция specify - endspecify с описанием всех констрейнов (сетапов, холдов и задержек путей). Возможно, это корень обеих проблем, ведь фактически вы используете неотхарактеризованный библиотечный элемент.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот и я о том же. Все же сейчас проскочу этот этап, попытаюсь развести схему в топологии. Возможно по пути будет способ каким-то образом дополнить нетлист или сгенерировать новый на его основе. Но все равно как-то рвет шаблон тот факт, что по одной и той же схеме САПР сразу делает нетлист и sdf, и они не вяжутся друг с другом никак.

Позже отпишусь что получится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не ручаюсь, что решит проблему, но попробовать стоит. Попробуйте аннотировать sdf не системным таском в нетлисте, а опцией команды запуска симулятора

vsim -sdftyp /the_instance_name/=the_sdf_file_name.sdf work.tb_top

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хотел бы я, чтобы все было так просто. Вот нетлист для проекта из одной ячейки:

 

Все очень просто, ув. Watson!!! Будьте проще!

 

1. Для начала откройте _IEEE Standard Verilog Hardware Description Language(2001) на стр 296 и посмотрите что такое sdf_annotate и какие там параметры ;)

 

2. Посмотрите на свой module ao22. You create THREE !!! (and, and, or) primitives, которые Synthesis Tool должен соеденить wires. Each interconnect wire SHOULD BE ANNOTATED.

 

In SDF, вы указываете Thru PATH Delay (A0 -> Y) (IOPATH A0 Y (::0.22) (::0.26)), который видимо благодаря high level of optimization, хавает Questa Sim, но не хавает Leonardo Spectrum. Кроме того, судя по вашему SDF, вам следует юзать MAXIMUM Delays

 

3. To Shivers: SDF "Minimum", "Typical", "Maximum" это соответсвенно Interconnect Delays for BEST, Typical, WORST Conditions. Each condition depends on PVT = Process, Voltage, Temperature, которые беруться из либы и комбинируются at Synthesis and engaged in Static Timing Analysis. For instance, WORST Condition - MIN gating Voltage, Maximum Temperature :rolleyes:

 

PS: Я не уверен, что это будет решением все ваших проблем :laughing: , но стоит попробовать задать Interconnect delays between each gate, etc

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...