Jump to content

    
Sign in to follow this  
eugen_pcad_ru

Использование DSP48A для аккумулятора

Recommended Posts

А вообще в Вашей конструкции DSP48 хоть в каком-то виде вставляется, но без PREG? Или он вообще ни в каком виде не вставляется, а суммирование делается на рассыпухе?

Возможно, его смущает "after td". А возможно, ena. Попробуйте для начала убрать оба.

Возможно, тип сигнала data должен быть signed, а прибавляемая величина - ту же разрядность (т.е. надо единичку расширить), хотя последнее - вряд ли должно влиять.

Share this post


Link to post
Share on other sites
А вообще в Вашей конструкции DSP48 хоть в каком-то виде вставляется, но без PREG? Или он вообще ни в каком виде не вставляется, а суммирование делается на рассыпухе?

Возможно, его смущает "after td". А возможно, ena. Попробуйте для начала убрать оба.

Возможно, тип сигнала data должен быть signed, а прибавляемая величина - ту же разрядность (т.е. надо единичку расширить), хотя последнее - вряд ли должно влиять.

1) да, синтезирует в DSP48 блок, но без PREG.

2) after td - чисто для моделирования, оно выбрасывается синтезатором (проверено 100% на всех проектах, которые я делал)

3) ena - убирал, результат тот же.

4) попробую - о результатах сообщу.

 

Share this post


Link to post
Share on other sites

расширение даст только варнинг о возможном превышении разрядности, ИМХО...

 

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

Share this post


Link to post
Share on other sites

там вроде был где-то параметр указания типа сброса: синхронный или нет. Хотя могу путать. Ну и конечно ничто не мешает всё равно на этом месте синтезатору спотыкаться. Просто не умеет корректно обрабатывать, возможно. Так что Вы может быть очень даже правы ))

Share this post


Link to post
Share on other sites
расширение даст только варнинг о возможном превышении разрядности, ИМХО...

 

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

Бинго!

 

Причем,

 

а) Если так сделать для разводки только одного компонента счетчтика он триггеры помещает в IOBы :)

б) Если так сделать для разводки полного проекта - то видит PREG для счетчика! Все заработало.

 

Проблема решена, спасибо.

 

Более того, удалось для выражения:

 

data <= data_a * data_b + data_с after td;

 

Задействовать PREG и MREG.

Edited by sallador

Share this post


Link to post
Share on other sites

кстати

надо отчет читать и схематик смотреть.

 

В РТЛ он иногда делает не то что на самом деле. У него какие-то эквивалетные схемы есть, то есть там тоже может участвовать ДСП блок, но регистры будут внешними, а потом в отчете он напишет, что и прочее внутырь попихал, в схематике более объективная картина.

Share this post


Link to post
Share on other sites
там вроде был где-то параметр указания типа сброса: синхронный или нет. Хотя могу путать. Ну и конечно ничто не мешает всё равно на этом месте синтезатору спотыкаться. Просто не умеет корректно обрабатывать, возможно. Так что Вы может быть очень даже правы ))

Это уже в настройках синтеза и имплемента можно поставить. Но мне не нужно весь проект переводить строго на синхронный или асинхронный сброс. :)

 

кстати

надо отчет читать и схематик смотреть.

 

В РТЛ он иногда делает не то что на самом деле. У него какие-то эквивалетные схемы есть, то есть там тоже может участвовать ДСП блок, но регистры будут внешними, а потом в отчете он напишет, что и прочее внутырь попихал, в схематике более объективная картина.

Так я и читал отчет синтеза, имплемента и в FPGA Editor смотрел. И пока не добился засовывания PREG внутрь - он всегда писал, что Used 32 Flip-flops...

Edited by sallador

Share this post


Link to post
Share on other sites
Более того, удалось для выражения:

data <= data_a * data_b + data_с after td;

Задействовать PREG и MREG.

Ну об этом я уже хвастался тут

 

 

Это уже в настройках синтеза и имплемента можно поставить. Но мне не нужно весь проект переводить строго на синхронный или асинхронный сброс.
Я не о том. А вот о чём.

Если открыть доку на DSP48, то там будет параметр, задающий синхронный или асинхронный сброс в DSP48. Чисто теоретически, синтезатор имел возможность понять по Вашему коду, что этот параметр надо при синтезе выставить в асинхронный режим. Другое дело, что он этого асинхронного сброса почему-то не распознал... Это уже недостатки синтезатора. Возможность у него была.

 

Share this post


Link to post
Share on other sites
Задам вопрос здесь, если позволите.

 

Есть простой код на VHDL:

signal data : std_logic_vector(WIDTH-1 downto 0);

attribute use_dsp48 : string;
attribute use_dsp48 of data : signal is "yes"; 

begin

pr_cnt: process(rst, clk)
begin
    if (rst = '1') then
        data <= (others => '0');
    elsif rising_edge(clk) then
        if ena = '1' then
            data <= data + '1' after td;
        end if;
    end if;
end process;
cnt_out <= data;

 

При разводке хотелось бы задествовать регистр PREG внутри DSP блока.

Атрибут KEEP не помог, как бы я его не крутил (хотя он нужен как раз для выноса регистров вне DSP).

 

Xilinx: XST by default tries to infer and implement the maximum

macro configuration, including as many registers as possible in the DSP48

 

Реально ли для счетчика задействовать PREG?

вопрос из любопытства зачем для обычного счетчика использовать ресурсы DSP48?

Share this post


Link to post
Share on other sites
вопрос из любопытства зачем для обычного счетчика использовать ресурсы DSP48?

Ответ: да просто интересно было, правильно ли отработают атрибуты.

Плюс в некоторых проектах я зачастую счетчик делаю на DSP48, где достаточно ресурсов.

 

Вообще мне привычнее взять unisim, выдрать оттуда DSP48E1 и все ручками пробить, чтобы было уже наверняка. :)

 

обучается наверное человек. Он же в конце написал, что потом и умножитель с аккумулятором затолкал туда ))

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

В теме по вашей ссылке - ответил про сумматор.

Edited by sallador

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this