реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> как на RTL заставить синтезатор использовать выделенные межкаскадные связи BCOUT-> BCIN в DSP48 Xilinx?, если вставить макрос DSP48, то связь есть, а если * на RTL - то нет
Bad0512
сообщение Jun 29 2015, 05:37
Сообщение #16


Знающий
****

Группа: Свой
Сообщений: 779
Регистрация: 11-05-07
Из: Томск
Пользователь №: 27 650



Цитата(Krys @ Jun 29 2015, 10:43) *
Теперь вот самый обычный сумматор не хочет на DSP-блоках синтезироваться... то ли лыжи не едут по запарке...
BEAM_BW = 16. Предположил, что синтезатор "считает", что слишком жирно ставить сумматор для складывания 16 битов. Поставил 30 - не полегчало.
В настройках синтеза в ISE стоит -use_dsp48 = Auto. Предположил, что в коде что-то криво описано, и такой сумматор в принципе невпихуем в DSP. Поставил Auto Max - реализовало на DSP. Т.е. код получается нормальный? Тогда почему же не синтезирует при Auto? Ему же русским по белому написано в коде:
(* use_dsp48 = "yes" *)

Не могу сказать за XST (это нигде явно в доках не описано), но Синплифай ведёт себя так : сумматор будет сделан на DSP только если один из операндов суммирования есть результат умножения (это если речь про выходной сумматор) или если сумма далее по коду умножается на что-то (входной сумматор). В остальных случаях лепит сумматоры на логике.
Go to the top of the page
 
+Quote Post
Krys
сообщение Jun 29 2015, 06:36
Сообщение #17


Профессионал
*****

Группа: Свой
Сообщений: 1 994
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



Странно, что аккумулятор со входом сброса синтезируется в DSP-блоке нормально...
CODE
// 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


--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
Go to the top of the page
 
+Quote Post
Bad0512
сообщение Jun 29 2015, 08:57
Сообщение #18


Знающий
****

Группа: Свой
Сообщений: 779
Регистрация: 11-05-07
Из: Томск
Пользователь №: 27 650



Цитата(Krys @ Jun 29 2015, 12:36) *
Странно, что аккумулятор со входом сброса синтезируется в DSP-блоке нормально...

Вообще идея использовать DSP блоки в качестве сумматоров довольно странная. В современных ПЛИС за счёт логики переноса производительность сумматоров на DSP и на "рассыпухе" практически сравнялась.
Поэтому гробить DSP блоки на банальное суммирование как-то не очень рационально.

Go to the top of the page
 
+Quote Post
Krys
сообщение Jun 29 2015, 10:02
Сообщение #19


Профессионал
*****

Группа: Свой
Сообщений: 1 994
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



вопрос чисто принципиальный. Синтезатор ослушался прямого указания в виде (* use_dsp48 = "yes" *).


--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
Go to the top of the page
 
+Quote Post
TRILLER
сообщение Jun 29 2015, 10:31
Сообщение #20


Частый гость
**

Группа: Свой
Сообщений: 159
Регистрация: 17-02-09
Из: Санкт-Петербург
Пользователь №: 45 001



Цитата(Krys @ Jun 29 2015, 13:02) *
...прямого указания в виде (* use_dsp48 = "yes" *).

За XST не скажу, но в Симплифае это всего лишь рекомендация.
Go to the top of the page
 
+Quote Post
Krys
сообщение Jul 6 2015, 02:09
Сообщение #21


Профессионал
*****

Группа: Свой
Сообщений: 1 994
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



ну понятно, что оно везде "рекомендация", т.к. если я атрибутом попрошу разместить какой-то элемент там, где он размещён быть не может чисто физически (например опишу массив памяти под атрибутом USE_DSP48), то такая "рекомендация" будет проигнорирована. А в моём случае всё реально.


--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
Go to the top of the page
 
+Quote Post
sallador
сообщение Aug 21 2015, 11:14
Сообщение #22


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 10-05-11
Пользователь №: 64 903



Цитата(Krys @ Jun 29 2015, 08:43) *
Теперь вот самый обычный сумматор не хочет на DSP-блоках синтезироваться... то ли лыжи не едут по запарке...
CODE
// 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";
Go to the top of the page
 
+Quote Post
Krys
сообщение Aug 24 2015, 04:19
Сообщение #23


Профессионал
*****

Группа: Свой
Сообщений: 1 994
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



Мне "как отдельный компонент" не хочется - нарушается читабельность. У меня этих DSP-шек в одном файле описывается несколько, и умещается всё это в один экран кода, читабельность на высоте )))
Если уж делается "отдельный компонент", то можно и макроблок вставить, а там уже резвиться и использовать полный функционал, который, например, я не смог реализовать на RTL в первом сообщении этой темы.


--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
Go to the top of the page
 
+Quote Post
Krys
сообщение Mar 13 2017, 02:30
Сообщение #24


Профессионал
*****

Группа: Свой
Сообщений: 1 994
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



Ещё некоторая дополнительная информация от моего коллеги, что невозможно на RTL написать соединение PCOUT -> PCIN, если эти порты находятся в разных модулях: https://forums.xilinx.com/t5/Welcome-Join/C...ros/td-p/754013


--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th May 2017 - 10:39
Рейтинг@Mail.ru


Страница сгенерированна за 0.0142 секунд с 7
ELECTRONIX ©2004-2016