|
|
  |
Любой ли синтаксически верный код VHDL будет корректно работать на реальной ПЛИС?, Общий вопрос от начинающего |
|
|
|
Apr 11 2017, 07:34
|

Знающий
   
Группа: Свой
Сообщений: 801
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847

|
Цитата(Golikov A. @ Apr 11 2017, 10:21)  Интересный вывод. То есть попытка полностью понять что происходит, понять инструмент и в деталях управлять процессом - это молодость  ? Вы как я понимаю точно знаете что будет да? Не понимаю, чего вы кипятитесь... Обращаю ваше внимание, что нет одинаковых синтезаторов. Ваш опыт связан теперь только с одним тулзом или вы пробовали разные? Молодость в вашем нетерпении. Тут должны пройти года(и ворох ошибок). Цитата А на основании чего вы это заявляете? Вы как я понял сторонник "деды так делали и мы так будем"  )) так вот может иногда стоит по молодецки поэкспериментировать? А заодно нам дуракам расскажете что получилось. Человеку свойственно ошибаться. Человеку не свойственно совершенство (с) Ф.Брукс ...В том числе и мне. ))). Это просто опыт.. Цитата Вот это мне демонстрирует полное непонимание или не владение темой. С чего вдруг то надо обязательно так делать? Более того засунут под клок приведенную схему вы создаете огромное количество проблем, чисто комбинаторная схема лишена мета-стабильности просто по определению  Если не понимаете, спросите я объясню. Гляньте шире. Проблема ведь не в этой комбинационной схеме, а в следующем регистре, у которого на входе будет эта КАША... Цитата Плохо видите) Вы не хотите слушать что вам говорят, и вешаете ярлыки не разобравшись. Простите. Я не ставил целью обижать. Я склонен утрировать для понимания... Цитата Весь интернет и форумы основных производителей ПЛИС вместе с их суппортом считают что никак, но Мур другого мнения. Правда в силу нашей молодости он не хочет нам объяснить деталей  Это смотря к чему список чувствительности.. К тактированному или полностью параллельному блоку? Цитата Именно, в этом и был смысл примера, но видать он был слишком молодецким%) Более того попытки защелкнуть комбинаторику в триггера без синхронизации, вот тут то как раз все встанет в полный рост с мета-стабильностью, гонками сигналов и прочими проблемами. Это к тезису что синхронный дизайн всегда благо. Всегда благо Цитата И есть один очень хороший пример Код sample_and: process(d) begin a <= b & c; end process; Уважаемый Мур прокомментируете что будет при синтезе и симуляции данной схемы Отличный пример. Вы тут получите свой а в моменты смены сигнала d
|
|
|
|
|
Apr 11 2017, 07:51
|
Гуру
     
Группа: Свой
Сообщений: 4 247
Регистрация: 17-02-06
Пользователь №: 14 454

|
Цитата Отличный пример. Вы тут получите свой а в моменты смены сигнала d Переступите через свой опыт, пожалуйста... и проверьте что будет на самом деле  единственное я имел ввиду, конечно a <= b and c; просто давно не писал на VHDL... И да, когда будите проверять не поленитесь посмотреть технологическую схему после синтеза, а то и сделать пост синтез симуляцию Цитата Гляньте шире. Проблема ведь не в этой комбинационной схеме, а в следующем регистре, у которого на входе будет эта КАША... Какая каша простите? Если входы этой схемы - это выходы регистров на той же частоте - ничего не будет, все будет работать штатно. Если выход этой схемы не идет на вход никакого регистра, то опять же все будет работать штатно и правильно. Цитата Это смотря к чему список чувствительности.. К тактированному или полностью параллельному блоку? В том то и дело что НЕВАЖНО!!!!! синтезатор просто игнорирует список чувствительности и синтезирует схему по внутреннему описанию процесса! Это верно как минимум для ISE, Quartus, кто там еще остался симплифай? Вроде как он тоже себя так ведет.
|
|
|
|
|
Apr 11 2017, 08:05
|

Знающий
   
Группа: Свой
Сообщений: 801
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847

|
Цитата(Golikov A. @ Apr 11 2017, 10:51)  Переступите через свой опыт, пожалуйста... и проверьте что будет на самом деле  единственное я имел ввиду, конечно a <= b and c; просто давно не писал на VHDL... И да, когда будите проверять не поленитесь посмотреть технологическую схему после синтеза, а то и сделать пост синтез симуляцию Спасибочки... Сделаю для развития... Цитата Какая каша простите? Если входы этой схемы - это выходы регистров на той же частоте - ничего не будет, все будет работать штатно. Если выход этой схемы не идет на вход никакого регистра, то опять же все будет работать штатно и правильно. Вы опять в рамках... Выставите свою комбинашку входами во внешний мир, чтобы была асинхронность. И будет ВАМ крах идеи... Цитата В том то и дело что НЕВАЖНО!!!!! синтезатор просто игнорирует список чувствительности и синтезирует схему по внутреннему описанию процесса! Это верно как минимум для ISE, Quartus, кто там еще остался симплифай? Вроде как он тоже себя так ведет. А вы пропустите в списке какой нибудь сигнал
|
|
|
|
|
Apr 11 2017, 08:24
|
Гуру
     
Группа: Свой
Сообщений: 4 247
Регистрация: 17-02-06
Пользователь №: 14 454

|
Цитата Вы опять в рамках... Выставите свою комбинашку входами во внешний мир, чтобы была асинхронность. И будет ВАМ крах идеи... С чего вдруг то? Цитата А вы пропустите в списке какой нибудь сигнал тут мы возвращаемся к предложенной схеме Код sample_and: process(d) begin a <= b and c; end process; тут пропущены все сигналы, и если бы синтезатор смотрел на список чувствительности он бы вообще не смог бы ее синтезировать, в железе данная схема вообще невозможна. Скорее всего это и приводит к решению игнорировать этот список синтезатором. Для синтезируемого подмножества схем, список не меняет их поведение, он только может сделать так что схема становится не реализуемой и все....
|
|
|
|
|
Apr 11 2017, 09:25
|

Знающий
   
Группа: Свой
Сообщений: 801
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847

|
Пропустил... Цитата(Golikov A. @ Apr 11 2017, 10:25)  тут то все на самом деле просто. Если схема работает по фронту одного сигнала, то она синхронная относительно этого сигнала. Если в ней есть реакции на фронты и уровни нескольких сигналов, которые не имеют зависимости между собой, то части схемы управляемые разными сигналами - асинхронны друг другу. Для приведения к синхронности применяют не один триггер. Одного мало... Цитата А что делать с SPI slave при взаимодействии с мастером из внешнего мира? Как!!! Вы этого не применяете? тот же прием! привязать события набором триггеров (не один)
|
|
|
|
|
Apr 11 2017, 09:54
|
Гуру
     
Группа: Свой
Сообщений: 4 247
Регистрация: 17-02-06
Пользователь №: 14 454

|
Цитата Для приведения к синхронности применяют не один триггер. Одного мало... не очень понял о чем это в контексте сказанного. Я не говорил о схеме синхронизации, я говорил о критерии синхронности, ну да ладно... Цитата Как!!! Вы этого не применяете? тот же прием! привязать события набором триггеров (не один) Конечно же нет, потому что это верный способ провалить частоту минимум в 4 раза. Просто на самом деле знаю что там происходит и что такое мета-стабильность, и гонка сигналов. Поэтому я и могу сделать правильный SPI slave, который естественно не пересинхронизируется во время приема-передачи на рабочую частоту схемы.
|
|
|
|
|
Apr 11 2017, 10:49
|
Частый гость
 
Группа: Участник
Сообщений: 129
Регистрация: 19-10-13
Пользователь №: 78 795

|
Цитата(XVR @ Apr 11 2017, 13:12)  Пишите на Verilog'е - там список чуствительности влияет (более того - определяет) синтезируемую схему  А можно какой-то пример? С Верилогом особо не работал, для общего развития немного баловался, но не более. Насколько я знаю, там, например, в списке чувствительность указывают фронт ресета тоже из соображения корректности симуляции, потому что в реальном железе никакой фронт конечно же анализироваться не будет. Поэтому я был уверен, что с этой точки зрения разницы в языках нет.
|
|
|
|
|
Apr 11 2017, 10:55
|
Гуру
     
Группа: Свой
Сообщений: 4 247
Регистрация: 17-02-06
Пользователь №: 14 454

|
если написать Код always(posedge clk or negedge reset_n) begin if(reset_n == 1'b1) .... else .... end могут быть проблемы, синтез и симуляция действительно могут разойтись. ну и конечно же симуляция честно отрабатывает фронты асинхронных сигналов, а реальная схема отрабатывает уровни. То есть Код always(posedge clk or posedge set) begin if(set == 1'b1) a <= b; else .... end в симуляции в а засовывается b по фронту set, и меняй не меняй b после фронта - пофиг. В реальной схеме, Если set стоит в 1, то изменение b будет проходить на a. А влияние на поведение, - это пропуск слова posedge, хотя я сейчас что-то задумался....
|
|
|
|
|
Apr 11 2017, 11:12
|
Гуру
     
Группа: Свой
Сообщений: 3 073
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(Tausinov @ Apr 11 2017, 13:49)  А можно какой-то пример? С Верилогом особо не работал, для общего развития немного баловался, но не более. Насколько я знаю, там, например, в списке чувствительность указывают фронт ресета тоже из соображения корректности симуляции, потому что в реальном железе никакой фронт конечно же анализироваться не будет. Будет. Пример уже Golikov привел. Основное отличие от VHDL в том, что в Verilog'е нет конструкций clk'event и аналогичных, а реакция на фронты выводится из списка чуствительности. В VHDL реакция на фронты явно записывается в теле процесса. Если синтезатор в Verilog'е не опознает паттерн из списка чуствительности и использования сигнала в блоке, то он скорее всего вообще откажется это синтезировать. Ну и что бы не быть голословным: Код // D trigger with async reset always(posedge clk or posedge reset) if (reset) out <= 1'b0; else out <= in;
// Latch with reset always(posedge reset) if (reset) out <= 1'b0; else out <= in; Как видно минимальное отличие только в списке чуствительности (posedge clk) привело к изменению схемы (причем оба варианта вполне валидны)
|
|
|
|
|
Apr 11 2017, 12:04
|
Частый гость
 
Группа: Участник
Сообщений: 129
Регистрация: 19-10-13
Пользователь №: 78 795

|
Цитата(XVR @ Apr 11 2017, 14:12)  // Latch with reset always(posedge reset) if (reset) out <= 1'b0; else out <= in;[/code]Как видно минимальное отличие только в списке чуствительности (posedge clk) привело к изменению схемы (причем оба варианта вполне валидны) А, все, понял, о чем речь. А нельзя сделать в явном виде: Код always(posedge reset) if (reset) out <= 1'b0; else if (clk) out <= in; Понятно, что многие любят язык в том числе за то, что позволяет убрать избыточность типа такой, но если VHDL со своим стилем уже въелся в мозг, не поможет такой вариант исправить ситуацию?
|
|
|
|
|
  |
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|