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

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

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

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

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

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


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

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

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

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

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

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

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

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

 

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


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

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

 

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

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


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

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

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


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

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

 

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

Бинго!

 

Причем,

 

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

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

 

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

 

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

 

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

 

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

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

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


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

кстати

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

 

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

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


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

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

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

 

кстати

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

 

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

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

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

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


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

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

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

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

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

 

 

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

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

 

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


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

Задам вопрос здесь, если позволите.

 

Есть простой код на 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?

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


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

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

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


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

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

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

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

 

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

 

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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