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

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

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

 

Документация вроде говорит, что явно указанная 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

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


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

Потому что у вас формируется два сигнала из одного.

 

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

 

 

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

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

 

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

 

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


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

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

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


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

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

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

 

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

 

image.png

 

 

 

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

 

image.png

 

 

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

 

image.png

 

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


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

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

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

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


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

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

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

 

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

 

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

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


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

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

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


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

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

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

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

 

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


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

Settings/Analysis & Syntesis/More Analysis

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

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

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


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

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

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

 

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

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

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

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


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

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

 

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

 

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

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

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

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


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

Если бы у меня была лишняя PLL, я бы так и сделал - даже не спрашивая :)

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

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


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

Да кто ж его знает.

 

Собственно говоря, я уже раньше написал, в чем у меня была ошибка.

 

А вообще костыль даже работает :)

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


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

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

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

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

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

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

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

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

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

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