...
This document is intended to guide users on NXmap Impulse software best practice.
The aim is to ease NXmap Impulse using and get the best recommendations in order to implement a project into NanoXplore components.
For any kind of helpassistance, please contact NanoXplore support team at support@nanoxplore.com.
...
All NanoXplore primitives are listed in nxLibrary-<variant_name>.vhdp available in the release archive. A documentation is also available in order to get information about all generics and io in Impulse 23.1 Library guide MEDIUM/LARGE3 Library Guide .
It is recommended to only add the nxpackage in the work library and not component declarations as they are already declared in the package.
...
NanoXplore FPGAs contain a low-skew network in order to spread signal with high fanout like clock, reset , and load signals.
The user must be very careful about the way to spread clock through the design. It is advised to follow the following rules sorted by level of recommendation:
...
Please have a look at Impulse 23.1 3 Training Package : Application Note Design/LowskewManagement project.
Info |
---|
PLL outputs are connected to WFG of the same CKG. User can either instantiate a WFG or let the tool instantiate a WFG in bypass mode by itself. WFG outputs are connected to the low-skew network. |
...
Please have a look at Impulse 23.1 3 Training Package : Application Note Component/ClockSwitch project.
...
There are some signals with high fan out fanout can be mapped into low-skew network and introduced some important delays. It could be the problem with synchronous signals load, set, reset, …
In order to avoid this problemissue, use rejectLowskew method.
...
It is recommended to rather use python method addMemoryInitialization described in Impulse 23.1 3 NxPython Specification as it is compliant with inferred and instantiated memories.
Please have a look at Impulse 23.1 3 Training Package : Application Note Init/Ram project.
...
Please have a look at Impulse 23.1 3 Training Package : Application Note Design/MemInfer project.
...
In addition, when a LUT is used, the DFF from the same Functionnal Element will be used either as a register or a buffer so adding pipeline in the design won’t will not consume any additional instance.
Project creation
NXmap Impulse is based on Python scripts that is to say consider a project is as a class and all options and constraints are methods associated to this class.
The user can either create a project based on a NanoXplore template (recommended) or start it from scratch.
In case of To use a NanoXplore template, please ask NanoXplore support team at support@nanoxplore.com.
...
Note |
---|
Never add a nxLibrary file to your project. NXmap Impulse tool already get the needed files with NX primitives. |
...
If reported messages are not clear enough to solve the issue, contact the NanoXplore support team at support@nanoxplore.com giving the CONTEXT code and an archive in order to reproduce the issue (RTL sources + scripts).
...
After errors and warnings are solved or understood, check hierarchy.rpt and progress.rpt in order to check the number of instances if it is relevant with the estimation.
In order to get complexity module by module without confining it in a region, it is possible to use addModule method described in Impulse 23.1 3 NxPython Specification.
Refer to #Floor_planning_Complexity for more details.
...
Once the project is mature enough, Static Timing Analysis can be done in order to check how fast the design can operatesoperate.
STA tool can be launched from any step after Preparing (Placing 1/5) with the following example method:
...
It is advised to launch a STA after Preparing as it shows up most critical paths and the maximum frequency with most optimistic hypothesis. If maximum frequencies are not higher enough at this step, it won’t the value will be less after routing for sure.
Clock creation
The input clock frequencies and other parameters must be informed to NXmap Impulse for STA.
Please refer to createClock and createGeneratedClock described in Impulse 23.1 3 NxPython Specification .
If a PLL is used, PLL output clock frequencies are automatically computed by the software.
...
Please refer to addFalsePath and addMultiCyclePath in Impulse 23.1 3 NxPython Specification .
Clock groups can be created if clock domains are completely unrelated.
...
It is possible to map this operators in LUT, Carry or DSP thanks to using addMappingDirective method described in Impulse 23.1 3 NxPython Specification .
By default, adders are mapped into Carry and Multipliers in DSP. But it can sometimes be interesting to change modify default mapping directives.
...
Memories can be mapped into logic elements (LUT/DFF), register files (RF), Memory Blocks (RAM) or Memory Blocks protected by EDAC correction thanks to using addMappingDirective method described in Impulse 23.1 3 NxPython Specification .
By default, small memories (equal or less than 64x16) will be mapped into RF and bigger ones mapped into RAM. But it can sometimes be interesting to change modify default mapping directives.
It it is highly recommended to size the design according to available depths and heights. Otherwise, too many memories will be instantiated and will affect the routing and STA performances.
...
In order to improve the maximum clock frequency for each clock domain, it is advised to follow the following steps:
Define a floor plan floorplan for the design depending on module relationships and pinout.
Apply the floor plan floorplan to your NXmap Impulse project using confineModule described in Impulse 23.1 3 NxPython Specification . Check #Floor_planning_Constrain_module for information about constraint setting.
If needed, repeat this process going deeper and deeper in the design hierarchy.
For last most critical paths, use constrainPath described in Impulse 23.1 3 NxPython Specification in order to create a region with only a few elements contained into the specified path. Check #Floor_planning_Constrain_path_between_registers for information about constraint setting.
It can also have a very positive impact to create unitary projects and reuse the routed projects as a blackbox in your final top project using addBlackBox described in Impulse 23.1 3 NxPython Specification .
It is also possible to place manually instances in a specified spot thanks to using the following NXpython methods all described in Impulse 23.1 3 NxPython Specification :
addPLLLocation for PLL instance in a CKG. Check #Instance_placing_Ring_placing for information about constraint setting.
addWFGLocation for WFG instance in a CKG and a WFG spot. Check #Instance_placing_Ring_placing for information about constraint setting.
addRAMLocation for RAM instance in a CGB. Check #Instance_placing_Ram_placing for information about constraint setting.
addDSPLocation for DSP instance in a CGB and a DSP spot. Check #Instance_placing_Dsp_placing for information about constraint setting.
setSite for LUT/DFF/CY in a TILE. Check #Instance_placing_Tile_placing for information about constraint setting.
...
Please have a look at Impulse 23.1 3 NxPython Specification reportDesignComplexity and reportHierarchyComplexity methods.
...
Code Block | ||
---|---|---|
| ||
08:50:49:info | -------------------------------------------- 08:50:49:info | - Detailed Hierarchy Statistics - 08:50:49:info | -------------------------------------------- 08:50:49:info | ~ hierarchical 08:50:49:info | Resources: 08:50:49:info | NX_LUT : 13 08:50:49:info | NX_DFF : 73 08:50:49:info | NX_IOB : 51 08:50:49:info | NX_BFR : 99 08:50:49:info | NX_WFG : 3 08:50:49:info | ~ |-> row_col_pipe(X212B9C19) [ GEN_HIER0 ] 08:50:49:info | |-> Resources: 08:50:49:info | |-> NX_LUT : 3 08:50:49:info | |-> NX_DFF : 23 08:50:49:info | GEN_HIER0_ROW-0 | |-> timing_pipe(X2A98C8C6) [ GEN_HIER0|GEN_ROW[0].ROW_PIPE ] 08:50:49:info | | |-> Resources: 08:50:49:info | | |-> NX_DFF : 5 08:50:49:info | ~ | |-> timing_pipe(X2A98C8C6) [ GEN_HIER0|GEN_ROW[1].ROW_PIPE ] 08:50:49:info | | |-> Resources: 08:50:49:info | | |-> NX_DFF : 5 |
How to use NXpython
...
constraints methods
Mapping directive
Anchor | ||||
---|---|---|---|---|
|
...
Please have a look at Impulse 23.1 3 Training Package : Application Note MappingDirective/Operator project.
...
Please have a look at Impulse 23.1 3 Training Package : Application Note MappingDirective/Memory project.
...
Please have a look at Impulse 23.1 3 Training Package : Application Note PlacingConstraint/DspLocation project.
...
Please have a look at Impulse 23.1 3 Training Package : Application Note PlacingConstraint/RamLocation project.
...
Please have a look at Impulse 23.1 3 Training Package : Application Note PlacingConstraint/RingLocation project.
...
Please have a look at Impulse 23.1 3 Training Package : Application Note PlacingConstraint/Site project.
...
Please have a look at Impulse 23.1 3 Training Package : Application Note PlacingConstraint/Region project.
...
Please have a look at Impulse 23.1 3 Training Package : Application Note PlacingConstraint/ConstrainPath project.
...
Please have a look at Impulse 23.1 3 Training Package : Application Note PlacingConstraint/Preplace project.
...
developCKGs method is active by default, NXmap compute Impulse computes automatically PLL and WFG required frequencies if input clock is declared.
Please have a look at Impulse 23.1 3 Training Package : Application Note StaConstraint/GeneratedClock project.
...
Please have a look at Impulse 23.1 3 Training Package : Application Note StaConstraint/GeneratedClock project.
...
Please have a look at Impulse 23.1 3 Training Package : Application Note StaConstraint/FalsePath project.
...
The higher the number of iterations is, the higher STA performances can be high but the higher . However, higher is the runtime is.
Note |
---|
All clocks must be created before launching Place&Route with TimingDriven option. Otherwise, the tool does not get performances to reach. |
...
First of all, ConstrainModule methods method as explained in #Floor_planning_Constrain_module must be applied in order to concentrate parts of the design and place them close to other ones if there are interconnections between them.
In addition, ConstraintPath methods method as explained in #Floor_planning_Constrain_path_between_registers must be applied if some path paths go trough multiple modules or for last critical paths.
Note |
---|
With this solution, the user must pay attention to interconnections between modules and between module and output interfacesmodules and the ring device. |
Logic depth reducing
The highest the required frequency is, the lowest the number of combinatorial elements between 2 registers must be.
...