LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE ieee.numeric_std.ALL; use IEEE.std_logic_textio.all; LIBRARY STD; use std.textio.all; LIBRARY grlib; USE grlib.stdlib.ALL; LIBRARY gaisler; USE gaisler.libdcom.ALL; USE gaisler.sim.ALL; USE gaisler.jtagtst.ALL; LIBRARY techmap; USE techmap.gencomp.ALL; LIBRARY lpp; USE lpp.lpp_sim_pkg.ALL; USE lpp.lpp_lfr_sim_pkg.ALL; USE lpp.lpp_lfr_apbreg_pkg.ALL; USE lpp.lpp_lfr_time_management_apbreg_pkg.ALL; ENTITY testbench IS END; ARCHITECTURE behav OF testbench IS COMPONENT LFR_em PORT ( clk100MHz : IN STD_ULOGIC; clk49_152MHz : IN STD_ULOGIC; reset : IN STD_ULOGIC; TAG1 : IN STD_ULOGIC; TAG3 : OUT STD_ULOGIC; TAG2 : IN STD_ULOGIC; TAG4 : OUT STD_ULOGIC; address : OUT STD_LOGIC_VECTOR(19 DOWNTO 0); data : INOUT STD_LOGIC_VECTOR(31 DOWNTO 0); nSRAM_BE0 : OUT STD_LOGIC; nSRAM_BE1 : OUT STD_LOGIC; nSRAM_BE2 : OUT STD_LOGIC; nSRAM_BE3 : OUT STD_LOGIC; nSRAM_WE : OUT STD_LOGIC; nSRAM_CE : OUT STD_LOGIC; nSRAM_OE : OUT STD_LOGIC; spw1_din : IN STD_LOGIC; spw1_sin : IN STD_LOGIC; spw1_dout : OUT STD_LOGIC; spw1_sout : OUT STD_LOGIC; spw2_din : IN STD_LOGIC; spw2_sin : IN STD_LOGIC; spw2_dout : OUT STD_LOGIC; spw2_sout : OUT STD_LOGIC; bias_fail_sw : OUT STD_LOGIC; ADC_OEB_bar_CH : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); ADC_smpclk : OUT STD_LOGIC; ADC_data : IN STD_LOGIC_VECTOR(13 DOWNTO 0); HK_smpclk : OUT STD_LOGIC; ADC_OEB_bar_HK : OUT STD_LOGIC; HK_SEL : OUT STD_LOGIC_VECTOR(1 DOWNTO 0); TAG8 : OUT STD_LOGIC; led : OUT STD_LOGIC_VECTOR(2 DOWNTO 0)); END COMPONENT; --COMPONENT MINI_LFR_top -- PORT ( -- clk_50 : IN STD_LOGIC; -- clk_49 : IN STD_LOGIC; -- reset : IN STD_LOGIC; -- BP0 : IN STD_LOGIC; -- BP1 : IN STD_LOGIC; -- LED0 : OUT STD_LOGIC; -- LED1 : OUT STD_LOGIC; -- LED2 : OUT STD_LOGIC; -- TXD1 : IN STD_LOGIC; -- RXD1 : OUT STD_LOGIC; -- nCTS1 : OUT STD_LOGIC; -- nRTS1 : IN STD_LOGIC; -- TXD2 : IN STD_LOGIC; -- RXD2 : OUT STD_LOGIC; -- nCTS2 : OUT STD_LOGIC; -- nDTR2 : IN STD_LOGIC; -- nRTS2 : IN STD_LOGIC; -- nDCD2 : OUT STD_LOGIC; -- IO0 : INOUT STD_LOGIC; -- IO1 : INOUT STD_LOGIC; -- IO2 : INOUT STD_LOGIC; -- IO3 : INOUT STD_LOGIC; -- IO4 : INOUT STD_LOGIC; -- IO5 : INOUT STD_LOGIC; -- IO6 : INOUT STD_LOGIC; -- IO7 : INOUT STD_LOGIC; -- IO8 : INOUT STD_LOGIC; -- IO9 : INOUT STD_LOGIC; -- IO10 : INOUT STD_LOGIC; -- IO11 : INOUT STD_LOGIC; -- SPW_EN : OUT STD_LOGIC; -- SPW_NOM_DIN : IN STD_LOGIC; -- SPW_NOM_SIN : IN STD_LOGIC; -- SPW_NOM_DOUT : OUT STD_LOGIC; -- SPW_NOM_SOUT : OUT STD_LOGIC; -- SPW_RED_DIN : IN STD_LOGIC; -- SPW_RED_SIN : IN STD_LOGIC; -- SPW_RED_DOUT : OUT STD_LOGIC; -- SPW_RED_SOUT : OUT STD_LOGIC; -- ADC_nCS : OUT STD_LOGIC; -- ADC_CLK : OUT STD_LOGIC; -- ADC_SDO : IN STD_LOGIC_VECTOR(7 DOWNTO 0); -- SRAM_nWE : OUT STD_LOGIC; -- SRAM_CE : OUT STD_LOGIC; -- SRAM_nOE : OUT STD_LOGIC; -- SRAM_nBE : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); -- SRAM_A : OUT STD_LOGIC_VECTOR(19 DOWNTO 0); -- SRAM_DQ : INOUT STD_LOGIC_VECTOR(31 DOWNTO 0)); --END COMPONENT; ----------------------------------------------------------------------------- SIGNAL clk_50 : STD_LOGIC := '0'; SIGNAL clk_49 : STD_LOGIC := '0'; SIGNAL reset : STD_LOGIC; SIGNAL BP0 : STD_LOGIC; SIGNAL BP1 : STD_LOGIC; SIGNAL LED0 : STD_LOGIC; SIGNAL LED1 : STD_LOGIC; SIGNAL LED2 : STD_LOGIC; SIGNAL TXD1 : STD_LOGIC; SIGNAL RXD1 : STD_LOGIC; SIGNAL nCTS1 : STD_LOGIC; SIGNAL nRTS1 : STD_LOGIC; SIGNAL TXD2 : STD_LOGIC; SIGNAL RXD2 : STD_LOGIC; SIGNAL nCTS2 : STD_LOGIC; SIGNAL nDTR2 : STD_LOGIC; SIGNAL nRTS2 : STD_LOGIC; SIGNAL nDCD2 : STD_LOGIC; SIGNAL IO0 : STD_LOGIC; SIGNAL IO1 : STD_LOGIC; SIGNAL IO2 : STD_LOGIC; SIGNAL IO3 : STD_LOGIC; SIGNAL IO4 : STD_LOGIC; SIGNAL IO5 : STD_LOGIC; SIGNAL IO6 : STD_LOGIC; SIGNAL IO7 : STD_LOGIC; SIGNAL IO8 : STD_LOGIC; SIGNAL IO9 : STD_LOGIC; SIGNAL IO10 : STD_LOGIC; SIGNAL IO11 : STD_LOGIC; SIGNAL SPW_EN : STD_LOGIC; SIGNAL SPW_NOM_DIN : STD_LOGIC; SIGNAL SPW_NOM_SIN : STD_LOGIC; SIGNAL SPW_NOM_DOUT : STD_LOGIC; SIGNAL SPW_NOM_SOUT : STD_LOGIC; SIGNAL SPW_RED_DIN : STD_LOGIC; SIGNAL SPW_RED_SIN : STD_LOGIC; SIGNAL SPW_RED_DOUT : STD_LOGIC; SIGNAL SPW_RED_SOUT : STD_LOGIC; SIGNAL ADC_nCS : STD_LOGIC; SIGNAL ADC_CLK : STD_LOGIC; SIGNAL ADC_SDO : STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL SRAM_nWE : STD_LOGIC; SIGNAL SRAM_CE : STD_LOGIC; SIGNAL SRAM_nOE : STD_LOGIC; SIGNAL SRAM_nBE : STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL SRAM_A : STD_LOGIC_VECTOR(19 DOWNTO 0); SIGNAL SRAM_DQ : STD_LOGIC_VECTOR(31 DOWNTO 0); ----------------------------------------------------------------------------- SIGNAL ADC_OEB_bar_CH : STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL ADC_smpclk : STD_LOGIC; SIGNAL ADC_data : STD_LOGIC_VECTOR(13 DOWNTO 0); SIGNAL HK_smpclk : STD_LOGIC; SIGNAL ADC_OEB_bar_HK : STD_LOGIC; SIGNAL HK_SEL : STD_LOGIC_VECTOR(1 DOWNTO 0); SIGNAL all_OEB_bar : STD_LOGIC_VECTOR(8 DOWNTO 0); SIGNAL HK_SEL_DATA : STD_LOGIC_VECTOR(13 DOWNTO 0); ----------------------------------------------------------------------------- CONSTANT ADDR_BASE_LFR : STD_LOGIC_VECTOR(31 DOWNTO 8) := X"80000F"; CONSTANT ADDR_BASE_TIME_MANAGMENT : STD_LOGIC_VECTOR(31 DOWNTO 8) := X"800006"; CONSTANT ADDR_BASE_GPIO : STD_LOGIC_VECTOR(31 DOWNTO 8) := X"80000B"; SIGNAL message_simu : STRING(1 TO 15) := "---------------"; SIGNAL data_message : STRING(1 TO 15) := "---------------"; SIGNAL data_read : STD_LOGIC_VECTOR(31 DOWNTO 0) := (OTHERS => '0'); BEGIN ----------------------------------------------------------------------------- -- TB ----------------------------------------------------------------------------- PROCESS CONSTANT txp : TIME := 320 ns; VARIABLE data_read_v : STD_LOGIC_VECTOR(31 DOWNTO 0); BEGIN -- PROCESS TXD1 <= '1'; reset <= '0'; WAIT FOR 500 ns; reset <= '1'; WAIT FOR 10000 ns; message_simu <= "0 - UART init "; UART_INIT(TXD1,txp); message_simu <= "1 - UART test "; UART_WRITE(TXD1,txp,ADDR_BASE_GPIO & "000010",X"0000FFFF"); UART_WRITE(TXD1,txp,ADDR_BASE_GPIO & "000001",X"00000A0A"); UART_WRITE(TXD1,txp,ADDR_BASE_GPIO & "000001",X"00000B0B"); UART_READ(TXD1,RXD1,txp,ADDR_BASE_GPIO & "000001",data_read_v); data_read <= data_read_v; data_message <= "GPIO_data_write"; -- UNSET the LFR reset message_simu <= "2 - LFR UNRESET"; UNRESET_LFR(TXD1,txp,ADDR_BASE_TIME_MANAGMENT); --UART_WRITE(TXD1,txp,ADDR_BASE_TIME_MANAGMENT & ADDR_LFR_TM_CONTROL , X"00000000"); --UART_WRITE(TXD1,txp,ADDR_BASE_TIME_MANAGMENT & ADDR_LFR_TM_TIME_LOAD , X"00000000"); -- message_simu <= "3 - LFR CONFIG "; --UART_WRITE(TXD1,txp,ADDR_BASE_LFR & ADDR_LFR_SM_F0_0_ADDR , X"00000B0B"); LAUNCH_SPECTRAL_MATRIX(TXD1,RXD1,txp,ADDR_BASE_LFR, X"40000000", X"40001000", X"40002000", X"40003000", X"40004000", X"40005000"); LAUNCH_WAVEFORM_PICKER(TXD1,RXD1,txp, LFR_MODE_SBM1, X"7FFFFFFF", -- START DATE "00000",--DATA_SHAPING ( 4 DOWNTO 0) X"00012BFF",--DELTA_SNAPSHOT(31 DOWNTO 0) X"0001280A",--DELTA_F0 (31 DOWNTO 0) X"00000007",--DELTA_F0_2 (31 DOWNTO 0) X"0001283F",--DELTA_F1 (31 DOWNTO 0) X"000127FF",--DELTA_F2 (31 DOWNTO 0) ADDR_BASE_LFR, X"40006000", X"40007000", X"40008000", X"40009000", X"4000A000", X"4000B000", X"4000C000", X"4000D000"); UART_WRITE(TXD1 ,txp,ADDR_BASE_LFR & ADDR_LFR_WP_LENGTH, X"0000000F"); UART_WRITE(TXD1 ,txp,ADDR_BASE_LFR & ADDR_LFR_WP_DATA_IN_BUFFER, X"00000050"); message_simu <= "4 - GO GO GO !!"; UART_WRITE (TXD1 ,txp,ADDR_BASE_LFR & ADDR_LFR_WP_START_DATE,X"00000000"); READ_STATUS: LOOP WAIT FOR 2 ms; data_message <= "READ_NEW_STATUS"; UART_READ(TXD1,RXD1,txp,ADDR_BASE_LFR & ADDR_LFR_SM_STATUS,data_read_v); data_read <= data_read_v; UART_WRITE(TXD1, txp,ADDR_BASE_LFR & ADDR_LFR_SM_STATUS,data_read_v); UART_READ(TXD1,RXD1,txp,ADDR_BASE_LFR & ADDR_LFR_WP_STATUS,data_read_v); data_read <= data_read_v; UART_WRITE(TXD1, txp,ADDR_BASE_LFR & ADDR_LFR_WP_STATUS,data_read_v); END LOOP READ_STATUS; WAIT; END PROCESS; ----------------------------------------------------------------------------- -- CLOCK ----------------------------------------------------------------------------- clk_50 <= NOT clk_50 AFTER 5 ns; clk_49 <= NOT clk_49 AFTER 10172 ps; ----------------------------------------------------------------------------- -- DON'T CARE ----------------------------------------------------------------------------- BP0 <= '0'; BP1 <= '0'; nRTS1 <= '0' ; TXD2 <= '1'; nRTS2 <= '1'; nDTR2 <= '1'; SPW_NOM_DIN <= '1'; SPW_NOM_SIN <= '1'; SPW_RED_DIN <= '1'; SPW_RED_SIN <= '1'; ADC_SDO <= x"AA"; SRAM_DQ <= (OTHERS => 'Z'); --IO0 <= 'Z'; --IO1 <= 'Z'; --IO2 <= 'Z'; --IO3 <= 'Z'; --IO4 <= 'Z'; --IO5 <= 'Z'; --IO6 <= 'Z'; --IO7 <= 'Z'; --IO8 <= 'Z'; --IO9 <= 'Z'; --IO10 <= 'Z'; --IO11 <= 'Z'; ----------------------------------------------------------------------------- -- DUT ----------------------------------------------------------------------------- LFR_em_1: LFR_em PORT MAP ( clk100MHz => clk_50, clk49_152MHz => clk_49, reset => reset, TAG1 => TXD1, TAG3 => RXD1, TAG2 => TXD2, TAG4 => RXD2, address => SRAM_A, data => SRAM_DQ, nSRAM_BE0 => SRAM_nBE(0), nSRAM_BE1 => SRAM_nBE(1), nSRAM_BE2 => SRAM_nBE(2), nSRAM_BE3 => SRAM_nBE(3), nSRAM_WE => SRAM_nWE, nSRAM_CE => SRAM_CE, nSRAM_OE => SRAM_nOE, spw1_din => SPW_NOM_DIN, spw1_sin => SPW_NOM_SIN, spw1_dout => SPW_NOM_DOUT, spw1_sout => SPW_NOM_SOUT, spw2_din => SPW_RED_DIN, spw2_sin => SPW_RED_SIN, spw2_dout => SPW_RED_DOUT, spw2_sout => SPW_RED_SOUT, bias_fail_sw => OPEN, ADC_OEB_bar_CH => ADC_OEB_bar_CH, ADC_smpclk => ADC_smpclk, ADC_data => ADC_data, HK_smpclk => HK_smpclk, ADC_OEB_bar_HK => ADC_OEB_bar_HK, HK_SEL => HK_SEL, TAG8 => OPEN, led => OPEN); all_OEB_bar <= ADC_OEB_bar_HK & ADC_OEB_bar_CH; WITH HK_SEL SELECT HK_SEL_DATA <= "00"&X"00F" WHEN "00", "00"&X"01F" WHEN "01", "00"&X"02F" WHEN "10", "XXXXXXXXXXXXXX" WHEN OTHERS; WITH all_OEB_bar SELECT ADC_data <= "00"&X"000" WHEN "111111110", "00"&X"001" WHEN "111111101", "00"&X"002" WHEN "111111011", "00"&X"003" WHEN "111110111", "00"&X"004" WHEN "111101111", "00"&X"005" WHEN "111011111", "00"&X"006" WHEN "110111111", "00"&X"007" WHEN "101111111", HK_SEL_DATA WHEN "011111111", "XXXXXXXXXXXXXX" WHEN OTHERS; END;