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

Quartus Pro 20.1 и приколы синтеза для Stratix 10

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

 

Давеча "посчастливилось"  мне впервые заняться сексом  синтезом  для Stratix 10. Честно говоря такой засады не ожидал. До этого из Intel работал максимум с StratixV в Quartus Standard И  как то ожидал что в прошке многие проблемы синтеза наверное будут исправлены. Наивный я. 

Проект не сложный, пока пустой, 300 MHz тактовая.  
Первый прикол как всегда с памятью - вместо генерации SDP памяти 16Кx20 из блоков в 16К x 1 бит Qu упорно лепит  память из блоков 2к x 20 вставляя на выходе огромны мукс. Который естественно валит времянку. Причем как при описании из RTL так и из IP корки памяти :shok:

Второй еще веселее  -  нужен  комплексный умножитель, обычный целочисленный.  Опять же опри писание в RTL или генерация IP корки получаем кашу из DSP умножителей и отдельно кучу регистров толпящихся сзади которые ни как не хотят пиплайнится внутрь.  Но самое прикольно получилось при попытке описать этот умножитель на примитивах fourteennm_mac . При изменении некоторых параметров  примитива fourteennm_mac  Qu требует изменять состав портов этого примитива при инстанцирование. :wacko2:

То есть  если нужно использовать  вход каскадирования  chainin  то нужно включить его параметром и подключить его к порту chainout (что логично). А вот если не нужно - то порта chainin в истансе не должно быть вообще! :wacko2:
Получается  что для chainin  и без нужно 2 разных инстанса! То же касается и  chainout  Если порт не используется его физически не должно быть в инстансе.
То есть уже нужно 4 комбинации инстансов с наличием и отсутствием портов. Ну или делать враппер в котором перебирать все эти возможные комбинации. А если еще и другие порты так же придется перебирать? Жуть.    

Ау, cчастливые пользователи Stratix10. Как вы решаете подобные проблемы? 

 

Удачи! Rob. 

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


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

37 minutes ago, RobFPGA said:

Жуть....    Удачи! Rob. 

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

21 век  - век халтуры.

...Хорошая реклама  для  Quartus Pro 21.3

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


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

1 hour ago, RobFPGA said:

Второй еще веселее  -  нужен  комплексный умножитель, обычный целочисленный.  Опять же опри писание в RTL или генерация IP корки получаем кашу из DSP умножителей и отдельно кучу регистров толпящихся сзади которые ни как не хотят пиплайнится внутрь.

Вы же помните, что у альтеры, архитектура дсп ячейки, в варианте комплексный умножитель отличается от xilinx? Там сумматор сразу на выходе умножителя, без регистра. Поэтому RTL описание, относительно xilinx, нужно менять.

 

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


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

1 minute ago, des00 said:

Вы же помните, что у альтеры, архитектура дсп ячейки, в варианте комплексный умножитель отличается от xilinx? Там сумматор сразу на выходе умножителя, без регистра? Поэтому RTL описание, относительно xilinx, нужно менять.

Естественно я это помню. И часа не прошло как прочитал талмуд про DSP в Stratix 10. Еще не успел забыть :biggrin:

Но сначала я пошел ленивому по пути просто сгенерил IP корку cmul. Хоть тогда уже знал (по приключениям с StratixV) что эта корка у Intel на самом деле обычный RTL, даже без всяких атрибутов. При этом корка генерирует только структуру на 3 умножителях,  а классическую на 4-х для S10 отказывается делать. Потом посмотрев на кошмар после FIT. Нарисовал RTL на 4 умножителях, с учетом внутренней структуры DSP. Бардак после FIT остался но стало чуть лучше по частоте.  Потом решил сделать на примитивах и тут напоролся на эти финты с портами :cray: 

         

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


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

Just now, RobFPGA said:

 Бардак после FIT остался но стало чуть лучше по частоте. 

Что-то тут не то. Комплексные умножители у меня в лет синтезтировались из RTL описания. Правда на квартусах до 15го))

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


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

Just now, des00 said:

Что-то тут не то. Комплексные умножители у меня в лет синтезтировались из RTL описания. Правда на квартусах до 15го))

Они то синтезируются,  но  как то странно,  выход  из памяти идет на вход умножителя напрямую, без регистра, а на выходе умножителя стоят толпой 3 регистра один за другим. Поэтому времянка и сходится.    

 

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


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

1 minute ago, RobFPGA said:

Они то синтезируются,  но  как то странно,  выход  из памяти идет на вход умножителя напрямую, без регистра, а на выходе умножителя стоят толпой 3 регистра один за другим. Поэтому времянка и сходится.   

нету квартуса под рукой. так бы проверил. ИМХО что-то тут не то, думаю давно бы уже заметили кривость квартуса и откатили бы его.

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


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

1 hour ago, RobFPGA said:

Первый прикол как всегда с памятью - вместо генерации SDP памяти 16Кx20 из блоков в 16К x 1 бит Qu упорно лепит  память из блоков 2к x 20 вставляя на выходе огромны мукс. Который естественно валит времянку. Причем как при описании из RTL так и из IP корки памяти 

Есть же атрибуты: (* ramstyle = "M20K", max_depth = 16384 *)

Или с ними тоже не получается?

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


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

Доброе пожаловать в S10 ) Сюрпризов будет много. У них есть отдельный мануал, как решать типовые задачи под S10, с учетом его архитектуры. 

Есть еще особенный мануал, как бороться с времянкой именно на s10, где каждый совет сводит к тому, что нужно отказаться от привыкших констрейнов и начать юзать все их решения, которые они упаковали под словом Retime. То есть они всячески намекают, что если у вас проблемы со времянкой, это не они виноваты, а это вы не до изучали архитектуру. 

 

20.1 сюрпризы тоже вносит. 

Изменено пользователем new123

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


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

18 minutes ago, blackfin said:

Есть же атрибуты: (* ramstyle = "M20K", max_depth = 16384 *)

Или с ними тоже не получается?

Ага, не получается  - на max_depth = 16384  Qu  пишет в  логах  source assignments -  "max_depth  16384  Invalid assignment name",

И судя по доками на память в S10 (после внимательного повторного чтения) не зря так пишет  - 

Quote

Intel Stratix 10 Embedded Memory IP References

Set the maximum block depth to

• Auto: Auto, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, or 16384
• MLAB: Auto or 32
M20K: Auto, 512, 1024, or 2048

Вот те и "M20K"  :scratch_one-s_head:  

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


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

13 minutes ago, RobFPGA said:

Ага, не получается  - на max_depth = 16384  Qu  пишет в  логах  source assignments -  "max_depth  16384  Invalid assignment name",

И судя по доками на память в S10 (после внимательного повторного чтения) не зря так пишет  - 

Вот те и "M20K"  :scratch_one-s_head:  

Да, похоже, что M20K не получить. Тоже посмотрел нет-лист в своем проекте, везде блоки по 2048 бит плюс большой MUX.

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


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

ничоси  https://www.intel.com/content/www/us/en/programmable/documentation/vgo1439451000304.html

2.5. Force-to-Zero

The Force-to-Zero feature helps improve timing when a RAM memory block selected is larger than a single memory block. This feature is applicable only for M20K blocks.

For example, if the selected RAM memory block has a memory depth of 4096, the M20K block, which supports only a maximum memory depth of 2048, will require two RAMs to be multiplexed together. When you engage with this feature, you can replace OR gate with multiplexing circuitry at the output of the M20K block when performing address width stitching. As the MSB of address controls the read enable signal in the Force-to-Zero mode, the outputs of other memory blocks are forced to zero when the read enable signal is deasserted. This results the data output being read out from the output of the selected memory block only.

You have the option to turn on Enable Force-to-Zero feature in the parameter editors of the RAM/ROM IPs.

Note: When you turn on Enable Force-to-Zero feature, the read enable signal does not retain previous values when you deassert the signal.

похоже дело во встроенной ECC. Figure 7. ECC Block Diagram for M20K Memory Судя по схеме нет ее обхода и она всегда работает. Отсюда и ноги растут.

Ну и 2.12. Intel Stratix 10 Embedded Memory Configurations четко написано 2048х8(10) самая разрядная схема.

Про DSP ячейки: https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/hb/stratix-10/ug-s10-dsp.pdf

3.1.2. Multiplier Adder Sum Mode и 3.1.3. Independent Complex Multiplier, прямо указано что должно все четко ложиться, с 4 слоями регистров в DSP блок. Так что надо смотреть, либо действительно глюк квартуса, либо что-то по управлению регистрами/DSP ячейками не так описано. Например 3.1.2, показано что управление add/sub должно тоже проходить через все слои регистров) Ну еще, как вариант (с хилыми мне помогло), набить четкую разрядность операнда как у IP блока

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


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

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

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

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

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

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

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

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

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

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