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

Перенос кода с языка C

3 minutes ago, Lmx2315 said:

Что я сделал не так?

Если я не ошибаюсь, то есть Квартус поновее. Версии 20+. Возможно там засинтезит правильно. Я  честно говоря не уверен в Альтеровском варианте, но в Вивадо я точно делал такой финт и синтезировало правильно.

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


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

Приветствую!

17 minutes ago, Nick_K said:

Если я не ошибаюсь, то есть Квартус поновее. Версии 20+. Возможно там засинтезит правильно. Я  честно говоря не уверен в Альтеровском варианте, но в Вивадо я точно делал такой финт и синтезировало правильно.

Если  такой  финт  в Vivado синтезируется  в сдвиговый регистр  то тогда синтезатор крив именно в Vivado.
Хотя я  сомневаюсь что это на самом деле так. Скорее криво что то другое :yes3:.

На то они и блокирующие  присвоения что результат операций присвоения (внутри блока)  зависят от последовательности их выполнения.

 

Удачи!  Rob.

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


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

6 minutes ago, RobFPGA said:

На то они и блокирующие  присвоения что результат операций присвоения (внутри блока)  зависят от последовательности их выполнения.

Последовательность как-бы сохраняется :wink2:

Тут разговор о величине дельта между каждыми присваиваниями. И я согласен, что для ясности нужны блокирующие присваивания. Но повторюсь - синзеировать что с блок, что с неблок присвоением, должно в флоп, ибо есть подклоковая конструкция со срабатыванием на posedge. Возможно будет оптимизация приведйнного сдвигового регистра в один FF по причине бОльшей хитрости синтезатора чем я думал. Тем не менее прямое назначение блокирующего и неблокирующего присваивания именно в возможностях в симуляторе.

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


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

Приветствую!

17 minutes ago, Nick_K said:

Последовательность как-бы сохраняется :wink2:

Тут разговор о величине дельта между каждыми присваиваниями. И я согласен, что для ясности нужны блокирующие присваивания. Но повторюсь - синзеировать что с блок, что с неблок присвоением, должно в флоп, ибо есть подклоковая конструкция со срабатыванием на posedge. Возможно будет оптимизация приведйнного сдвигового регистра в один FF по причине бОльшей хитрости синтезатора чем я думал. Тем не менее прямое назначение блокирующего и неблокирующего присваивания именно в возможностях в симуляторе.

С тем что  блокирующее присвоение можно (а часто и нужно) использовать в синтезе никто не спорит.  Но надо знать и понимать особенности оного.  
В нижеприведенных вариантах 2 и 3 при синтезе (да и в симе) дадут отличные от 1 результат
 

//1
always @(posedge clk) begin
  B=A;
  C=B;
end 
...
//2
always @(posedge clk) begin
  С=B;
  B=A;
end 
...
//3 
always @(posedge clk) begin
  B=A;
end
  
always @(posedge clk) begin
  C=B; 
end
...

 Удачи! Rob.

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


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

6 hours ago, Lmx2315 said:

 

т.е. если написать:

always @(posedge clk)

begin

A1=A0;

A2=A1;

A3=A2;

end

То синтезатор поймёт, что я хотел задержку на регистрах сделать, а не приравняет мне вот так A3=A0 ?

 

Если память не изменяет, в такой ситуации никакой сдвиговый регистр по стандарту получен быть _не_ может: при срабатывании блока always, т.е. по фронту clk, текущее значение A0 мгновенно переносится в А1, А1 (т.е. то же, что было в А0 на момент начала) -- В А2 и т.д. В итоге получаем, что A1, A2, A3 -- это идентичные сигналы, а посему для хранения состояния достаточного одного триггера. А вот если <= использовать, тогда уже да -- сдвиговый регистр, поскольку значение справа от <= вычисляется логически перед фронтом clk, а присваивание левой части выполняется уже после фронта, а не мгновенно.

А синтезаторы все кривые и глючные, это да...

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


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

16 minutes ago, SII said:

А синтезаторы все кривые и глючные, это да...

Никаких логических противоречий (разночтений и тп) с блокирующими/неблокирующими присваиваниями нет, поэтому синтезаторы правильно их разбирают. Имхо, не следует избегать смешивания блокирующих/неблокирующих присваиваний в одном always-блоке, просто правильно их использовать.

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


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

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

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


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

8 часов назад, des00 сказал:

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

Тут сплошной RTFM)

Ну и ремарка: на самом деле "блокирующие присвоения" ничего не блокируют. Просто название крайне не удачное. В отличие от не блокирующих, присвоение тоже произойдет произойдет за один такт always @(posedge xxx), но синтезатор будет выстраивать цепь зависимостей выходной переменной (т.е. триггеров) от входных по другой логике.

Мой совет начинающим - никогда не использовать блокирующие присвоения. Это потенциальный источник непонимания, что произойдет в ПЛИС на самом деле.

 

Пример:

A1=A0;

A2=A1;

A3=A2;

превратится в

A1<=A0;

A2<=A0;

A3<=A0;

не очень похоже на ожидаемый "сдвиговый регистр", верно?

 

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


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

17 часов назад, neon416 сказал:

Ну и ремарка: на самом деле "блокирующие присвоения" ничего не блокируют. Просто название крайне не удачное.

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

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


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

У меня так сделано, и использую уже давно, несколько лет.
При описании дизайнов использую 2 языка, одинаковых синтаксически, но разных семантически. Синтаксически это Верилог с элементами SV. А семантическая разница в том, что в своем нестандартном варианте, тип присваивания определяется типом данных. Поэтому в коде только один тип присваивания "=", а препроцессор (свой) преобразует исходник в классический вариант (не тривиальным способом, выходной код не похож на исходный). Имхо, очень удобно получилось - исходники синтаксически ближе к Си (отсутствует деление кода на комбинационные и регистровые always-блоки), при этом проверяется стандартными средствами Верилога, защелки невозможны, сокращается код, разные модули можно описывать разными способами. Сложную логику предпочитаю описывать своим вариантом языка, переключаюсь легко.

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


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

Приветствую!

1 hour ago, Leka said:

У меня так сделано, и использую уже давно, несколько лет.
При описании дизайнов использую 2 языка, одинаковых синтаксически, но разных семантически. ...
... Сложную логику предпочитаю описывать своим вариантом языка, переключаюсь легко.

А  уж  как  "легко" будет  вашим  коллегам  читать и понимать такой код  даже представить больно.     :mega_shok:

 

Удачи! Rob.

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


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

dxp

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

Вся эта концепция крайне неудачная, что и показывают сами по себе многократные  обсуждения на форуме. Любому школьнику покажи припаивание проводков на плате между логическими элементами в любом порядке и ему будет всё понятно, а блокирующее присваивание сразу будет камнем преткновения на ровном месте в базовых вещах.

 

 

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


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

Приветствую!

40 minutes ago, petrov said:

...
Вся эта концепция крайне неудачная, что и показывают сами по себе многократные  обсуждения на форуме. Любому школьнику покажи припаивание проводков на плате между логическими элементами в любом порядке и ему будет всё понятно, а блокирующее присваивание сразу будет камнем преткновения на ровном месте в базовых вещах.

Многократные обсуждения на форуме лишь  подтверждают пословицу  что  "не зная броду, не суйся в воду". :unknw:
Если не понимать базовые  вещи  то и пайка  без флюса будет ставить в тупик и не только школьников. А уж  тем более программирование без знания базовых принципов.   :cray:   
 

Чем  же эта концепция (блокирующие/неблокирующие присвоения) так неудачна с вашей точки зрения?  И что бы вы изменили в ней?

Удачи! Rob.

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


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

15 минут назад, RobFPGA сказал:

Приветствую!

Многократные обсуждения на форуме лишь  подтверждают пословицу  что  "не зная броду, не суйся в воду". :unknw:
Если не понимать базовые  вещи  то и пайка  без флюса будет ставить в тупик и не только школьников. А уж  тем более программирование без знания базовых принципов.   :cray:   
 

Чем  же эта концепция (блокирующие/неблокирующие присвоения) так неудачна с вашей точки зрения?  И что бы вы изменили в ней?

Удачи! Rob.

Я бы сделал как в vhdl. Внутри always присваивай как угодно, и сколько угодно. Но результат из always только через назначение сигналу. По-моему в vhdl это сделано наиболее просто, логично и понятно. 

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


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

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

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

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

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

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

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

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

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

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