Bad0512 2 29 июня, 2015 Опубликовано 29 июня, 2015 · Жалоба Теперь вот самый обычный сумматор не хочет на DSP-блоках синтезироваться... то ли лыжи не едут по запарке... BEAM_BW = 16. Предположил, что синтезатор "считает", что слишком жирно ставить сумматор для складывания 16 битов. Поставил 30 - не полегчало. В настройках синтеза в ISE стоит -use_dsp48 = Auto. Предположил, что в коде что-то криво описано, и такой сумматор в принципе невпихуем в DSP. Поставил Auto Max - реализовало на DSP. Т.е. код получается нормальный? Тогда почему же не синтезирует при Auto? Ему же русским по белому написано в коде: (* use_dsp48 = "yes" *) Не могу сказать за XST (это нигде явно в доках не описано), но Синплифай ведёт себя так : сумматор будет сделан на DSP только если один из операндов суммирования есть результат умножения (это если речь про выходной сумматор) или если сумма далее по коду умножается на что-то (входной сумматор). В остальных случаях лепит сумматоры на логике. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Krys 2 29 июня, 2015 Опубликовано 29 июня, 2015 · Жалоба Странно, что аккумулятор со входом сброса синтезируется в DSP-блоке нормально... // separating I and Q components of the input signal wire signed [DIN_BW-1 : 0] din_i, din_q; assign din_i = din_axis_tdata[DIN_BW-1 : 0]; assign din_q = din_axis_tdata[AXIS_DATA_BW-1 : DIN_BW]; // pipeline register inside of adder block (* use_dsp48 = "yes" *) reg signed [sUM_DATA_BW-1 : 0] din_i_pp_int, din_q_pp_int; reg din_valid_pp; // register to time align with internal data pipeline above // result of adder (* use_dsp48 = "yes" *) reg signed [sUM_DATA_BW-1 : 0] sum_i_acc, sum_q_acc; always @(posedge clk) begin din_i_pp_int <= {{DBF_BW_INCR{din_i[DIN_BW-1]}}, din_i}; din_q_pp_int <= {{DBF_BW_INCR{din_q[DIN_BW-1]}}, din_q}; din_valid_pp <= din_axis_tvalid; end // accumulator with reset always @(posedge clk) begin if(!din_valid_pp) begin sum_i_acc <= 0; sum_q_acc <= 0; end else begin sum_i_acc <= sum_i_acc + din_i_pp_int; sum_q_acc <= sum_q_acc + din_q_pp_int; end end Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bad0512 2 29 июня, 2015 Опубликовано 29 июня, 2015 · Жалоба Странно, что аккумулятор со входом сброса синтезируется в DSP-блоке нормально... Вообще идея использовать DSP блоки в качестве сумматоров довольно странная. В современных ПЛИС за счёт логики переноса производительность сумматоров на DSP и на "рассыпухе" практически сравнялась. Поэтому гробить DSP блоки на банальное суммирование как-то не очень рационально. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Krys 2 29 июня, 2015 Опубликовано 29 июня, 2015 · Жалоба вопрос чисто принципиальный. Синтезатор ослушался прямого указания в виде (* use_dsp48 = "yes" *). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TRILLER 0 29 июня, 2015 Опубликовано 29 июня, 2015 · Жалоба ...прямого указания в виде (* use_dsp48 = "yes" *). За XST не скажу, но в Симплифае это всего лишь рекомендация. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Krys 2 6 июля, 2015 Опубликовано 6 июля, 2015 · Жалоба ну понятно, что оно везде "рекомендация", т.к. если я атрибутом попрошу разместить какой-то элемент там, где он размещён быть не может чисто физически (например опишу массив памяти под атрибутом USE_DSP48), то такая "рекомендация" будет проигнорирована. А в моём случае всё реально. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sallador 0 21 августа, 2015 Опубликовано 21 августа, 2015 · Жалоба Теперь вот самый обычный сумматор не хочет на DSP-блоках синтезироваться... то ли лыжи не едут по запарке... // separating I and Q components of the local beamformers signal and the one from adjacent FPGA wire signed [bEAM_BW-1 : 0] loc_i, loc_q, adj_i, adj_q; assign loc_i = fifo_out [bEAM_BW -1 : 0 ]; assign loc_q = fifo_out [bEAM_BW*2 -1 : BEAM_BW]; assign adj_i = adj_data_f_al [bEAM_BW -1 : 0 ]; assign adj_q = adj_data_f_al [bEAM_BW*2 -1 : BEAM_BW]; // pipeline registers inside of adder DSP block (* use_dsp48 = "yes" *) reg signed [bEAM_BW-1 : 0] loc_i_int, loc_q_int, adj_i_int, adj_q_int; always @(posedge clk) begin loc_i_int <= loc_i; loc_q_int <= loc_q; adj_i_int <= adj_i; adj_q_int <= adj_q; end // adder itself (* use_dsp48 = "yes" *) reg signed [bEAM_BW-1 : 0] sum_i, sum_q; always @(posedge clk) begin sum_i <= loc_i_int + adj_i_int; sum_q <= loc_q_int + adj_q_int; end BEAM_BW = 16. Предположил, что синтезатор "считает", что слишком жирно ставить сумматор для складывания 16 битов. Поставил 30 - не полегчало. В настройках синтеза в ISE стоит -use_dsp48 = Auto. Предположил, что в коде что-то криво описано, и такой сумматор в принципе невпихуем в DSP. Поставил Auto Max - реализовало на DSP. Т.е. код получается нормальный? Тогда почему же не синтезирует при Auto? Ему же русским по белому написано в коде: (* use_dsp48 = "yes" *) Не знаю, как на verilog, а на VHDL мне помогло атрибут прописать не для сигнала, а для entity, в котором сделал обычный сумматор как отдельный компонент. attribute use_dsp48 : string; attribute use_dsp48 of add_example : entity is "yes"; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Krys 2 24 августа, 2015 Опубликовано 24 августа, 2015 · Жалоба Мне "как отдельный компонент" не хочется - нарушается читабельность. У меня этих DSP-шек в одном файле описывается несколько, и умещается всё это в один экран кода, читабельность на высоте ))) Если уж делается "отдельный компонент", то можно и макроблок вставить, а там уже резвиться и использовать полный функционал, который, например, я не смог реализовать на RTL в первом сообщении этой темы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Krys 2 13 марта, 2017 Опубликовано 13 марта, 2017 · Жалоба Ещё некоторая дополнительная информация от моего коллеги, что невозможно на RTL написать соединение PCOUT -> PCIN, если эти порты находятся в разных модулях: https://forums.xilinx.com/t5/Welcome-Join/C...ros/td-p/754013 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться