jenya7 0 20 мая, 2020 Опубликовано 20 мая, 2020 (изменено) · Жалоба Запускаю компиляцию. На каком то этапе получаю предупреждение Quote Warning (276002): Cannot convert all sets of registers into RAM megafunctions when creating nodes; therefore, the resulting number of registers remaining in design can cause longer compilation time or result in insufficient memory to complete Analysis and Synthesis и после 20+ минут получаю ошибку Quote Error (170011): Design contains 118660 blocks of type combinational node. However, the device contains only 49760 blocks. Error (171000): Can't fit design in device Проект может побольше чем предидущие, но не в разы. Самый большой проект занимает 50% ресурсов. Ну сколько этот может занимать 60, 70 максимум. Как можно узнать что отжирает ресурсы? Изменено 20 мая, 2020 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 20 мая, 2020 Опубликовано 20 мая, 2020 · Жалоба написано же, черным или там синем в окне логов: Cannot convert all sets of registers into RAM megafunctions when creating nodes; где то вы описываете массив без учета возможностей памяти: асинхронные/синхронные сбросы, множественное одновременное чтение/запись. ну и еще могут быть проблемы с описанием памяти на структурах или трех и более мерной памяти) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 20 мая, 2020 Опубликовано 20 мая, 2020 (изменено) · Жалоба 1 hour ago, des00 said: написано же, черным или там синем в окне логов: Cannot convert all sets of registers into RAM megafunctions when creating nodes; где то вы описываете массив без учета возможностей памяти: асинхронные/синхронные сбросы, множественное одновременное чтение/запись. ну и еще могут быть проблемы с описанием памяти на структурах или трех и более мерной памяти) использую конструкции из прошлых проектов, которые хорошо работают. но у меня есть одно подозрение я пишу-читаю значения используя связку адрес-значение when ST_WORD_READ => case (sspi_addr) is when X"001C" => sspi_data_out <= l_dac_val1_buf; when X"001D" => sspi_data_out <= l_dac_val2_buf; when X"001E" => sspi_data_out <= l_dac_val3_buf; when X"0020" => sspi_data_out <= r_dac_val1_buf; when X"0021" => sspi_data_out <= r_dac_val2_buf; when X"0022" => sspi_data_out <= r_dac_val3_buf; end case; when ST_WORD_WRITE => case (sspi_addr) is when X"001C" => l_dac_val1_buf <= sspi_data_in; when X"001D" => l_dac_val2_buf <= sspi_data_in; when X"001E" => l_dac_val3_buf <= sspi_data_in; when X"0020" => r_dac_val1_buf <= sspi_data_in; when X"0021" => r_dac_val2_buf <= sspi_data_in; when X"0022" => r_dac_val3_buf <= sspi_data_in; end case; но у меня таких адресов 70. бывали проекты 100 и более адресов. А может такое быть если пины топ энтити не подключеня в Pin Assignment? Изменено 20 мая, 2020 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 20 мая, 2020 Опубликовано 20 мая, 2020 · Жалоба 21 minutes ago, jenya7 said: использую конструкции из прошлых проектов, которые хорошо работают. но у меня есть одно подозрение я пишу-читаю значения используя связку адрес-значение но у меня таких адресов 70. бывали проекты 100 и более адресов. то что раньше работало ни о чем не говорит. квартусу не хватает ресурсов, берите логи ресурсов после синтеза, смотрите что выбивается из вашей картины мира, где именно вместо памяти регистры и вперед. Ну а по поводу вашего кода, ИМХО я бы делал через теневую память и ее сборщик. Выиграли бы ресурсы на чтение) ЗЫ. Надеюсь вы же помните, что латентность чтения из блочной памяти минимум 1 такт и если его в вашей логике нет, то будет кучка регистров) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 20 мая, 2020 Опубликовано 20 мая, 2020 · Жалоба 1 hour ago, des00 said: то что раньше работало ни о чем не говорит. квартусу не хватает ресурсов, берите логи ресурсов после синтеза, смотрите что выбивается из вашей картины мира, где именно вместо памяти регистры и вперед. Ну а по поводу вашего кода, ИМХО я бы делал через теневую память и ее сборщик. Выиграли бы ресурсы на чтение) ЗЫ. Надеюсь вы же помните, что латентность чтения из блочной памяти минимум 1 такт и если его в вашей логике нет, то будет кучка регистров) только три вопроса где находяться логи ? как делать теневую память и ее сборщик? как знать есть такт или нет? у меня кейс сидит в процессе и все происходит по клоку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 20 мая, 2020 Опубликовано 20 мая, 2020 · Жалоба Just now, jenya7 said: только три вопроса где находяться логи ? как делать теневую память и ее сборщик? как знать есть такт или нет? у меня кейс сидит в процессе и все происходит по клоку. 1. Квартуса давно нет под рукой, ЕМНИП у вас же там есть Report Viewer, где отчет по сборке, там по вкладкам и бежите. Ну или текстовые rpt файлы в обилии в рабочих директориях квартуса, после каждой операции. Может быть вам на Ква Туториал нужно прочитать?. 2. Сначала разберитесь откуда у вас такой рост ресурса, потом уже можно будет в тетрадке порисовать как сделать ваш readback 3. Исходя из вашего описания, от фазы адреса до регистра чтения должен быть такт. Если это есть, значит, при выполнении прочих условий, ваша логика может быть отражена в память. А так, документацию на блочную память вашей плис стоило бы прочитать, как и документацию на логику и дсп. Снимает кучу вопросов. ЗЫ. Все вот это, кстати в книге курс молодого бойца плис описано, вам раз 5 рекомендовал прочитать ее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться