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

Любой ли синтаксически верный код VHDL будет корректно работать на реальной ПЛИС?

Обожаю такие темы. Студент задавший вопрос, который и сам не понял, давно уже свалил, а мужики с 10+ опытом уже неделю рвут друг друга на лоскуты, хотя говорят об одном и том же, только разными словами.

Ну не удержался я сегодня. Звыняйтэ :)

 

На самом деле, вопрос действительно довольно фундаментальный и интересный. Не так уж и часто тут обсуждается что-то подобное. И оно (обсуждение) может действительно оказаться полезным для новичков.

 

Тихо, в сторону, как говорится в пьесах: Я уж не стал добавлять "демонстрируя абсолютное непонимание основ", чтоб никого не расстроить :biggrin:

Да чего уж там - жарьте! Раз пошла такая история. Может, и научимся чему. Ну,- основам, по крайней мере. :)

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


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

А вот тут не соглашусь. Языковую конструкцию в интересующем нас случае мы вначале подсовываем синтезатору, а уже результат синтеза заставляем пробежаться в симуляторе. А сравнивать собираемся с результатом пробежки в этом же симуляторе несинтезированного RTL-описания. Кстати, еще раз сверим ходы: какой симулятор у нас в деле? Может, это он подгадил? (Бывает и такое. Даже в пределах естественной для симуляторов среды обитания - чисто поведенческих конструкций).

 

Стойте - стойте! Как так сначала синтезатору, а потом симулятору? Да нет конечно. Можно написать толпу не синтезируемых конструкций и прекрасно их видеть на симуляции. Вообще VHDL как способ описания схемы для литературы и симуляции - это его первичное назначение, функцию создания схемы прекрутили позже.

 

Если мы говорим о пост синтез симуляции, то да, сначала синтезатор, а потом симулятор, но в этом случае он уже не использует начальный RTL, он идет по нет листу, который тоже rtl, но уже переработанный в связь элементов. И тут вообще процессов то и не будет, будет список ячеек и связей, разве что в моделях ячеек.

 

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

 

про изменение и фронты - ок. принимается, правда скорее придирка. Просто для асинхронных сбросов-установок важен именно уровень а не фронт, ну не важно...

про защелкивается и обрабатывает процесс - не принимается. Процесс может быть без клока, и там ничего не щелкается, а комбинируется, то есть важен прямо таки факт обработки, а не изменение данных. Ну то есть тут мне кажется что все же терминология важна.

 

 

Для Мур, кроме блоков и мегофункций для каждого семейства есть книжечка какие конструкции хочет видеть синтезатор для того или иного поведения, в 99% случаев у альтеры и ксалинкса они совпадали, но различия все же были. Стоит на эти книжечки ориентироваться, тем более что у вас 3 семейства. Мы в таких местах делали ветвление через `ifdef ALTERA `elsif XILINX, не помню VHDL аналога, годная практика имхо:)

 

 

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


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

Да, относительно VHDL в литературе везде написано, что список чувствительности процесса игнорируется при синтезе...

 

С другой стороны, я отчетливо помню, что где-то читал, что установка значений по умолчанию примерно таким образом тоже игнорируется при синтезе:

 

signal a : std_logic_vector (3 downto 0) := x"0";

 

И очень удивился, когда узнал, что как минимум ISE 14.7 умеет выставлять эти значения.

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


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

Ранее не синтезируемые конструкции начинают потихоньку переходить в синтезируемые. Так что такие конфузы возможны. Описали в литре что выкидывается данная кострукция, а потом бабах и уже не выкидывается.

 

Не знаю с какой серии, но у ксалинкса начальное состояние тех элементов может быть как 1 так и 0, и задается в прошивке, поэтому естественно было подержать синтезируемость инициализации. Альтера вроде как имеет только одно нулевое состояние для всех элементов после старта, но тоже поддержала эту конструкцию на синтезе за счет того что ставит инверсию до и после тех элементов которые в начале должны быть 1.

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


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

Мы в таких местах делали ветвление через `ifdef ALTERA `elsif XILINX, не помню VHDL аналога, годная практика имхо:)

Это как надо код писать, чтобы при синтезе оно отличалось ? Приведите пример такой конструкции.

 

Все сходится и ни ошибки, ни warning-а при этом ?

1. LINT

2. SIM (ncsim например)

3. SYN

4. EC

 

Наверняка что-то находится за гранью синтезируемой области, кто-то поддержал новую фичу, кто-то нет

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


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

Да возьмите и попробуйте на верилоге описать настоящую 2 портовую память для ксалинкса и альтеры, да так чтобы она еще технологическими блоками правильно заменялась и лишних регистров не натыкала?

Там еще все усугублялось тем что был спартан 6, и как следствие нет поддержки SV, а у альтеры 2 портовая штатно как раз именно на SV описывается.

 

И да, никто не обещал что ошибок и варнингов не будет, там как раз было много всего. В основном конечно битва за то чтобы все правильно легло в технологические блоки ПЛИС, которые у каждого свои и со своими нюансами.

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


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

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

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

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

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

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

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

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

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

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