Jump to content

    
Sign in to follow this  
justontime

Реализовать небольшую задержку внутри ПЛИС

Recommended Posts

Хм, вроде казалось все просто, но выскочила глупая проблема...

 

Документация вроде говорит, что явно указанная lcell не должна автоматически убираться Quartus'ом. Соответственно, я добавил в код (VHDL) нужный мне lcell, однако при компиляции было сказано, что он Synthesized away...

Ладно, решил просто отключить такую оптимизацию для всего проекта в целом. Для начала, очередной раз обнаружил, что 16-ый Quartus изменился в отношении интерфейса - соответствующие настройки нашлись не в Settings/Analysis & Syntesis, а в Settings/Compiler settings.

 

Но это ладно - главное, что там уже стоит Removes redundant logic cells - Off ! Что дальше с этим делать - ума не приложу :(

 

[update] - реально какая-то фигня... Попробовал слегка по другому - сделал просто сигнал и добавил к нему атрибуты:

 

attribute keep : boolean;

attribute keep of Delay12 : signal is true;

 

Сама Altera такой пример приводит, а оно почему-то все равно Synthesized away...

 

По схеме у Вас RS триггер нарисован. И используется явно в противоречии с таблицей истинности. Примитив dff еще никто не отменял.

Поставьте 9 Квартус. Его будет достаточно под такое творчество.

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

lcell_xor.v

Share this post


Link to post
Share on other sites
Потому что у вас формируется два сигнала из одного.

 

Да вроде делаю в точности так, как увидел во многих практически идентичных примерах...

 

 

Поставьте 9 Квартус.

В чем именно поведение старого Quartus'а в данном отношении будет отличаться ? Я специально смотрел документацию именно к новому, и там вроде ничего не изменилось... В любом случае, нужная мне серия FPGA поддерживается только в относительно новых версиях.

 

А вообще сейчас уже даже интересно не просто решение конкретной задачи (можно извернуться и другими способами), а хочется понять, почему оно работает не так, как написано ???

 

Share this post


Link to post
Share on other sites

Я 16-й (Prime) Quartus поставил, потыкался в него. Не понравилось, удалил. Вернулся к 13.1-му. Как по мне, самый удобный и красивый, несмотря на номер. :rolleyes:

Share this post


Link to post
Share on other sites
Я 16-й (Prime) Quartus поставил, потыкался в него. Не понравилось, удалил. Вернулся к 13.1-му. Как по мне, самый удобный и красивый, несмотря на номер. :rolleyes:

RTL просмотрщик там ужас. То-ли я не разобрался где эта хитрая галочка, то ли её действительно нет. Но когда он один файл описания раскидывает на несколько страниц, да ещё и все регистры раскидывает по одному, а не группирует, отпадает всякое желание его включать (RTL просмоторщик). А иногда полезно глянуть что там насинтезировал Quartus.....

 

Вот в 15 Quartus'е всё нормально с этим

 

image.png

 

 

 

А вот так показывает 13 Quartus..... Все описание разбил на страницы:

 

image.png

 

 

Да ещё и элементы, которые образуют единую группу он "разбил". В итоге получаются огромные RTL модели которые сложно просматривать:

 

image.png

 

Share this post


Link to post
Share on other sites
Да вроде делаю в точности так, как увидел во многих практически идентичных примерах...

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

Share this post


Link to post
Share on other sites
Смысл в том, чтобы добавить ненужный сигнал, который не позволит Квартусу упростить схему.

Я понимаю, что вопрос к Altera, а не к Вам :), но ведь у них написано:

 

An LCELL buffer always consumes one logic cell. It is not removed from a project during logic synthesis.

 

Так какого фига она убирается ???

Share this post


Link to post
Share on other sites

Убирается, если никак не участвует в выходных сигналах с ПЛИС. Если ничего выдавать не надо, то и делать незачем.

Share this post


Link to post
Share on other sites
Убирается, если никак не участвует в выходных сигналах с ПЛИС. Если ничего выдавать не надо, то и делать незачем.

Что-то не понимаю... Напрямую, естественно, не выдает, но в конце концов сигнал, в котором, в т.ч., принимала участие задержка на этой lcell, выходит наружу.

Похоже, я не понимаю тут что-то совсем принципиальное :(

 

Share this post


Link to post
Share on other sites
Settings/Analysis & Syntesis/More Analysis

там галки Removes redundant LCELL и Registers в положение Off

Подозреваю что это не то. Нужно поставить Ignore LCELL Buffers в положение off, наверное это в том же меню.

Share this post


Link to post
Share on other sites
Подозреваю что это не то. Нужно поставить Ignore LCELL Buffers в положение off, наверное это в том же меню.

Эта опция по умолчанию в OFF, и у меня она так и оставлена...

 

Итак, посыпаю голову пеплом и прошу прощения у всех за то, что компасировал мозги... При внимательном изучении относящегося к проблеме куска дизайна был обнаружен утерянный not (довольно далеко от непосредственно ячейки задержки), который действительно приводил к тому, что кусочек схемы, где используется задержка, все время генерил 0 !!! Как назло, этот 0 не приводил к полной остановке остальных частей схемы, поэтому Quartus больше никаких подозрительных сообщений не выводил (типа того, что пин застрял в одном положении). Блин - не нужно было программировать в 12 ночи после бокала вина :)

После исправления lcell остается на месте, все вроде выглядит так, как и требовалось...

Еще раз спасибо всем откликнувшимся !

Share this post


Link to post
Share on other sites
Я понимаю, что вопрос к Altera, а не к Вам :), но ведь у них написано:

 

An LCELL buffer always consumes one logic cell. It is not removed from a project during logic synthesis.

 

Так какого фига она убирается ???

Да кто ж его знает. Вот у меня был случай: делаешь кольцевой генератор (несколько lcell и инвертор) - выбрасывает. Но если вместо инвертора поставить nand2 - то все в порядке.

Я пришел к выводу что схема должна иметь смысл - т.е. таблицу истинности с разными значениями, иначе всё это выбрасывается.

Share this post


Link to post
Share on other sites
Если бы у меня была лишняя PLL, я бы так и сделал - даже не спрашивая :)

У Вас их вообще нет, или нет лишних? Сомневаюсь, что Вы задействуете все выходы во всех PLL.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this