|
|
|
|
|
LIBRARY ieee;
|
|
|
USE ieee.std_logic_1164.ALL;
|
|
|
use ieee.numeric_std.all;
|
|
|
USE IEEE.std_logic_signed.ALL;
|
|
|
USE IEEE.MATH_real.ALL;
|
|
|
|
|
|
LIBRARY techmap;
|
|
|
USE techmap.gencomp.ALL;
|
|
|
|
|
|
library std;
|
|
|
use std.textio.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.lpp_lfr_pkg.ALL;
|
|
|
USE lpp.general_purpose.ALL;
|
|
|
|
|
|
ENTITY testbench IS
|
|
|
END;
|
|
|
|
|
|
ARCHITECTURE behav OF testbench IS
|
|
|
|
|
|
SIGNAL TSTAMP : INTEGER:=0;
|
|
|
SIGNAL clk : STD_LOGIC := '0';
|
|
|
SIGNAL clk_24k : STD_LOGIC := '0';
|
|
|
SIGNAL clk_24k_r : STD_LOGIC := '0';
|
|
|
SIGNAL rstn : STD_LOGIC;
|
|
|
|
|
|
SIGNAL signal_gen : Samples(7 DOWNTO 0);
|
|
|
SIGNAL offset_gen : Samples(7 DOWNTO 0);
|
|
|
|
|
|
SIGNAL sample : Samples(7 DOWNTO 0);
|
|
|
|
|
|
SIGNAL sample_val : STD_LOGIC;
|
|
|
|
|
|
SIGNAL sample_f0_val : STD_LOGIC;
|
|
|
SIGNAL sample_f1_val : STD_LOGIC;
|
|
|
SIGNAL sample_f2_val : STD_LOGIC;
|
|
|
SIGNAL sample_f3_val : STD_LOGIC;
|
|
|
|
|
|
SIGNAL sample_f0_wdata : STD_LOGIC_VECTOR((6*16)-1 DOWNTO 0);
|
|
|
SIGNAL sample_f1_wdata : STD_LOGIC_VECTOR((6*16)-1 DOWNTO 0);
|
|
|
SIGNAL sample_f2_wdata : STD_LOGIC_VECTOR((6*16)-1 DOWNTO 0);
|
|
|
SIGNAL sample_f3_wdata : STD_LOGIC_VECTOR((6*16)-1 DOWNTO 0);
|
|
|
|
|
|
SIGNAL sample_f0 : Samples(5 DOWNTO 0);
|
|
|
SIGNAL sample_f1 : Samples(5 DOWNTO 0);
|
|
|
SIGNAL sample_f2 : Samples(5 DOWNTO 0);
|
|
|
SIGNAL sample_f3 : Samples(5 DOWNTO 0);
|
|
|
|
|
|
|
|
|
|
|
|
SIGNAL temp : STD_LOGIC;
|
|
|
|
|
|
|
|
|
COMPONENT generator IS
|
|
|
GENERIC (
|
|
|
AMPLITUDE : INTEGER := 100;
|
|
|
NB_BITS : INTEGER := 16);
|
|
|
|
|
|
PORT (
|
|
|
clk : IN STD_LOGIC;
|
|
|
rstn : IN STD_LOGIC;
|
|
|
run : IN STD_LOGIC;
|
|
|
|
|
|
data_ack : IN STD_LOGIC;
|
|
|
offset : IN STD_LOGIC_VECTOR(NB_BITS-1 DOWNTO 0);
|
|
|
data : OUT STD_LOGIC_VECTOR(NB_BITS-1 DOWNTO 0)
|
|
|
);
|
|
|
END COMPONENT;
|
|
|
|
|
|
|
|
|
file log_input : TEXT open write_mode is "log_input.txt";
|
|
|
file log_output_f0 : TEXT open write_mode is "log_output_f0.txt";
|
|
|
file log_output_f1 : TEXT open write_mode is "log_output_f1.txt";
|
|
|
file log_output_f2 : TEXT open write_mode is "log_output_f2.txt";
|
|
|
file log_output_f3 : TEXT open write_mode is "log_output_f3.txt";
|
|
|
|
|
|
|
|
|
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 2000 ms;
|
|
|
REPORT "*** END simulation ***" SEVERITY failure;
|
|
|
WAIT;
|
|
|
END PROCESS;
|
|
|
-----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
-----------------------------------------------------------------------------
|
|
|
-- COMMON TIMESTAMPS
|
|
|
-----------------------------------------------------------------------------
|
|
|
|
|
|
PROCESS(clk)
|
|
|
BEGIN
|
|
|
IF clk'event and clk ='1' THEN
|
|
|
TSTAMP <= TSTAMP+1;
|
|
|
END IF;
|
|
|
END PROCESS;
|
|
|
-----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
-----------------------------------------------------------------------------
|
|
|
-- LPP_LFR_FILTER
|
|
|
-----------------------------------------------------------------------------
|
|
|
lpp_lfr_filter_1: lpp_lfr_filter
|
|
|
GENERIC MAP (
|
|
|
--tech => 0,
|
|
|
--Mem_use => use_CEL,
|
|
|
tech => axcel,
|
|
|
Mem_use => use_RAM,
|
|
|
RTL_DESIGN_LIGHT =>0
|
|
|
)
|
|
|
PORT MAP (
|
|
|
sample => sample,
|
|
|
sample_val => sample_val,
|
|
|
sample_time => (others=>'0'),
|
|
|
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 => sample_f0_val,
|
|
|
sample_f1_val => sample_f1_val,
|
|
|
sample_f2_val => sample_f2_val,
|
|
|
sample_f3_val => sample_f3_val,
|
|
|
|
|
|
sample_f0_wdata => sample_f0_wdata,
|
|
|
sample_f1_wdata => sample_f1_wdata,
|
|
|
sample_f2_wdata => sample_f2_wdata,
|
|
|
sample_f3_wdata => sample_f3_wdata
|
|
|
);
|
|
|
-----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
-----------------------------------------------------------------------------
|
|
|
-- 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';
|
|
|
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';
|
|
|
temp <= NOT temp;
|
|
|
ELSE
|
|
|
sample_val <= '0';
|
|
|
END IF;
|
|
|
END IF;
|
|
|
END PROCESS;
|
|
|
-----------------------------------------------------------------------------
|
|
|
generators: FOR I IN 0 TO 7 GENERATE
|
|
|
gen1: generator
|
|
|
GENERIC MAP (
|
|
|
AMPLITUDE => 100,
|
|
|
NB_BITS => 16)
|
|
|
PORT MAP (
|
|
|
clk => clk,
|
|
|
rstn => rstn,
|
|
|
run => '1',
|
|
|
data_ack => sample_val,
|
|
|
offset => offset_gen(I),
|
|
|
data => signal_gen(I)
|
|
|
);
|
|
|
offset_gen(I) <= std_logic_vector( to_signed((I*200),16) );
|
|
|
END GENERATE generators;
|
|
|
|
|
|
output_splitter: FOR CHAN IN 0 TO 5 GENERATE
|
|
|
bits_splitter: FOR BIT IN 0 TO 15 GENERATE
|
|
|
sample_f0(CHAN)(BIT) <= sample_f0_wdata((CHAN*16) + BIT);
|
|
|
sample_f1(CHAN)(BIT) <= sample_f1_wdata((CHAN*16) + BIT);
|
|
|
sample_f2(CHAN)(BIT) <= sample_f2_wdata((CHAN*16) + BIT);
|
|
|
sample_f3(CHAN)(BIT) <= sample_f3_wdata((CHAN*16) + BIT);
|
|
|
END GENERATE bits_splitter;
|
|
|
END GENERATE output_splitter;
|
|
|
|
|
|
|
|
|
sample <= signal_gen;
|
|
|
|
|
|
-----------------------------------------------------------------------------
|
|
|
-- RECORD SIGNALS
|
|
|
-----------------------------------------------------------------------------
|
|
|
|
|
|
process(sample_val)
|
|
|
variable line_var : line;
|
|
|
begin
|
|
|
if sample_val'event and sample_val='1' then
|
|
|
write(line_var,integer'image(TSTAMP) );
|
|
|
for I IN 0 TO 7 loop
|
|
|
write(line_var, " " & integer'image(to_integer(signed(signal_gen(I)))));
|
|
|
end loop;
|
|
|
writeline(log_input,line_var);
|
|
|
end if;
|
|
|
end process;
|
|
|
|
|
|
process(sample_f0_val)
|
|
|
variable line_var : line;
|
|
|
begin
|
|
|
if sample_f0_val'event and sample_f0_val='1' then
|
|
|
write(line_var,integer'image(TSTAMP) );
|
|
|
for I IN 0 TO 5 loop
|
|
|
write(line_var, " " & integer'image(to_integer(signed(sample_f0(I)))));
|
|
|
end loop;
|
|
|
writeline(log_output_f0,line_var);
|
|
|
end if;
|
|
|
end process;
|
|
|
|
|
|
|
|
|
process(sample_f1_val)
|
|
|
variable line_var : line;
|
|
|
begin
|
|
|
if sample_f1_val'event and sample_f1_val='1' then
|
|
|
write(line_var,integer'image(TSTAMP) );
|
|
|
for I IN 0 TO 5 loop
|
|
|
write(line_var, " " & integer'image(to_integer(signed(sample_f1(I)))));
|
|
|
end loop;
|
|
|
writeline(log_output_f1,line_var);
|
|
|
end if;
|
|
|
end process;
|
|
|
|
|
|
|
|
|
process(sample_f2_val)
|
|
|
variable line_var : line;
|
|
|
begin
|
|
|
if sample_f2_val'event and sample_f2_val='1' then
|
|
|
write(line_var,integer'image(TSTAMP) );
|
|
|
for I IN 0 TO 5 loop
|
|
|
write(line_var, " " & integer'image(to_integer(signed(sample_f2(I)))));
|
|
|
end loop;
|
|
|
writeline(log_output_f2,line_var);
|
|
|
end if;
|
|
|
end process;
|
|
|
|
|
|
process(sample_f3_val)
|
|
|
variable line_var : line;
|
|
|
begin
|
|
|
if sample_f3_val'event and sample_f3_val='1' then
|
|
|
write(line_var,integer'image(TSTAMP) );
|
|
|
for I IN 0 TO 5 loop
|
|
|
write(line_var, " " & integer'image(to_integer(signed(sample_f3(I)))));
|
|
|
end loop;
|
|
|
writeline(log_output_f3,line_var);
|
|
|
end if;
|
|
|
end process;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
END;
|
|
|
|