RobFPGA 30 30 ноября, 2021 Опубликовано 30 ноября, 2021 · Жалоба Приветствую! Давеча "посчастливилось" мне впервые заняться сексом синтезом для Stratix 10. Честно говоря такой засады не ожидал. До этого из Intel работал максимум с StratixV в Quartus Standard И как то ожидал что в прошке многие проблемы синтеза наверное будут исправлены. Наивный я. Проект не сложный, пока пустой, 300 MHz тактовая. Первый прикол как всегда с памятью - вместо генерации SDP памяти 16Кx20 из блоков в 16К x 1 бит Qu упорно лепит память из блоков 2к x 20 вставляя на выходе огромны мукс. Который естественно валит времянку. Причем как при описании из RTL так и из IP корки памяти Второй еще веселее - нужен комплексный умножитель, обычный целочисленный. Опять же опри писание в RTL или генерация IP корки получаем кашу из DSP умножителей и отдельно кучу регистров толпящихся сзади которые ни как не хотят пиплайнится внутрь. Но самое прикольно получилось при попытке описать этот умножитель на примитивах fourteennm_mac . При изменении некоторых параметров примитива fourteennm_mac Qu требует изменять состав портов этого примитива при инстанцирование. То есть если нужно использовать вход каскадирования chainin то нужно включить его параметром и подключить его к порту chainout (что логично). А вот если не нужно - то порта chainin в истансе не должно быть вообще! Получается что для chainin и без нужно 2 разных инстанса! То же касается и chainout Если порт не используется его физически не должно быть в инстансе. То есть уже нужно 4 комбинации инстансов с наличием и отсутствием портов. Ну или делать враппер в котором перебирать все эти возможные комбинации. А если еще и другие порты так же придется перебирать? Жуть. Ау, cчастливые пользователи Stratix10. Как вы решаете подобные проблемы? Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Мур 1 30 ноября, 2021 Опубликовано 30 ноября, 2021 · Жалоба 37 minutes ago, RobFPGA said: Жуть.... Удачи! Rob. Приветствую. 21 век - век халтуры. ...Хорошая реклама для Quartus Pro 21.3 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 30 ноября, 2021 Опубликовано 30 ноября, 2021 · Жалоба 1 hour ago, RobFPGA said: Второй еще веселее - нужен комплексный умножитель, обычный целочисленный. Опять же опри писание в RTL или генерация IP корки получаем кашу из DSP умножителей и отдельно кучу регистров толпящихся сзади которые ни как не хотят пиплайнится внутрь. Вы же помните, что у альтеры, архитектура дсп ячейки, в варианте комплексный умножитель отличается от xilinx? Там сумматор сразу на выходе умножителя, без регистра. Поэтому RTL описание, относительно xilinx, нужно менять. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 30 30 ноября, 2021 Опубликовано 30 ноября, 2021 · Жалоба 1 minute ago, des00 said: Вы же помните, что у альтеры, архитектура дсп ячейки, в варианте комплексный умножитель отличается от xilinx? Там сумматор сразу на выходе умножителя, без регистра? Поэтому RTL описание, относительно xilinx, нужно менять. Естественно я это помню. И часа не прошло как прочитал талмуд про DSP в Stratix 10. Еще не успел забыть Но сначала я пошел ленивому по пути просто сгенерил IP корку cmul. Хоть тогда уже знал (по приключениям с StratixV) что эта корка у Intel на самом деле обычный RTL, даже без всяких атрибутов. При этом корка генерирует только структуру на 3 умножителях, а классическую на 4-х для S10 отказывается делать. Потом посмотрев на кошмар после FIT. Нарисовал RTL на 4 умножителях, с учетом внутренней структуры DSP. Бардак после FIT остался но стало чуть лучше по частоте. Потом решил сделать на примитивах и тут напоролся на эти финты с портами Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 30 ноября, 2021 Опубликовано 30 ноября, 2021 · Жалоба Just now, RobFPGA said: Бардак после FIT остался но стало чуть лучше по частоте. Что-то тут не то. Комплексные умножители у меня в лет синтезтировались из RTL описания. Правда на квартусах до 15го)) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 30 30 ноября, 2021 Опубликовано 30 ноября, 2021 · Жалоба Just now, des00 said: Что-то тут не то. Комплексные умножители у меня в лет синтезтировались из RTL описания. Правда на квартусах до 15го)) Они то синтезируются, но как то странно, выход из памяти идет на вход умножителя напрямую, без регистра, а на выходе умножителя стоят толпой 3 регистра один за другим. Поэтому времянка и сходится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 30 ноября, 2021 Опубликовано 30 ноября, 2021 · Жалоба 1 minute ago, RobFPGA said: Они то синтезируются, но как то странно, выход из памяти идет на вход умножителя напрямую, без регистра, а на выходе умножителя стоят толпой 3 регистра один за другим. Поэтому времянка и сходится. нету квартуса под рукой. так бы проверил. ИМХО что-то тут не то, думаю давно бы уже заметили кривость квартуса и откатили бы его. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 23 30 ноября, 2021 Опубликовано 30 ноября, 2021 · Жалоба 1 hour ago, RobFPGA said: Первый прикол как всегда с памятью - вместо генерации SDP памяти 16Кx20 из блоков в 16К x 1 бит Qu упорно лепит память из блоков 2к x 20 вставляя на выходе огромны мукс. Который естественно валит времянку. Причем как при описании из RTL так и из IP корки памяти Есть же атрибуты: (* ramstyle = "M20K", max_depth = 16384 *) Или с ними тоже не получается? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 30 ноября, 2021 Опубликовано 30 ноября, 2021 (изменено) · Жалоба Доброе пожаловать в S10 ) Сюрпризов будет много. У них есть отдельный мануал, как решать типовые задачи под S10, с учетом его архитектуры. Есть еще особенный мануал, как бороться с времянкой именно на s10, где каждый совет сводит к тому, что нужно отказаться от привыкших констрейнов и начать юзать все их решения, которые они упаковали под словом Retime. То есть они всячески намекают, что если у вас проблемы со времянкой, это не они виноваты, а это вы не до изучали архитектуру. 20.1 сюрпризы тоже вносит. Изменено 30 ноября, 2021 пользователем new123 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 30 30 ноября, 2021 Опубликовано 30 ноября, 2021 · Жалоба 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" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 23 30 ноября, 2021 Опубликовано 30 ноября, 2021 · Жалоба 13 minutes ago, RobFPGA said: Ага, не получается - на max_depth = 16384 Qu пишет в логах source assignments - "max_depth 16384 Invalid assignment name", И судя по доками на память в S10 (после внимательного повторного чтения) не зря так пишет - Вот те и "M20K" Да, похоже, что M20K не получить. Тоже посмотрел нет-лист в своем проекте, везде блоки по 2048 бит плюс большой MUX. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 30 ноября, 2021 Опубликовано 30 ноября, 2021 · Жалоба ничоси 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 блока Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться