LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE IEEE.MATH_REAL.ALL; USE ieee.numeric_std.ALL; LIBRARY techmap; USE techmap.gencomp.ALL; LIBRARY lpp; USE lpp.iir_filter.ALL; USE lpp.lpp_ad_conv.ALL; USE lpp.FILTERcfg.ALL; USE lpp.lpp_lfr_filter_coeff.ALL; USE lpp.general_purpose.ALL; USE lpp.data_type_pkg.ALL; USE lpp.chirp_pkg.ALL; USE lpp.lpp_lfr_pkg.ALL; USE lpp.general_purpose.ALL; ENTITY testbench IS END; ARCHITECTURE behav OF testbench IS COMPONENT IIR_CEL_TEST PORT ( rstn : IN STD_LOGIC; clk : IN STD_LOGIC; sample_in_val : IN STD_LOGIC; sample_in : IN samplT(7 DOWNTO 0, 17 DOWNTO 0); sample_out_val : OUT STD_LOGIC; sample_out : OUT samplT(7 DOWNTO 0, 17 DOWNTO 0)); END COMPONENT; COMPONENT IIR_CEL_TEST_v3 PORT ( rstn : IN STD_LOGIC; clk : IN STD_LOGIC; sample_in1_val : IN STD_LOGIC; sample_in1 : IN samplT(7 DOWNTO 0, 17 DOWNTO 0); sample_in2_val : IN STD_LOGIC; sample_in2 : IN samplT(7 DOWNTO 0, 17 DOWNTO 0); sample_out1_val : OUT STD_LOGIC; sample_out1 : OUT samplT(7 DOWNTO 0, 17 DOWNTO 0); sample_out2_val : OUT STD_LOGIC; sample_out2 : OUT samplT(7 DOWNTO 0, 17 DOWNTO 0)); END COMPONENT; SIGNAL clk : STD_LOGIC := '0'; SIGNAL clk_24k : STD_LOGIC := '0'; SIGNAL clk_24k_r : STD_LOGIC := '0'; SIGNAL rstn : STD_LOGIC; SIGNAL sample : Samples(7 DOWNTO 0); SIGNAL sample_val : STD_LOGIC; SIGNAL sample_val_2 : STD_LOGIC; SIGNAL data_chirp : STD_LOGIC_VECTOR(15 DOWNTO 0); SIGNAL data_chirp_2 : STD_LOGIC_VECTOR(15 DOWNTO 0); SIGNAL sample_s : samplT(7 DOWNTO 0, 17 DOWNTO 0); SIGNAL sample_out_s : samplT(7 DOWNTO 0, 17 DOWNTO 0); SIGNAL sample_out_s2 : samplT(7 DOWNTO 0, 17 DOWNTO 0); SIGNAL sample_out_val : STD_LOGIC; SIGNAL sample_out1_val : STD_LOGIC; SIGNAL sample_out2_val : STD_LOGIC; SIGNAL sample_out1 : samplT(7 DOWNTO 0, 17 DOWNTO 0); SIGNAL sample_out2 : samplT(7 DOWNTO 0, 17 DOWNTO 0); SIGNAL sample_out1_reg : samplT(7 DOWNTO 0, 17 DOWNTO 0); SIGNAL sample_out2_reg : samplT(7 DOWNTO 0, 17 DOWNTO 0); SIGNAL sample_s_v3 : samplT(7 DOWNTO 0, 17 DOWNTO 0); SIGNAL sample_val_v3 : STD_LOGIC; SIGNAL sample_val_v3_2 : STD_LOGIC; SIGNAL temp : STD_LOGIC; BEGIN ----------------------------------------------------------------------------- -- CLOCK and RESET ----------------------------------------------------------------------------- clk <= NOT clk AFTER 5 ns; PROCESS BEGIN -- PROCESS WAIT UNTIL clk = '1'; rstn <= '0'; WAIT UNTIL clk = '1'; WAIT UNTIL clk = '1'; WAIT UNTIL clk = '1'; rstn <= '1'; WAIT FOR 30 ms; REPORT "*** END simulation ***" SEVERITY failure; WAIT; END PROCESS; ----------------------------------------------------------------------------- ----------------------------------------------------------------------------- -- LPP_LFR_FILTER ----------------------------------------------------------------------------- lpp_lfr_filter_1: lpp_lfr_filter GENERIC MAP ( Mem_use => use_CEL) PORT MAP ( sample => sample, sample_val => sample_val, clk => clk, rstn => rstn, data_shaping_SP0 => '0', data_shaping_SP1 => '0', data_shaping_R0 => '0', data_shaping_R1 => '0', data_shaping_R2 => '0', sample_f0_val => OPEN, sample_f1_val => OPEN, sample_f2_val => OPEN, sample_f3_val => OPEN, sample_f0_wdata => OPEN, sample_f1_wdata => OPEN, sample_f2_wdata => OPEN, sample_f3_wdata => OPEN); ----------------------------------------------------------------------------- ----------------------------------------------------------------------------- -- SAMPLE GENERATION ----------------------------------------------------------------------------- clk_24k <= NOT clk_24k AFTER 20345 ns; PROCESS (clk, rstn) BEGIN -- PROCESS IF rstn = '0' THEN -- asynchronous reset (active low) sample_val <= '0'; sample_val_2 <= '0'; clk_24k_r <= '0'; temp <= '0'; ELSIF clk'event AND clk = '1' THEN -- rising clock edge clk_24k_r <= clk_24k; IF clk_24k = '1' AND clk_24k_r = '0' THEN sample_val <= '1'; sample_val_2 <= temp; temp <= NOT temp; ELSE sample_val <= '0'; sample_val_2 <= '0'; END IF; END IF; END PROCESS; ----------------------------------------------------------------------------- chirp_1: chirp GENERIC MAP ( LOW_FREQUENCY_LIMIT => 0, HIGH_FREQUENCY_LIMIT => 2000, NB_POINT_TO_GEN => 10000, AMPLITUDE => 100, NB_BITS => 16) PORT MAP ( clk => clk, rstn => rstn, run => '1', data_ack => sample_val, data => data_chirp); chirp_2: chirp GENERIC MAP ( LOW_FREQUENCY_LIMIT => 0, HIGH_FREQUENCY_LIMIT => 2000, NB_POINT_TO_GEN => 100000, AMPLITUDE => 200, NB_BITS => 16) PORT MAP ( clk => clk, rstn => rstn, run => '1', data_ack => sample_val, data => data_chirp_2); all_channel: FOR I IN 0 TO 3 GENERATE sample(2*I) <= data_chirp; sample(2*I+1) <= data_chirp_2; END GENERATE all_channel; ----------------------------------------------------------------------------- all_channel_test: FOR I IN 0 TO 3 GENERATE all_bit_test: FOR J IN 0 TO 15 GENERATE sample_s(2*I ,J) <= data_chirp(J); sample_s(2*I+1,J) <= data_chirp_2(J); END GENERATE all_bit_test; sample_s(2*I,16) <= data_chirp(15); sample_s(2*I,17) <= data_chirp(15); sample_s(2*I+1,16) <= data_chirp_2(15); sample_s(2*I+1,17) <= data_chirp_2(15); END GENERATE all_channel_test; IIR_CEL_TEST_1: IIR_CEL_TEST PORT MAP ( rstn => rstn, clk => clk, sample_in_val => sample_val, sample_in => sample_s, sample_out_val => sample_out_val, sample_out => sample_out_s); PROCESS (clk, rstn) BEGIN -- PROCESS IF rstn = '0' THEN -- asynchronous reset (active low) all_channel: FOR I IN 0 TO 7 LOOP all_bit: FOR J IN 0 TO 17 LOOP sample_out_s2(I,J) <= '0'; END LOOP all_bit; END LOOP all_channel; ELSIF clk'event AND clk = '1' THEN -- rising clock edge IF sample_out_val = '1' THEN sample_out_s2 <= sample_out_s; END IF; END IF; END PROCESS; ----------------------------------------------------------------------------- IIR_CEL_TEST_v3_1: IIR_CEL_TEST_v3 PORT MAP ( rstn => rstn, clk => clk, sample_in1_val => sample_val_v3, sample_in1 => sample_s_v3, sample_in2_val => sample_val_v3_2, sample_in2 => sample_s_v3, sample_out1_val => sample_out1_val, sample_out1 => sample_out1, sample_out2_val => sample_out2_val, sample_out2 => sample_out2); PROCESS (clk, rstn) BEGIN -- PROCESS IF rstn = '0' THEN -- asynchronous reset (active low) ELSIF clk'event AND clk = '1' THEN -- rising clock edge IF sample_val = '1' THEN sample_s_v3 <= sample_s; END IF; sample_val_v3 <= sample_val; sample_val_v3_2 <= sample_val_2; IF sample_out1_val = '1' THEN sample_out1_reg <= sample_out1; END IF; IF sample_out2_val = '1' THEN sample_out2_reg <= sample_out2; END IF; END IF; END PROCESS; END;