| |
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.
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:
Instances and nets representing generated logic are named by logic synthesis, based on conventions that can range from the simple to the complex:
Sequential-Index Name GenerationEmbedded 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.
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 NamingDuring Place-and-Route IterationsDuring design iterations, sequential-index name generation has two major shortfalls:
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:
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).
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 GenerationAt the naming level, deterministic name generation is designed to achieve several objectives:
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: Designing the AlgorithmThe keys to generating deterministic names for a design are:
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.
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:
Using Indexing within Logic Cones to Represent Design StructureWithin 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:
Imbedding Logic Function Markers in Instance NamesOne 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:
Encoding names for practicalityFor 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:
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:
Example of net names indicating that the two nets are located in the same logic cone and are adjacent to each other.:
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. ConclusionIncremental 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.
and Dan Devries, Mentor Graphics Corporation March 13, 2007
|
All
material on this site copyright © 2003-2007 techfocus media, inc.
All rights reserved. FPGA and Structured ASIC Journal Privacy Statement |