# HG changeset patch # User pellion # Date 2015-06-02 07:38:28 # Node ID c380a9e98a1c974120fd2f55e1558f56518b3c9e # Parent ddd72636badbaace400ed76f0ecbfb9169ee6a30 LFR-em 1.1.83 ... diff --git a/designs/LFR-em-WFP_MS/LFR-em.vhd b/designs/LFR-em-WFP_MS/LFR-em.vhd --- a/designs/LFR-em-WFP_MS/LFR-em.vhd +++ b/designs/LFR-em-WFP_MS/LFR-em.vhd @@ -92,7 +92,7 @@ ENTITY LFR_em IS ADC_OEB_bar_HK : OUT STD_LOGIC; HK_SEL : OUT STD_LOGIC_VECTOR(1 DOWNTO 0); --------------------------------------------------------------------------- - TAG8 : OUT STD_LOGIC; + TAG8 : IN STD_LOGIC; led : OUT STD_LOGIC_VECTOR(2 DOWNTO 0) ); @@ -100,6 +100,16 @@ END LFR_em; ARCHITECTURE beh OF LFR_em IS + +--========================================================================== +-- USE_IAP_MEMCTRL allow to use the srctrle-0ws on MINILFR board +-- when enabled, chip enable polarity should be reversed and bank size also +-- MINILFR -> 1 bank of 4MBytes -> SRBANKSZ=9 +-- LFR EQM & FM -> 2 banks of 2MBytes -> SRBANKSZ=8 +--========================================================================== + CONSTANT USE_IAP_MEMCTRL : integer := 1; +--========================================================================== + SIGNAL clk_50_s : STD_LOGIC := '0'; SIGNAL clk_25 : STD_LOGIC := '0'; SIGNAL clk_24 : STD_LOGIC := '0'; @@ -153,6 +163,7 @@ ARCHITECTURE beh OF LFR_em IS SIGNAL ADC_smpclk_s : STD_LOGIC; ---------------------------------------------------------------------------- SIGNAL nSRAM_CE_s : STD_LOGIC_VECTOR(1 DOWNTO 0); + SIGNAL nSRAM_READY : STD_LOGIC; BEGIN -- beh @@ -222,7 +233,9 @@ BEGIN -- beh NB_AHB_SLAVE => NB_AHB_SLAVE, NB_APB_SLAVE => NB_APB_SLAVE, ADDRESS_SIZE => 20, - USES_IAP_MEMCTRLR => 0) + USES_IAP_MEMCTRLR => USE_IAP_MEMCTRL, + BYPASS_EDAC_MEMCTRLR => '0', + SRBANKSZ => 8) PORT MAP ( clk => clk_25, reset => rstn_25, @@ -242,7 +255,7 @@ BEGIN -- beh nSRAM_WE => nSRAM_WE, nSRAM_CE => nSRAM_CE_s, nSRAM_OE => nSRAM_OE, - nSRAM_READY => '0', + nSRAM_READY => nSRAM_READY, SRAM_MBE => OPEN, apbi_ext => apbi_ext, @@ -252,8 +265,25 @@ BEGIN -- beh ahbi_m_ext => ahbi_m_ext, ahbo_m_ext => ahbo_m_ext); + PROCESS (clk_25, rstn_25) + BEGIN -- PROCESS + IF rstn_25 = '0' THEN -- asynchronous reset (active low) + nSRAM_READY <= '1'; + ELSIF clk_25'event AND clk_25 = '1' THEN -- rising clock edge + nSRAM_READY <= '1'; + IF TAG8 = '1' THEN + nSRAM_READY <= '0'; + END IF; + END IF; + END PROCESS; - nSRAM_CE <= nSRAM_CE_s(0); + IAP:if USE_IAP_MEMCTRL = 1 GENERATE + nSRAM_CE <= not nSRAM_CE_s(0); + END GENERATE; + + NOIAP:if USE_IAP_MEMCTRL = 0 GENERATE + nSRAM_CE <= nSRAM_CE_s(0); + END GENERATE; ------------------------------------------------------------------------------- -- APB_LFR_TIME_MANAGEMENT ---------------------------------------------------- @@ -264,13 +294,13 @@ BEGIN -- beh pindex => 6, paddr => 6, pmask => 16#fff#, - FIRST_DIVISION => 374, -- ((49.152/2) /2^16) - 1 = 375 - 1 = 374 +-- FIRST_DIVISION => 374, -- ((49.152/2) /2^16) - 1 = 375 - 1 = 374 NB_SECOND_DESYNC => 60) -- 60 secondes of desynchronization before CoarseTime's MSB is Set PORT MAP ( clk25MHz => clk_25, resetn_25MHz => rstn_25, -- TODO - clk24_576MHz => clk_24, -- 49.152MHz/2 - resetn_24_576MHz => rstn_24, -- TODO +-- clk24_576MHz => clk_24, -- 49.152MHz/2 +-- resetn_24_576MHz => rstn_24, -- TODO grspw_tick => swno.tickout, apbi => apbi_ext, @@ -384,6 +414,7 @@ BEGIN -- beh lpp_lfr_1 : lpp_lfr GENERIC MAP ( Mem_use => use_RAM, + tech => inferred, nb_data_by_buffer_size => 32, --nb_word_by_buffer_size => 30, nb_snapshot_param_size => 32, @@ -395,7 +426,7 @@ BEGIN -- beh pirq_ms => 6, pirq_wfp => 14, hindex => 2, - top_lfr_version => X"010144") -- aa.bb.cc version + top_lfr_version => X"010153") -- aa.bb.cc version -- AA : BOARD NUMBER -- 0 => MINI_LFR -- 1 => EM @@ -430,7 +461,7 @@ BEGIN -- beh top_ad_conv_RHF1401_withFilter_1 : top_ad_conv_RHF1401_withFilter GENERIC MAP ( ChanelCount => 9, - ncycle_cnv_high => 13, + ncycle_cnv_high => 12, ncycle_cnv => 25, FILTER_ENABLED => 16#FF#) PORT MAP ( @@ -449,11 +480,11 @@ BEGIN -- beh ADC_smpclk <= ADC_smpclk_s; HK_smpclk <= ADC_smpclk_s; - TAG8 <= ADC_smpclk_s; +-- TAG8 <= ADC_smpclk_s; ----------------------------------------------------------------------------- -- HK ----------------------------------------------------------------------------- ADC_OEB_bar_HK <= ADC_OEB_bar_CH_s(8); -END beh; +END beh; \ No newline at end of file diff --git a/lib/lpp/dsp/window_function/window_function.vhd b/lib/lpp/dsp/window_function/window_function.vhd --- a/lib/lpp/dsp/window_function/window_function.vhd +++ b/lib/lpp/dsp/window_function/window_function.vhd @@ -28,11 +28,13 @@ USE ieee.numeric_std.ALL; LIBRARY lpp; USE lpp.general_purpose.ALL; USE lpp.window_function_pkg.ALL; +USE lpp.data_type_pkg.ALL; ENTITY window_function IS GENERIC ( DATA_SIZE : INTEGER := 16; - PARAM_SIZE : INTEGER := 10 + PARAM_SIZE : INTEGER := 10; + WINDOWS_PARAM : array_std_logic_vector_16b(0 TO 255) ); PORT ( @@ -51,35 +53,8 @@ ENTITY window_function IS END window_function; ARCHITECTURE beh OF window_function IS - - SUBTYPE RANGE_NB_BIT_BY_WINDOW_PARAM IS INTEGER RANGE 1 TO DATA_SIZE; - CONSTANT NB_BIT_BY_WINDOW_PARAM : RANGE_NB_BIT_BY_WINDOW_PARAM := 16; CONSTANT NB_POINT_BY_WINDOW : INTEGER := 256; - TYPE WINDOWS_PARAM_TYPE IS ARRAY (INTEGER RANGE <>) OF STD_LOGIC_VECTOR(15 DOWNTO 0); - CONSTANT windows_param_lfr_sigmoide : WINDOWS_PARAM_TYPE(0 TO 32) := - ( X"0000",X"0012",X"002E",X"005B", X"00A2",X"0113",X"01C7",X"02E0", --0 - 7 - X"0498",X"073A",X"0B37",X"110D", X"193C",X"240F",X"3147",X"3FF7", --8 - 15 - X"4EA7",X"5BDF",X"66B2",X"6EE1", X"74B7",X"78B4",X"7B56",X"7D0E", --16 - 23 - X"7E27",X"7EDB",X"7F4C",X"7F93", X"7FC0",X"7FDC",X"7FEE",X"7FF9", --24 - 31 - X"7FFF" ); --32 - CONSTANT windows_param_lfr_rampe : WINDOWS_PARAM_TYPE(0 TO 32) := - ( X"0000",X"03E1",X"07C2",X"0BA3", X"0F84",X"1365",X"1746",X"1B27", - X"1F08",X"22E8",X"26C9",X"2AAA", X"2E8B",X"326C",X"364D",X"3A2E", - X"3E0F",X"41F0",X"45D1",X"49B2", X"4D93",X"5174",X"5555",X"5936", - X"5D17",X"60F7",X"64D8",X"68B9", X"6C9A",X"707B",X"745C",X"783D", - X"7FFF" ); - CONSTANT windows_param_lfr_echelon : WINDOWS_PARAM_TYPE(0 TO 32) := - ( X"0000",X"0000",X"0000",X"0000", X"0000",X"0000",X"0000",X"0000", - X"0000",X"0000",X"0000",X"0000", X"0000",X"0000",X"0000",X"0000", - X"FFFF",X"FFFF",X"FFFF",X"FFFF", X"FFFF",X"FFFF",X"FFFF",X"FFFF", - X"FFFF",X"FFFF",X"FFFF",X"FFFF", X"FFFF",X"FFFF",X"FFFF",X"FFFF", - X"FFFF"); - - CONSTANT windows_param_lfr : WINDOWS_PARAM_TYPE(0 TO 32) := windows_param_lfr_sigmoide; - - SIGNAL windows_param : WINDOWS_PARAM_TYPE(0 TO NB_POINT_BY_WINDOW-1); - SIGNAL param_counter : INTEGER RANGE 0 TO NB_POINT_BY_WINDOW-1; SIGNAL data_x_param : STD_LOGIC_VECTOR(DATA_SIZE + PARAM_SIZE - 1 DOWNTO 0); @@ -90,16 +65,6 @@ ARCHITECTURE beh OF window_function IS SIGNAL data_in_s : STD_LOGIC_VECTOR(DATA_SIZE-1 DOWNTO 0); BEGIN - - all_windows_param_0: FOR I IN 0 TO 31 GENERATE - windows_param(I) <= windows_param_lfr(I); - END GENERATE all_windows_param_0; - all_windows_param_1: FOR I IN 32 TO 223 GENERATE - windows_param(I) <= windows_param_lfr(32); - END GENERATE all_windows_param_1; - all_windows_param_2: FOR I IN 224 TO 255 GENERATE - windows_param(I) <= windows_param_lfr(255-I); - END GENERATE all_windows_param_2; PROCESS (clk, rstn) BEGIN -- PROCESS @@ -122,7 +87,7 @@ BEGIN data_in_valid_s <= data_in_valid; data_in_s <= data_in; - windows_param_selected_s <= windows_param(param_counter); + windows_param_selected_s <= WINDOWS_PARAM(param_counter); windows_param_selected <= windows_param_selected_s(15 DOWNTO 16 - PARAM_SIZE); WINDOWS_Multiplier : Multiplier @@ -150,4 +115,4 @@ BEGIN END IF; END PROCESS; -END beh; \ No newline at end of file +END beh; diff --git a/lib/lpp/dsp/window_function/window_function_pkg.vhd b/lib/lpp/dsp/window_function/window_function_pkg.vhd --- a/lib/lpp/dsp/window_function/window_function_pkg.vhd +++ b/lib/lpp/dsp/window_function/window_function_pkg.vhd @@ -24,12 +24,17 @@ LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE IEEE.NUMERIC_STD.ALL; +LIBRARY lpp; +USE lpp.data_type_pkg.ALL; + PACKAGE window_function_pkg IS COMPONENT window_function GENERIC ( DATA_SIZE : INTEGER; - PARAM_SIZE : INTEGER); + PARAM_SIZE : INTEGER; + WINDOWS_PARAM : array_std_logic_vector_16b(0 TO 255) + ); PORT ( clk : IN STD_LOGIC; rstn : IN STD_LOGIC; diff --git a/lib/lpp/general_purpose/data_type_pkg.vhd b/lib/lpp/general_purpose/data_type_pkg.vhd --- a/lib/lpp/general_purpose/data_type_pkg.vhd +++ b/lib/lpp/general_purpose/data_type_pkg.vhd @@ -23,6 +23,7 @@ LIBRARY ieee; USE ieee.std_logic_1164.ALL; +USE ieee.numeric_std.ALL; PACKAGE data_type_pkg IS @@ -31,5 +32,24 @@ PACKAGE data_type_pkg IS TYPE array_std_logic_vector_16b IS ARRAY (NATURAL RANGE <>) OF STD_LOGIC_VECTOR(15 DOWNTO 0); TYPE sample_vector IS ARRAY(NATURAL RANGE <>, NATURAL RANGE <>) OF STD_LOGIC; + + FUNCTION to_array_std_logic_vector_16b ( + array_in : array_real) + RETURN array_std_logic_vector_16b; END data_type_pkg; + +PACKAGE BODY data_type_pkg IS + + FUNCTION to_array_std_logic_vector_16b ( + array_in : array_real) + RETURN array_std_logic_vector_16b IS + VARIABLE array_out : array_std_logic_vector_16b(array_in'RANGE); + BEGIN + all_value: FOR I IN array_in'RANGE LOOP + array_out(I) := STD_LOGIC_VECTOR(to_signed(INTEGER(array_in(I) * 2.0**15),16)); + END LOOP all_value; + RETURN array_out; + END to_array_std_logic_vector_16b; + +END data_type_pkg; diff --git a/lib/lpp/lpp_file/reader_pkg.vhd b/lib/lpp/lpp_file/reader_pkg.vhd --- a/lib/lpp/lpp_file/reader_pkg.vhd +++ b/lib/lpp/lpp_file/reader_pkg.vhd @@ -35,14 +35,14 @@ PACKAGE reader_pkg IS CONSTANT CHARACTER_COMMENT : CHARACTER := '#'; - FUNCTION get_array_real ( - file_in : TEXT; - nb_data_read : INTEGER) + IMPURE FUNCTION get_array_real ( + file_name : STRING; + nb_data_to_read : INTEGER) RETURN array_real; - FUNCTION get_array_integer ( - file_in : TEXT; - nb_data_read : INTEGER) + IMPURE FUNCTION get_array_integer ( + file_name : STRING; + nb_data_to_read : INTEGER) RETURN array_integer; @@ -50,12 +50,13 @@ END reader_pkg; PACKAGE BODY reader_pkg IS - FUNCTION get_array_real ( + IMPURE FUNCTION get_array_real ( file_name : STRING; nb_data_to_read : INTEGER) RETURN array_real IS - VARIABLE GOOD : BOOLEAN; + + VARIABLE GOOD : BOOLEAN; VARIABLE array_real_v : array_real(0 TO nb_data_to_read-1); VARIABLE real_p : REAL; VARIABLE nb_data_read : INTEGER := 0; @@ -80,7 +81,7 @@ PACKAGE BODY reader_pkg IS RETURN array_real_v; END get_array_real; - FUNCTION get_array_integer ( + IMPURE FUNCTION get_array_integer ( file_name : STRING; nb_data_to_read : INTEGER) RETURN array_integer @@ -112,4 +113,4 @@ PACKAGE BODY reader_pkg IS -END reader_pkg; \ No newline at end of file +END reader_pkg;