feature article
Subscribe Now

Deterministic Name Generation for Incremental Synthesis

Introduction

Incremental design is a useful capability when implemented properly. Unfortunately, due to the naming schemes employed by logic synthesis tools, confusion arises over what in the design has actually changed. What is needed is an algorithm that deterministically creates names for generated logic elements, simplifying the task of correctly identifying what has changed at each cycle.

For the incremental design flow illustrated in Figure 1 to be most effective, minor changes should be made to the design at each incremental turn to allow the reuse of the place-and-route data generated during the previous design turn. The major benefit of this methodology is the generation of a predictable design output similar to the previous place-and-route run, plus the associated shortening of the runtime.

The key to deterministic name generation is to create designs during logic synthesis that have similar instance and/or object names to the previous designs where they are logically equivalent, and different instance and/or object names where the designs differ.

20070313_mentor_fig1.jpg

Figure 1.

Design Objects and Naming in Logic Synthesis

Design objects are libraries, cells, views, ports, nets,  pins , and instances. Among these, instance, port, net, and pin are part of the design as a result of logic synthesis. Generally, names for objects are either derived from the RTL design or generated by the synthesis process:

  • Port names are obtained from the RTL design.

  • User level hierarchy names are obtained from the RTL design.

  • Nets connecting to ports generally inherit the same name as the port name.

  • Sequential elements (flip-flops) of a state machine often inherit names from the RTL design.

Instances and nets representing generated logic are named by logic synthesis, based on conventions that can range from the simple to the complex:

  • Instance names can be prefix with an index number “ix”, for example, ix10.

  • Net names can be a prefix with “nx”, concatenated with an index number, for example, nx20.

  • Sequential instances (flip-flops) may have a predefined prefix to highlight this nature, for example, reg_state(1).

  • Instances of operators (adders, subtractors, counters, etc.) may have some specific prefix to highlight their function, for example, addsub_5_5_1.

Sequential-Index Name Generation

Embedded in any human-generated RTL design, the logical block, signal and port names reflect the hierarchy and data flow of the design. Traditionally, logic synthesis tools have used this structure for generating the names of  design elements.  This technique for naming is refer to as sequential index naming.
During logic synthesis, the tool generates the detailed logic of the design, creating names for each design object. A common method for automatic name generation is to start at an index, initialized to a specific value, then incrementing its value for each object name. For  example, (with the index counter initialized to 0):

  • Instance names: ix0, ix1, ix2

  • Net names: nx3, nx4, nx5

  • Operator names: addsub_5_5_6, addsub_5_5_7

For hierarchical designs, the index can be reset at each hierarchal level to allow for better readability. However, not all synthesis tools necessarily reset the index at each hierarchical level but may opt to continue incrementing.

Problems with Sequential-Index Naming

During Place-and-Route Iterations

During design iterations, sequential-index name generation has two major shortfalls:

  • An object with the same instance name as a previous run may in fact have different functionality.

  • A deletion or addition of a signal instance results in a domino effect of instance renaming.

20070313_mentor_fig2.jpg

Figure 2.

In the example shown in Figure 2, the single instance of logic AND and OR  would have the design and port names as in the following:

  • Input port: a, b;

  • Output port: y;

  • Nets: a, b, y

     

If the design is revised through incremental changes, with the logic AND being replaced by loigc OR, then both objects would receive the same instance name. The place-and-route tool cannot then tell the different based on the instance names.

In the second example shown if Figure 3, the design has multiple instances naming ix1 to ixn, if a single instance is removed in the design revision, then the instances are renamed ix1 to ix(n-1). In the next phase of place and route, the tool may mistakenly trying to match the placement of instances ix1 to ix(n-1) even though there is no longer one-to-one match with the previous placement. Depending on how early in the naming sequence the instance is removed, the more placement footprints can differ (but have the same instance names).

20070313_mentor_fig3.jpg

Figure 3.

During Design Debug

Sequential-index naming also causes problems for the designer during debug. As object names change, tracing failing conditions and verifying fixes is complicated. An object identified for observation in one run, may change name in the next, forcing the designer to waste time to re-identify the proper instance or net. As the number of objects renamed increases, the more time that is needed to correctly re-identify those under investigation.  

Deterministic Name Generation

At the naming level, deterministic name generation is designed to achieve several objectives:

  • Given the same design, the generated names of each object must be deterministic.

  • The name of the objects must be differentiated according the their logical function.

  • Given the same design with arbitrary arrangement of logical blocks, the generated name for the object must not change with each iteration cycle.

The essential requirement for a deterministic name generation algorithm is in the area of incremental design changes. Given two designs, the second being a minor modification of the first at the RTL level, and assuming the logic synthesis tool can generate a consistent logical representation of the design:
The resulting object names must remain the same for the unchanged portion of the design.
The changed portion of the design must be name differently.

Designing the Algorithm

The keys to generating deterministic names for a design are:

  • Localizing the logic names within affected logic cone

  • Using user-defined object names as the root name for each logic cone where feasible

  • Using indexing within the logic cones to represent the design structure

  • Imbedding logic function markers in the instance

  • Encoding the generated names into shorter ones to reduce memory usage and improve processing speed.

Localizing the Logic Names within Affected Logic Cone.

A given design can be partitioned into logic cones as illustrated in Figure 4a. Starting from the output ports, the logic cone extends backwards until reaching the starting points such as registers and/or input ports. As the design objects within each logic cone is named based on a specified rule set, then the name structure of each cone is independent of the other. In the event of design changes between different design revisions, only the affected logic cone(s) and the resulting names change. Thus the unaffected logic cones maintain their same names from the previous revision.

20070313_mentor_fig4a.jpg

Figure 4a.

Using User-Defined Object Names as Root Name

The maintaining of readability of the design is one of the most important goals of the algorithm since the object names from the original RTL always convey the functionality and data flow to the designer. To this end, a deterministic naming algorithm should select the user-defined object name as the root for instance names within each logic cone. This process ensures uniqueness and repeatability of the algorithm.

User-defined object names are generally:

  • Port names

  • Logic signals name from RTL sources

  • Sequential element names

  • Special operator objects such as adder, multiplier, etc.

     

20070313_mentor_fig4b.jpg

Figure 4b.

 

Using Indexing within Logic Cones to Represent Design Structure

Within each logic cone, the index of instances and nets starts with the first initialized value, normally 1. For example, the instances in the first and second logic cones shown in Figure 4b are named as follows:

  • Logic cone: Out1

    • Root-name: Out1

    • Instance names: Out1_1, Out1_2, Out1_3,…Out1_7

  • Logic cone: Out2

    • Root-name: Out2

    • Instance names: Out2_1, Out2_2, Out2_3, . . ..Out2_6.

Imbedding Logic Function Markers in Instance Names

One more level of qualifier to the name is added to ensure the uniqueness by using the name of the logical function of the instance. For example,  ASIC designs are synthesized to cells with names representing their logic functions, such as AND2, AND3, NOR2, NOR3 etc. These names could then be used directly as the name sub-qualifier. For FPGAs, where designs are generally synthesized to LUTs, the real function for each instance must be used. Using the simplified illustration in figure 4, with the convention of a square representing an AND gate, and a circle representing an OR gate, the resulting instance names are:

  • Out1_1_AND, Out1_2_AND, Out1_3_OR, Out1_4_OR, Out1_5_AND, Out1_6_AND, Out1_7_AND.

  • Out2_1_OR, Out2_2_AND, Out2_3_AND, Out2_4_OR, Out2_5_OR, Out2_6_AND.

Encoding names for practicality

For the examples above, the object names are presented in full form. In practice, the object names are encoded to provide a compact representation to improve both memory usage and processing runtime. A deterministic naming algorithm should use the following rules when encoding synthesis-generated names:

  • Hierarchical Prefix – if applicable

  • Instance names – start with prefix ix

  • Net names – start with prefix nx

  • Encoded root name as first qualifier

  • Separating character

  • Encoded logic function and topological position for instance

  • Topological position for net

Example of encoded instance names indicating that the two instances are located in the same logic cone, with identical logic function and are adjacent to each other:

  • ix54453z30210

  • ix54453z30211

Example of net names indicating that the two nets are located in the same logic cone and are adjacent to each other.:

  • ix54453z2

  • ix54453z3

There should be an option to prevent the synthesis tool to not encode the object names but keep it in long format for analysis purpose. And the other option is to generate both encoded and original name internally and provide utility mapping the related name on demand. 

Conclusion

Incremental design is an effective methodology for reducing design cycle time. However, the problem with incremental design today is the confusion introduced in the naming of objects during logic synthesis. This confusion results in downstream tools being unable to correctly identify which parts of the design have change, and can end up negating the time savings incremental design was to deliver.  Deterministic naming of design objects is a methodology that aids downstream tools to correctly identify which parts of the design have changed, helping to deliver the promise of incremental design.

References

[1] Brand, D. et al, Incremental Synthesis, Proceeding of the 1994 IEEE/ACM international conference on Computer-aided design.
[2] Gu, Zhenyu et al, Incremental Exploration of the Combined Physical and Behavioral Design Space, Proceeding of the 42th annual conference on Design automation.
[3] Coudert, Oliver et al, Incremental CAD, Proceeding of the 2000 IEEE/ACM international conference on Computer-aided design.
[4] Cong, Jason and Huang, Hui, Depth optimal incremental mapping for field programmable gate arrays, Proceeding of the 37th conference on Design automation.
[5] Shinsha. T. et al, Incremental logic synthesis through gate logic structure identification, Proceedings of the 23rd ACM/IEEE conference on Design automation.
[6] Singh, Deshanand P.  et al, Incremental Retiming for FPGA Physical Synthesis, Proceeding of the 42nd annual conference on Design Automation.

Leave a Reply

featured blogs
Nov 22, 2024
We're providing every session and keynote from Works With 2024 on-demand. It's the only place wireless IoT developers can access hands-on training for free....
Nov 22, 2024
I just saw a video on YouTube'”it's a few very funny minutes from a show by an engineer who transitioned into being a comedian...

featured video

Introducing FPGAi – Innovations Unlocked by AI-enabled FPGAs

Sponsored by Intel

Altera Innovators Day presentation by Ilya Ganusov showing the advantages of FPGAs for implementing AI-based Systems. See additional videos on AI and other Altera Innovators Day in Altera’s YouTube channel playlists.

Learn more about FPGAs for Artificial Intelligence here

featured paper

Quantized Neural Networks for FPGA Inference

Sponsored by Intel

Implementing a low precision network in FPGA hardware for efficient inferencing provides numerous advantages when it comes to meeting demanding specifications. The increased flexibility allows optimization of throughput, overall power consumption, resource usage, device size, TOPs/watt, and deterministic latency. These are important benefits where scaling and efficiency are inherent requirements of the application.

Click to read more

featured chalk talk

Reliability: Basics & Grades
Reliability is cornerstone to all electronic designs today, but how reliability is implemented and determined can vary widely by different market segments. In this episode of Chalk Talk, Amelia Dalton and Sam Accardo from the YAGEO Group explore the definition of reliability for electronic components, investigate the different grades of reliability offered by the YAGEO Group and the various steps that the YAGEO Group is taking to ensure the greatest reliability of their components.
Aug 15, 2024
53,469 views