diff --git a/libraries/dsp/st/src/vhdl/st_xsq_mm_to_dp.vhd b/libraries/dsp/st/src/vhdl/st_xsq_mm_to_dp.vhd deleted file mode 100644 index 9db9e0d826cb5252aeb0f04fd5942ce043b078fd..0000000000000000000000000000000000000000 --- a/libraries/dsp/st/src/vhdl/st_xsq_mm_to_dp.vhd +++ /dev/null @@ -1,139 +0,0 @@ -------------------------------------------------------------------------------- --- --- Copyright 2021 --- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/> --- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands --- --- Licensed under the Apache License, Version 2.0 (the "License"); --- you may not use this file except in compliance with the License. --- You may obtain a copy of the License at --- --- http://www.apache.org/licenses/LICENSE-2.0 --- --- Unless required by applicable law or agreed to in writing, software --- distributed under the License is distributed on an "AS IS" BASIS, --- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. --- See the License for the specific language governing permissions and --- limitations under the License. --- -------------------------------------------------------------------------------- --- Author : R. vd Walle --- Purpose: --- . Read a block of data from memory mapped (MM) location and stream it as a block of data. --- Description: --- After every in_sosi.sop the st_xsq_mm_to_dp.vhd reads g_nof_streams blocks of data --- via mm and outputs it as g_nof_streams parallel streams via out_sosi_arr. in_sosi.sync is --- passed on to out_sosi. --- -------------------------------------------------------------------------- - -LIBRARY IEEE,common_lib; -USE IEEE.std_logic_1164.ALL; -USE IEEE.numeric_std.ALL; -USE common_lib.common_pkg.ALL; -USE common_lib.common_mem_pkg.ALL; -USE dp_lib.dp_stream_pkg.ALL; - -ENTITY st_xsq_mm_to_dp IS - GENERIC ( - g_data_size : NATURAL; - g_step_size : NATURAL; - g_nof_data : NATURAL - ); - PORT ( - rst : IN STD_LOGIC; - clk : IN STD_LOGIC; - start_pulse : IN STD_LOGIC; - mm_done : OUT STD_LOGIC; - mm_mosi : OUT t_mem_mosi; - mm_miso : IN t_mem_miso; - out_sosi : OUT t_dp_sosi; - out_siso : IN t_dp_siso - ); -END st_xsq_mm_to_dp; - - -ARCHITECTURE rtl OF st_xsq_mm_to_dp IS - - CONSTANT c_mem_size : NATURAL := g_step_size * g_nof_data; - - TYPE t_reg IS RECORD - busy : STD_LOGIC; - sop : STD_LOGIC; - eop : STD_LOGIC; - word_index : NATURAL; - step_index : NATURAL; - END RECORD; - - CONSTANT c_reg_rst : t_reg := ('0', '0', '0', 0, 0); - - SIGNAL r : t_reg; - SIGNAL nxt_r : t_reg; - SIGNAL mm_address : NATURAL := 0; - SIGNAL last_mm_address : NATURAL := 0; -BEGIN - - last_mm_address <= g_step_size * (g_nof_data - 1) + g_data_size + start_address - 1; - mm_address <= start_address + r.word_index + r.step_index; - - mm_mosi.address <= TO_MEM_ADDRESS(mm_address); - - u_sosi : PROCESS(r, mm_miso) - BEGIN - out_sosi <= c_dp_sosi_rst; -- To avoid Modelsim warnings on conversion to integer from unused fields. - out_sosi.data <= RESIZE_DP_DATA(mm_miso.rddata(c_word_w-1 DOWNTO 0)); - out_sosi.valid <= mm_miso.rdval; -- read latency from mm_mosi.rd to mm_miso.rdval is 1, so same as the ready latency (RL = 1) - out_sosi.sop <= r.sop; -- read latency from mm_mosi.rd to mm_miso.rdval is 1, so r.sop can be used for output sop - out_sosi.eop <= r.eop; -- read latency from mm_mosi.rd to mm_miso.rdval is 1, so r.eop can be used for output eop - END PROCESS; - - mm_done <= r.eop; - - p_reg : PROCESS(rst, clk) - BEGIN - IF rst='1' THEN - r <= c_reg_rst; - ELSIF rising_edge(clk) THEN - r <= nxt_r; - END IF; - END PROCESS; - - p_comb : PROCESS(r, start_pulse, out_siso, mm_address, last_mm_address) - VARIABLE v : t_reg; - BEGIN - v := r; - v.sop := '0'; - v.eop := '0'; - mm_mosi.rd <= '0'; - IF r.busy = '0' AND start_pulse = '1' THEN - -- initiate next block - v.busy := '1'; - ELSIF r.busy = '1' THEN - IF out_siso.ready = '1' THEN - -- continue with block - mm_mosi.rd <= '1'; - IF r.word_index < g_data_size - 1 THEN - v.word_index := r.word_index + 1; - ELSE - v.word_index := 0; - v.step_index := r.step_index + g_step_size; - END IF; - - -- check start of block - IF r.word_index = 0 AND r.step_index = 0 THEN - v.sop := '1'; - END IF; - - -- check end of block - IF mm_address >= last_mm_address THEN - v.eop := '1'; - -- prepare for next block - v.busy := '0'; - v.word_index := 0; - v.step_index := 0; - END IF; - END IF; - END IF; - nxt_r <= v; - END PROCESS; - -END rtl;