DSP Builder for Intel® FPGAs (Advanced Blockset): Handbook

ID 683337
Date 12/12/2022

A newer version of this document is available. Customers should click here to go to the newest version.

Document Table of Contents

2.2. DSP Builder for Intel® FPGAs Design Structure

Organize your DSP Builder designs into hierarchical Simulink subsystems. Every top-level design must contain a Control block; the synthesizable top-level design must contain a Device block.
Note: A DSP Builder design can only have one synthesizable top-level design, which can contain many subsystems (primitive and IP blocks) to help organize your design. Any primitive blocks must be within a primitive subsystem hierarchy and any IP blocks must be outside primitive subsystem hierarchies.
Figure 1. DSP Builder DesignShows the relationship of the synthesizable top-level design and a primitive subsystem. Mandatory blocks are in red.

The Top-Level Design

A DSP Builder advanced blockset top-level design consists of:

  • A Simulink testbench, which provides design inputs and allows you to analyze inputs and outputs
  • Top-level configuration blocks
  • Optional memory interface specification and stimulus blocks.
    • External Memory block to configure an external memory interface
    • BusStimulus and BusStimulusFileReader blocks to stimulate Avalon-MM interfaces during simulation
    • Edit Params block as a shortcut to opening a script setup_<model name>.m for editing.

The top-level design must have a Control block to specify RTL output directory and top-level threshold parameters

Note: Every DSP Builder design must have Control block to allow you to simulate or compile your design. Do not place the Device block in the top-level design. DSP Builder propogates data types from the testbench to the synthesizable top-level design.

The Synthesizable Top-Level Design

The synthesizable top-level design is a Simulink subsystem that contains a Device block, which sets which family, part, and speed grade to target. The synthesizable top-level design is at the top level of the generated hardware files. The synthesizable top-level design can consist of further level of hierarchies that include primitive subsystems.

Note: Only use primitive blocks inside primitive subsystems.

Optionally, you can include more LocalThreshold blocks to override threshold settings defined higher up the hierarchy.

The Primitive Subsystem

Primitive subsystems are scheduled domains for Primitive and IP library blocks. A primitive subsystem must have:

  • A SynthesisInfo block, with synthesis style set to Scheduled, so that DSP Builder can pipeline and redistribute memories optimally to achieve the desired clock frequency.
  • Boundary blocks that delimit the primitive subsystem:
    • ChannelIn (channelized input),
    • ChannelOut (channelized output),
    • GPIn (general purpose input)
    • GPOut (general purpose output).

DSP Builder synchronizes connections that pass through the same boundary block.

Use system interface blocks to delimit the boundaries of scheduled domains within a subsystem. Within these boundary blocks DSP Builder optimizes the implementation you specify by the schematic. DSP Builder inserts pipelining registers to achieve the specified system clock rate. When DSP Builder inserts pipelining registers, it adds equivalent latency to parallel signals that need to be kept synchronous so that DSP Builder schedules them together. DSP Builder schedules signals that go through the same input boundary block (ChannelIn or GPIn) to start at the same point in time; signals that go through the same output boundary block (ChannelOut or GPOut) to finish at the same point in time. DSP Builder adds any pipelining latency that you add to achieve fMAX in balanced cuts through the signals across the design. DSP Builder applies the correction to the simulation at the boundary blocks to account for this latency in HDL generation. The primitive subsystem as a whole remains cycle accurate. You can specify further levels of hierarchy within primitive subsystems containing primitive blocks, but no further primitive boundary blocks or IP blocks.

Use SampleDelay blocks only to specify relative sample offsets of data-streams; do not use for pipelining.