OpenCores
URL https://opencores.org/ocsvn/astron_statistics/astron_statistics/trunk

Subversion Repositories astron_statistics

[/] [astron_statistics/] [trunk/] [tb_mmf_st_sst.vhd] - Blame information for rev 4

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 danv
-------------------------------------------------------------------------------
2
--
3 3 danv
-- Copyright 2020
4 2 danv
-- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/>
5
-- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
6 3 danv
-- 
7
-- Licensed under the Apache License, Version 2.0 (the "License");
8
-- you may not use this file except in compliance with the License.
9
-- You may obtain a copy of the License at
10
-- 
11
--     http://www.apache.org/licenses/LICENSE-2.0
12
-- 
13
-- Unless required by applicable law or agreed to in writing, software
14
-- distributed under the License is distributed on an "AS IS" BASIS,
15
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
-- See the License for the specific language governing permissions and
17
-- limitations under the License.
18 2 danv
--
19
-------------------------------------------------------------------------------
20
--
21
-- Purpose:  Testbench for the st_sst unit. 
22
--           To be used in conjunction with python script: ../python/tc_mmf_st_sst.py
23
--
24
--
25
-- Usage in non-auto-mode (c_modelsim_start = 0 in python):
26
--   > as 5
27
--   > run -all
28
--   > Run python script in separate terminal: "python tc_mmf_st_xst.py --unb 0 --bn 0 --sim"
29
--   > Check the results of the python script. 
30
--   > Stop the simulation manually in Modelsim by pressing the stop-button.
31
--   > Evalute the WAVE window. 
32
 
33 4 danv
LIBRARY IEEE, common_pkg_lib, astron_ram_lib, astron_mm_lib, astron_diagnostics_lib, dp_pkg_lib;
34 2 danv
USE IEEE.std_logic_1164.ALL;
35
USE IEEE.numeric_std.ALL;
36
USE common_pkg_lib.common_pkg.ALL;
37 4 danv
USE astron_ram_lib.common_ram_pkg.ALL;
38 2 danv
USE common_pkg_lib.common_str_pkg.ALL;
39
USE common_pkg_lib.tb_common_pkg.ALL;
40 4 danv
USE astron_mm_lib.tb_common_mem_pkg.ALL;
41
USE astron_mm_lib.mm_file_unb_pkg.ALL;
42
USE astron_mm_lib.mm_file_pkg.ALL;
43 2 danv
USE dp_pkg_lib.dp_stream_pkg.ALL;
44 4 danv
USE astron_diagnostics_lib.diag_pkg.ALL;
45 2 danv
 
46
ENTITY tb_mmf_st_sst IS
47
  GENERIC(
48
    g_nof_stat      : NATURAL := 8; -- nof accumulators
49
    g_xst_enable    : BOOLEAN := TRUE;
50
    g_in_data_w     : NATURAL := 16;
51
    g_stat_data_w   : NATURAL := 56;  -- statistics accumulator width
52
    g_stat_data_sz  : NATURAL := 2;   -- statistics word width >= statistics accumulator width and fit in a power of 2 multiple 32b MM words
53
    g_nof_instances : NATURAL := 4;   -- The number of st_sst instances in parallel. 
54
    g_nof_frames    : NATURAL := 1
55
  );
56
END tb_mmf_st_sst;
57
 
58
ARCHITECTURE tb OF tb_mmf_st_sst IS
59
 
60
  CONSTANT c_sim                : BOOLEAN := TRUE;
61
 
62
  ----------------------------------------------------------------------------
63
  -- Clocks and resets
64
  ----------------------------------------------------------------------------   
65
  CONSTANT c_mm_clk_period      : TIME := 100 ps;
66
  CONSTANT c_dp_clk_period      : TIME := 2 ns;
67
  CONSTANT c_sclk_period        : TIME := 1250 ps;
68
  CONSTANT c_dp_pps_period      : NATURAL := 64;
69
 
70
  SIGNAL dp_pps                 : STD_LOGIC;
71
 
72
  SIGNAL mm_rst                 : STD_LOGIC := '1';
73
  SIGNAL mm_clk                 : STD_LOGIC := '0';
74
 
75
  SIGNAL dp_rst                 : STD_LOGIC;
76
  SIGNAL dp_clk                 : STD_LOGIC := '0';
77
 
78
  ----------------------------------------------------------------------------
79
  -- MM buses
80
  ----------------------------------------------------------------------------                                         
81
  SIGNAL reg_diag_bg_mosi       : t_mem_mosi;
82
  SIGNAL reg_diag_bg_miso       : t_mem_miso;
83
 
84
  SIGNAL ram_diag_bg_mosi       : t_mem_mosi;
85
  SIGNAL ram_diag_bg_miso       : t_mem_miso;
86
 
87
  SIGNAL ram_st_sst_mosi        : t_mem_mosi;
88
  SIGNAL ram_st_sst_miso        : t_mem_miso;
89
 
90
  SIGNAL reg_st_sst_mosi        : t_mem_mosi;
91
  SIGNAL reg_st_sst_miso        : t_mem_miso;
92
 
93
  SIGNAL ram_st_sst_mosi_arr    : t_mem_mosi_arr(g_nof_instances-1 DOWNTO 0);
94
  SIGNAL ram_st_sst_miso_arr    : t_mem_miso_arr(g_nof_instances-1 DOWNTO 0);
95
 
96
  SIGNAL reg_st_sst_mosi_arr    : t_mem_mosi_arr(g_nof_instances-1 DOWNTO 0);
97
  SIGNAL reg_st_sst_miso_arr    : t_mem_miso_arr(g_nof_instances-1 DOWNTO 0);
98
 
99
  -- Custom definitions of constants
100
  CONSTANT c_bg_block_len           : NATURAL  := g_nof_stat*g_nof_frames;
101
  CONSTANT c_complex_factor         : NATURAL  := sel_a_b(g_xst_enable, c_nof_complex, 1);
102
  CONSTANT c_ram_addr_w             : NATURAL  := ceil_log2(g_stat_data_sz*g_nof_stat*c_complex_factor);
103
 
104
  -- Configuration of the block generator:
105
  CONSTANT c_bg_nof_output_streams  : POSITIVE := g_nof_instances;
106
  CONSTANT c_bg_buf_dat_w           : POSITIVE := c_nof_complex*g_in_data_w;
107
  CONSTANT c_bg_buf_adr_w           : POSITIVE := ceil_log2(c_bg_block_len);
108
  CONSTANT c_bg_data_file_prefix    : STRING   := "UNUSED";
109
  CONSTANT c_bg_data_file_index_arr : t_nat_natural_arr := array_init(0, g_nof_instances, 1);
110
 
111
  -- Signal declarations to connect block generator to the DUT
112
  SIGNAL bg_siso_arr                : t_dp_siso_arr(c_bg_nof_output_streams-1 DOWNTO 0) := (OTHERS=>c_dp_siso_rdy);
113
  SIGNAL bg_sosi_arr                : t_dp_sosi_arr(c_bg_nof_output_streams-1 DOWNTO 0);
114
 
115
BEGIN
116
 
117
  ----------------------------------------------------------------------------
118
  -- Clock and reset generation
119
  ----------------------------------------------------------------------------
120
  mm_clk <= NOT mm_clk AFTER c_mm_clk_period/2;
121
  mm_rst <= '1', '0' AFTER c_mm_clk_period*5;
122
 
123
  dp_clk <= NOT dp_clk AFTER c_dp_clk_period/2;
124
  dp_rst <= '1', '0' AFTER c_dp_clk_period*5;
125
 
126
  ------------------------------------------------------------------------------
127
  -- External PPS
128
  ------------------------------------------------------------------------------  
129
  proc_common_gen_pulse(1, c_dp_pps_period, '1', dp_clk, dp_pps);
130
 
131
   ----------------------------------------------------------------------------
132
  -- Procedure that polls a sim control file that can be used to e.g. get
133
  -- the simulation time in ns
134
  ----------------------------------------------------------------------------
135
  mmf_poll_sim_ctrl_file(c_mmf_unb_file_path & "sim.ctrl", c_mmf_unb_file_path & "sim.stat");
136
 
137
  ----------------------------------------------------------------------------
138
  -- MM buses  
139
  ----------------------------------------------------------------------------
140
  u_mm_file_reg_diag_bg          : mm_file GENERIC MAP(mmf_unb_file_prefix(0, 0, "BN") & "REG_DIAG_BG")
141
                                           PORT MAP(mm_rst, mm_clk, reg_diag_bg_mosi, reg_diag_bg_miso);
142
 
143
  u_mm_file_ram_diag_bg          : mm_file GENERIC MAP(mmf_unb_file_prefix(0, 0, "BN") & "RAM_DIAG_BG")
144
                                           PORT MAP(mm_rst, mm_clk, ram_diag_bg_mosi, ram_diag_bg_miso);
145
 
146
  u_mm_file_ram_st_sst           : mm_file GENERIC MAP(mmf_unb_file_prefix(0, 0, "BN") & "RAM_ST_SST")
147
                                           PORT MAP(mm_rst, mm_clk, ram_st_sst_mosi, ram_st_sst_miso);
148
 
149
  u_mm_file_reg_st_sst           : mm_file GENERIC MAP(mmf_unb_file_prefix(0, 0, "BN") & "REG_ST_SST")
150
                                           PORT MAP(mm_rst, mm_clk, reg_st_sst_mosi, reg_st_sst_miso);
151
 
152
  ----------------------------------------------------------------------------
153
  -- Source: block generator
154
  ---------------------------------------------------------------------------- 
155 4 danv
  u_bg : ENTITY astron_diagnostics_lib.mms_diag_block_gen
156 2 danv
  GENERIC MAP(
157
    g_nof_streams        => c_bg_nof_output_streams,
158
    g_buf_dat_w          => c_bg_buf_dat_w,
159
    g_buf_addr_w         => c_bg_buf_adr_w,
160
    g_file_index_arr     => c_bg_data_file_index_arr,
161
    g_file_name_prefix   => c_bg_data_file_prefix
162
  )
163
  PORT MAP(
164
    -- System
165
    mm_rst               => mm_rst,
166
    mm_clk               => mm_clk,
167
    dp_rst               => dp_rst,
168
    dp_clk               => dp_clk,
169
    en_sync              => dp_pps,
170
    -- MM interface      
171
    reg_bg_ctrl_mosi     => reg_diag_bg_mosi,
172
    reg_bg_ctrl_miso     => reg_diag_bg_miso,
173
    ram_bg_data_mosi     => ram_diag_bg_mosi,
174
    ram_bg_data_miso     => ram_diag_bg_miso,
175
    -- ST interface      
176
    out_siso_arr         => bg_siso_arr,
177
    out_sosi_arr         => bg_sosi_arr
178
  );
179
 
180
  -- Combine the internal array of mm interfaces for the beamlet statistics to one array that is connected to the port of bf
181 4 danv
  u_mem_mux_ram_sst : ENTITY astron_mm_lib.common_mem_mux
182 2 danv
  GENERIC MAP (
183
    g_nof_mosi    => g_nof_instances,
184
    g_mult_addr_w => c_ram_addr_w
185
  )
186
  PORT MAP (
187
    mosi     => ram_st_sst_mosi,
188
    miso     => ram_st_sst_miso,
189
    mosi_arr => ram_st_sst_mosi_arr,
190
    miso_arr => ram_st_sst_miso_arr
191
  );
192
 
193 4 danv
  u_mem_mux_reg_sst : ENTITY astron_mm_lib.common_mem_mux
194 2 danv
  GENERIC MAP (
195
    g_nof_mosi    => g_nof_instances,
196
    g_mult_addr_w => 1
197
  )
198
  PORT MAP (
199
    mosi     => reg_st_sst_mosi,
200
    miso     => reg_st_sst_miso,
201
    mosi_arr => reg_st_sst_mosi_arr,
202
    miso_arr => reg_st_sst_miso_arr
203
  );
204
 
205
  ----------------------------------------------------------------------------
206
  -- DUT: Device Under Test
207
  ---------------------------------------------------------------------------- 
208
  gen_duts : FOR I IN 0 TO g_nof_instances-1 GENERATE
209
    u_dut : ENTITY work.st_sst
210
    GENERIC MAP(
211
      g_nof_stat       => g_nof_stat,
212
      g_xst_enable     => g_xst_enable,
213
      g_in_data_w      => g_in_data_w,
214
      g_stat_data_w    => g_stat_data_w,
215
      g_stat_data_sz   => g_stat_data_sz
216
    )
217
    PORT MAP(
218
      mm_rst           =>  mm_rst,
219
      mm_clk           =>  mm_clk,
220
      dp_rst           =>  dp_rst,
221
      dp_clk           =>  dp_clk,
222
 
223
      -- Streaming
224
      in_complex       => bg_sosi_arr(I),
225
 
226
      -- Memory Mapped
227
      ram_st_sst_mosi  => ram_st_sst_mosi_arr(I),
228
      ram_st_sst_miso  => ram_st_sst_miso_arr(I),
229
      reg_st_sst_mosi  => reg_st_sst_mosi_arr(I),
230
      reg_st_sst_miso  => reg_st_sst_miso_arr(I)
231
    );
232
  END GENERATE;
233
 
234
END tb;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.