|
|
|
|
|
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 opencores;
|
|
|
USE opencores.spwpkg.ALL;
|
|
|
USE opencores.spwambapkg.ALL;
|
|
|
|
|
|
LIBRARY lpp;
|
|
|
USE lpp.lpp_sim_pkg.ALL;
|
|
|
USE lpp.lpp_cna.ALL;
|
|
|
|
|
|
ENTITY testbench IS
|
|
|
END;
|
|
|
|
|
|
ARCHITECTURE behav OF testbench IS
|
|
|
|
|
|
SIGNAL TSTAMP : INTEGER := 0;
|
|
|
|
|
|
SIGNAL clk_25 : STD_LOGIC := '0';
|
|
|
SIGNAL rstn_25 : STD_LOGIC;
|
|
|
|
|
|
SIGNAL end_of_simu : STD_LOGIC := '0';
|
|
|
|
|
|
SIGNAL DATA : STD_LOGIC_VECTOR(15 DOWNTO 0) := (OTHERS => '0');
|
|
|
SIGNAL SMP_CLK : STD_LOGIC := '1';
|
|
|
|
|
|
SIGNAL DAC_SYNC : STD_LOGIC;
|
|
|
SIGNAL DAC_DOUT : STD_LOGIC;
|
|
|
SIGNAL DAC_SCLK : STD_LOGIC;
|
|
|
|
|
|
SIGNAL CAL_VALUE_data_v : STD_LOGIC_VECTOR(15 DOWNTO 0) := (OTHERS => '0');
|
|
|
SIGNAL CAL_VALUE_valid_v : STD_LOGIC_VECTOR(16 DOWNTO 0) := (OTHERS => '0');
|
|
|
|
|
|
SIGNAL CAL_VALUE_data : STD_LOGIC_VECTOR(15 DOWNTO 0);
|
|
|
SIGNAL CAL_VALUE_valid : STD_LOGIC;
|
|
|
|
|
|
SIGNAL DAC_CAL_EN : STD_LOGIC;
|
|
|
SIGNAL bias_fail_sw : STD_LOGIC;
|
|
|
|
|
|
BEGIN
|
|
|
|
|
|
-----------------------------------------------------------------------------
|
|
|
-- SIM GLOBAL RUN
|
|
|
-----------------------------------------------------------------------------
|
|
|
PROCESS IS
|
|
|
BEGIN -- PROCESS
|
|
|
WAIT FOR 200 us;
|
|
|
end_of_simu <= '1';
|
|
|
WAIT;
|
|
|
END PROCESS;
|
|
|
|
|
|
-----------------------------------------------------------------------------
|
|
|
-- CLOCK and RESET
|
|
|
-----------------------------------------------------------------------------
|
|
|
PROCESS
|
|
|
BEGIN -- PROCESS
|
|
|
WAIT UNTIL clk_25 = '1';
|
|
|
rstn_25 <= '0';
|
|
|
WAIT UNTIL clk_25 = '1';
|
|
|
WAIT UNTIL clk_25 = '1';
|
|
|
WAIT UNTIL clk_25 = '1';
|
|
|
rstn_25 <= '1';
|
|
|
|
|
|
WAIT FOR 10 us;
|
|
|
DAC_CAL_EN <= '0';
|
|
|
|
|
|
WAIT FOR 1 us;
|
|
|
bias_fail_sw <= '0';
|
|
|
|
|
|
WAIT FOR 100 us;
|
|
|
DAC_CAL_EN <= '1';
|
|
|
|
|
|
WAIT FOR 1 us;
|
|
|
bias_fail_sw <= '1';
|
|
|
|
|
|
|
|
|
WAIT UNTIL end_of_simu = '1';
|
|
|
WAIT FOR 10 ps;
|
|
|
ASSERT false REPORT "end of test" SEVERITY note;
|
|
|
-- Wait forever; this will finish the simulation.
|
|
|
WAIT;
|
|
|
END PROCESS;
|
|
|
-----------------------------------------------------------------------------
|
|
|
clk_25_gen : PROCESS
|
|
|
BEGIN
|
|
|
IF end_of_simu /= '1' THEN
|
|
|
clk_25 <= NOT clk_25;
|
|
|
TSTAMP <= TSTAMP+20;
|
|
|
WAIT FOR 20 ns;
|
|
|
ELSE
|
|
|
WAIT FOR 20 ps;
|
|
|
ASSERT false REPORT "end of test" SEVERITY note;
|
|
|
WAIT;
|
|
|
END IF;
|
|
|
END PROCESS;
|
|
|
-----------------------------------------------------------------------------
|
|
|
|
|
|
clk_SMP_gen : PROCESS
|
|
|
BEGIN
|
|
|
IF end_of_simu /= '1' THEN
|
|
|
SMP_CLK <= NOT SMP_CLK;
|
|
|
IF SMP_CLK = '0' THEN
|
|
|
DATA <= DATA + 3;
|
|
|
END IF;
|
|
|
WAIT FOR 5000101 ps;
|
|
|
ELSE
|
|
|
WAIT FOR 20 ps;
|
|
|
ASSERT false REPORT "end of test" SEVERITY note;
|
|
|
WAIT;
|
|
|
END IF;
|
|
|
END PROCESS;
|
|
|
|
|
|
SPI_DAC_DRIVER_1: SPI_DAC_DRIVER
|
|
|
GENERIC MAP (
|
|
|
datawidth => 16,
|
|
|
MSBFIRST => 1)
|
|
|
PORT MAP (
|
|
|
clk => clk_25,
|
|
|
rstn => rstn_25,
|
|
|
|
|
|
DATA => DATA,
|
|
|
SMP_CLK => SMP_CLK,
|
|
|
|
|
|
SYNC => DAC_SYNC,
|
|
|
DOUT => DAC_DOUT,
|
|
|
SCLK => DAC_SCLK);
|
|
|
|
|
|
lfr_output_save_1: lfr_output_save
|
|
|
GENERIC MAP (
|
|
|
FNAME => "lfr_output.txt")
|
|
|
PORT MAP (
|
|
|
end_of_simu => end_of_simu,
|
|
|
timestamp => TSTAMP,
|
|
|
DAC_SDO => DAC_DOUT,
|
|
|
DAC_SCK => DAC_SCLK,
|
|
|
DAC_SYNC => DAC_SYNC,
|
|
|
DAC_CAL_EN => DAC_CAL_EN,
|
|
|
bias_fail_sw => bias_fail_sw);
|
|
|
|
|
|
END;
|
|
|
|