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

ошибка при компиляции vhdl фильтра

Написал фильтр, который работает в более мощной ПЛИС. Попытался его перенести в ПЛИС xc6vlx75t-1ff484. При компиляции появились ошибки:

ERROR:Place:1073 - Placer was unable to create RPM[DSP_Cascade_RPMs] for the

component XLXI_291/Maddsub_Ire[11][13]_K[5][15]_MuLt_206_OUT of type DSP48E1

for the following reason.

The reason for this issue:

The logic does not fit onto the chip in this form. Note that this logic had

to be merged with an already existing RPM which may have caused this issue.

The following components are part of this structure:

ERROR:Place:1073 - Placer was unable to create RPM[DSP_Cascade_RPMs] for the

component XLXI_291/Maddsub_Ire[11][13]_K[5][15]_MuLt_206_OUT of type DSP48E1

for the following reason.

The reason for this issue:

The logic does not fit onto the chip in this form. Note that this logic had

to be merged with an already existing RPM which may have caused this issue.

The following components are part of this structure:

ERROR:Pack:1654 - The timing-driven placement phase encountered an error.

 

Если длину фильтра ставлю 48 отводов компиляция проходит успешно. При 50 отводах возникают показанные ошибки (желательно 64 отвода). Все происходит под ISE13.1. В чем проблема не понимаю. Может кто подскажет. Заранее спасибо за ответ

Текст самого фильтра представлен ниже:

entity filterchet is

generic (N : integer := 50;

BitSignal : integer := 14

);

Port ( clk : in STD_LOGIC;

Iin : in STD_LOGIC_VECTOR (BitSignal-1 downto 0);

Addr : in STD_LOGIC_VECTOR (7 downto 0);

we : in STD_LOGIC;

Coeff: in STD_LOGIC_VECTOR (15 downto 0);

Iout : out STD_LOGIC_VECTOR (13 downto 0)

);

end filterchet;

 

architecture Behavioral of filterchet is

 

type TMassiv is array (0 to N*2-1) of std_logic_vector(BitSignal-1 downto 0);

type TMassivCoef is array (0 to N-1) of std_logic_vector(15 downto 0);

type TMassivMult is array (0 to N-1) of std_logic_vector(BitSignal+16-1 downto 0);

type TMassivR is array (0 to N-1) of std_logic_vector(31 downto 0);

 

signal Ire : TMassiv;

signal K : TMassivCoef;

signal Mult : TMassivMult;

 

signal R : TMassivR;

 

begin

 

process (we)

begin

if we'event and we='1' then K(conv_integer(Addr)) <= Coeff;

end if;

end process;

 

process(clk)

begin

if clk'event and (clk='1') then

Ire(0) <= Iin;

for i in 1 to N*2-1 loop

Ire(i) <= Ire(i-1);

end loop;

end if;

end process;

 

process (clk)

begin

if clk'event and (clk='1') then

for i in 0 to N-1 loop

Mult(i) <= signed(Ire(i*2+1)) * signed(K(i));

end loop;

 

R(0) <= sxt(Mult(0), 32);

 

for i in 1 to N-1 loop

R(i) <= signed(Mult(i)) + signed(R(i-1));

end loop;

end if;

end process;

 

process (clk)

begin

if (clk'event) and (clk='1') then

Iout(13) <= R(N-1)(31);

Iout(12 downto 0) <= R(N-1)(25 downto 13);

end if;

end process;

 

end Behavioral;

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


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

Займёмся фигурным цитированием.

 

Написал фильтр, который работает в более мощной ПЛИС. Попытался его перенести в ПЛИС xc6vlx75t-1ff484.

[...]

The logic does not fit onto the chip in this form.

[...]

Если длину фильтра ставлю 48 отводов компиляция проходит успешно. При 50 отводах возникают показанные ошибки (желательно 64 отвода).

 

Вам перевести

The logic does not fit onto the chip in this form
?

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


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

Займёмся фигурным цитированием.

 

 

 

Вам перевести ?

Переводить не нужно. А вот разъяснить было бы неплохо. Почему он не разводиться?, ведь блоков DSP48E1 в данной микросхеме 288 - хватает с запасом. Это что нереализуемо?. Может фильтр разбить на два куска?

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


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

а 32 и 16 поместит?

Я пока не пробовал. как-то это коряво выглядит Но, подозреваю, что получиться. Ведь небывает так, что имеем 288 блоков DSP и использовать их не получается. Кстати этот фильтр в ПЛИС xc6vlx240t длинной 112 отводов прекрасно укладывался аж в двух экземплярах на два канала. А в этой ПЛИС прям беда. :-)

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


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

Я пока не пробовал. как-то это коряво выглядит Но, подозреваю, что получиться. Ведь небывает так, что имеем 288 блоков DSP и использовать их не получается. Кстати этот фильтр в ПЛИС xc6vlx240t длинной 112 отводов прекрасно укладывался аж в двух экземплярах на два канала. А в этой ПЛИС прям беда. :-)

а сколько дсп48 блоков он юзает в большой плисине?

Поиграйтесь с настройками optimization area/speed

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


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

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

к тому же лучше укажите в какую плис проект уложился. тогда и можно рассуждать.

семейства разные фичи тоже.

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


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

Написал фильтр, который работает в более мощной ПЛИС. Попытался его перенести в ПЛИС xc6vlx75t-1ff484. При компиляции появились ошибки: ...

 

Если длину фильтра ставлю 48 отводов компиляция проходит успешно. При 50 отводах возникают показанные ошибки (желательно 64 отвода). Все происходит под ISE13.1. В чем проблема не понимаю. Может кто подскажет. Заранее спасибо за ответ

 

Ну, в чем проблема предположить наверно можно: RTFM:)

 

Можно и развернуть: Все 288 DSP48E1 блока в xc6vlx75t разделены на 6 столбцов по 48 DSP48E1 блока в каждом столбце. Но каскадировать DSP48E1 блоки можно только в одном столбце (мелкий шрифт тоже нужно читать, см. "Virtex-6 FPGA DSP48E1 User Guide", рис.1-1).

 

Для каскадного соединения всех столбцов нужно задействовать обычную логику. У Вас же код написан так, что каскадируются все 50 DSP48E1 блоков. Разбивайте фильтр на две части.

 

Да, в 240T уже 8 столбцов по 96 DSP48E1 блоков:)

 

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


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

Ну, в чем проблема предположить наверно можно: RTFM:)

 

Можно и развернуть: Все 288 DSP48E1 блока в xc6vlx75t разделены на 6 столбцов по 48 DSP48E1 блока в каждом столбце. Но каскадировать DSP48E1 блоки можно только в одном столбце (мелкий шрифт тоже нужно читать, см. "Virtex-6 FPGA DSP48E1 User Guide", рис.1-1).

 

Для каскадного соединения всех столбцов нужно задействовать обычную логику. У Вас же код написан так, что каскадируются все 50 DSP48E1 блоков. Разбивайте фильтр на две части.

 

Да, в 240T уже 8 столбцов по 96 DSP48E1 блоков:)

 

О!!! Вот этого ответа я и ждал. Причина неразводки изложена кратко, локанично. Уважуха. Большое спасибо. Теперь все понятно.

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


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

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

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

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

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

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

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

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

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

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