diff --git a/designs/LFR_simu/run_tb_waveform.do b/designs/LFR_simu/run_tb_waveform.do --- a/designs/LFR_simu/run_tb_waveform.do +++ b/designs/LFR_simu/run_tb_waveform.do @@ -6,6 +6,8 @@ vcom -quiet -93 -work lpp ../../../grl vcom -quiet -93 -work lpp ../../../grlib-ft-fpga-grlfpu-spw-1.2.4-b4126/lib/../../tortoiseHG_vhdlib/lib/lpp/./lpp_dma/lpp_dma_send_1word.vhd vcom -quiet -93 -work lpp ../../../grlib-ft-fpga-grlfpu-spw-1.2.4-b4126/lib/../../tortoiseHG_vhdlib/lib/lpp/./lpp_dma/lpp_dma_singleOrBurst.vhd +vcom -quiet -93 -work lpp ../../../grlib-ft-fpga-grlfpu-spw-1.2.4-b4126/lib/../../tortoiseHG_vhdlib/lib/lpp/./lpp_waveform/lpp_waveform_snapshot.vhd + vcom -quiet -93 -work lpp ../../lib/../../tortoiseHG_vhdlib/lib/lpp/./dsp/iir_filter/RAM_CEL_N.vhd vcom -quiet -93 -work lpp testbench_package.vhd diff --git a/designs/LFR_simu/tb_waveform.vhd b/designs/LFR_simu/tb_waveform.vhd --- a/designs/LFR_simu/tb_waveform.vhd +++ b/designs/LFR_simu/tb_waveform.vhd @@ -44,7 +44,7 @@ USE lpp.iir_filter.ALL; USE lpp.general_purpose.ALL; USE lpp.CY7C1061DV33_pkg.ALL; -ENTITY testbenc h IS +ENTITY testbench IS END; ARCHITECTURE behav OF testbench IS @@ -180,7 +180,13 @@ ARCHITECTURE behav OF testbench IS CONSTANT padtech : INTEGER := inferred; SIGNAL not_ramsn_0 : STD_LOGIC; - + + ----------------------------------------------------------------------------- + SIGNAL status : STD_LOGIC_VECTOR(31 DOWNTO 0); + SIGNAL read_buffer : STD_LOGIC; + ----------------------------------------------------------------------------- + SIGNAL run_test_waveform_picker : STD_LOGIC := '1'; + SIGNAL state_read_buffer_on_going : STD_LOGIC; BEGIN @@ -237,7 +243,7 @@ BEGIN pirq_ms => 6, pirq_wfp => 14, hindex => 0, - top_lfr_version => X"00000001") + top_lfr_version => X"000001") PORT MAP ( clk => clk25MHz, rstn => rstn, @@ -257,7 +263,7 @@ BEGIN ahb0 : ahbctrl -- AHB arbiter/multiplexer GENERIC MAP (defmast => 0, split => 0, rrobin => 1, ioaddr => 16#FFF#, - ioen => 0, nahbm => 1, nahbs => 1) + ioen => 0, nahbm => 2, nahbs => 1) PORT MAP (rstn, clk25MHz, ahbmi, ahbmo, ahbsi, ahbso); --- AHB RAM ---------------------------------------------------------- @@ -347,6 +353,7 @@ BEGIN BLE_b => nSRAM_BE2, A => address, DQ => data(31 DOWNTO 16)); + ----------------------------------------------------------------------------- @@ -381,17 +388,16 @@ BEGIN APB_WRITE(clk25MHz, INDEX_WAVEFORM_PICKER, apbi, ADDR_WAVEFORM_PICKER_ADDRESS_F2 , X"40040000"); APB_WRITE(clk25MHz, INDEX_WAVEFORM_PICKER, apbi, ADDR_WAVEFORM_PICKER_ADDRESS_F3 , X"40060000"); - APB_WRITE(clk25MHz, INDEX_WAVEFORM_PICKER, apbi, ADDR_WAVEFORM_PICKER_DELTASNAPSHOT, X"00000020");--"00000020" - APB_WRITE(clk25MHz, INDEX_WAVEFORM_PICKER, apbi, ADDR_WAVEFORM_PICKER_DELTA_F0 , X"00000019");--"00000019" + APB_WRITE(clk25MHz, INDEX_WAVEFORM_PICKER, apbi, ADDR_WAVEFORM_PICKER_DELTASNAPSHOT, X"00000080");--"00000020" + APB_WRITE(clk25MHz, INDEX_WAVEFORM_PICKER, apbi, ADDR_WAVEFORM_PICKER_DELTA_F0 , X"00000060");--"00000019" APB_WRITE(clk25MHz, INDEX_WAVEFORM_PICKER, apbi, ADDR_WAVEFORM_PICKER_DELTA_F0_2 , X"00000007");--"00000007" - APB_WRITE(clk25MHz, INDEX_WAVEFORM_PICKER, apbi, ADDR_WAVEFORM_PICKER_DELTA_F1 , X"00000019");--"00000019" - APB_WRITE(clk25MHz, INDEX_WAVEFORM_PICKER, apbi, ADDR_WAVEFORM_PICKER_DELTA_F2 , X"00000001");--"00000001" + APB_WRITE(clk25MHz, INDEX_WAVEFORM_PICKER, apbi, ADDR_WAVEFORM_PICKER_DELTA_F1 , X"00000062");--"00000019" + APB_WRITE(clk25MHz, INDEX_WAVEFORM_PICKER, apbi, ADDR_WAVEFORM_PICKER_DELTA_F2 , X"00000060");--"00000001" - APB_WRITE(clk25MHz, INDEX_WAVEFORM_PICKER, apbi, ADDR_WAVEFORM_PICKER_NB_DATA_IN_BUFFER , X"00000007"); -- X"00000010" - -- - APB_WRITE(clk25MHz, INDEX_WAVEFORM_PICKER, apbi, ADDR_WAVEFORM_PICKER_NBSNAPSHOT , X"00000010"); - APB_WRITE(clk25MHz, INDEX_WAVEFORM_PICKER, apbi, ADDR_WAVEFORM_PICKER_START_DATE , X"00000001"); - APB_WRITE(clk25MHz, INDEX_WAVEFORM_PICKER, apbi, ADDR_WAVEFORM_PICKER_NB_WORD_IN_BUFFER , X"00000022"); + APB_WRITE(clk25MHz, INDEX_WAVEFORM_PICKER, apbi, ADDR_WAVEFORM_PICKER_NB_DATA_IN_BUFFER , X"0000003f"); -- X"00000010" + APB_WRITE(clk25MHz, INDEX_WAVEFORM_PICKER, apbi, ADDR_WAVEFORM_PICKER_NBSNAPSHOT , X"00000040"); + APB_WRITE(clk25MHz, INDEX_WAVEFORM_PICKER, apbi, ADDR_WAVEFORM_PICKER_START_DATE , X"00000001"); + APB_WRITE(clk25MHz, INDEX_WAVEFORM_PICKER, apbi, ADDR_WAVEFORM_PICKER_NB_WORD_IN_BUFFER , X"000000c2"); WAIT UNTIL clk25MHz = '1'; @@ -405,23 +411,40 @@ BEGIN WAIT UNTIL clk25MHz = '1'; WAIT FOR 1 us; coarse_time <= X"00000001"; + + WAIT UNTIL clk25MHz = '1'; + + read_buffer <= '0'; + while_loop: WHILE run_test_waveform_picker = '1' LOOP + WAIT UNTIL apbo(INDEX_WAVEFORM_PICKER).pirq(14) = '1'; + APB_READ(clk25MHz,INDEX_WAVEFORM_PICKER,apbi,apbo(INDEX_WAVEFORM_PICKER),ADDR_WAVEFORM_PICKER_STATUS,status); + IF status(2 DOWNTO 0) = "111" THEN + APB_WRITE(clk25MHz,INDEX_WAVEFORM_PICKER,apbi,ADDR_WAVEFORM_PICKER_STATUS,X"00000000"); + read_buffer <= '1'; + END IF; + WAIT UNTIL clk25MHz = '1'; + read_buffer <= '0'; + END LOOP while_loop; + + --------------------------------------------------------------------------- -- RUN STEP - WAIT FOR 200 ms; - APB_WRITE(clk25MHz, INDEX_WAVEFORM_PICKER, apbi, ADDR_WAVEFORM_PICKER_CONTROL, X"00000000"); - APB_WRITE(clk25MHz, INDEX_WAVEFORM_PICKER, apbi, ADDR_WAVEFORM_PICKER_START_DATE, X"00000010"); - WAIT FOR 10 us; - WAIT UNTIL clk25MHz = '1'; - WAIT UNTIL clk25MHz = '1'; - APB_WRITE(clk25MHz, INDEX_WAVEFORM_PICKER, apbi, ADDR_WAVEFORM_PICKER_CONTROL, X"000000FF"); - WAIT UNTIL clk25MHz = '1'; - coarse_time <= X"00000010"; - WAIT FOR 100 ms; - APB_WRITE(clk25MHz, INDEX_WAVEFORM_PICKER, apbi, ADDR_WAVEFORM_PICKER_CONTROL, X"00000000"); - WAIT FOR 10 us; - APB_WRITE(clk25MHz, INDEX_WAVEFORM_PICKER, apbi, ADDR_WAVEFORM_PICKER_CONTROL, X"000000AF"); - WAIT FOR 200 ms; + WAIT FOR 20000 ms; REPORT "*** END simulation ***" SEVERITY failure; + --APB_WRITE(clk25MHz, INDEX_WAVEFORM_PICKER, apbi, ADDR_WAVEFORM_PICKER_CONTROL, X"00000000"); + --APB_WRITE(clk25MHz, INDEX_WAVEFORM_PICKER, apbi, ADDR_WAVEFORM_PICKER_START_DATE, X"00000010"); + --WAIT FOR 10 us; + --WAIT UNTIL clk25MHz = '1'; + --WAIT UNTIL clk25MHz = '1'; + --APB_WRITE(clk25MHz, INDEX_WAVEFORM_PICKER, apbi, ADDR_WAVEFORM_PICKER_CONTROL, X"000000FF"); + --WAIT UNTIL clk25MHz = '1'; + --coarse_time <= X"00000010"; + --WAIT FOR 100 ms; + --APB_WRITE(clk25MHz, INDEX_WAVEFORM_PICKER, apbi, ADDR_WAVEFORM_PICKER_CONTROL, X"00000000"); + --WAIT FOR 10 us; + --APB_WRITE(clk25MHz, INDEX_WAVEFORM_PICKER, apbi, ADDR_WAVEFORM_PICKER_CONTROL, X"000000AF"); + --WAIT FOR 200 ms; + --REPORT "*** END simulation ***" SEVERITY failure; WAIT; @@ -435,9 +458,37 @@ BEGIN PROCESS (clk25MHz, rstn) BEGIN -- PROCESS IF rstn = '0' THEN -- asynchronous reset (active low) - + state_read_buffer_on_going <= '0'; ELSIF clk25MHz'EVENT AND clk25MHz = '1' THEN -- rising clock edge + IF read_buffer = '1' THEN + state_read_buffer_on_going <= '1'; + + AHB_READ(clk, hindex, ahbmi, ahbmo, X"40000000", time_mem_f0(31 DOWNTO 0)); + AHB_READ(clk, hindex, ahbmi, ahbmo, X"40020000", time_mem_f1(31 DOWNTO 0)); + AHB_READ(clk, hindex, ahbmi, ahbmo, X"40040000", time_mem_f2(31 DOWNTO 0)); + AHB_READ(clk, hindex, ahbmi, ahbmo, X"40060000", time_mem_f3(31 DOWNTO 0)); + + AHB_READ(clk, hindex, ahbmi, ahbmo, X"40000004", time_mem_f0(63 DOWNTO 32)); + AHB_READ(clk, hindex, ahbmi, ahbmo, X"40020004", time_mem_f1(63 DOWNTO 32)); + AHB_READ(clk, hindex, ahbmi, ahbmo, X"40040004", time_mem_f2(63 DOWNTO 32)); + AHB_READ(clk, hindex, ahbmi, ahbmo, X"40060004", time_mem_f3(63 DOWNTO 32)); + + current_data <= 8; + ELSE + IF state_read_buffer_on_going = '1' THEN + -- READ ALL DATA in memory + AHB_READ(clk, hindex, ahbmi, ahbmo, X"40000000" + current_data, data_mem_f0); + AHB_READ(clk, hindex, ahbmi, ahbmo, X"40020000" + current_data, data_mem_f1); + AHB_READ(clk, hindex, ahbmi, ahbmo, X"40040000" + current_data, data_mem_f2); + AHB_READ(clk, hindex, ahbmi, ahbmo, X"40060000" + current_data, data_mem_f3); + IF current_data < LIMIT_DATA THEN + current_data <= current_data + 4; + ELSE + state_read_buffer_on_going <= '0'; + END IF; + END IF; + END IF; END IF; END PROCESS; ----------------------------------------------------------------------------- diff --git a/designs/LFR_simu/testbench_package.vhd b/designs/LFR_simu/testbench_package.vhd --- a/designs/LFR_simu/testbench_package.vhd +++ b/designs/LFR_simu/testbench_package.vhd @@ -14,7 +14,6 @@ USE grlib.stdlib.ALL; PACKAGE testbench_package IS - PROCEDURE APB_WRITE ( SIGNAL clk : IN STD_LOGIC; CONSTANT pindex : IN INTEGER; @@ -23,12 +22,29 @@ PACKAGE testbench_package IS CONSTANT pwdata : IN STD_LOGIC_VECTOR(31 DOWNTO 0) ); + PROCEDURE APB_READ ( + SIGNAL clk : IN STD_LOGIC; + CONSTANT pindex : IN INTEGER; + SIGNAL apbi : OUT apb_slv_in_type; + SIGNAL apbo : IN apb_slv_out_type; + CONSTANT paddr : IN STD_LOGIC_VECTOR(31 DOWNTO 0); + SIGNAL prdata : OUT STD_LOGIC_VECTOR(31 DOWNTO 0) + ); + + PROCEDURE AHB_READ ( + SIGNAL clk : IN STD_LOGIC; + CONSTANT hindex : IN INTEGER + SIGNAL ahbmi : OUT ahb_slv_in_type; + SIGNAL ahbmo : IN ahb_slv_out_type; + CONSTANT haddr : IN STD_LOGIC_VECTOR(31 DOWNTO 0); + SIGNAL hrdata : OUT STD_LOGIC_VECTOR(31 DOWNTO 0) + ); + END testbench_package; PACKAGE BODY testbench_package IS PROCEDURE APB_WRITE ( - SIGNAL clk : IN STD_LOGIC; CONSTANT pindex : IN INTEGER; SIGNAL apbi : OUT apb_slv_in_type; @@ -50,4 +66,40 @@ PACKAGE BODY testbench_package IS END APB_WRITE; + PROCEDURE APB_READ ( + SIGNAL clk : IN STD_LOGIC; + CONSTANT pindex : IN INTEGER; + SIGNAL apbi : OUT apb_slv_in_type; + SIGNAL apbo : IN apb_slv_out_type; + CONSTANT paddr : IN STD_LOGIC_VECTOR(31 DOWNTO 0); + SIGNAL prdata : OUT STD_LOGIC_VECTOR(31 DOWNTO 0) + ) IS + BEGIN + apbi.psel(pindex) <= '1'; + apbi.pwrite <= '0'; + apbi.penable <= '1'; + apbi.paddr <= paddr; + WAIT UNTIL clk = '1'; + apbi.psel(pindex) <= '0'; + apbi.pwrite <= '0'; + apbi.penable <= '0'; + apbi.paddr <= (OTHERS => '0'); + WAIT UNTIL clk = '1'; + prdata <= apbo.prdata; + END APB_READ; + + PROCEDURE AHB_READ ( + SIGNAL clk : IN STD_LOGIC; + CONSTANT hindex : IN INTEGER + SIGNAL ahbmi : OUT ahb_slv_in_type; + SIGNAL ahbmo : IN ahb_slv_out_type; + CONSTANT haddr : IN STD_LOGIC_VECTOR(31 DOWNTO 0); + SIGNAL hrdata : OUT STD_LOGIC_VECTOR(31 DOWNTO 0) + ) IS + BEGIN + + END AHB_READ; + + + END testbench_package; diff --git a/designs/MINI-LFR_waveformPicker/MINI_LFR_top.vhd b/designs/MINI-LFR_waveformPicker/MINI_LFR_top.vhd --- a/designs/MINI-LFR_waveformPicker/MINI_LFR_top.vhd +++ b/designs/MINI-LFR_waveformPicker/MINI_LFR_top.vhd @@ -171,6 +171,7 @@ ARCHITECTURE beh OF MINI_LFR_top IS SIGNAL bias_fail_sw_sig : STD_LOGIC; ----------------------------------------------------------------------------- + SIGNAL observation_reg : STD_LOGIC_VECTOR(31 DOWNTO 0); BEGIN -- beh @@ -221,7 +222,7 @@ BEGIN -- beh ELSIF clk_25'EVENT AND clk_25 = '1' THEN -- rising clock edge LED0 <= '0'; LED1 <= '1'; - LED2 <= BP0; + LED2 <= BP0 OR BP1 OR nDTR2 OR nRTS2 OR nRTS1; --IO1 <= '1'; --IO2 <= SPW_NOM_DIN OR SPW_NOM_SIN OR SPW_RED_DIN OR SPW_RED_SIN; --IO3 <= ADC_SDO(0); @@ -232,7 +233,7 @@ BEGIN -- beh --IO8 <= ADC_SDO(5); --IO9 <= ADC_SDO(6); --IO10 <= ADC_SDO(7); - IO11 <= BP1 OR nDTR2 OR nRTS2 OR nRTS1; + --IO11 <= ; END IF; END PROCESS; @@ -424,7 +425,7 @@ BEGIN -- beh pirq_ms => 6, pirq_wfp => 14, hindex => 2, - top_lfr_version => X"00000C") -- aa.bb.cc version + top_lfr_version => X"00000E") -- aa.bb.cc version PORT MAP ( clk => clk_25, rstn => reset, @@ -437,7 +438,8 @@ BEGIN -- beh ahbo => ahbo_m_ext(2), coarse_time => coarse_time, fine_time => fine_time, - data_shaping_BW => bias_fail_sw_sig); + data_shaping_BW => bias_fail_sw_sig, + observation_reg => observation_reg); top_ad_conv_ADS7886_v2_1 : top_ad_conv_ADS7886_v2 GENERIC MAP( @@ -459,9 +461,9 @@ BEGIN -- beh sample => sample, sample_val => sample_val); - IO10 <= ADC_SDO_sig(5); - IO9 <= ADC_SDO_sig(4); - IO8 <= ADC_SDO_sig(3); + --IO10 <= ADC_SDO_sig(5); + --IO9 <= ADC_SDO_sig(4); + --IO8 <= ADC_SDO_sig(3); ADC_nCS <= ADC_nCS_sig; ADC_CLK <= ADC_CLK_sig; @@ -475,29 +477,104 @@ BEGIN -- beh GENERIC MAP(pindex => 11, paddr => 11, imask => 16#0000#, nbits => 8) PORT MAP(reset, clk_25, apbi_ext, apbo_ext(11), gpioi, gpioo); - pio_pad_0 : iopad - GENERIC MAP (tech => CFG_PADTECH) - PORT MAP (IO0, gpioo.dout(0), gpioo.oen(0), gpioi.din(0)); - pio_pad_1 : iopad - GENERIC MAP (tech => CFG_PADTECH) - PORT MAP (IO1, gpioo.dout(1), gpioo.oen(1), gpioi.din(1)); - pio_pad_2 : iopad - GENERIC MAP (tech => CFG_PADTECH) - PORT MAP (IO2, gpioo.dout(2), gpioo.oen(2), gpioi.din(2)); - pio_pad_3 : iopad - GENERIC MAP (tech => CFG_PADTECH) - PORT MAP (IO3, gpioo.dout(3), gpioo.oen(3), gpioi.din(3)); - pio_pad_4 : iopad - GENERIC MAP (tech => CFG_PADTECH) - PORT MAP (IO4, gpioo.dout(4), gpioo.oen(4), gpioi.din(4)); - pio_pad_5 : iopad - GENERIC MAP (tech => CFG_PADTECH) - PORT MAP (IO5, gpioo.dout(5), gpioo.oen(5), gpioi.din(5)); - pio_pad_6 : iopad - GENERIC MAP (tech => CFG_PADTECH) - PORT MAP (IO6, gpioo.dout(6), gpioo.oen(6), gpioi.din(6)); - pio_pad_7 : iopad - GENERIC MAP (tech => CFG_PADTECH) - PORT MAP (IO7, gpioo.dout(7), gpioo.oen(7), gpioi.din(7)); + --pio_pad_0 : iopad + -- GENERIC MAP (tech => CFG_PADTECH) + -- PORT MAP (IO0, gpioo.dout(0), gpioo.oen(0), gpioi.din(0)); + --pio_pad_1 : iopad + -- GENERIC MAP (tech => CFG_PADTECH) + -- PORT MAP (IO1, gpioo.dout(1), gpioo.oen(1), gpioi.din(1)); + --pio_pad_2 : iopad + -- GENERIC MAP (tech => CFG_PADTECH) + -- PORT MAP (IO2, gpioo.dout(2), gpioo.oen(2), gpioi.din(2)); + --pio_pad_3 : iopad + -- GENERIC MAP (tech => CFG_PADTECH) + -- PORT MAP (IO3, gpioo.dout(3), gpioo.oen(3), gpioi.din(3)); + --pio_pad_4 : iopad + -- GENERIC MAP (tech => CFG_PADTECH) + -- PORT MAP (IO4, gpioo.dout(4), gpioo.oen(4), gpioi.din(4)); + --pio_pad_5 : iopad + -- GENERIC MAP (tech => CFG_PADTECH) + -- PORT MAP (IO5, gpioo.dout(5), gpioo.oen(5), gpioi.din(5)); + --pio_pad_6 : iopad + -- GENERIC MAP (tech => CFG_PADTECH) + -- PORT MAP (IO6, gpioo.dout(6), gpioo.oen(6), gpioi.din(6)); + --pio_pad_7 : iopad + -- GENERIC MAP (tech => CFG_PADTECH) + -- PORT MAP (IO7, gpioo.dout(7), gpioo.oen(7), gpioi.din(7)); -END beh; + PROCESS (clk_25, reset) + BEGIN -- PROCESS + IF reset = '0' THEN -- asynchronous reset (active low) + IO0 <= '0'; + IO1 <= '0'; + IO2 <= '0'; + IO3 <= '0'; + IO4 <= '0'; + IO5 <= '0'; + IO6 <= '0'; + IO7 <= '0'; + IO8 <= '0'; + IO9 <= '0'; + IO10 <= '0'; + IO11 <= '0'; + ELSIF clk_25'event AND clk_25 = '1' THEN -- rising clock edge + CASE gpioo.dout(1 DOWNTO 0) IS + WHEN "00" => + IO0 <= observation_reg(0 ); + IO1 <= observation_reg(1 ); + IO2 <= observation_reg(2 ); + IO3 <= observation_reg(3 ); + IO4 <= observation_reg(4 ); + IO5 <= observation_reg(5 ); + IO6 <= observation_reg(6 ); + IO7 <= observation_reg(7 ); + IO8 <= observation_reg(8 ); + IO9 <= observation_reg(9 ); + IO10 <= observation_reg(10); + IO11 <= observation_reg(11); + WHEN "01" => + IO0 <= observation_reg(0 + 12); + IO1 <= observation_reg(1 + 12); + IO2 <= observation_reg(2 + 12); + IO3 <= observation_reg(3 + 12); + IO4 <= observation_reg(4 + 12); + IO5 <= observation_reg(5 + 12); + IO6 <= observation_reg(6 + 12); + IO7 <= observation_reg(7 + 12); + IO8 <= observation_reg(8 + 12); + IO9 <= observation_reg(9 + 12); + IO10 <= observation_reg(10 + 12); + IO11 <= observation_reg(11 + 12); + WHEN "10" => + IO0 <= observation_reg(0 + 12 + 12); + IO1 <= observation_reg(1 + 12 + 12); + IO2 <= observation_reg(2 + 12 + 12); + IO3 <= observation_reg(3 + 12 + 12); + IO4 <= observation_reg(4 + 12 + 12); + IO5 <= observation_reg(5 + 12 + 12); + IO6 <= observation_reg(6 + 12 + 12); + IO7 <= observation_reg(7 + 12 + 12); + IO8 <= '0'; + IO9 <= '0'; + IO10 <= '0'; + IO11 <= '0'; + WHEN "11" => + IO0 <= '0'; + IO1 <= '0'; + IO2 <= '0'; + IO3 <= '0'; + IO4 <= '0'; + IO5 <= '0'; + IO6 <= '0'; + IO7 <= '0'; + IO8 <= '0'; + IO9 <= '0'; + IO10 <= '0'; + IO11 <= '0'; + WHEN OTHERS => NULL; + END CASE; + + END IF; + END PROCESS; + +END beh; \ No newline at end of file diff --git a/lib/lpp/lfr_time_management/lfr_time_management.vhd b/lib/lpp/lfr_time_management/lfr_time_management.vhd --- a/lib/lpp/lfr_time_management/lfr_time_management.vhd +++ b/lib/lpp/lfr_time_management/lfr_time_management.vhd @@ -57,7 +57,7 @@ BEGIN lpp_counter_1 : lpp_counter GENERIC MAP ( - nb_wait_period => 750, + nb_wait_period => nb_wait_pediod, nb_bit_of_data => 16) PORT MAP ( clk => clk, diff --git a/lib/lpp/lpp_amba/apb_devices_list.vhd b/lib/lpp/lpp_amba/apb_devices_list.vhd --- a/lib/lpp/lpp_amba/apb_devices_list.vhd +++ b/lib/lpp/lpp_amba/apb_devices_list.vhd @@ -41,4 +41,6 @@ PACKAGE apb_devices_list IS CONSTANT LPP_DEBUG_DMA : amba_device_type := 16#A0#; CONSTANT LPP_DEBUG_LFR : amba_device_type := 16#A1#; + CONSTANT LPP_DEBUG_LFR_ID : amba_device_type := 16#A2#; + END; diff --git a/lib/lpp/lpp_top_lfr/lpp_lfr.vhd b/lib/lpp/lpp_top_lfr/lpp_lfr.vhd --- a/lib/lpp/lpp_top_lfr/lpp_lfr.vhd +++ b/lib/lpp/lpp_top_lfr/lpp_lfr.vhd @@ -60,46 +60,48 @@ ENTITY lpp_lfr IS fine_time : IN STD_LOGIC_VECTOR(15 DOWNTO 0); -- todo -- data_shaping_BW : OUT STD_LOGIC; + -- + observation_reg : OUT STD_LOGIC_VECTOR(31 DOWNTO 0) --debug - debug_f0_data : OUT STD_LOGIC_VECTOR(95 DOWNTO 0); - debug_f0_data_valid : OUT STD_LOGIC; - debug_f1_data : OUT STD_LOGIC_VECTOR(95 DOWNTO 0); - debug_f1_data_valid : OUT STD_LOGIC; - debug_f2_data : OUT STD_LOGIC_VECTOR(95 DOWNTO 0); - debug_f2_data_valid : OUT STD_LOGIC; - debug_f3_data : OUT STD_LOGIC_VECTOR(95 DOWNTO 0); - debug_f3_data_valid : OUT STD_LOGIC; + --debug_f0_data : OUT STD_LOGIC_VECTOR(95 DOWNTO 0); + --debug_f0_data_valid : OUT STD_LOGIC; + --debug_f1_data : OUT STD_LOGIC_VECTOR(95 DOWNTO 0); + --debug_f1_data_valid : OUT STD_LOGIC; + --debug_f2_data : OUT STD_LOGIC_VECTOR(95 DOWNTO 0); + --debug_f2_data_valid : OUT STD_LOGIC; + --debug_f3_data : OUT STD_LOGIC_VECTOR(95 DOWNTO 0); + --debug_f3_data_valid : OUT STD_LOGIC; - -- debug FIFO_IN - debug_f0_data_fifo_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); - debug_f0_data_fifo_in_valid : OUT STD_LOGIC; - debug_f1_data_fifo_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); - debug_f1_data_fifo_in_valid : OUT STD_LOGIC; - debug_f2_data_fifo_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); - debug_f2_data_fifo_in_valid : OUT STD_LOGIC; - debug_f3_data_fifo_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); - debug_f3_data_fifo_in_valid : OUT STD_LOGIC; + ---- debug FIFO_IN + --debug_f0_data_fifo_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); + --debug_f0_data_fifo_in_valid : OUT STD_LOGIC; + --debug_f1_data_fifo_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); + --debug_f1_data_fifo_in_valid : OUT STD_LOGIC; + --debug_f2_data_fifo_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); + --debug_f2_data_fifo_in_valid : OUT STD_LOGIC; + --debug_f3_data_fifo_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); + --debug_f3_data_fifo_in_valid : OUT STD_LOGIC; - --debug FIFO OUT - debug_f0_data_fifo_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); - debug_f0_data_fifo_out_valid : OUT STD_LOGIC; - debug_f1_data_fifo_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); - debug_f1_data_fifo_out_valid : OUT STD_LOGIC; - debug_f2_data_fifo_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); - debug_f2_data_fifo_out_valid : OUT STD_LOGIC; - debug_f3_data_fifo_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); - debug_f3_data_fifo_out_valid : OUT STD_LOGIC; + ----debug FIFO OUT + --debug_f0_data_fifo_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); + --debug_f0_data_fifo_out_valid : OUT STD_LOGIC; + --debug_f1_data_fifo_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); + --debug_f1_data_fifo_out_valid : OUT STD_LOGIC; + --debug_f2_data_fifo_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); + --debug_f2_data_fifo_out_valid : OUT STD_LOGIC; + --debug_f3_data_fifo_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); + --debug_f3_data_fifo_out_valid : OUT STD_LOGIC; - --debug DMA IN - debug_f0_data_dma_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); - debug_f0_data_dma_in_valid : OUT STD_LOGIC; - debug_f1_data_dma_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); - debug_f1_data_dma_in_valid : OUT STD_LOGIC; - debug_f2_data_dma_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); - debug_f2_data_dma_in_valid : OUT STD_LOGIC; - debug_f3_data_dma_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); - debug_f3_data_dma_in_valid : OUT STD_LOGIC + ----debug DMA IN + --debug_f0_data_dma_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); + --debug_f0_data_dma_in_valid : OUT STD_LOGIC; + --debug_f1_data_dma_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); + --debug_f1_data_dma_in_valid : OUT STD_LOGIC; + --debug_f2_data_dma_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); + --debug_f2_data_dma_in_valid : OUT STD_LOGIC; + --debug_f3_data_dma_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); + --debug_f3_data_dma_in_valid : OUT STD_LOGIC ); END lpp_lfr; @@ -474,39 +476,41 @@ BEGIN data_f3_data_out_valid_burst => data_f3_data_out_valid_burst_s, data_f3_data_out_ren => data_f3_data_out_ren, - -- debug SNAPSHOT_OUT - debug_f0_data => debug_f0_data, - debug_f0_data_valid => debug_f0_data_valid , - debug_f1_data => debug_f1_data , - debug_f1_data_valid => debug_f1_data_valid, - debug_f2_data => debug_f2_data , - debug_f2_data_valid => debug_f2_data_valid , - debug_f3_data => debug_f3_data , - debug_f3_data_valid => debug_f3_data_valid, + ------------------------------------------------------------------------- + observation_reg => observation_reg + ---- debug SNAPSHOT_OUT + --debug_f0_data => debug_f0_data, + --debug_f0_data_valid => debug_f0_data_valid , + --debug_f1_data => debug_f1_data , + --debug_f1_data_valid => debug_f1_data_valid, + --debug_f2_data => debug_f2_data , + --debug_f2_data_valid => debug_f2_data_valid , + --debug_f3_data => debug_f3_data , + --debug_f3_data_valid => debug_f3_data_valid, - -- debug FIFO_IN - debug_f0_data_fifo_in => debug_f0_data_fifo_in , - debug_f0_data_fifo_in_valid => debug_f0_data_fifo_in_valid, - debug_f1_data_fifo_in => debug_f1_data_fifo_in , - debug_f1_data_fifo_in_valid => debug_f1_data_fifo_in_valid, - debug_f2_data_fifo_in => debug_f2_data_fifo_in , - debug_f2_data_fifo_in_valid => debug_f2_data_fifo_in_valid, - debug_f3_data_fifo_in => debug_f3_data_fifo_in , - debug_f3_data_fifo_in_valid => debug_f3_data_fifo_in_valid + ---- debug FIFO_IN + --debug_f0_data_fifo_in => debug_f0_data_fifo_in , + --debug_f0_data_fifo_in_valid => debug_f0_data_fifo_in_valid, + --debug_f1_data_fifo_in => debug_f1_data_fifo_in , + --debug_f1_data_fifo_in_valid => debug_f1_data_fifo_in_valid, + --debug_f2_data_fifo_in => debug_f2_data_fifo_in , + --debug_f2_data_fifo_in_valid => debug_f2_data_fifo_in_valid, + --debug_f3_data_fifo_in => debug_f3_data_fifo_in , + --debug_f3_data_fifo_in_valid => debug_f3_data_fifo_in_valid ); ----------------------------------------------------------------------------- -- DEBUG -- WFP OUT - debug_f0_data_fifo_out_valid <= NOT data_f0_data_out_ren; - debug_f0_data_fifo_out <= data_f0_data_out; - debug_f1_data_fifo_out_valid <= NOT data_f1_data_out_ren; - debug_f1_data_fifo_out <= data_f1_data_out; - debug_f2_data_fifo_out_valid <= NOT data_f2_data_out_ren; - debug_f2_data_fifo_out <= data_f2_data_out; - debug_f3_data_fifo_out_valid <= NOT data_f3_data_out_ren; - debug_f3_data_fifo_out <= data_f3_data_out; + --debug_f0_data_fifo_out_valid <= NOT data_f0_data_out_ren; + --debug_f0_data_fifo_out <= data_f0_data_out; + --debug_f1_data_fifo_out_valid <= NOT data_f1_data_out_ren; + --debug_f1_data_fifo_out <= data_f1_data_out; + --debug_f2_data_fifo_out_valid <= NOT data_f2_data_out_ren; + --debug_f2_data_fifo_out <= data_f2_data_out; + --debug_f3_data_fifo_out_valid <= NOT data_f3_data_out_ren; + --debug_f3_data_fifo_out <= data_f3_data_out; ----------------------------------------------------------------------------- @@ -630,14 +634,14 @@ BEGIN ----------------------------------------------------------------------------- -- DEBUG -- DMA IN - debug_f0_data_dma_in_valid <= NOT data_f0_data_out_ren; - debug_f0_data_dma_in <= dma_data; - debug_f1_data_dma_in_valid <= NOT data_f1_data_out_ren; - debug_f1_data_dma_in <= dma_data; - debug_f2_data_dma_in_valid <= NOT data_f2_data_out_ren; - debug_f2_data_dma_in <= dma_data; - debug_f3_data_dma_in_valid <= NOT data_f3_data_out_ren; - debug_f3_data_dma_in <= dma_data; + --debug_f0_data_dma_in_valid <= NOT data_f0_data_out_ren; + --debug_f0_data_dma_in <= dma_data; + --debug_f1_data_dma_in_valid <= NOT data_f1_data_out_ren; + --debug_f1_data_dma_in <= dma_data; + --debug_f2_data_dma_in_valid <= NOT data_f2_data_out_ren; + --debug_f2_data_dma_in <= dma_data; + --debug_f3_data_dma_in_valid <= NOT data_f3_data_out_ren; + --debug_f3_data_dma_in <= dma_data; ----------------------------------------------------------------------------- ----------------------------------------------------------------------------- diff --git a/lib/lpp/lpp_top_lfr/lpp_lfr_pkg.vhd b/lib/lpp/lpp_top_lfr/lpp_lfr_pkg.vhd --- a/lib/lpp/lpp_top_lfr/lpp_lfr_pkg.vhd +++ b/lib/lpp/lpp_top_lfr/lpp_lfr_pkg.vhd @@ -100,46 +100,47 @@ PACKAGE lpp_lfr_pkg IS coarse_time : IN STD_LOGIC_VECTOR(31 DOWNTO 0); fine_time : IN STD_LOGIC_VECTOR(15 DOWNTO 0); data_shaping_BW : OUT STD_LOGIC; + observation_reg : OUT STD_LOGIC_VECTOR(31 DOWNTO 0) - --debug - debug_f0_data : OUT STD_LOGIC_VECTOR(95 DOWNTO 0); - debug_f0_data_valid : OUT STD_LOGIC; - debug_f1_data : OUT STD_LOGIC_VECTOR(95 DOWNTO 0); - debug_f1_data_valid : OUT STD_LOGIC; - debug_f2_data : OUT STD_LOGIC_VECTOR(95 DOWNTO 0); - debug_f2_data_valid : OUT STD_LOGIC; - debug_f3_data : OUT STD_LOGIC_VECTOR(95 DOWNTO 0); - debug_f3_data_valid : OUT STD_LOGIC; + ----debug + --debug_f0_data : OUT STD_LOGIC_VECTOR(95 DOWNTO 0); + --debug_f0_data_valid : OUT STD_LOGIC; + --debug_f1_data : OUT STD_LOGIC_VECTOR(95 DOWNTO 0); + --debug_f1_data_valid : OUT STD_LOGIC; + --debug_f2_data : OUT STD_LOGIC_VECTOR(95 DOWNTO 0); + --debug_f2_data_valid : OUT STD_LOGIC; + --debug_f3_data : OUT STD_LOGIC_VECTOR(95 DOWNTO 0); + --debug_f3_data_valid : OUT STD_LOGIC; - -- debug FIFO_IN - debug_f0_data_fifo_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); - debug_f0_data_fifo_in_valid : OUT STD_LOGIC; - debug_f1_data_fifo_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); - debug_f1_data_fifo_in_valid : OUT STD_LOGIC; - debug_f2_data_fifo_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); - debug_f2_data_fifo_in_valid : OUT STD_LOGIC; - debug_f3_data_fifo_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); - debug_f3_data_fifo_in_valid : OUT STD_LOGIC; + ---- debug FIFO_IN + --debug_f0_data_fifo_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); + --debug_f0_data_fifo_in_valid : OUT STD_LOGIC; + --debug_f1_data_fifo_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); + --debug_f1_data_fifo_in_valid : OUT STD_LOGIC; + --debug_f2_data_fifo_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); + --debug_f2_data_fifo_in_valid : OUT STD_LOGIC; + --debug_f3_data_fifo_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); + --debug_f3_data_fifo_in_valid : OUT STD_LOGIC; - --debug FIFO OUT - debug_f0_data_fifo_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); - debug_f0_data_fifo_out_valid : OUT STD_LOGIC; - debug_f1_data_fifo_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); - debug_f1_data_fifo_out_valid : OUT STD_LOGIC; - debug_f2_data_fifo_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); - debug_f2_data_fifo_out_valid : OUT STD_LOGIC; - debug_f3_data_fifo_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); - debug_f3_data_fifo_out_valid : OUT STD_LOGIC; + ----debug FIFO OUT + --debug_f0_data_fifo_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); + --debug_f0_data_fifo_out_valid : OUT STD_LOGIC; + --debug_f1_data_fifo_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); + --debug_f1_data_fifo_out_valid : OUT STD_LOGIC; + --debug_f2_data_fifo_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); + --debug_f2_data_fifo_out_valid : OUT STD_LOGIC; + --debug_f3_data_fifo_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); + --debug_f3_data_fifo_out_valid : OUT STD_LOGIC; - --debug DMA IN - debug_f0_data_dma_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); - debug_f0_data_dma_in_valid : OUT STD_LOGIC; - debug_f1_data_dma_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); - debug_f1_data_dma_in_valid : OUT STD_LOGIC; - debug_f2_data_dma_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); - debug_f2_data_dma_in_valid : OUT STD_LOGIC; - debug_f3_data_dma_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); - debug_f3_data_dma_in_valid : OUT STD_LOGIC + ----debug DMA IN + --debug_f0_data_dma_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); + --debug_f0_data_dma_in_valid : OUT STD_LOGIC; + --debug_f1_data_dma_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); + --debug_f1_data_dma_in_valid : OUT STD_LOGIC; + --debug_f2_data_dma_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); + --debug_f2_data_dma_in_valid : OUT STD_LOGIC; + --debug_f3_data_dma_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); + --debug_f3_data_dma_in_valid : OUT STD_LOGIC ); END COMPONENT; diff --git a/lib/lpp/lpp_waveform/lpp_waveform.vhd b/lib/lpp/lpp_waveform/lpp_waveform.vhd --- a/lib/lpp/lpp_waveform/lpp_waveform.vhd +++ b/lib/lpp/lpp_waveform/lpp_waveform.vhd @@ -1,495 +1,525 @@ ------------------------------------------------------------------------------- --- This file is a part of the LPP VHDL IP LIBRARY --- Copyright (C) 2009 - 2010, Laboratory of Plasmas Physic - CNRS --- --- This program is free software; you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation; either version 3 of the License, or --- (at your option) any later version. --- --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. --- --- You should have received a copy of the GNU General Public License --- along with this program; if not, write to the Free Software --- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -------------------------------------------------------------------------------- --- Author : Jean-christophe Pellion --- Mail : jean-christophe.pellion@lpp.polytechnique.fr --- jean-christophe.pellion@easii-ic.com -------------------------------------------------------------------------------- -LIBRARY IEEE; -USE IEEE.STD_LOGIC_1164.ALL; -USE ieee.numeric_std.ALL; - -LIBRARY grlib; -USE grlib.amba.ALL; -USE grlib.stdlib.ALL; -USE grlib.devices.ALL; -USE GRLIB.DMA2AHB_Package.ALL; - -LIBRARY lpp; -USE lpp.lpp_waveform_pkg.ALL; - -LIBRARY techmap; -USE techmap.gencomp.ALL; - -ENTITY lpp_waveform IS - - GENERIC ( - tech : INTEGER := inferred; - data_size : INTEGER := 96; --16*6 - nb_data_by_buffer_size : INTEGER := 11; - nb_word_by_buffer_size : INTEGER := 11; - nb_snapshot_param_size : INTEGER := 11; - delta_vector_size : INTEGER := 20; - delta_vector_size_f0_2 : INTEGER := 3); - - PORT ( - clk : IN STD_LOGIC; - rstn : IN STD_LOGIC; - - ---- AMBA AHB Master Interface - --AHB_Master_In : IN AHB_Mst_In_Type; -- TODO - --AHB_Master_Out : OUT AHB_Mst_Out_Type; -- TODO - - --config - reg_run : IN STD_LOGIC; - reg_start_date : IN STD_LOGIC_VECTOR(30 DOWNTO 0); - reg_delta_snapshot : IN STD_LOGIC_VECTOR(delta_vector_size-1 DOWNTO 0); - reg_delta_f0 : IN STD_LOGIC_VECTOR(delta_vector_size-1 DOWNTO 0); - reg_delta_f0_2 : IN STD_LOGIC_VECTOR(delta_vector_size_f0_2-1 DOWNTO 0); - reg_delta_f1 : IN STD_LOGIC_VECTOR(delta_vector_size-1 DOWNTO 0); - reg_delta_f2 : IN STD_LOGIC_VECTOR(delta_vector_size-1 DOWNTO 0); - - enable_f0 : IN STD_LOGIC; - enable_f1 : IN STD_LOGIC; - enable_f2 : IN STD_LOGIC; - enable_f3 : IN STD_LOGIC; - - burst_f0 : IN STD_LOGIC; - burst_f1 : IN STD_LOGIC; - burst_f2 : IN STD_LOGIC; - - nb_data_by_buffer : IN STD_LOGIC_VECTOR(nb_data_by_buffer_size-1 DOWNTO 0); - nb_word_by_buffer : IN STD_LOGIC_VECTOR(nb_word_by_buffer_size-1 DOWNTO 0); - nb_snapshot_param : IN STD_LOGIC_VECTOR(nb_snapshot_param_size-1 DOWNTO 0); - status_full : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); - status_full_ack : IN STD_LOGIC_VECTOR(3 DOWNTO 0); - status_full_err : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); - status_new_err : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); -- New data f(i) before the current data is write by dma - --------------------------------------------------------------------------- - -- INPUT - coarse_time : IN STD_LOGIC_VECTOR(31 DOWNTO 0); - fine_time : IN STD_LOGIC_VECTOR(15 DOWNTO 0); - - --f0 - addr_data_f0 : IN STD_LOGIC_VECTOR(31 DOWNTO 0); - data_f0_in_valid : IN STD_LOGIC; - data_f0_in : IN STD_LOGIC_VECTOR(data_size-1 DOWNTO 0); - --f1 - addr_data_f1 : IN STD_LOGIC_VECTOR(31 DOWNTO 0); - data_f1_in_valid : IN STD_LOGIC; - data_f1_in : IN STD_LOGIC_VECTOR(data_size-1 DOWNTO 0); - --f2 - addr_data_f2 : IN STD_LOGIC_VECTOR(31 DOWNTO 0); - data_f2_in_valid : IN STD_LOGIC; - data_f2_in : IN STD_LOGIC_VECTOR(data_size-1 DOWNTO 0); - --f3 - addr_data_f3 : IN STD_LOGIC_VECTOR(31 DOWNTO 0); - data_f3_in_valid : IN STD_LOGIC; - data_f3_in : IN STD_LOGIC_VECTOR(data_size-1 DOWNTO 0); - - --------------------------------------------------------------------------- - -- OUTPUT - --f0 - data_f0_addr_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); - data_f0_data_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); - data_f0_data_out_valid : OUT STD_LOGIC; - data_f0_data_out_valid_burst : OUT STD_LOGIC; - data_f0_data_out_ren : IN STD_LOGIC; - --f1 - data_f1_addr_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); - data_f1_data_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); - data_f1_data_out_valid : OUT STD_LOGIC; - data_f1_data_out_valid_burst : OUT STD_LOGIC; - data_f1_data_out_ren : IN STD_LOGIC; - --f2 - data_f2_addr_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); - data_f2_data_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); - data_f2_data_out_valid : OUT STD_LOGIC; - data_f2_data_out_valid_burst : OUT STD_LOGIC; - data_f2_data_out_ren : IN STD_LOGIC; - --f3 - data_f3_addr_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); - data_f3_data_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); - data_f3_data_out_valid : OUT STD_LOGIC; - data_f3_data_out_valid_burst : OUT STD_LOGIC; - data_f3_data_out_ren : IN STD_LOGIC; - - --debug SNAPSHOT OUT - debug_f0_data : OUT STD_LOGIC_VECTOR(data_size-1 DOWNTO 0); - debug_f0_data_valid : OUT STD_LOGIC; - debug_f1_data : OUT STD_LOGIC_VECTOR(data_size-1 DOWNTO 0); - debug_f1_data_valid : OUT STD_LOGIC; - debug_f2_data : OUT STD_LOGIC_VECTOR(data_size-1 DOWNTO 0); - debug_f2_data_valid : OUT STD_LOGIC; - debug_f3_data : OUT STD_LOGIC_VECTOR(data_size-1 DOWNTO 0); - debug_f3_data_valid : OUT STD_LOGIC; - - --debug FIFO IN - debug_f0_data_fifo_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); - debug_f0_data_fifo_in_valid : OUT STD_LOGIC; - debug_f1_data_fifo_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); - debug_f1_data_fifo_in_valid : OUT STD_LOGIC; - debug_f2_data_fifo_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); - debug_f2_data_fifo_in_valid : OUT STD_LOGIC; - debug_f3_data_fifo_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); - debug_f3_data_fifo_in_valid : OUT STD_LOGIC - - ); - -END lpp_waveform; - -ARCHITECTURE beh OF lpp_waveform IS - SIGNAL start_snapshot_f0 : STD_LOGIC; - SIGNAL start_snapshot_f1 : STD_LOGIC; - SIGNAL start_snapshot_f2 : STD_LOGIC; - - SIGNAL data_f0_out : STD_LOGIC_VECTOR(data_size-1 DOWNTO 0); - SIGNAL data_f1_out : STD_LOGIC_VECTOR(data_size-1 DOWNTO 0); - SIGNAL data_f2_out : STD_LOGIC_VECTOR(data_size-1 DOWNTO 0); - SIGNAL data_f3_out : STD_LOGIC_VECTOR(data_size-1 DOWNTO 0); - - SIGNAL data_f0_out_valid : STD_LOGIC; - SIGNAL data_f1_out_valid : STD_LOGIC; - SIGNAL data_f2_out_valid : STD_LOGIC; - SIGNAL data_f3_out_valid : STD_LOGIC; - SIGNAL nb_snapshot_param_more_one : STD_LOGIC_VECTOR(nb_snapshot_param_size DOWNTO 0); - -- - SIGNAL valid_in : STD_LOGIC_VECTOR(3 DOWNTO 0); - SIGNAL valid_out : STD_LOGIC_VECTOR(3 DOWNTO 0); - SIGNAL valid_ack : STD_LOGIC_VECTOR(3 DOWNTO 0); - SIGNAL time_ready : STD_LOGIC_VECTOR(3 DOWNTO 0); - SIGNAL data_ready : STD_LOGIC_VECTOR(3 DOWNTO 0); - SIGNAL ready_arb : STD_LOGIC_VECTOR(3 DOWNTO 0); - SIGNAL data_wen : STD_LOGIC_VECTOR(3 DOWNTO 0); - SIGNAL time_wen : STD_LOGIC_VECTOR(3 DOWNTO 0); - SIGNAL wdata : STD_LOGIC_VECTOR(31 DOWNTO 0); - SIGNAL full_almost : STD_LOGIC_VECTOR(3 DOWNTO 0); - SIGNAL full : STD_LOGIC_VECTOR(3 DOWNTO 0); - SIGNAL empty_almost : STD_LOGIC_VECTOR(3 DOWNTO 0); - SIGNAL empty : STD_LOGIC_VECTOR(3 DOWNTO 0); - -- - SIGNAL data_ren : STD_LOGIC_VECTOR(3 DOWNTO 0); - SIGNAL time_ren : STD_LOGIC_VECTOR(3 DOWNTO 0); - SIGNAL rdata : STD_LOGIC_VECTOR(31 DOWNTO 0); - SIGNAL enable : STD_LOGIC_VECTOR(3 DOWNTO 0); - -- - SIGNAL run : STD_LOGIC; - -- - TYPE TIME_VECTOR IS ARRAY (NATURAL RANGE <>) OF STD_LOGIC_VECTOR(47 DOWNTO 0); - SIGNAL data_out : Data_Vector(3 DOWNTO 0, 95 DOWNTO 0); - SIGNAL time_out_2 : Data_Vector(3 DOWNTO 0, 47 DOWNTO 0); - SIGNAL time_out : TIME_VECTOR(3 DOWNTO 0); - SIGNAL time_out_debug : TIME_VECTOR(3 DOWNTO 0); -- TODO : debug - SIGNAL time_reg1 : STD_LOGIC_VECTOR(47 DOWNTO 0); - SIGNAL time_reg2 : STD_LOGIC_VECTOR(47 DOWNTO 0); - -- - - SIGNAL s_empty_almost : STD_LOGIC_VECTOR(3 DOWNTO 0); --occupancy is lesser than 16 * 32b - SIGNAL s_empty : STD_LOGIC_VECTOR(3 DOWNTO 0); - SIGNAL s_data_ren : STD_LOGIC_VECTOR(3 DOWNTO 0); - SIGNAL s_rdata : STD_LOGIC_VECTOR(31 DOWNTO 0); - -BEGIN -- beh - - lpp_waveform_snapshot_controler_1 : lpp_waveform_snapshot_controler - GENERIC MAP ( - delta_vector_size => delta_vector_size, - delta_vector_size_f0_2 => delta_vector_size_f0_2 - ) - PORT MAP ( - clk => clk, - rstn => rstn, - reg_run => reg_run, - reg_start_date => reg_start_date, - reg_delta_snapshot => reg_delta_snapshot, - reg_delta_f0 => reg_delta_f0, - reg_delta_f0_2 => reg_delta_f0_2, - reg_delta_f1 => reg_delta_f1, - reg_delta_f2 => reg_delta_f2, - coarse_time => coarse_time(30 DOWNTO 0), - data_f0_valid => data_f0_in_valid, - data_f2_valid => data_f2_in_valid, - start_snapshot_f0 => start_snapshot_f0, - start_snapshot_f1 => start_snapshot_f1, - start_snapshot_f2 => start_snapshot_f2, - wfp_on => run); - - lpp_waveform_snapshot_f0 : lpp_waveform_snapshot - GENERIC MAP ( - data_size => data_size, - nb_snapshot_param_size => nb_snapshot_param_size) - PORT MAP ( - clk => clk, - rstn => rstn, - run => run, - enable => enable_f0, - burst_enable => burst_f0, - nb_snapshot_param => nb_snapshot_param, - start_snapshot => start_snapshot_f0, - data_in => data_f0_in, - data_in_valid => data_f0_in_valid, - data_out => data_f0_out, - data_out_valid => data_f0_out_valid); - - nb_snapshot_param_more_one <= ('0' & nb_snapshot_param) + 1; - - lpp_waveform_snapshot_f1 : lpp_waveform_snapshot - GENERIC MAP ( - data_size => data_size, - nb_snapshot_param_size => nb_snapshot_param_size+1) - PORT MAP ( - clk => clk, - rstn => rstn, - run => run, - enable => enable_f1, - burst_enable => burst_f1, - nb_snapshot_param => nb_snapshot_param_more_one, - start_snapshot => start_snapshot_f1, - data_in => data_f1_in, - data_in_valid => data_f1_in_valid, - data_out => data_f1_out, - data_out_valid => data_f1_out_valid); - - lpp_waveform_snapshot_f2 : lpp_waveform_snapshot - GENERIC MAP ( - data_size => data_size, - nb_snapshot_param_size => nb_snapshot_param_size+1) - PORT MAP ( - clk => clk, - rstn => rstn, - run => run, - enable => enable_f2, - burst_enable => burst_f2, - nb_snapshot_param => nb_snapshot_param_more_one, - start_snapshot => start_snapshot_f2, - data_in => data_f2_in, - data_in_valid => data_f2_in_valid, - data_out => data_f2_out, - data_out_valid => data_f2_out_valid); - - lpp_waveform_burst_f3 : lpp_waveform_burst - GENERIC MAP ( - data_size => data_size) - PORT MAP ( - clk => clk, - rstn => rstn, - run => run, - enable => enable_f3, - data_in => data_f3_in, - data_in_valid => data_f3_in_valid, - data_out => data_f3_out, - data_out_valid => data_f3_out_valid); - - ----------------------------------------------------------------------------- - -- DEBUG -- SNAPSHOT OUT - debug_f0_data_valid <= data_f0_out_valid; - debug_f0_data <= data_f0_out; - debug_f1_data_valid <= data_f1_out_valid; - debug_f1_data <= data_f1_out; - debug_f2_data_valid <= data_f2_out_valid; - debug_f2_data <= data_f2_out; - debug_f3_data_valid <= data_f3_out_valid; - debug_f3_data <= data_f3_out; - ----------------------------------------------------------------------------- - - PROCESS (clk, rstn) - BEGIN -- PROCESS - IF rstn = '0' THEN -- asynchronous reset (active low) - time_reg1 <= (OTHERS => '0'); - time_reg2 <= (OTHERS => '0'); - ELSIF clk'EVENT AND clk = '1' THEN -- rising clock edge - time_reg1 <= fine_time & coarse_time; - time_reg2 <= time_reg1; - END IF; - END PROCESS; - - valid_in <= data_f3_out_valid & data_f2_out_valid & data_f1_out_valid & data_f0_out_valid; - all_input_valid : FOR i IN 3 DOWNTO 0 GENERATE - lpp_waveform_dma_genvalid_I : lpp_waveform_dma_genvalid - PORT MAP ( - HCLK => clk, - HRESETn => rstn, - run => run, - valid_in => valid_in(I), - ack_in => valid_ack(I), - time_in => time_reg2, -- Todo - valid_out => valid_out(I), - time_out => time_out(I), -- Todo - error => status_new_err(I)); - END GENERATE all_input_valid; - - all_bit_of_data_out : FOR I IN 95 DOWNTO 0 GENERATE - data_out(0, I) <= data_f0_out(I); - data_out(1, I) <= data_f1_out(I); - data_out(2, I) <= data_f2_out(I); - data_out(3, I) <= data_f3_out(I); - END GENERATE all_bit_of_data_out; - - ----------------------------------------------------------------------------- - -- TODO : debug - ----------------------------------------------------------------------------- - all_bit_of_time_out : FOR I IN 47 DOWNTO 0 GENERATE - all_sample_of_time_out : FOR J IN 3 DOWNTO 0 GENERATE - time_out_2(J, I) <= time_out(J)(I); - END GENERATE all_sample_of_time_out; - END GENERATE all_bit_of_time_out; - - -- DEBUG -- - --time_out_debug(0) <= x"0A0A" & x"0A0A0A0A"; - --time_out_debug(1) <= x"1B1B" & x"1B1B1B1B"; - --time_out_debug(2) <= x"2C2C" & x"2C2C2C2C"; - --time_out_debug(3) <= x"3D3D" & x"3D3D3D3D"; - - --all_bit_of_time_out : FOR I IN 47 DOWNTO 0 GENERATE - -- all_sample_of_time_out : FOR J IN 3 DOWNTO 0 GENERATE - -- time_out_2(J, I) <= time_out_debug(J)(I); - -- END GENERATE all_sample_of_time_out; - --END GENERATE all_bit_of_time_out; - -- DEBUG -- - - lpp_waveform_fifo_arbiter_1 : lpp_waveform_fifo_arbiter - GENERIC MAP (tech => tech, - nb_data_by_buffer_size => nb_data_by_buffer_size) - PORT MAP ( - clk => clk, - rstn => rstn, - run => run, - nb_data_by_buffer => nb_data_by_buffer, - data_in_valid => valid_out, - data_in_ack => valid_ack, - data_in => data_out, - time_in => time_out_2, - - data_out => wdata, - data_out_wen => data_wen, - full_almost => full_almost, - full => full); - - ----------------------------------------------------------------------------- - -- DEBUG -- SNAPSHOT IN - debug_f0_data_fifo_in_valid <= NOT data_wen(0); - debug_f0_data_fifo_in <= wdata; - debug_f1_data_fifo_in_valid <= NOT data_wen(1); - debug_f1_data_fifo_in <= wdata; - debug_f2_data_fifo_in_valid <= NOT data_wen(2); - debug_f2_data_fifo_in <= wdata; - debug_f3_data_fifo_in_valid <= NOT data_wen(3); - debug_f3_data_fifo_in <= wdata; - ----------------------------------------------------------------------------- - - lpp_waveform_fifo_1 : lpp_waveform_fifo - GENERIC MAP (tech => tech) - PORT MAP ( - clk => clk, - rstn => rstn, - run => run, - - empty => s_empty, - empty_almost => s_empty_almost, - data_ren => s_data_ren, - rdata => s_rdata, - - - full_almost => full_almost, - full => full, - data_wen => data_wen, - wdata => wdata); - - lpp_waveform_fifo_headreg_1 : lpp_waveform_fifo_headreg - GENERIC MAP (tech => tech) - PORT MAP ( - clk => clk, - rstn => rstn, - run => run, - o_empty_almost => empty_almost, - o_empty => empty, - - o_data_ren => data_ren, - o_rdata_0 => data_f0_data_out, - o_rdata_1 => data_f1_data_out, - o_rdata_2 => data_f2_data_out, - o_rdata_3 => data_f3_data_out, - - i_empty_almost => s_empty_almost, - i_empty => s_empty, - i_data_ren => s_data_ren, - i_rdata => s_rdata); - - - --data_f0_data_out <= rdata; - --data_f1_data_out <= rdata; - --data_f2_data_out <= rdata; - --data_f3_data_out <= rdata; - - data_ren <= data_f3_data_out_ren & - data_f2_data_out_ren & - data_f1_data_out_ren & - data_f0_data_out_ren; - - lpp_waveform_gen_address_1 : lpp_waveform_genaddress - GENERIC MAP ( - nb_data_by_buffer_size => nb_word_by_buffer_size) - PORT MAP ( - clk => clk, - rstn => rstn, - run => run, - - ------------------------------------------------------------------------- - -- CONFIG - ------------------------------------------------------------------------- - nb_data_by_buffer => nb_word_by_buffer, - - addr_data_f0 => addr_data_f0, - addr_data_f1 => addr_data_f1, - addr_data_f2 => addr_data_f2, - addr_data_f3 => addr_data_f3, - ------------------------------------------------------------------------- - -- CTRL - ------------------------------------------------------------------------- - -- IN - empty => empty, - empty_almost => empty_almost, - data_ren => data_ren, - - ------------------------------------------------------------------------- - -- STATUS - ------------------------------------------------------------------------- - status_full => status_full, - status_full_ack => status_full_ack, - status_full_err => status_full_err, - - ------------------------------------------------------------------------- - -- ADDR DATA OUT - ------------------------------------------------------------------------- - data_f0_data_out_valid_burst => data_f0_data_out_valid_burst, - data_f1_data_out_valid_burst => data_f1_data_out_valid_burst, - data_f2_data_out_valid_burst => data_f2_data_out_valid_burst, - data_f3_data_out_valid_burst => data_f3_data_out_valid_burst, - - data_f0_data_out_valid => data_f0_data_out_valid, - data_f1_data_out_valid => data_f1_data_out_valid, - data_f2_data_out_valid => data_f2_data_out_valid, - data_f3_data_out_valid => data_f3_data_out_valid, - - data_f0_addr_out => data_f0_addr_out, - data_f1_addr_out => data_f1_addr_out, - data_f2_addr_out => data_f2_addr_out, - data_f3_addr_out => data_f3_addr_out - ); - -END beh; +------------------------------------------------------------------------------ +-- This file is a part of the LPP VHDL IP LIBRARY +-- Copyright (C) 2009 - 2010, Laboratory of Plasmas Physic - CNRS +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program; if not, write to the Free Software +-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +------------------------------------------------------------------------------- +-- Author : Jean-christophe Pellion +-- Mail : jean-christophe.pellion@lpp.polytechnique.fr +-- jean-christophe.pellion@easii-ic.com +------------------------------------------------------------------------------- +LIBRARY IEEE; +USE IEEE.STD_LOGIC_1164.ALL; +USE ieee.numeric_std.ALL; + +LIBRARY grlib; +USE grlib.amba.ALL; +USE grlib.stdlib.ALL; +USE grlib.devices.ALL; +USE GRLIB.DMA2AHB_Package.ALL; + +LIBRARY lpp; +USE lpp.lpp_waveform_pkg.ALL; + +LIBRARY techmap; +USE techmap.gencomp.ALL; + +ENTITY lpp_waveform IS + + GENERIC ( + tech : INTEGER := inferred; + data_size : INTEGER := 96; --16*6 + nb_data_by_buffer_size : INTEGER := 11; + nb_word_by_buffer_size : INTEGER := 11; + nb_snapshot_param_size : INTEGER := 11; + delta_vector_size : INTEGER := 20; + delta_vector_size_f0_2 : INTEGER := 3); + + PORT ( + clk : IN STD_LOGIC; + rstn : IN STD_LOGIC; + + ---- AMBA AHB Master Interface + --AHB_Master_In : IN AHB_Mst_In_Type; -- TODO + --AHB_Master_Out : OUT AHB_Mst_Out_Type; -- TODO + + --config + reg_run : IN STD_LOGIC; + reg_start_date : IN STD_LOGIC_VECTOR(30 DOWNTO 0); + reg_delta_snapshot : IN STD_LOGIC_VECTOR(delta_vector_size-1 DOWNTO 0); + reg_delta_f0 : IN STD_LOGIC_VECTOR(delta_vector_size-1 DOWNTO 0); + reg_delta_f0_2 : IN STD_LOGIC_VECTOR(delta_vector_size_f0_2-1 DOWNTO 0); + reg_delta_f1 : IN STD_LOGIC_VECTOR(delta_vector_size-1 DOWNTO 0); + reg_delta_f2 : IN STD_LOGIC_VECTOR(delta_vector_size-1 DOWNTO 0); + + enable_f0 : IN STD_LOGIC; + enable_f1 : IN STD_LOGIC; + enable_f2 : IN STD_LOGIC; + enable_f3 : IN STD_LOGIC; + + burst_f0 : IN STD_LOGIC; + burst_f1 : IN STD_LOGIC; + burst_f2 : IN STD_LOGIC; + + nb_data_by_buffer : IN STD_LOGIC_VECTOR(nb_data_by_buffer_size-1 DOWNTO 0); + nb_word_by_buffer : IN STD_LOGIC_VECTOR(nb_word_by_buffer_size-1 DOWNTO 0); + nb_snapshot_param : IN STD_LOGIC_VECTOR(nb_snapshot_param_size-1 DOWNTO 0); + status_full : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); + status_full_ack : IN STD_LOGIC_VECTOR(3 DOWNTO 0); + status_full_err : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); + status_new_err : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); -- New data f(i) before the current data is write by dma + --------------------------------------------------------------------------- + -- INPUT + coarse_time : IN STD_LOGIC_VECTOR(31 DOWNTO 0); + fine_time : IN STD_LOGIC_VECTOR(15 DOWNTO 0); + + --f0 + addr_data_f0 : IN STD_LOGIC_VECTOR(31 DOWNTO 0); + data_f0_in_valid : IN STD_LOGIC; + data_f0_in : IN STD_LOGIC_VECTOR(data_size-1 DOWNTO 0); + --f1 + addr_data_f1 : IN STD_LOGIC_VECTOR(31 DOWNTO 0); + data_f1_in_valid : IN STD_LOGIC; + data_f1_in : IN STD_LOGIC_VECTOR(data_size-1 DOWNTO 0); + --f2 + addr_data_f2 : IN STD_LOGIC_VECTOR(31 DOWNTO 0); + data_f2_in_valid : IN STD_LOGIC; + data_f2_in : IN STD_LOGIC_VECTOR(data_size-1 DOWNTO 0); + --f3 + addr_data_f3 : IN STD_LOGIC_VECTOR(31 DOWNTO 0); + data_f3_in_valid : IN STD_LOGIC; + data_f3_in : IN STD_LOGIC_VECTOR(data_size-1 DOWNTO 0); + + --------------------------------------------------------------------------- + -- OUTPUT + --f0 + data_f0_addr_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); + data_f0_data_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); + data_f0_data_out_valid : OUT STD_LOGIC; + data_f0_data_out_valid_burst : OUT STD_LOGIC; + data_f0_data_out_ren : IN STD_LOGIC; + --f1 + data_f1_addr_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); + data_f1_data_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); + data_f1_data_out_valid : OUT STD_LOGIC; + data_f1_data_out_valid_burst : OUT STD_LOGIC; + data_f1_data_out_ren : IN STD_LOGIC; + --f2 + data_f2_addr_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); + data_f2_data_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); + data_f2_data_out_valid : OUT STD_LOGIC; + data_f2_data_out_valid_burst : OUT STD_LOGIC; + data_f2_data_out_ren : IN STD_LOGIC; + --f3 + data_f3_addr_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); + data_f3_data_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); + data_f3_data_out_valid : OUT STD_LOGIC; + data_f3_data_out_valid_burst : OUT STD_LOGIC; + data_f3_data_out_ren : IN STD_LOGIC; + + --------------------------------------------------------------------------- + -- + observation_reg : OUT STD_LOGIC_VECTOR(31 DOWNTO 0) + + + ----debug SNAPSHOT OUT + --debug_f0_data : OUT STD_LOGIC_VECTOR(data_size-1 DOWNTO 0); + --debug_f0_data_valid : OUT STD_LOGIC; + --debug_f1_data : OUT STD_LOGIC_VECTOR(data_size-1 DOWNTO 0); + --debug_f1_data_valid : OUT STD_LOGIC; + --debug_f2_data : OUT STD_LOGIC_VECTOR(data_size-1 DOWNTO 0); + --debug_f2_data_valid : OUT STD_LOGIC; + --debug_f3_data : OUT STD_LOGIC_VECTOR(data_size-1 DOWNTO 0); + --debug_f3_data_valid : OUT STD_LOGIC; + + ----debug FIFO IN + --debug_f0_data_fifo_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); + --debug_f0_data_fifo_in_valid : OUT STD_LOGIC; + --debug_f1_data_fifo_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); + --debug_f1_data_fifo_in_valid : OUT STD_LOGIC; + --debug_f2_data_fifo_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); + --debug_f2_data_fifo_in_valid : OUT STD_LOGIC; + --debug_f3_data_fifo_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); + --debug_f3_data_fifo_in_valid : OUT STD_LOGIC + + ); + +END lpp_waveform; + +ARCHITECTURE beh OF lpp_waveform IS + SIGNAL start_snapshot_f0 : STD_LOGIC; + SIGNAL start_snapshot_f1 : STD_LOGIC; + SIGNAL start_snapshot_f2 : STD_LOGIC; + + SIGNAL data_f0_out : STD_LOGIC_VECTOR(data_size-1 DOWNTO 0); + SIGNAL data_f1_out : STD_LOGIC_VECTOR(data_size-1 DOWNTO 0); + SIGNAL data_f2_out : STD_LOGIC_VECTOR(data_size-1 DOWNTO 0); + SIGNAL data_f3_out : STD_LOGIC_VECTOR(data_size-1 DOWNTO 0); + + SIGNAL data_f0_out_valid : STD_LOGIC; + SIGNAL data_f1_out_valid : STD_LOGIC; + SIGNAL data_f2_out_valid : STD_LOGIC; + SIGNAL data_f3_out_valid : STD_LOGIC; + SIGNAL nb_snapshot_param_more_one : STD_LOGIC_VECTOR(nb_snapshot_param_size DOWNTO 0); + -- + SIGNAL valid_in : STD_LOGIC_VECTOR(3 DOWNTO 0); + SIGNAL valid_out : STD_LOGIC_VECTOR(3 DOWNTO 0); + SIGNAL valid_ack : STD_LOGIC_VECTOR(3 DOWNTO 0); + SIGNAL time_ready : STD_LOGIC_VECTOR(3 DOWNTO 0); + SIGNAL data_ready : STD_LOGIC_VECTOR(3 DOWNTO 0); + SIGNAL ready_arb : STD_LOGIC_VECTOR(3 DOWNTO 0); + SIGNAL data_wen : STD_LOGIC_VECTOR(3 DOWNTO 0); + SIGNAL time_wen : STD_LOGIC_VECTOR(3 DOWNTO 0); + SIGNAL wdata : STD_LOGIC_VECTOR(31 DOWNTO 0); + SIGNAL full_almost : STD_LOGIC_VECTOR(3 DOWNTO 0); + SIGNAL full : STD_LOGIC_VECTOR(3 DOWNTO 0); + SIGNAL empty_almost : STD_LOGIC_VECTOR(3 DOWNTO 0); + SIGNAL empty : STD_LOGIC_VECTOR(3 DOWNTO 0); + -- + SIGNAL data_ren : STD_LOGIC_VECTOR(3 DOWNTO 0); + SIGNAL time_ren : STD_LOGIC_VECTOR(3 DOWNTO 0); + SIGNAL rdata : STD_LOGIC_VECTOR(31 DOWNTO 0); + SIGNAL enable : STD_LOGIC_VECTOR(3 DOWNTO 0); + -- + SIGNAL run : STD_LOGIC; + -- + TYPE TIME_VECTOR IS ARRAY (NATURAL RANGE <>) OF STD_LOGIC_VECTOR(47 DOWNTO 0); + SIGNAL data_out : Data_Vector(3 DOWNTO 0, 95 DOWNTO 0); + SIGNAL time_out_2 : Data_Vector(3 DOWNTO 0, 47 DOWNTO 0); + SIGNAL time_out : TIME_VECTOR(3 DOWNTO 0); + SIGNAL time_out_debug : TIME_VECTOR(3 DOWNTO 0); -- TODO : debug + SIGNAL time_reg1 : STD_LOGIC_VECTOR(47 DOWNTO 0); + SIGNAL time_reg2 : STD_LOGIC_VECTOR(47 DOWNTO 0); + -- + + SIGNAL s_empty_almost : STD_LOGIC_VECTOR(3 DOWNTO 0); --occupancy is lesser than 16 * 32b + SIGNAL s_empty : STD_LOGIC_VECTOR(3 DOWNTO 0); + SIGNAL s_data_ren : STD_LOGIC_VECTOR(3 DOWNTO 0); + SIGNAL s_rdata : STD_LOGIC_VECTOR(31 DOWNTO 0); + + -- + + SIGNAL observation_reg_s : STD_LOGIC_VECTOR(31 DOWNTO 0); + SIGNAL status_full_s : STD_LOGIC_VECTOR(3 DOWNTO 0); + +BEGIN -- beh + + ----------------------------------------------------------------------------- + -- DEBUG + ----------------------------------------------------------------------------- + PROCESS (clk, rstn) + BEGIN -- PROCESS + IF rstn = '0' THEN -- asynchronous reset (active low) + observation_reg <= (OTHERS => '0'); + ELSIF clk'event AND clk = '1' THEN -- rising clock edge + observation_reg <= observation_reg_s; + END IF; + END PROCESS; + observation_reg_s( 2 DOWNTO 0) <= start_snapshot_f2 & start_snapshot_f1 & start_snapshot_f0; + observation_reg_s( 5 DOWNTO 3) <= data_f2_out_valid & data_f1_out_valid & data_f0_out_valid; + observation_reg_s( 8 DOWNTO 6) <= status_full_s(2 DOWNTO 0) ; + observation_reg_s(11 DOWNTO 9) <= status_full_ack(2 DOWNTO 0); + observation_reg_s(14 DOWNTO 12) <= data_wen(2 DOWNTO 0); + observation_reg_s(31 DOWNTO 15) <= (OTHERS => '0'); + ----------------------------------------------------------------------------- + + lpp_waveform_snapshot_controler_1 : lpp_waveform_snapshot_controler + GENERIC MAP ( + delta_vector_size => delta_vector_size, + delta_vector_size_f0_2 => delta_vector_size_f0_2 + ) + PORT MAP ( + clk => clk, + rstn => rstn, + reg_run => reg_run, + reg_start_date => reg_start_date, + reg_delta_snapshot => reg_delta_snapshot, + reg_delta_f0 => reg_delta_f0, + reg_delta_f0_2 => reg_delta_f0_2, + reg_delta_f1 => reg_delta_f1, + reg_delta_f2 => reg_delta_f2, + coarse_time => coarse_time(30 DOWNTO 0), + data_f0_valid => data_f0_in_valid, + data_f2_valid => data_f2_in_valid, + start_snapshot_f0 => start_snapshot_f0, + start_snapshot_f1 => start_snapshot_f1, + start_snapshot_f2 => start_snapshot_f2, + wfp_on => run); + + lpp_waveform_snapshot_f0 : lpp_waveform_snapshot + GENERIC MAP ( + data_size => data_size, + nb_snapshot_param_size => nb_snapshot_param_size) + PORT MAP ( + clk => clk, + rstn => rstn, + run => run, + enable => enable_f0, + burst_enable => burst_f0, + nb_snapshot_param => nb_snapshot_param, + start_snapshot => start_snapshot_f0, + data_in => data_f0_in, + data_in_valid => data_f0_in_valid, + data_out => data_f0_out, + data_out_valid => data_f0_out_valid); + + nb_snapshot_param_more_one <= ('0' & nb_snapshot_param) ;--+ 1; + + lpp_waveform_snapshot_f1 : lpp_waveform_snapshot + GENERIC MAP ( + data_size => data_size, + nb_snapshot_param_size => nb_snapshot_param_size+1) + PORT MAP ( + clk => clk, + rstn => rstn, + run => run, + enable => enable_f1, + burst_enable => burst_f1, + nb_snapshot_param => nb_snapshot_param_more_one, + start_snapshot => start_snapshot_f1, + data_in => data_f1_in, + data_in_valid => data_f1_in_valid, + data_out => data_f1_out, + data_out_valid => data_f1_out_valid); + + lpp_waveform_snapshot_f2 : lpp_waveform_snapshot + GENERIC MAP ( + data_size => data_size, + nb_snapshot_param_size => nb_snapshot_param_size+1) + PORT MAP ( + clk => clk, + rstn => rstn, + run => run, + enable => enable_f2, + burst_enable => burst_f2, + nb_snapshot_param => nb_snapshot_param_more_one, + start_snapshot => start_snapshot_f2, + data_in => data_f2_in, + data_in_valid => data_f2_in_valid, + data_out => data_f2_out, + data_out_valid => data_f2_out_valid); + + lpp_waveform_burst_f3 : lpp_waveform_burst + GENERIC MAP ( + data_size => data_size) + PORT MAP ( + clk => clk, + rstn => rstn, + run => run, + enable => enable_f3, + data_in => data_f3_in, + data_in_valid => data_f3_in_valid, + data_out => data_f3_out, + data_out_valid => data_f3_out_valid); + + ----------------------------------------------------------------------------- + -- DEBUG -- SNAPSHOT OUT + --debug_f0_data_valid <= data_f0_out_valid; + --debug_f0_data <= data_f0_out; + --debug_f1_data_valid <= data_f1_out_valid; + --debug_f1_data <= data_f1_out; + --debug_f2_data_valid <= data_f2_out_valid; + --debug_f2_data <= data_f2_out; + --debug_f3_data_valid <= data_f3_out_valid; + --debug_f3_data <= data_f3_out; + ----------------------------------------------------------------------------- + + PROCESS (clk, rstn) + BEGIN -- PROCESS + IF rstn = '0' THEN -- asynchronous reset (active low) + time_reg1 <= (OTHERS => '0'); + time_reg2 <= (OTHERS => '0'); + ELSIF clk'EVENT AND clk = '1' THEN -- rising clock edge + time_reg1 <= fine_time & coarse_time; + time_reg2 <= time_reg1; + END IF; + END PROCESS; + + valid_in <= data_f3_out_valid & data_f2_out_valid & data_f1_out_valid & data_f0_out_valid; + all_input_valid : FOR i IN 3 DOWNTO 0 GENERATE + lpp_waveform_dma_genvalid_I : lpp_waveform_dma_genvalid + PORT MAP ( + HCLK => clk, + HRESETn => rstn, + run => run, + valid_in => valid_in(I), + ack_in => valid_ack(I), + time_in => time_reg2, -- Todo + valid_out => valid_out(I), + time_out => time_out(I), -- Todo + error => status_new_err(I)); + END GENERATE all_input_valid; + + all_bit_of_data_out : FOR I IN 95 DOWNTO 0 GENERATE + data_out(0, I) <= data_f0_out(I); + data_out(1, I) <= data_f1_out(I); + data_out(2, I) <= data_f2_out(I); + data_out(3, I) <= data_f3_out(I); + END GENERATE all_bit_of_data_out; + + ----------------------------------------------------------------------------- + -- TODO : debug + ----------------------------------------------------------------------------- + all_bit_of_time_out : FOR I IN 47 DOWNTO 0 GENERATE + all_sample_of_time_out : FOR J IN 3 DOWNTO 0 GENERATE + time_out_2(J, I) <= time_out(J)(I); + END GENERATE all_sample_of_time_out; + END GENERATE all_bit_of_time_out; + + -- DEBUG -- + --time_out_debug(0) <= x"0A0A" & x"0A0A0A0A"; + --time_out_debug(1) <= x"1B1B" & x"1B1B1B1B"; + --time_out_debug(2) <= x"2C2C" & x"2C2C2C2C"; + --time_out_debug(3) <= x"3D3D" & x"3D3D3D3D"; + + --all_bit_of_time_out : FOR I IN 47 DOWNTO 0 GENERATE + -- all_sample_of_time_out : FOR J IN 3 DOWNTO 0 GENERATE + -- time_out_2(J, I) <= time_out_debug(J)(I); + -- END GENERATE all_sample_of_time_out; + --END GENERATE all_bit_of_time_out; + -- DEBUG -- + + lpp_waveform_fifo_arbiter_1 : lpp_waveform_fifo_arbiter + GENERIC MAP (tech => tech, + nb_data_by_buffer_size => nb_data_by_buffer_size) + PORT MAP ( + clk => clk, + rstn => rstn, + run => run, + nb_data_by_buffer => nb_data_by_buffer, + data_in_valid => valid_out, + data_in_ack => valid_ack, + data_in => data_out, + time_in => time_out_2, + + data_out => wdata, + data_out_wen => data_wen, + full_almost => full_almost, + full => full); + + ----------------------------------------------------------------------------- + -- DEBUG -- SNAPSHOT IN + --debug_f0_data_fifo_in_valid <= NOT data_wen(0); + --debug_f0_data_fifo_in <= wdata; + --debug_f1_data_fifo_in_valid <= NOT data_wen(1); + --debug_f1_data_fifo_in <= wdata; + --debug_f2_data_fifo_in_valid <= NOT data_wen(2); + --debug_f2_data_fifo_in <= wdata; + --debug_f3_data_fifo_in_valid <= NOT data_wen(3); + --debug_f3_data_fifo_in <= wdata;s + ----------------------------------------------------------------------------- + + lpp_waveform_fifo_1 : lpp_waveform_fifo + GENERIC MAP (tech => tech) + PORT MAP ( + clk => clk, + rstn => rstn, + run => run, + + empty => s_empty, + empty_almost => s_empty_almost, + data_ren => s_data_ren, + rdata => s_rdata, + + + full_almost => full_almost, + full => full, + data_wen => data_wen, + wdata => wdata); + + lpp_waveform_fifo_headreg_1 : lpp_waveform_fifo_headreg + GENERIC MAP (tech => tech) + PORT MAP ( + clk => clk, + rstn => rstn, + run => run, + o_empty_almost => empty_almost, + o_empty => empty, + + o_data_ren => data_ren, + o_rdata_0 => data_f0_data_out, + o_rdata_1 => data_f1_data_out, + o_rdata_2 => data_f2_data_out, + o_rdata_3 => data_f3_data_out, + + i_empty_almost => s_empty_almost, + i_empty => s_empty, + i_data_ren => s_data_ren, + i_rdata => s_rdata); + + + --data_f0_data_out <= rdata; + --data_f1_data_out <= rdata; + --data_f2_data_out <= rdata; + --data_f3_data_out <= rdata; + + data_ren <= data_f3_data_out_ren & + data_f2_data_out_ren & + data_f1_data_out_ren & + data_f0_data_out_ren; + + lpp_waveform_gen_address_1 : lpp_waveform_genaddress + GENERIC MAP ( + nb_data_by_buffer_size => nb_word_by_buffer_size) + PORT MAP ( + clk => clk, + rstn => rstn, + run => run, + + ------------------------------------------------------------------------- + -- CONFIG + ------------------------------------------------------------------------- + nb_data_by_buffer => nb_word_by_buffer, + + addr_data_f0 => addr_data_f0, + addr_data_f1 => addr_data_f1, + addr_data_f2 => addr_data_f2, + addr_data_f3 => addr_data_f3, + ------------------------------------------------------------------------- + -- CTRL + ------------------------------------------------------------------------- + -- IN + empty => empty, + empty_almost => empty_almost, + data_ren => data_ren, + + ------------------------------------------------------------------------- + -- STATUS + ------------------------------------------------------------------------- + status_full => status_full_s, + status_full_ack => status_full_ack, + status_full_err => status_full_err, + + ------------------------------------------------------------------------- + -- ADDR DATA OUT + ------------------------------------------------------------------------- + data_f0_data_out_valid_burst => data_f0_data_out_valid_burst, + data_f1_data_out_valid_burst => data_f1_data_out_valid_burst, + data_f2_data_out_valid_burst => data_f2_data_out_valid_burst, + data_f3_data_out_valid_burst => data_f3_data_out_valid_burst, + + data_f0_data_out_valid => data_f0_data_out_valid, + data_f1_data_out_valid => data_f1_data_out_valid, + data_f2_data_out_valid => data_f2_data_out_valid, + data_f3_data_out_valid => data_f3_data_out_valid, + + data_f0_addr_out => data_f0_addr_out, + data_f1_addr_out => data_f1_addr_out, + data_f2_addr_out => data_f2_addr_out, + data_f3_addr_out => data_f3_addr_out + ); + status_full <= status_full_s; + +END beh; \ No newline at end of file diff --git a/lib/lpp/lpp_waveform/lpp_waveform_pkg.vhd b/lib/lpp/lpp_waveform/lpp_waveform_pkg.vhd --- a/lib/lpp/lpp_waveform/lpp_waveform_pkg.vhd +++ b/lib/lpp/lpp_waveform/lpp_waveform_pkg.vhd @@ -169,24 +169,25 @@ PACKAGE lpp_waveform_pkg IS data_f3_data_out_ren : IN STD_LOGIC; --debug - debug_f0_data : OUT STD_LOGIC_VECTOR(data_size-1 DOWNTO 0); - debug_f0_data_valid : OUT STD_LOGIC; - debug_f1_data : OUT STD_LOGIC_VECTOR(data_size-1 DOWNTO 0); - debug_f1_data_valid : OUT STD_LOGIC; - debug_f2_data : OUT STD_LOGIC_VECTOR(data_size-1 DOWNTO 0); - debug_f2_data_valid : OUT STD_LOGIC; - debug_f3_data : OUT STD_LOGIC_VECTOR(data_size-1 DOWNTO 0); - debug_f3_data_valid : OUT STD_LOGIC; + observation_reg : OUT STD_LOGIC_VECTOR(31 DOWNTO 0) + --debug_f0_data : OUT STD_LOGIC_VECTOR(data_size-1 DOWNTO 0); + --debug_f0_data_valid : OUT STD_LOGIC; + --debug_f1_data : OUT STD_LOGIC_VECTOR(data_size-1 DOWNTO 0); + --debug_f1_data_valid : OUT STD_LOGIC; + --debug_f2_data : OUT STD_LOGIC_VECTOR(data_size-1 DOWNTO 0); + --debug_f2_data_valid : OUT STD_LOGIC; + --debug_f3_data : OUT STD_LOGIC_VECTOR(data_size-1 DOWNTO 0); + --debug_f3_data_valid : OUT STD_LOGIC; - --debug FIFO IN - debug_f0_data_fifo_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); - debug_f0_data_fifo_in_valid : OUT STD_LOGIC; - debug_f1_data_fifo_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); - debug_f1_data_fifo_in_valid : OUT STD_LOGIC; - debug_f2_data_fifo_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); - debug_f2_data_fifo_in_valid : OUT STD_LOGIC; - debug_f3_data_fifo_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); - debug_f3_data_fifo_in_valid : OUT STD_LOGIC + ----debug FIFO IN + --debug_f0_data_fifo_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); + --debug_f0_data_fifo_in_valid : OUT STD_LOGIC; + --debug_f1_data_fifo_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); + --debug_f1_data_fifo_in_valid : OUT STD_LOGIC; + --debug_f2_data_fifo_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); + --debug_f2_data_fifo_in_valid : OUT STD_LOGIC; + --debug_f3_data_fifo_in : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); + --debug_f3_data_fifo_in_valid : OUT STD_LOGIC ); END COMPONENT;