SmartDesign components can be instantiated in another SmartDesign component by dragging and
dropping them into the SmartDesign canvas. The low-level SmartDesign components in the
hierarchy must be imported before instantiating in a new project. This is done by
selecting Import > Components in the
File menu. The HDL and corresponding cores associated with
these components must also be imported and configured before instantiating in the new
SmartDesign component. If you just import the .cxf
file and do not
import files corresponding to the low-level instances, you will see those instances
highlighted in red and you will be informed of missing components. See the following
example figure.
Using .cxf
files is important in the following cases:
.cxf
files provides the following advantages:The example design above has clocking blocks, multiplier blocks, and adder blocks. You could separate this design into two separate designs— complex_real and complex_imaginary— in either of the following ways:
.cxf
files— create
two new projects, import and configure all necessary HDL files and IP cores, and
make the connections manually..cxf
files—From the
Project menu, save the original project with a new name
using the Save As option. Make the necessary changes in the
new project by deleting the blocks and ports you no longer need and adding
additional blocks (if necessary), restoring the connections between existing blocks
from original design. This saves time while dividing large designs into smaller
designs, without the need to make all the connections manually.To save the original project with a new name, from the Project menu, select the Save As option. Click OK after entering the new project name.
To change the name of the SmartDesign component, right click the component in the Design Hierarchy and choose Rename Component.
To create a SmartDesign component for calculating the real part of a complex multiplication, remove the blocks that are not necessary for calculating real part along with the unused ports. This eliminates many manual connections and reduces generation time. Real designs may not be as simple as this, but this type of dividing saves time while preserving the connections between existing blocks.
See the following example figures.