Files
HDLfilter/FiltroHDL/filter_pkg.vhd
epilef 8830cf7589 Cambio de Rango
Se cambió a variables de 12bits
2017-03-10 10:04:07 -03:00

79 lines
1.7 KiB
VHDL

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
package filter_pkg is
constant MAX_RANGE : integer := 2047;
type array_of_integers is array(integer range <>) of integer range -MAX_RANGE to MAX_RANGE;
function array_sum ( K : in array_of_integers )
return integer;
function reorder_array ( K : in array_of_integers ; simetric : in boolean )
return array_of_integers;
component Filter is
generic (
CLK_FREQ : integer := 200e6;
DATA_RATE: integer := 250e3;
SIMETRIC : boolean := TRUE;
CONSTANTS : array_of_integers := (1,2,3,4,5,6,7,8,9,10)
);
port (
clk_i : in std_logic;
enable: in std_logic;
reset: in std_logic;
d_i : in std_logic;
d_o : out std_logic;
p_o : out std_logic_vector(9 downto 0)
);
end component;
end package;
package body filter_pkg is
function array_sum ( K : in array_of_integers ) return integer is
variable sum : integer := 0;
begin
for i in 0 to K'length-1 loop
sum := sum + K(K'left + i);
end loop;
return sum;
end array_sum;
function reorder_array ( K : in array_of_integers ; simetric : in boolean )
return array_of_integers is
constant M : integer := 1 + 2*((K'length)-1);
constant N : integer := K'length;
variable arr_s : array_of_integers( 0 to M-1 );
variable arr_a : array_of_integers( 0 to N-1 );
begin
if ( simetric ) then
for i in 0 to N-1 loop
arr_s( i ) := K( K'left + i );
end loop;
for i in 1 to N-1 loop
arr_s( n + i - 1 ) := K( K'right - i );
end loop;
return arr_s;
else
for i in 0 to N-1 loop
arr_a( i ) := K( K'left + i );
end loop;
return arr_a;
end if;
end reorder_array;
end filter_pkg;