Intel® High Level Design
Support for Intel® High Level Synthesis Compiler, DSP Builder, OneAPI for Intel® FPGAs, Intel® FPGA SDK for OpenCL™
701 Discussions

Downsample block and TDM/TDD blocks in DSPBuilder Advanced Blockset

Ghe0rghe
New Contributor I
2,912 Views

Hello all,

I am porting a project over from Xilinx System Generator to DSPBuilder advanced blockset. Xilinx system generator includes three handy blocks that do not seem to be present in DSP Builder Advanced blockset, both shown below in order: The Downsample block and the TDM/TDD (Time-Division-Mux/Demux) blocks.

Ghe0rghe_1-1602721162270.png

Ghe0rghe_2-1602721341949.png

What is the simplest and best way to use the available primitive blocks in the DSP Builder Advanced Blockset to build each of these blocks? I imagine one may leverage some kind of FIFO/Sample-and-Hold block for the downsample block, and some kind of counter connected to a mux/demux for the TDM and TDD blocks.

Best,

- Gheorghe

 

 

 

0 Kudos
1 Solution
SengKok_L_Intel
Moderator
2,808 Views

Hi,


You may need a dual clock FIFO to transfer data between two different clock domains.


Regards -SK


View solution in original post

0 Kudos
14 Replies
SengKok_L_Intel
Moderator
2,901 Views

Hi,


The design flow for DSP Builder may be slightly different from others. The downsampling block is not available from the DSP builder library, however, for simulation purposes, you can use the downsample block from DSP System Toolbox. You can see the example design “demo_firs” example at this directory “installation path\quartus\dspba\Examples\Filters” is using it for simulation purposes (not part of the RTL).


For the TDM, probably you can refer to the DEMUX/MUX block from the primitive library.


Regards -SK


0 Kudos
Ghe0rghe
New Contributor I
2,897 Views

Thank you SengKok

About the downsampling block: Does this imply that Intel DSP Builder subsystems cannot be "multirate"? I would like to integrate the downsampling block in my DSPBuilder-generated RTL. Maybe can you refer me to a triggered sample-and-hold block in the DSPBA Blockset to accomplish this?

Thank you,

- Gheorghe 

0 Kudos
Ghe0rghe
New Contributor I
2,894 Views

Also, about the TDM block:

Perhaps I can use the ChanView block in the DSPBA blockset? Do you see any problems with using this block? I suspect that this block won't work because it is reserved for RTL simulations in MATLAB, and does not actually get implemented in DSPBuilder-generated RTL. 

Best,

- Gheorghe 

0 Kudos
SengKok_L_Intel
Moderator
2,887 Views

Hi,

 

The DSP builder system is support single clock domain, and there is NO down or up sampling block as I can see. For the TDM block, you may consider to use the DEMUX in primitive library, it has the same function as ChanView.

 

Regards -SK  


0 Kudos
Ghe0rghe
New Contributor I
2,868 Views

Are you sure that Intel DSP Builder subsystems only support single clock domain?

This video seems to suggest otherwise.

https://youtu.be/stKdxz802GA?t=1249

At the 20:50 mark, the video references another training video called "Building MultiRate DSP Builder Design Training", but I cannot seem to find this other "Multirate" video/training document anywhere?

If you know more about this, please let me know, thank you.

- Gheorghe S

0 Kudos
SengKok_L_Intel
Moderator
2,862 Views

Hi,


Multirate means the sample rate variation at different stages of a datapath, but it uses a single path clock domain.

The ModelIP block like CIC, decimation FIR or Interpolating FIR are running at different data rates between the input and output port, however, the clock domain is still the same.


Regards -SK 


0 Kudos
Ghe0rghe
New Contributor I
2,853 Views

Ok, I see, thank you for the clarification.

Is there a way to change a signal's data rate without using these multirate filters?

How can I use the DSPBA blockset to downsample a signal's data rate by only sparsely sampling it at the lower data rate? I would like to avoid perturbing my signals' frequency content by avoiding these filters.

Best,

-Gheorghe

0 Kudos
SengKok_L_Intel
Moderator
2,848 Views

You probably need to use the ModelPrim library to build it, there is a list of components that you can use to customize based on your design requirement (e.,g create a counter to control the valid signal to drop off those unnecessary samples).


Regards -SK


0 Kudos
Ghe0rghe
New Contributor I
2,844 Views

Thank you for the suggestion.

I decided to downsample my data signal by simply feeding it to a separate DSPBuilder-generated IP core running at a lower clock rate. Using the 0L latch block in DSPBA blockset to sample-and-hold my signals does not achieve the downsampling functionality that I am looking for, as this sample-and-hold algorithm adds high frequency content to my signal with jagged stair steps, as opposed to simply undersampling my signal. 

Do you have any tips on how to implement a super-sampling mux and an undersampling demux?

Examples of these systems implemented with the Xilinx System Generator Blockset (similar to DSPBA blockset but for Xilinx FPGAs) is shown below.

The mux shown below has 32 input signals, which are outputted as a supersampled signal running at 32x the clock frequency of the input signals. 

Ghe0rghe_0-1603486332036.png

The demux shown below has one input signal which is time-division-demuxed to output to 32 signals, each at 32x lower clock frequency. 

Ghe0rghe_1-1603486674493.png

 

0 Kudos
SengKok_L_Intel
Moderator
2,836 Views

Hi,


I'm not familiar with third party tool, however, It looks similar to the DEMUX and MUX block in the primitive library, But please remind that the DSP Builder Advance block set uses only a single clock domain.


For example:


MUX: If the input sample rate is 1/3 of the system clock rate, and there are three input ports. On every clock cycle, you can use the "S" signal to select which input data to go out first and then followed by second and third. This means the input data is without TDM, but the output data can with TDM.


DEMUX: Reverse of MUX. The input data is with TDM, however, the output sample is without TDM.


Regards -SK


0 Kudos
Ghe0rghe
New Contributor I
2,815 Views

Dear SengKok,

Thank you for the clarification.

In attempting to use DSP Builder to build a multirate system, I attempted to generate two DSP Builder custom components, each operating on a different clock domain, and connect data signals between the two custom components in platform designer.

Unfortunately it seems like it is not possible to connect conduit interfaces which are on different clock domains? Please see the attached screenshot below, which contains an error message highlighted. 

Ghe0rghe_0-1604006498311.png

Is there a workaround for this? Maybe create another clock port on my "NCO..." custom component, and associate this slower clock with the output signals I intend to send to the slower clock "mixer_128..." custom component?

0 Kudos
SengKok_L_Intel
Moderator
2,809 Views

Hi,


You may need a dual clock FIFO to transfer data between two different clock domains.


Regards -SK


0 Kudos
Ghe0rghe
New Contributor I
2,804 Views

Ok thank you.

Using a secondary clock, and associating it to output signals going to a custom component with lower clock rate seems to work. 

 

0 Kudos
SengKok_L_Intel
Moderator
2,788 Views

I will set this forum case to close-pending for now. The status will remain in this state for 15 calendar days, simply post a note in this forum and it will be reopened for further investigation.


0 Kudos
Reply