##// END OF EJS Templates
Added DATA_SHAPING_SATURATION Option in lpp_lfr, and lpp_lfr_filter...
Added DATA_SHAPING_SATURATION Option in lpp_lfr, and lpp_lfr_filter 0 => data shaping are shifted (divided by 2) 1 => data shaping are saturated Added Saturation module in the general purpose package. Created 2 tests, one for each DATA_SHAPING_SATURATION value

File last commit:

r657:448d3f8e2d47 default
r657:448d3f8e2d47 default
Show More
lpp_lfr_pkg.vhd
422 lines | 18.6 KiB | text/x-vhdl | VhdlLexer
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
LIBRARY grlib;
USE grlib.amba.ALL;
LIBRARY lpp;
USE lpp.lpp_ad_conv.ALL;
USE lpp.iir_filter.ALL;
USE lpp.FILTERcfg.ALL;
USE lpp.lpp_memory.ALL;
LIBRARY techmap;
USE techmap.gencomp.ALL;
PACKAGE lpp_lfr_pkg IS
constant LPP_LFR_BOARD_MINI_LFR : std_logic_vector(7 downto 0) := X"00"; -- with fpga A3PE3000
constant LPP_LFR_BOARD_LFR_EM : std_logic_vector(7 downto 0) := X"01"; -- with fpga A3PE3000
constant LPP_LFR_BOARD_LFR_EQM : std_logic_vector(7 downto 0) := X"02"; -- with fpga A3PE3000
constant LPP_LFR_BOARD_LFR_FM : std_logic_vector(7 downto 0) := X"03"; -- with fpga RTAX4000D
constant LPP_LFR_BOARD_DISCOSPACE : std_logic_vector(7 downto 0) := X"04"; -- with fpga A3PE3000
-----------------------------------------------------------------------------
-- TEMP
-----------------------------------------------------------------------------
COMPONENT lpp_lfr_ms_test
GENERIC (
Mem_use : INTEGER);
PORT (
clk : IN STD_LOGIC;
rstn : IN STD_LOGIC;
-- TIME
coarse_time : IN STD_LOGIC_VECTOR(31 DOWNTO 0); -- todo
fine_time : IN STD_LOGIC_VECTOR(15 DOWNTO 0); -- todo
--
sample_f0_wen : IN STD_LOGIC_VECTOR(4 DOWNTO 0);
sample_f0_wdata : IN STD_LOGIC_VECTOR((5*16)-1 DOWNTO 0);
--
sample_f1_wen : IN STD_LOGIC_VECTOR(4 DOWNTO 0);
sample_f1_wdata : IN STD_LOGIC_VECTOR((5*16)-1 DOWNTO 0);
--
sample_f2_wen : IN STD_LOGIC_VECTOR(4 DOWNTO 0);
sample_f2_wdata : IN STD_LOGIC_VECTOR((5*16)-1 DOWNTO 0);
---------------------------------------------------------------------------
error_input_fifo_write : OUT STD_LOGIC_VECTOR(2 DOWNTO 0);
--
--sample_ren : OUT STD_LOGIC_VECTOR(4 DOWNTO 0);
--sample_full : IN STD_LOGIC_VECTOR(4 DOWNTO 0);
--sample_empty : IN STD_LOGIC_VECTOR(4 DOWNTO 0);
--sample_rdata : IN STD_LOGIC_VECTOR((5*16)-1 DOWNTO 0);
--status_channel : IN STD_LOGIC_VECTOR(49 DOWNTO 0);
-- IN
MEM_IN_SM_locked : IN STD_LOGIC_VECTOR(4 DOWNTO 0);
-----------------------------------------------------------------------------
status_component : OUT STD_LOGIC_VECTOR(53 DOWNTO 0);
SM_in_data : OUT STD_LOGIC_VECTOR(32*2-1 DOWNTO 0);
SM_in_ren : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
SM_in_empty : OUT STD_LOGIC_VECTOR(1 DOWNTO 0);
SM_correlation_start : OUT STD_LOGIC;
SM_correlation_auto : OUT STD_LOGIC;
SM_correlation_done : IN STD_LOGIC
);
END COMPONENT;
-----------------------------------------------------------------------------
COMPONENT lpp_lfr_ms
GENERIC (
Mem_use : INTEGER;
WINDOWS_HAANNING_PARAM_SIZE : INTEGER);
PORT (
clk : IN STD_LOGIC;
rstn : IN STD_LOGIC;
run : IN STD_LOGIC;
start_date : IN STD_LOGIC_VECTOR(30 DOWNTO 0);
coarse_time : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
sample_f0_wen : IN STD_LOGIC_VECTOR(4 DOWNTO 0);
sample_f0_wdata : IN STD_LOGIC_VECTOR((5*16)-1 DOWNTO 0);
sample_f0_time : IN STD_LOGIC_VECTOR(47 DOWNTO 0);
sample_f1_wen : IN STD_LOGIC_VECTOR(4 DOWNTO 0);
sample_f1_wdata : IN STD_LOGIC_VECTOR((5*16)-1 DOWNTO 0);
sample_f1_time : IN STD_LOGIC_VECTOR(47 DOWNTO 0);
sample_f2_wen : IN STD_LOGIC_VECTOR(4 DOWNTO 0);
sample_f2_wdata : IN STD_LOGIC_VECTOR((5*16)-1 DOWNTO 0);
sample_f2_time : IN STD_LOGIC_VECTOR(47 DOWNTO 0);
dma_fifo_burst_valid : OUT STD_LOGIC;
dma_fifo_data : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
dma_fifo_ren : IN STD_LOGIC;
dma_buffer_new : OUT STD_LOGIC;
dma_buffer_addr : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
dma_buffer_length : OUT STD_LOGIC_VECTOR(25 DOWNTO 0);
dma_buffer_full : IN STD_LOGIC;
dma_buffer_full_err : IN STD_LOGIC;
ready_matrix_f0 : OUT STD_LOGIC;
ready_matrix_f1 : OUT STD_LOGIC;
ready_matrix_f2 : OUT STD_LOGIC;
error_buffer_full : OUT STD_LOGIC;
error_input_fifo_write : OUT STD_LOGIC_VECTOR(2 DOWNTO 0);
status_ready_matrix_f0 : IN STD_LOGIC;
status_ready_matrix_f1 : IN STD_LOGIC;
status_ready_matrix_f2 : IN STD_LOGIC;
addr_matrix_f0 : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
addr_matrix_f1 : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
addr_matrix_f2 : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
length_matrix_f0 : IN STD_LOGIC_VECTOR(25 DOWNTO 0);
length_matrix_f1 : IN STD_LOGIC_VECTOR(25 DOWNTO 0);
length_matrix_f2 : IN STD_LOGIC_VECTOR(25 DOWNTO 0);
matrix_time_f0 : OUT STD_LOGIC_VECTOR(47 DOWNTO 0);
matrix_time_f1 : OUT STD_LOGIC_VECTOR(47 DOWNTO 0);
matrix_time_f2 : OUT STD_LOGIC_VECTOR(47 DOWNTO 0);
debug_vector : OUT STD_LOGIC_VECTOR(11 DOWNTO 0));
END COMPONENT;
COMPONENT lpp_lfr_ms_fsmdma
PORT (
clk : IN STD_ULOGIC;
rstn : IN STD_ULOGIC;
run : IN STD_LOGIC;
fifo_matrix_type : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
fifo_matrix_time : IN STD_LOGIC_VECTOR(47 DOWNTO 0);
fifo_data : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
fifo_empty : IN STD_LOGIC;
fifo_empty_threshold : IN STD_LOGIC;
fifo_ren : OUT STD_LOGIC;
dma_fifo_valid_burst : OUT STD_LOGIC;
dma_fifo_data : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
dma_fifo_ren : IN STD_LOGIC;
dma_buffer_new : OUT STD_LOGIC;
dma_buffer_addr : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
dma_buffer_length : OUT STD_LOGIC_VECTOR(25 DOWNTO 0);
dma_buffer_full : IN STD_LOGIC;
dma_buffer_full_err : IN STD_LOGIC;
status_ready_matrix_f0 : IN STD_LOGIC;
status_ready_matrix_f1 : IN STD_LOGIC;
status_ready_matrix_f2 : IN STD_LOGIC;
addr_matrix_f0 : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
addr_matrix_f1 : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
addr_matrix_f2 : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
length_matrix_f0 : IN STD_LOGIC_VECTOR(25 DOWNTO 0);
length_matrix_f1 : IN STD_LOGIC_VECTOR(25 DOWNTO 0);
length_matrix_f2 : IN STD_LOGIC_VECTOR(25 DOWNTO 0);
ready_matrix_f0 : OUT STD_LOGIC;
ready_matrix_f1 : OUT STD_LOGIC;
ready_matrix_f2 : OUT STD_LOGIC;
matrix_time_f0 : OUT STD_LOGIC_VECTOR(47 DOWNTO 0);
matrix_time_f1 : OUT STD_LOGIC_VECTOR(47 DOWNTO 0);
matrix_time_f2 : OUT STD_LOGIC_VECTOR(47 DOWNTO 0);
error_buffer_full : OUT STD_LOGIC);
END COMPONENT;
COMPONENT lpp_lfr_ms_FFT
GENERIC (
WINDOWS_HAANNING_PARAM_SIZE : INTEGER);
PORT (
clk : IN STD_LOGIC;
rstn : IN STD_LOGIC;
sample_valid : IN STD_LOGIC;
fft_read : IN STD_LOGIC;
sample_data : IN STD_LOGIC_VECTOR(15 DOWNTO 0);
sample_load : OUT STD_LOGIC;
fft_pong : OUT STD_LOGIC;
fft_data_im : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);
fft_data_re : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);
fft_data_valid : OUT STD_LOGIC;
fft_ready : OUT STD_LOGIC);
END COMPONENT;
COMPONENT lpp_lfr_filter
GENERIC (
tech : INTEGER;
Mem_use : INTEGER;
RTL_DESIGN_LIGHT : INTEGER;
DATA_SHAPING_SATURATION : INTEGER
);
PORT (
sample : IN Samples(7 DOWNTO 0);
sample_val : IN STD_LOGIC;
sample_time : IN STD_LOGIC_VECTOR(47 DOWNTO 0);
clk : IN STD_LOGIC;
rstn : IN STD_LOGIC;
data_shaping_SP0 : IN STD_LOGIC;
data_shaping_SP1 : IN STD_LOGIC;
data_shaping_R0 : IN STD_LOGIC;
data_shaping_R1 : IN STD_LOGIC;
data_shaping_R2 : IN STD_LOGIC;
sample_f0_val : OUT STD_LOGIC;
sample_f1_val : OUT STD_LOGIC;
sample_f2_val : OUT STD_LOGIC;
sample_f3_val : OUT STD_LOGIC;
sample_f0_wdata : OUT STD_LOGIC_VECTOR((6*16)-1 DOWNTO 0);
sample_f1_wdata : OUT STD_LOGIC_VECTOR((6*16)-1 DOWNTO 0);
sample_f2_wdata : OUT STD_LOGIC_VECTOR((6*16)-1 DOWNTO 0);
sample_f3_wdata : OUT STD_LOGIC_VECTOR((6*16)-1 DOWNTO 0);
sample_f0_time : OUT STD_LOGIC_VECTOR(47 DOWNTO 0);
sample_f1_time : OUT STD_LOGIC_VECTOR(47 DOWNTO 0);
sample_f2_time : OUT STD_LOGIC_VECTOR(47 DOWNTO 0);
sample_f3_time : OUT STD_LOGIC_VECTOR(47 DOWNTO 0)
);
END COMPONENT;
COMPONENT lpp_lfr
GENERIC (
Mem_use : INTEGER;
tech : INTEGER;
nb_data_by_buffer_size : INTEGER;
-- nb_word_by_buffer_size : INTEGER;
nb_snapshot_param_size : INTEGER;
delta_vector_size : INTEGER;
delta_vector_size_f0_2 : INTEGER;
pindex : INTEGER;
paddr : INTEGER;
pmask : INTEGER;
pirq_ms : INTEGER;
pirq_wfp : INTEGER;
hindex : INTEGER;
top_lfr_version : STD_LOGIC_VECTOR(23 DOWNTO 0);
DEBUG_FORCE_DATA_DMA : INTEGER;
RTL_DESIGN_LIGHT : INTEGER;
WINDOWS_HAANNING_PARAM_SIZE : INTEGER;
DATA_SHAPING_SATURATION : INTEGER
);
PORT (
clk : IN STD_LOGIC;
rstn : IN STD_LOGIC;
sample_B : IN Samples(2 DOWNTO 0);
sample_E : IN Samples(4 DOWNTO 0);
sample_val : IN STD_LOGIC;
apbi : IN apb_slv_in_type;
apbo : OUT apb_slv_out_type;
ahbi : IN AHB_Mst_In_Type;
ahbo : OUT AHB_Mst_Out_Type;
coarse_time : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
fine_time : IN STD_LOGIC_VECTOR(15 DOWNTO 0);
data_shaping_BW : OUT STD_LOGIC;
debug_vector : OUT STD_LOGIC_VECTOR(11 DOWNTO 0);
debug_vector_ms : OUT STD_LOGIC_VECTOR(11 DOWNTO 0)
);
END COMPONENT;
-----------------------------------------------------------------------------
-- LPP_LFR with only WaveForm Picker (and without Spectral Matrix Sub System)
-----------------------------------------------------------------------------
COMPONENT lpp_lfr_WFP_nMS
GENERIC (
Mem_use : INTEGER;
nb_data_by_buffer_size : INTEGER;
nb_word_by_buffer_size : INTEGER;
nb_snapshot_param_size : INTEGER;
delta_vector_size : INTEGER;
delta_vector_size_f0_2 : INTEGER;
pindex : INTEGER;
paddr : INTEGER;
pmask : INTEGER;
pirq_ms : INTEGER;
pirq_wfp : INTEGER;
hindex : INTEGER;
top_lfr_version : STD_LOGIC_VECTOR(23 DOWNTO 0));
PORT (
clk : IN STD_LOGIC;
rstn : IN STD_LOGIC;
sample_B : IN Samples(2 DOWNTO 0);
sample_E : IN Samples(4 DOWNTO 0);
sample_val : IN STD_LOGIC;
apbi : IN apb_slv_in_type;
apbo : OUT apb_slv_out_type;
ahbi : IN AHB_Mst_In_Type;
ahbo : OUT AHB_Mst_Out_Type;
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));
END COMPONENT;
-----------------------------------------------------------------------------
COMPONENT lpp_lfr_apbreg
GENERIC (
nb_data_by_buffer_size : INTEGER;
nb_snapshot_param_size : INTEGER;
delta_vector_size : INTEGER;
delta_vector_size_f0_2 : INTEGER;
pindex : INTEGER;
paddr : INTEGER;
pmask : INTEGER;
pirq_ms : INTEGER;
pirq_wfp : INTEGER;
top_lfr_version : STD_LOGIC_VECTOR(23 DOWNTO 0));
PORT (
HCLK : IN STD_ULOGIC;
HRESETn : IN STD_ULOGIC;
apbi : IN apb_slv_in_type;
apbo : OUT apb_slv_out_type;
-- run_ms : OUT STD_LOGIC;
ready_matrix_f0 : IN STD_LOGIC;
ready_matrix_f1 : IN STD_LOGIC;
ready_matrix_f2 : IN STD_LOGIC;
error_buffer_full : IN STD_LOGIC;
error_input_fifo_write : IN STD_LOGIC_VECTOR(2 DOWNTO 0);
status_ready_matrix_f0 : OUT STD_LOGIC;
status_ready_matrix_f1 : OUT STD_LOGIC;
status_ready_matrix_f2 : OUT STD_LOGIC;
addr_matrix_f0 : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
addr_matrix_f1 : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
addr_matrix_f2 : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
length_matrix_f0 : OUT STD_LOGIC_VECTOR(25 DOWNTO 0);
length_matrix_f1 : OUT STD_LOGIC_VECTOR(25 DOWNTO 0);
length_matrix_f2 : OUT STD_LOGIC_VECTOR(25 DOWNTO 0);
matrix_time_f0 : IN STD_LOGIC_VECTOR(47 DOWNTO 0);
matrix_time_f1 : IN STD_LOGIC_VECTOR(47 DOWNTO 0);
matrix_time_f2 : IN STD_LOGIC_VECTOR(47 DOWNTO 0);
status_new_err : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
data_shaping_BW : OUT STD_LOGIC;
data_shaping_SP0 : OUT STD_LOGIC;
data_shaping_SP1 : OUT STD_LOGIC;
data_shaping_R0 : OUT STD_LOGIC;
data_shaping_R1 : OUT STD_LOGIC;
data_shaping_R2 : OUT STD_LOGIC;
delta_snapshot : OUT STD_LOGIC_VECTOR(delta_vector_size-1 DOWNTO 0);
delta_f0 : OUT STD_LOGIC_VECTOR(delta_vector_size-1 DOWNTO 0);
delta_f0_2 : OUT STD_LOGIC_VECTOR(delta_vector_size_f0_2-1 DOWNTO 0);
delta_f1 : OUT STD_LOGIC_VECTOR(delta_vector_size-1 DOWNTO 0);
delta_f2 : OUT STD_LOGIC_VECTOR(delta_vector_size-1 DOWNTO 0);
nb_data_by_buffer : OUT STD_LOGIC_VECTOR(nb_data_by_buffer_size-1 DOWNTO 0);
nb_snapshot_param : OUT STD_LOGIC_VECTOR(nb_snapshot_param_size-1 DOWNTO 0);
enable_f0 : OUT STD_LOGIC;
enable_f1 : OUT STD_LOGIC;
enable_f2 : OUT STD_LOGIC;
enable_f3 : OUT STD_LOGIC;
burst_f0 : OUT STD_LOGIC;
burst_f1 : OUT STD_LOGIC;
burst_f2 : OUT STD_LOGIC;
run : OUT STD_LOGIC;
start_date : OUT STD_LOGIC_VECTOR(30 DOWNTO 0);
wfp_status_buffer_ready : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
wfp_addr_buffer : OUT STD_LOGIC_VECTOR(32*4-1 DOWNTO 0);
wfp_length_buffer : OUT STD_LOGIC_VECTOR(25 DOWNTO 0);
wfp_ready_buffer : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
wfp_buffer_time : IN STD_LOGIC_VECTOR(48*4-1 DOWNTO 0);
wfp_error_buffer_full : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
sample_f3_v : IN STD_LOGIC_VECTOR(15 DOWNTO 0);
sample_f3_e1 : IN STD_LOGIC_VECTOR(15 DOWNTO 0);
sample_f3_e2 : IN STD_LOGIC_VECTOR(15 DOWNTO 0);
sample_f3_valid : IN STD_LOGIC;
debug_vector : OUT STD_LOGIC_VECTOR(11 DOWNTO 0));
END COMPONENT;
COMPONENT lpp_top_ms
GENERIC (
Mem_use : INTEGER;
nb_burst_available_size : INTEGER;
nb_snapshot_param_size : INTEGER;
delta_snapshot_size : INTEGER;
delta_f2_f0_size : INTEGER;
delta_f2_f1_size : INTEGER;
pindex : INTEGER;
paddr : INTEGER;
pmask : INTEGER;
pirq_ms : INTEGER;
pirq_wfp : INTEGER;
hindex_wfp : INTEGER;
hindex_ms : INTEGER);
PORT (
clk : IN STD_LOGIC;
rstn : IN STD_LOGIC;
sample_B : IN Samples14v(2 DOWNTO 0);
sample_E : IN Samples14v(4 DOWNTO 0);
sample_val : IN STD_LOGIC;
apbi : IN apb_slv_in_type;
apbo : OUT apb_slv_out_type;
ahbi_ms : IN AHB_Mst_In_Type;
ahbo_ms : OUT AHB_Mst_Out_Type;
data_shaping_BW : OUT STD_LOGIC;
matrix_time_f0_0 : IN STD_LOGIC_VECTOR(47 DOWNTO 0);
matrix_time_f0_1 : IN STD_LOGIC_VECTOR(47 DOWNTO 0);
matrix_time_f1 : IN STD_LOGIC_VECTOR(47 DOWNTO 0);
matrix_time_f2 : IN STD_LOGIC_VECTOR(47 DOWNTO 0)
);
END COMPONENT;
COMPONENT lpp_apbreg_ms_pointer
PORT (
clk : IN STD_LOGIC;
rstn : IN STD_LOGIC;
run : IN STD_LOGIC;
reg0_status_ready_matrix : IN STD_LOGIC;
reg0_ready_matrix : OUT STD_LOGIC;
reg0_addr_matrix : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
reg0_matrix_time : OUT STD_LOGIC_VECTOR(47 DOWNTO 0);
reg1_status_ready_matrix : IN STD_LOGIC;
reg1_ready_matrix : OUT STD_LOGIC;
reg1_addr_matrix : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
reg1_matrix_time : OUT STD_LOGIC_VECTOR(47 DOWNTO 0);
ready_matrix : IN STD_LOGIC;
status_ready_matrix : OUT STD_LOGIC;
addr_matrix : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
matrix_time : IN STD_LOGIC_VECTOR(47 DOWNTO 0));
END COMPONENT;
COMPONENT lpp_lfr_ms_reg_head
PORT (
clk : IN STD_LOGIC;
rstn : IN STD_LOGIC;
in_wen : IN STD_LOGIC;
in_data : IN STD_LOGIC_VECTOR(5*16-1 DOWNTO 0);
in_full : IN STD_LOGIC;
in_empty : IN STD_LOGIC;
out_write_error : OUT STD_LOGIC;
out_wen : OUT STD_LOGIC;
out_data : OUT STD_LOGIC_VECTOR(5*16-1 DOWNTO 0);
out_full : OUT STD_LOGIC);
END COMPONENT;
END lpp_lfr_pkg;