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

Ошибка при компиляции

Запускаю компиляцию. На каком то этапе получаю предупреждение

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 максимум.

Как можно узнать что отжирает ресурсы?

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

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


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

написано же, черным или там синем в окне логов:

Cannot convert all sets of registers into RAM megafunctions when creating nodes;

где то вы описываете массив без учета возможностей памяти: асинхронные/синхронные сбросы, множественное одновременное чтение/запись. ну и еще могут быть проблемы с описанием памяти на структурах или трех и более мерной памяти)

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


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

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?

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

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


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

21 minutes ago, jenya7 said:

использую конструкции из прошлых проектов, которые хорошо работают. но у меня есть одно подозрение

я пишу-читаю значения используя связку адрес-значение

но у меня таких адресов 70. бывали проекты 100 и более адресов.

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

Ну а по поводу вашего кода, ИМХО я бы делал через теневую память и ее сборщик. Выиграли бы ресурсы на чтение)

ЗЫ. Надеюсь вы же помните, что латентность чтения из блочной памяти минимум 1 такт и если его в вашей логике нет, то будет кучка регистров)

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


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

1 hour ago, des00 said:

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

Ну а по поводу вашего кода, ИМХО я бы делал через теневую память и ее сборщик. Выиграли бы ресурсы на чтение)

ЗЫ. Надеюсь вы же помните, что латентность чтения из блочной памяти минимум 1 такт и если его в вашей логике нет, то будет кучка регистров)

только три вопроса

где находяться логи ?

как делать теневую память и ее сборщик?

как знать есть такт или нет? у меня кейс сидит в процессе и все происходит по клоку.

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


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

Just now, jenya7 said:

только три вопроса 

где находяться логи ?

как делать теневую память и ее сборщик?

как знать есть такт или нет? у меня кейс сидит в процессе и все происходит по клоку.

1. Квартуса давно нет под рукой, ЕМНИП у вас же там есть Report Viewer, где отчет по сборке, там по вкладкам и бежите. Ну или текстовые rpt файлы в обилии в рабочих директориях квартуса, после каждой операции. Может быть вам на Ква Туториал нужно прочитать?.

2. Сначала разберитесь откуда у вас такой рост ресурса, потом уже можно будет в тетрадке порисовать как сделать ваш readback

3. Исходя из вашего описания, от фазы адреса до регистра чтения должен быть такт. Если это есть, значит, при выполнении прочих условий, ваша логика может быть отражена в память. А так, документацию на блочную память вашей плис стоило бы прочитать, как и документацию на логику и дсп. Снимает кучу вопросов.

 

ЗЫ. Все вот это, кстати в книге курс молодого бойца плис описано, вам раз 5 рекомендовал прочитать ее.

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


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

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

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

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

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

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

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

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

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

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