Написал фильтр, который работает в более мощной ПЛИС. Попытался его перенести в ПЛИС 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;
|