Jump to content

    

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

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

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

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

Edited by jenya7

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites
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?

Edited by jenya7

Share this post


Link to post
Share on other sites
21 minutes ago, jenya7 said:

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

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

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

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

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

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

Share this post


Link to post
Share on other sites
1 hour ago, des00 said:

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

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

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

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

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

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

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

Share this post


Link to post
Share on other sites
Just now, jenya7 said:

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

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

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

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

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

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

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

 

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this