реклама на сайте
подробности

 
 
6 страниц V  < 1 2 3 4 5 > »   
Reply to this topicStart new topic
> Любой ли синтаксически верный код VHDL будет корректно работать на реальной ПЛИС?, Общий вопрос от начинающего
Мур
сообщение Apr 11 2017, 07:34
Сообщение #31


Знающий
****

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



Цитата(Golikov A. @ Apr 11 2017, 10:21) *
Интересный вывод. То есть попытка полностью понять что происходит, понять инструмент и в деталях управлять процессом - это молодостьsm.gif?
Вы как я понимаю точно знаете что будет да?

Не понимаю, чего вы кипятитесь... Обращаю ваше внимание, что нет одинаковых синтезаторов. Ваш опыт связан теперь только с одним тулзом или вы пробовали разные?
Молодость в вашем нетерпении. Тут должны пройти года(и ворох ошибок).

Цитата
А на основании чего вы это заявляете? Вы как я понял сторонник "деды так делали и мы так будем" sm.gif)) так вот может иногда стоит по молодецки поэкспериментировать? А заодно нам дуракам расскажете что получилось.

Человеку свойственно ошибаться.
Человеку не свойственно совершенство (с) Ф.Брукс
...В том числе и мне. ))). Это просто опыт..

Цитата
Вот это мне демонстрирует полное непонимание или не владение темой. С чего вдруг то надо обязательно так делать?
Более того засунут под клок приведенную схему вы создаете огромное количество проблем, чисто комбинаторная схема лишена мета-стабильности просто по определению sm.gif Если не понимаете, спросите я объясню.

Гляньте шире. Проблема ведь не в этой комбинационной схеме, а в следующем регистре, у которого на входе будет эта КАША...


Цитата
Плохо видите) Вы не хотите слушать что вам говорят, и вешаете ярлыки не разобравшись.


Простите. Я не ставил целью обижать. Я склонен утрировать для понимания...


Цитата
Весь интернет и форумы основных производителей ПЛИС вместе с их суппортом считают что никак, но Мур другого мнения. Правда в силу нашей молодости он не хочет нам объяснить деталейsad.gif


Это смотря к чему список чувствительности.. К тактированному или полностью параллельному блоку?

Цитата
Именно, в этом и был смысл примера, но видать он был слишком молодецким%) Более того попытки защелкнуть комбинаторику в триггера без синхронизации, вот тут то как раз все встанет в полный рост с мета-стабильностью, гонками сигналов и прочими проблемами. Это к тезису что синхронный дизайн всегда благо.


Всегда благо

Цитата
И есть один очень хороший пример
Код
sample_and: process(d)
begin
   a <= b & c;
end process;

Уважаемый Мур прокомментируете что будет при синтезе и симуляции данной схемы

Отличный пример. Вы тут получите свой а в моменты смены сигнала d
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 11 2017, 07:51
Сообщение #32


Гуру
******

Группа: Свой
Сообщений: 4 186
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата
Отличный пример. Вы тут получите свой а в моменты смены сигнала d

Переступите через свой опыт, пожалуйста... и проверьте что будет на самом делеsm.gif единственное я имел ввиду, конечно a <= b and c; просто давно не писал на VHDL...
И да, когда будите проверять не поленитесь посмотреть технологическую схему после синтеза, а то и сделать пост синтез симуляцию


Цитата
Гляньте шире. Проблема ведь не в этой комбинационной схеме, а в следующем регистре, у которого на входе будет эта КАША...

Какая каша простите? Если входы этой схемы - это выходы регистров на той же частоте - ничего не будет, все будет работать штатно.
Если выход этой схемы не идет на вход никакого регистра, то опять же все будет работать штатно и правильно.



Цитата
Это смотря к чему список чувствительности.. К тактированному или полностью параллельному блоку?

В том то и дело что НЕВАЖНО!!!!! синтезатор просто игнорирует список чувствительности и синтезирует схему по внутреннему описанию процесса!
Это верно как минимум для ISE, Quartus, кто там еще остался симплифай? Вроде как он тоже себя так ведет.
Go to the top of the page
 
+Quote Post
Мур
сообщение Apr 11 2017, 08:05
Сообщение #33


Знающий
****

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



Цитата(Golikov A. @ Apr 11 2017, 10:51) *
Переступите через свой опыт, пожалуйста... и проверьте что будет на самом делеsm.gif единственное я имел ввиду, конечно a <= b and c; просто давно не писал на VHDL...
И да, когда будите проверять не поленитесь посмотреть технологическую схему после синтеза, а то и сделать пост синтез симуляцию

Спасибочки... Сделаю для развития...

Цитата
Какая каша простите? Если входы этой схемы - это выходы регистров на той же частоте - ничего не будет, все будет работать штатно.
Если выход этой схемы не идет на вход никакого регистра, то опять же все будет работать штатно и правильно.


Вы опять в рамках... Выставите свою комбинашку входами во внешний мир, чтобы была асинхронность. И будет ВАМ крах идеи...

Цитата
В том то и дело что НЕВАЖНО!!!!! синтезатор просто игнорирует список чувствительности и синтезирует схему по внутреннему описанию процесса!
Это верно как минимум для ISE, Quartus, кто там еще остался симплифай? Вроде как он тоже себя так ведет.

А вы пропустите в списке какой нибудь сигнал
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 11 2017, 08:24
Сообщение #34


Гуру
******

Группа: Свой
Сообщений: 4 186
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата
Вы опять в рамках... Выставите свою комбинашку входами во внешний мир, чтобы была асинхронность. И будет ВАМ крах идеи...

С чего вдруг то?

Цитата
А вы пропустите в списке какой нибудь сигнал

тут мы возвращаемся к предложенной схеме
Код
sample_and: process(d)
begin
   a <= b and c;
end process;

тут пропущены все сигналы, и если бы синтезатор смотрел на список чувствительности он бы вообще не смог бы ее синтезировать, в железе данная схема вообще невозможна. Скорее всего это и приводит к решению игнорировать этот список синтезатором. Для синтезируемого подмножества схем, список не меняет их поведение, он только может сделать так что схема становится не реализуемой и все....
Go to the top of the page
 
+Quote Post
Tausinov
сообщение Apr 11 2017, 09:07
Сообщение #35


Частый гость
**

Группа: Участник
Сообщений: 77
Регистрация: 19-10-13
Пользователь №: 78 795



Как-то дискуссия в тупик зашла. Предлагаю сойтись на том, что для абсолютной переносимости и для сопоставимости результатов работы железа и симулятора ЛУЧШЕ не экспериментировать, а приучить себя думать и над списком чувствительности в том числе.
Go to the top of the page
 
+Quote Post
Maverick
сообщение Apr 11 2017, 09:09
Сообщение #36


я только учусь...
******

Группа: Модераторы
Сообщений: 3 292
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



Цитата(Tausinov @ Apr 11 2017, 12:07) *
Как-то дискуссия в тупик зашла. Предлагаю сойтись на том, что для абсолютной переносимости и для сопоставимости результатов работы железа и симулятора ЛУЧШЕ не экспериментировать, а приучить себя думать и над списком чувствительности в том числе.

зачем? используем VHDL 2008 sm.gif


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
Мур
сообщение Apr 11 2017, 09:25
Сообщение #37


Знающий
****

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



Пропустил...
Цитата(Golikov A. @ Apr 11 2017, 10:25) *
тут то все на самом деле просто. Если схема работает по фронту одного сигнала, то она синхронная относительно этого сигнала. Если в ней есть реакции на фронты и уровни нескольких сигналов, которые не имеют зависимости между собой, то части схемы управляемые разными сигналами - асинхронны друг другу.

Для приведения к синхронности применяют не один триггер. Одного мало...
Цитата
А что делать с SPI slave при взаимодействии с мастером из внешнего мира?

Как!!! Вы этого не применяете? тот же прием! привязать события набором триггеров (не один)
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 11 2017, 09:54
Сообщение #38


Гуру
******

Группа: Свой
Сообщений: 4 186
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата
Для приведения к синхронности применяют не один триггер. Одного мало...

не очень понял о чем это в контексте сказанного. Я не говорил о схеме синхронизации, я говорил о критерии синхронности, ну да ладно...


Цитата
Как!!! Вы этого не применяете? тот же прием! привязать события набором триггеров (не один)

Конечно же нет, потому что это верный способ провалить частоту минимум в 4 раза. Просто на самом деле знаю что там происходит и что такое мета-стабильность, и гонка сигналов. Поэтому я и могу сделать правильный SPI slave, который естественно не пересинхронизируется во время приема-передачи на рабочую частоту схемы.
Go to the top of the page
 
+Quote Post
XVR
сообщение Apr 11 2017, 10:12
Сообщение #39


Гуру
******

Группа: Свой
Сообщений: 2 972
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Пишите на Verilog'е - там список чуствительности влияет (более того - определяет) синтезируемую схему yeah.gif
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 11 2017, 10:28
Сообщение #40


Гуру
******

Группа: Свой
Сообщений: 4 186
Регистрация: 17-02-06
Пользователь №: 14 454



так и делаемsm.gif
Go to the top of the page
 
+Quote Post
Tausinov
сообщение Apr 11 2017, 10:49
Сообщение #41


Частый гость
**

Группа: Участник
Сообщений: 77
Регистрация: 19-10-13
Пользователь №: 78 795



Цитата(XVR @ Apr 11 2017, 13:12) *
Пишите на Verilog'е - там список чуствительности влияет (более того - определяет) синтезируемую схему yeah.gif


А можно какой-то пример? С Верилогом особо не работал, для общего развития немного баловался, но не более. Насколько я знаю, там, например, в списке чувствительность указывают фронт ресета тоже из соображения корректности симуляции, потому что в реальном железе никакой фронт конечно же анализироваться не будет. Поэтому я был уверен, что с этой точки зрения разницы в языках нет.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 11 2017, 10:55
Сообщение #42


Гуру
******

Группа: Свой
Сообщений: 4 186
Регистрация: 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, хотя я сейчас что-то задумался....
Go to the top of the page
 
+Quote Post
XVR
сообщение Apr 11 2017, 11:12
Сообщение #43


Гуру
******

Группа: Свой
Сообщений: 2 972
Регистрация: 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) привело к изменению схемы (причем оба варианта вполне валидны)

Go to the top of the page
 
+Quote Post
Tausinov
сообщение Apr 11 2017, 12:04
Сообщение #44


Частый гость
**

Группа: Участник
Сообщений: 77
Регистрация: 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 со своим стилем уже въелся в мозг, не поможет такой вариант исправить ситуацию?
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 11 2017, 12:34
Сообщение #45


Гуру
******

Группа: Свой
Сообщений: 4 186
Регистрация: 17-02-06
Пользователь №: 14 454



нет, не может.
это будет латч с разрешением что ли%sm.gif он просто не станет триггером, потому что нужно не значение клока а фронт, событие.
То есть нет аналога ВХДЛьного clk'event внутри алвейса,
Go to the top of the page
 
+Quote Post

6 страниц V  < 1 2 3 4 5 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd June 2017 - 01:44
Рейтинг@Mail.ru


Страница сгенерированна за 0.01494 секунд с 7
ELECTRONIX ©2004-2016