yes 7 9 ноября, 2021 Опубликовано 9 ноября, 2021 · Жалоба 2 hours ago, Leka said: Но это повезло, что синтезатор понял. С двухпортовой не получилось, отрапортовал о нехватке ресурсов. посмотрите, как описывать двухпортовую память в кодинг-стилях в хелпе на синтезатор - для ПЛИС все они умеют - нужно только придерживаться стиля описания (для разных ПЛИС - например, ксайлинс/альтера может быть разное описание из-за ограничений DP RAM в железе) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 1 9 ноября, 2021 Опубликовано 9 ноября, 2021 · Жалоба 53 minutes ago, yes said: посмотрите, как описывать двухпортовую память в кодинг-стилях Знаю, как правильно - просто попробовал, поймет ли синтезатор выходной код после транслятора (сильно отличается от стандартного кодинг-стиля). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 1 10 ноября, 2021 Опубликовано 10 ноября, 2021 · Жалоба Кстати, по поводу макросов. Можно ли так определить макрос "`define A(...) ... ", чтобы он создавал новый макрос "`define B(...) ..." ? В препроцессоре Си так можно делать (хотя и забыл уже, как именно), в V/SV не получилось. По поводу использования макросов. Правильно ли понимаю, что функции и таски не могут заменить полноценные макросы, тк не могут обращаться к внешним переменным, минуя аргументы ? Правильно ли понимаю, что единственная возможность определить произвольный макрос - через "`define" ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 1 10 ноября, 2021 Опубликовано 10 ноября, 2021 · Жалоба Для чего это нужно. Пусть модуль инстанцируется через макрос "`m(a)". Этот макрос, помимо самого инстанса и объявлений переменных, создает другие макросы вида "а(...)", которые позволяют обращаться к портам модуля без их явного указания. Как это делать средствами V/SV ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 1 5 декабря, 2021 Опубликовано 5 декабря, 2021 · Жалоба "2D-песочница" - удобная задачка для экспериментов с HDL - очень простая для Си, и непростая для синтезируемого HDL. Можно постепенно усложнять алгоритм, и выявлять новые недостатки языка синтеза со всеми надстройками. Простые вложенные циклы на Си вида "for(i=...)for(j=...){...}" легко привести в одиночный цикл "for(i =..., j =…){...}", для которого несложно написать надстройку над стандартным Верилогом для лаконичного описания синтезируемого конвейера. А вот с вложенными циклами вида "for(i=...){...while(...){...}}" опять возникла проблема лаконичного описания. На чистом синтезируемом Верилоге описывать алгоритм работы множества конвейеров со множеством массивов - это уровень 50-х годов прошлого века, когда вручную считали запуски спутников. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 1 10 декабря, 2021 Опубликовано 10 декабря, 2021 · Жалоба On 12/5/2021 at 3:10 PM, Leka said: А вот с вложенными циклами вида "for(i=...){...while(...){...}}" опять возникла проблема лаконичного описания. Разобрался, как лаконично описывать - также, как и операторы for(;;) в Си, выкинуть только понятие "тело цикла". Разворачивается все это в последовательную цепочку конвейеров с блокировкой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 1 18 декабря, 2021 Опубликовано 18 декабря, 2021 · Жалоба Где-то ошибка у меня в знаковой математике - "2D-песочница" на Си и синтезируемом HDL почему-то по-разному ведет себя при одинаковых исходных данных и одинаковой (если не напутал) математике. Сравниваю на самом простом примере, маятнике. Раньше уже наступал на эти грабли (знаковая математика в HDL), поэтому обычно стараюсь свести все к беззнаковому представлению. Тут так не получится, придется разобраться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 1 20 декабря, 2021 Опубликовано 20 декабря, 2021 (изменено) · Жалоба On 12/18/2021 at 3:33 PM, Leka said: Где-то ошибка у меня в знаковой математике Знаковая математика с фиксированной точкой, с умножениями. В программе на Си и в симуляторе Icarus Verilog (синтезируемый код) все работает, как надо. Квартус же при синтезе просто выкидывает весь этот кусок дизайна, сажая соответствующие выходы на 0. Если убираю все описатели "signed" - этот кусок остается, но работает, конечно, неправильно. Получается, надо вручную прописывать такую математику (объявляя все данные, как "unsigned") ? Изменено 20 декабря, 2021 пользователем Leka Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 28 20 декабря, 2021 Опубликовано 20 декабря, 2021 · Жалоба Правильный знаковый умножитель описан на стр. 812 в Quartus Prime Standard Edition Handbook Volume 1, в параграфе 12.3.1. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 1 21 декабря, 2021 Опубликовано 21 декабря, 2021 · Жалоба 22 hours ago, blackfin said: Правильный знаковый умножитель описан ... Вроде так и делаю, специально выделил временные переменные для знакового умножения, не синтезируется. Сделал беззнаковое умножение с рукопашным учетом знака - синтезируется, работает в железе (хотя некоторые странности остаются). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 1 21 декабря, 2021 Опубликовано 21 декабря, 2021 · Жалоба Если выдрать знаковую арифметику с умножениями из конвейера в тестовый пример, синтезируется нормально. Не могу понять, какие вообще м/б причины, по которым замена "unsigned" на "signed" приводит к выкидыванию всей этой арифметики. Условных операций там нет, код простой, примерно: x2=dx*dx; y2=dy*dy; x=x2>>E; y=y2>>E; r=(x+y)-(1<<E); x2=dx*r; y2=dy*r; x=x2>>E; y=y2>>E; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 28 21 декабря, 2021 Опубликовано 21 декабря, 2021 · Жалоба 50 minutes ago, Leka said: Если выдрать знаковую арифметику с умножениями из конвейера в тестовый пример, синтезируется нормально. Не могу понять, какие вообще м/б причины, по которым замена "unsigned" на "signed" приводит к выкидыванию всей этой арифметики. Условных операций там нет, код простой, примерно: Для сдвига числа со знаком нужно использовать оператор: x=x2 >>> E; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 1 21 декабря, 2021 Опубликовано 21 декабря, 2021 · Жалоба 2 hours ago, blackfin said: Для сдвига числа со знаком нужно использовать оператор: x=x2 >>> E; Да, использую ">>>", тут просто опечатался. Сделал знаковое умножение через мегафункцию, в самом дизайне все "unsigned", не работает та часть дизайна, которая зависит от арифметики с умножением (выходы сидят на 0), хотя умножители синтезируются. Где-то дурацкая ошибка у меня, сейчас уже удивляет, почему работает вариант с рукопашным учетом знака. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 1 21 декабря, 2021 Опубликовано 21 декабря, 2021 · Жалоба 23 minutes ago, Leka said: знаковое умножение через мегафункцию, в самом дизайне все "unsigned" работает, исправил опечатку в коде (допустил при правке кода на использование мегафункции). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 1 22 декабря, 2021 Опубликовано 22 декабря, 2021 · Жалоба В общем, имеет большой смысл делать умножение со сдвигом отдельным модулем (как, например, блочную память), в этом случае существенно экономятся аппаратные умножители, тк синтезатор сам не может разделять общие ресурсы между разными конвейерами/стадиями. Код при этом не усложняется, вместо: x2=dx*r; y2=dy*r; x=x2>>>E; y=y2>>>E; так (у меня): x2(dx,r); y2(dy,r); x=x2; y=y2; с одной дополнительной строчкой в топ-модуле: `muldef(W,E) `mul(x2) `mul(y2) В Верилоге unsigned имеет приоритет над signed, случайно залетевший unsigned-дятел может разрушить signed-цивилизацию. Поэтому основной код д/б unsigned, это не мешает знаковой арифметике (в дополнительных кодах) с одинаковой разрядностью операндов. Где нужно signed - выделять в отдельные модули. Имхо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться