|
как на RTL заставить синтезатор использовать выделенные межкаскадные связи BCOUT-> BCIN в DSP48 Xilinx?, если вставить макрос DSP48, то связь есть, а если * на RTL - то нет |
|
|
|
Jun 29 2015, 08:57
|
Знающий
   
Группа: Свой
Сообщений: 802
Регистрация: 11-05-07
Из: Томск
Пользователь №: 27 650

|
Цитата(Krys @ Jun 29 2015, 12:36)  Странно, что аккумулятор со входом сброса синтезируется в DSP-блоке нормально... Вообще идея использовать DSP блоки в качестве сумматоров довольно странная. В современных ПЛИС за счёт логики переноса производительность сумматоров на DSP и на "рассыпухе" практически сравнялась. Поэтому гробить DSP блоки на банальное суммирование как-то не очень рационально.
|
|
|
|
|
Jun 29 2015, 10:31
|
Частый гость
 
Группа: Свой
Сообщений: 180
Регистрация: 17-02-09
Из: Санкт-Петербург
Пользователь №: 45 001

|
Цитата(Krys @ Jun 29 2015, 13:02)  ...прямого указания в виде (* use_dsp48 = "yes" *). За XST не скажу, но в Симплифае это всего лишь рекомендация.
|
|
|
|
|
Aug 21 2015, 11:14
|
Участник

Группа: Участник
Сообщений: 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";
|
|
|
|
|
Aug 24 2015, 04:19
|

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

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