Krys 2 21 августа, 2015 Опубликовано 21 августа, 2015 · Жалоба А вообще в Вашей конструкции DSP48 хоть в каком-то виде вставляется, но без PREG? Или он вообще ни в каком виде не вставляется, а суммирование делается на рассыпухе? Возможно, его смущает "after td". А возможно, ena. Попробуйте для начала убрать оба. Возможно, тип сигнала data должен быть signed, а прибавляемая величина - ту же разрядность (т.е. надо единичку расширить), хотя последнее - вряд ли должно влиять. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sallador 0 21 августа, 2015 Опубликовано 21 августа, 2015 · Жалоба А вообще в Вашей конструкции DSP48 хоть в каком-то виде вставляется, но без PREG? Или он вообще ни в каком виде не вставляется, а суммирование делается на рассыпухе? Возможно, его смущает "after td". А возможно, ena. Попробуйте для начала убрать оба. Возможно, тип сигнала data должен быть signed, а прибавляемая величина - ту же разрядность (т.е. надо единичку расширить), хотя последнее - вряд ли должно влиять. 1) да, синтезирует в DSP48 блок, но без PREG. 2) after td - чисто для моделирования, оно выбрасывается синтезатором (проверено 100% на всех проектах, которые я делал) 3) ena - убирал, результат тот же. 4) попробую - о результатах сообщу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 21 августа, 2015 Опубликовано 21 августа, 2015 · Жалоба расширение даст только варнинг о возможном превышении разрядности, ИМХО... Я бы предположил что дело в асинхронном сбросе, который не позволяет сбросить регистр внутри DSP блока. попробуйте синхронный сброс. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Krys 2 21 августа, 2015 Опубликовано 21 августа, 2015 · Жалоба там вроде был где-то параметр указания типа сброса: синхронный или нет. Хотя могу путать. Ну и конечно ничто не мешает всё равно на этом месте синтезатору спотыкаться. Просто не умеет корректно обрабатывать, возможно. Так что Вы может быть очень даже правы )) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sallador 0 21 августа, 2015 Опубликовано 21 августа, 2015 (изменено) · Жалоба расширение даст только варнинг о возможном превышении разрядности, ИМХО... Я бы предположил что дело в асинхронном сбросе, который не позволяет сбросить регистр внутри DSP блока. попробуйте синхронный сброс. Бинго! Причем, а) Если так сделать для разводки только одного компонента счетчтика он триггеры помещает в IOBы :) б) Если так сделать для разводки полного проекта - то видит PREG для счетчика! Все заработало. Проблема решена, спасибо. Более того, удалось для выражения: data <= data_a * data_b + data_с after td; Задействовать PREG и MREG. Изменено 21 августа, 2015 пользователем sallador Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 21 августа, 2015 Опубликовано 21 августа, 2015 · Жалоба кстати надо отчет читать и схематик смотреть. В РТЛ он иногда делает не то что на самом деле. У него какие-то эквивалетные схемы есть, то есть там тоже может участвовать ДСП блок, но регистры будут внешними, а потом в отчете он напишет, что и прочее внутырь попихал, в схематике более объективная картина. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sallador 0 21 августа, 2015 Опубликовано 21 августа, 2015 (изменено) · Жалоба там вроде был где-то параметр указания типа сброса: синхронный или нет. Хотя могу путать. Ну и конечно ничто не мешает всё равно на этом месте синтезатору спотыкаться. Просто не умеет корректно обрабатывать, возможно. Так что Вы может быть очень даже правы )) Это уже в настройках синтеза и имплемента можно поставить. Но мне не нужно весь проект переводить строго на синхронный или асинхронный сброс. :) кстати надо отчет читать и схематик смотреть. В РТЛ он иногда делает не то что на самом деле. У него какие-то эквивалетные схемы есть, то есть там тоже может участвовать ДСП блок, но регистры будут внешними, а потом в отчете он напишет, что и прочее внутырь попихал, в схематике более объективная картина. Так я и читал отчет синтеза, имплемента и в FPGA Editor смотрел. И пока не добился засовывания PREG внутрь - он всегда писал, что Used 32 Flip-flops... Изменено 21 августа, 2015 пользователем sallador Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Krys 2 21 августа, 2015 Опубликовано 21 августа, 2015 · Жалоба Более того, удалось для выражения: data <= data_a * data_b + data_с after td; Задействовать PREG и MREG. Ну об этом я уже хвастался тут Это уже в настройках синтеза и имплемента можно поставить. Но мне не нужно весь проект переводить строго на синхронный или асинхронный сброс. Я не о том. А вот о чём. Если открыть доку на DSP48, то там будет параметр, задающий синхронный или асинхронный сброс в DSP48. Чисто теоретически, синтезатор имел возможность понять по Вашему коду, что этот параметр надо при синтезе выставить в асинхронный режим. Другое дело, что он этого асинхронного сброса почему-то не распознал... Это уже недостатки синтезатора. Возможность у него была. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 21 августа, 2015 Опубликовано 21 августа, 2015 · Жалоба Задам вопрос здесь, если позволите. Есть простой код на 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? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Krys 2 21 августа, 2015 Опубликовано 21 августа, 2015 · Жалоба обучается наверное человек. Он же в конце написал, что потом и умножитель с аккумулятором затолкал туда )) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sallador 0 21 августа, 2015 Опубликовано 21 августа, 2015 (изменено) · Жалоба вопрос из любопытства зачем для обычного счетчика использовать ресурсы DSP48? Ответ: да просто интересно было, правильно ли отработают атрибуты. Плюс в некоторых проектах я зачастую счетчик делаю на DSP48, где достаточно ресурсов. Вообще мне привычнее взять unisim, выдрать оттуда DSP48E1 и все ручками пробить, чтобы было уже наверняка. :) обучается наверное человек. Он же в конце написал, что потом и умножитель с аккумулятором затолкал туда )) Можно и так сказать, просто с этим атрибутом никогда не приходилось работать, а тут решил попробовать, как для разных вещей он отрабатывает. В теме по вашей ссылке - ответил про сумматор. Изменено 21 августа, 2015 пользователем sallador Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться