@@ -106,15 +106,15 @@ Block diagram
106106
107107The modified reference design block diagram containing now **Interpolation ** and **Decimation ** filters is presented below.
108108
109- .. image :: fmcomms2_fir_2 .svg
109+ .. image :: fmcomms234_fir_filt_block_diagram .svg
110110 :width: 1000
111111 :align: center
112112 :alt: FMCOMMS2_FIR_FILTERS block diagram
113113
114114Understanding fmcomms2 clock routing
115115-------------------------------------------------------------------------------
116116
117- .. image :: fmcomms2_fir_clock_domains .svg
117+ .. image :: fmcomms234_clock_domains .svg
118118 :width: 1000
119119 :align: center
120120 :alt: FMCOMMS2_FIR_CLOCK_DOMAINS
@@ -133,7 +133,7 @@ The design is obtain by simply sourcing the base fmcomms2 block design.
133133
134134 At this point fmcomms2 reference design's TX data path has the following components:
135135
136- .. image :: fmcomms2_vivado_ref_tx.png
136+ .. image :: fmcomms2_vivado_ref_tx.JPG
137137 :width: 1000
138138 :align: center
139139 :alt: FMCOMMS2_VIVADO_REF_TX
@@ -145,25 +145,19 @@ connections will be removed and new ones will be created.
145145.. code-block :: tcl
146146
147147 # delete reference design connections
148- delete_bd_objs [get_bd_nets -of_objects
149- [find_bd_objs -relation connected_to [get_bd_pins util_ad9361_dac_upack/dac_valid_*]]]
150- delete_bd_objs [get_bd_nets -of_objects
151- [find_bd_objs -relation connected_to [get_bd_pins util_ad9361_dac_upack/dac_enable_*]]]
152- delete_bd_objs [get_bd_nets -of_objects
153- [find_bd_objs -relation connected_to [get_bd_pins util_ad9361_dac_upack/dac_data_*]]]
154-
148+ delete_bd_objs [get_bd_nets axi_ad9361_dac_fifo_din_valid_0]
149+ delete_bd_objs [get_bd_nets axi_ad9361_dac_fifo_din_enable_*]
150+ delete_bd_objs [get_bd_nets util_ad9361_dac_upack_fifo_rd_data_*]
151+ delete_bd_objs [get_bd_nets util_ad9361_dac_upack_fifo_rd_underflow]
152+ delete_bd_objs [get_bd_nets util_ad9361_dac_upack_fifo_rd_valid]
155153
156154 We will disconnect/connect the Rx path in a similar manner.
157155
158156.. code-block :: tcl
159157
160- delete_bd_objs [get_bd_nets -of_objects
161- [find_bd_objs -relation connected_to [get_bd_pins util_ad9361_adc_pack/adc_valid_*]]]
162- delete_bd_objs [get_bd_nets -of_objects
163- [find_bd_objs -relation connected_to [get_bd_pins util_ad9361_adc_pack/adc_enable_*]]]
164- delete_bd_objs [get_bd_nets -of_objects
165- [find_bd_objs -relation connected_to [get_bd_pins util_ad9361_adc_pack/adc_data_*]]]
166-
158+ delete_bd_objs [get_bd_nets util_ad9361_adc_fifo_dout_valid_0]
159+ delete_bd_objs [get_bd_nets util_ad9361_adc_fifo_dout_enable_*]
160+ delete_bd_objs [get_bd_nets util_ad9361_adc_fifo_dout_data_*]
167161
168162 Adding interpolation filters.
169163
@@ -237,64 +231,63 @@ by the decimation filters to obtain the independent I/Q channel data.
237231.. code-block :: tcl
238232
239233 set pack0_slice_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:xlslice:1.0 pack0_slice_0 ]
240- set_property -dict [list CONFIG.DIN_FROM {15}] $pack0_slice_0
234+ set_property -dict [list CONFIG.DIN_FROM {15}] $pack0_slice_0
241235 set_property -dict [list CONFIG.DIN_TO {0}] $pack0_slice_0
242236 set_property -dict [list CONFIG.DOUT_WIDTH {16}] $pack0_slice_0
243237
244238 set pack0_slice_1 [ create_bd_cell -type ip -vlnv xilinx.com:ip:xlslice:1.0 pack0_slice_1 ]
245- set_property -dict [list CONFIG.DIN_FROM {31}] $pack0_slice_1
239+ set_property -dict [list CONFIG.DIN_FROM {31}] $pack0_slice_1
246240 set_property -dict [list CONFIG.DIN_TO {16}] $pack0_slice_1
247241 set_property -dict [list CONFIG.DOUT_WIDTH {16}] $pack0_slice_1
248242
249243 set pack1_slice_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:xlslice:1.0 pack1_slice_0 ]
250- set_property -dict [list CONFIG.DIN_FROM {15}] $pack1_slice_0
244+ set_property -dict [list CONFIG.DIN_FROM {15}] $pack1_slice_0
251245 set_property -dict [list CONFIG.DIN_TO {0}] $pack1_slice_0
252246 set_property -dict [list CONFIG.DOUT_WIDTH {16}] $pack1_slice_0
253247
254248 set pack1_slice_1 [ create_bd_cell -type ip -vlnv xilinx.com:ip:xlslice:1.0 pack1_slice_1 ]
255- set_property -dict [list CONFIG.DIN_FROM {31}] $pack1_slice_1
249+ set_property -dict [list CONFIG.DIN_FROM {31}] $pack1_slice_1
256250 set_property -dict [list CONFIG.DIN_TO {16}] $pack1_slice_1
257251 set_property -dict [list CONFIG.DOUT_WIDTH {16}] $pack1_slice_1
258252
259253 Connecting the FIR interpolation filters on the Tx side.
260254~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
261255
262- .. code-block :: verilog
256+ .. code-block :: tcl
263257
264258 # fir interpolator 0
265- ad_connect clkdiv /clk_out fir_interpolator_0/aclk
266- ad_connect util_ad9361_dac_upack/dac_enable_0 dac_fifo /din_enable_0
267- ad_connect util_ad9361_dac_upack/dac_enable_1 dac_fifo /din_enable_1
268- ad_connect util_ad9361_dac_upack/dac_valid_0 fir_interpolator_0/s_axis_data_tready
269- ad_connect util_ad9361_dac_upack/dac_valid_1 fir_interpolator_0/s_axis_data_tready
270- ad_connect util_ad9361_dac_upack/upack_valid_0 fir_interpolator_0/s_axis_data_tvalid
271- ad_connect dac_fifo/din_data_0 fir_interpolator_0/channel_0
272- ad_connect dac_fifo/din_data_1 fir_interpolator_0/channel_1
273- ad_connect dac_fifo/din_valid_0 fir_interpolator_0/dac_read
274-
275- ad_connect concat_0/In0 util_ad9361_dac_upack/dac_data_0
276- ad_connect concat_0/In1 util_ad9361_dac_upack/dac_data_1
277- ad_connect concat_0/dout fir_interpolator_0/s_axis_data_tdata
259+ connect_bd_net [get_bd_pins util_ad9361_divclk /clk_out] [get_bd_pins fir_interpolator_0/aclk]
260+ connect_bd_net [get_bd_pins util_ad9361_dac_upack/enable_0] [get_bd_pins axi_ad9361_dac_fifo /din_enable_0]
261+ connect_bd_net [get_bd_pins util_ad9361_dac_upack/enable_1] [get_bd_pins axi_ad9361_dac_fifo /din_enable_1]
262+ connect_bd_net [get_bd_pins util_ad9361_dac_upack/fifo_rd_en] [get_bd_pins fir_interpolator_0/s_axis_data_tready]
263+ connect_bd_net [get_bd_pins util_ad9361_dac_upack/fifo_rd_en] [get_bd_pins fir_interpolator_0/s_axis_data_tvalid]
264+ connect_bd_net [get_bd_pins axi_ad9361_dac_fifo/din_data_0] [get_bd_pins fir_interpolator_0/channel_0]
265+ connect_bd_net [get_bd_pins axi_ad9361_dac_fifo/din_data_1] [get_bd_pins fir_interpolator_0/channel_1]
266+ connect_bd_net [get_bd_pins axi_ad9361_dac_fifo/din_valid_0] [get_bd_pins fir_interpolator_0/dac_read]
267+
268+
269+ connect_bd_net [get_bd_pins concat_0/In0 ] [get_bd_pins util_ad9361_dac_upack/fifo_rd_data_0]
270+ connect_bd_net [get_bd_pins concat_0/In1 ] [get_bd_pins util_ad9361_dac_upack/fifo_rd_data_1]
271+ connect_bd_net [get_bd_pins concat_0/dout ] [get_bd_pins fir_interpolator_0/s_axis_data_tdata]
278272
279273 # fir interpolator 1
280- ad_connect clkdiv/clk_out fir_interpolator_1/aclk
281- ad_connect util_ad9361_dac_upack/dac_enable_2 dac_fifo/din_enable_2
282- ad_connect util_ad9361_dac_upack/dac_enable_3 dac_fifo/din_enable_3
283- ad_connect util_ad9361_dac_upack/dac_valid_2 fir_interpolator_1/s_axis_data_tready
284- ad_connect util_ad9361_dac_upack/dac_valid_3 fir_interpolator_1/s_axis_data_tready
285- ad_connect util_ad9361_dac_upack/upack_valid_2 fir_interpolator_1/s_axis_data_tvalid
286- ad_connect dac_fifo/din_data_2 fir_interpolator_1/channel_0
287- ad_connect dac_fifo/din_data_3 fir_interpolator_1/channel_1
288- ad_connect dac_fifo/din_valid_2 fir_interpolator_1/dac_read
289-
290- ad_connect concat_1/In0 util_ad9361_dac_upack/dac_data_2
291- ad_connect concat_1/In1 util_ad9361_dac_upack/dac_data_3
292- ad_connect concat_1/dout fir_interpolator_1/s_axis_data_tdata
274+ connect_bd_net [get_bd_pins util_ad9361_divclk/clk_out] [get_bd_pins fir_interpolator_1/aclk]
275+ connect_bd_net [get_bd_pins util_ad9361_dac_upack/enable_2] [get_bd_pins axi_ad9361_dac_fifo/din_enable_2]
276+ connect_bd_net [get_bd_pins util_ad9361_dac_upack/enable_3] [get_bd_pins axi_ad9361_dac_fifo/din_enable_3]
277+ connect_bd_net [get_bd_pins util_ad9361_dac_upack/fifo_rd_en] [get_bd_pins fir_interpolator_1/s_axis_data_tvalid]
278+ connect_bd_net [get_bd_pins axi_ad9361_dac_fifo/din_data_2] [get_bd_pins fir_interpolator_1/channel_0]
279+ connect_bd_net [get_bd_pins axi_ad9361_dac_fifo/din_data_3] [get_bd_pins fir_interpolator_0/channel_1]
280+ connect_bd_net [get_bd_pins axi_ad9361_dac_fifo/din_valid_2] [get_bd_pins fir_interpolator_1/dac_read]
281+
282+
283+ connect_bd_net [get_bd_pins concat_1/In0 ] [get_bd_pins util_ad9361_dac_upack/fifo_rd_data_2]
284+ connect_bd_net [get_bd_pins concat_1/In1 ] [get_bd_pins util_ad9361_dac_upack/fifo_rd_data_3]
285+ connect_bd_net [get_bd_pins concat_1/dout ] [get_bd_pins fir_interpolator_1/s_axis_data_tdata]
293286
294287 # gpio controlled
295- ad_connect axi_ad9361/up_dac_gpio_out interp_slice/Din
296- ad_connect fir_interpolator_0/interpolate interp_slice/Dout
297- ad_connect fir_interpolator_1/interpolate interp_slice/Dout
288+ connect_bd_net [get_bd_pins axi_ad9361/up_dac_gpio_out] [get_bd_pins interp_slice/Din]
289+ connect_bd_net [get_bd_pins fir_interpolator_0/interpolate] [get_bd_pins interp_slice/Dout]
290+ connect_bd_net [get_bd_pins fir_interpolator_1/interpolate] [get_bd_pins interp_slice/Dout]
298291
299292 In this example, the TX data flow is controlled by the interpolation filter when interpolation is activated and
300293by the axi_ad9361_core when interpolation is not active. In the reference design, the data flow is controlled by the ad9631_core.
@@ -307,7 +300,7 @@ We must connect the unpack core's dma_xfer_in port to VCC so that the unpack may
307300
308301 At this moment the Interpolation filters are completely integrated into the design and the data path should look like the one in the figure below.
309302
310- .. image :: fmcomms2_vivado_interp_fir_tx.png
303+ .. image :: fmcomms2_vivado_interp_fir_tx.JPG
311304 :width: 1000
312305 :align: center
313306 :alt: FMCOMMS2_VIVADO_INTERP_FIR_TX
@@ -318,37 +311,34 @@ Connecting the FIR decimation filters on the Rx side
318311.. code-block :: tcl
319312
320313 # fir decimator 0
321- ad_connect clkdiv/clk_out fir_decimator_0/aclk
322- ad_connect util_ad9361_adc_fifo/dout_data_0 fir_decimator_0/channel_0
323- ad_connect util_ad9361_adc_fifo/dout_data_1 fir_decimator_0/channel_1
324- ad_connect util_ad9361_adc_fifo/dout_valid_0 fir_decimator_0/s_axis_data_tvalid
325- ad_connect util_ad9361_adc_pack/adc_valid_0 fir_decimator_0/m_axis_data_tvalid
326- ad_connect util_ad9361_adc_pack/adc_valid_1 fir_decimator_0/m_axis_data_tvalid
327- ad_connect util_ad9361_adc_pack/adc_enable_0 util_ad9361_adc_fifo/dout_enable_0
328- ad_connect util_ad9361_adc_pack/adc_enable_1 util_ad9361_adc_fifo/dout_enable_1
329- ad_connect pack0_slice_0/Din fir_decimator_0/m_axis_data_tdata
330- ad_connect pack0_slice_1/Din fir_decimator_0/m_axis_data_tdata
331- ad_connect util_ad9361_adc_pack/adc_data_0 pack0_slice_0/Dout
332- ad_connect util_ad9361_adc_pack/adc_data_1 pack0_slice_1/Dout
314+ connect_bd_net [get_bd_pins util_ad9361_divclk/clk_out] [get_bd_pins fir_decimator_0/aclk]
315+ connect_bd_net [get_bd_pins util_ad9361_adc_fifo/dout_data_0] [get_bd_pins fir_decimator_0/channel_0]
316+ connect_bd_net [get_bd_pins util_ad9361_adc_fifo/dout_data_1] [get_bd_pins fir_decimator_0/channel_1]
317+ connect_bd_net [get_bd_pins util_ad9361_adc_fifo/dout_valid_0] [get_bd_pins fir_decimator_0/s_axis_data_tvalid]
318+ connect_bd_net [get_bd_pins util_ad9361_adc_pack/enable_0 ] [get_bd_pins util_ad9361_adc_fifo/dout_enable_0]
319+ connect_bd_net [get_bd_pins util_ad9361_adc_pack/enable_1 ] [get_bd_pins util_ad9361_adc_fifo/dout_enable_1]
320+ connect_bd_net [get_bd_pins pack0_slice_0/Din] [get_bd_pins fir_decimator_0/m_axis_data_tdata]
321+ connect_bd_net [get_bd_pins pack0_slice_1/Din] [get_bd_pins fir_decimator_0/m_axis_data_tdata]
322+ connect_bd_net [get_bd_pins util_ad9361_adc_pack/fifo_wr_data_0] [get_bd_pins pack0_slice_0/Dout]
323+ connect_bd_net [get_bd_pins util_ad9361_adc_pack/fifo_wr_data_1] [get_bd_pins pack0_slice_1/Dout]
333324
334325 # fir decimator 1
335- ad_connect clkdiv/clk_out fir_decimator_1/aclk
336- ad_connect util_ad9361_adc_fifo/dout_data_2 fir_decimator_1/channel_0
337- ad_connect util_ad9361_adc_fifo/dout_data_3 fir_decimator_1/channel_1
338- ad_connect util_ad9361_adc_fifo/dout_valid_2 fir_decimator_1/s_axis_data_tvalid
339- ad_connect util_ad9361_adc_pack/adc_valid_2 fir_decimator_1/m_axis_data_tvalid
340- ad_connect util_ad9361_adc_pack/adc_valid_3 fir_decimator_1/m_axis_data_tvalid
341- ad_connect util_ad9361_adc_pack/adc_enable_2 util_ad9361_adc_fifo/dout_enable_2
342- ad_connect util_ad9361_adc_pack/adc_enable_3 util_ad9361_adc_fifo/dout_enable_3
343- ad_connect pack1_slice_0/Din fir_decimator_1/m_axis_data_tdata
344- ad_connect pack1_slice_1/Din fir_decimator_1/m_axis_data_tdata
345- ad_connect util_ad9361_adc_pack/adc_data_2 pack1_slice_0/Dout
346- ad_connect util_ad9361_adc_pack/adc_data_3 pack1_slice_1/Dout
347-
326+ connect_bd_net [get_bd_pins util_ad9361_divclk/clk_out] [get_bd_pins fir_decimator_1/aclk]
327+ connect_bd_net [get_bd_pins util_ad9361_adc_fifo/dout_data_2] [get_bd_pins fir_decimator_1/channel_0]
328+ connect_bd_net [get_bd_pins util_ad9361_adc_fifo/dout_data_3] [get_bd_pins fir_decimator_1/channel_1]
329+ connect_bd_net [get_bd_pins util_ad9361_adc_fifo/dout_valid_2] [get_bd_pins fir_decimator_1/s_axis_data_tvalid]
330+ connect_bd_net [get_bd_pins util_ad9361_dac_pack/fifo_rd_en] [get_bd_pins fir_decimator_1/m_axis_data_tvalid]
331+ connect_bd_net [get_bd_pins util_ad9361_adc_pack/enable_2 ] [get_bd_pins util_ad9361_adc_fifo/dout_enable_2]
332+ connect_bd_net [get_bd_pins util_ad9361_adc_pack/enable_3 ] [get_bd_pins util_ad9361_adc_fifo/dout_enable_3]
333+ connect_bd_net [get_bd_pins pack1_slice_0/Din] [get_bd_pins fir_decimator_1/m_axis_data_tdata]
334+ connect_bd_net [get_bd_pins pack1_slice_1/Din] [get_bd_pins fir_decimator_1/m_axis_data_tdata]
335+ connect_bd_net [get_bd_pins util_ad9361_adc_pack/fifo_wr_data_2] [get_bd_pins pack1_slice_0/Dout]
336+ connect_bd_net [get_bd_pins util_ad9361_adc_pack/fifo_wr_data_3] [get_bd_pins pack1_slice_1/Dout]
337+
348338 #gpio controlled
349- ad_connect axi_ad9361/up_adc_gpio_out decim_slice/Din
350- ad_connect fir_decimator_0/decimate decim_slice/Dout
351- ad_connect fir_decimator_1/decimate decim_slice/Dout
339+ connect_bd_net [get_bd_pins axi_ad9361/up_dac_gpio_out] [get_bd_pins decim_slice/Din]
340+ connect_bd_net [get_bd_pins fir_decimator_0/decimate] [get_bd_pins decim_slice/Dout]
341+ connect_bd_net [get_bd_pins fir_decimator_1/decimate] [get_bd_pins decim_slice/Din]
352342
353343 Generating the programing files
354344~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -377,11 +367,6 @@ Base system functionality
377367
378368For simply testing the fmcomms2 with filter design we loop-back the data from TX to RX for each channel with a SMA to SMA cable.
379369
380- .. image :: fmcomms2_txrx_loopback.jpg
381- :width: 1000
382- :align: center
383- :alt: FMCOMMS2_TXRX_LOOPBACK
384-
385370When first booting up the design none of the filters will be active. For the beginning make sure you have the same **LO frequency for RX and TX **, as in the picture below.
386371Configure the Transmit/DDS mode to DAC Buffer Output, and chose one of the .mat files there and press Load this will send data in the .mat file via DMA. This option was
387372chosen because the DDS data does not pass through the FIR interpolation filters. On the decimation side, data will always pass through decimation filters.
0 commit comments