Professional Documents
Culture Documents
Verification of Multi Bit Cells in Conformal
Verification of Multi Bit Cells in Conformal
Conformal
Product Version Conformal LEC 15.2
August 25, 2016
Copyright Statement
© 2016 Cadence Design Systems, Inc. All rights reserved worldwide. Cadence and the Cadence logo are
registered trademarks of Cadence Design Systems, Inc. All others are the property of their respective
holders.
Contents
Purpose ....................................................................................................................... 4
Audience...................................................................................................................... 4
Terms .......................................................................................................................... 4
Understanding Multibit Library Cell Structure .............................................................. 5
Challenges in Multibit Register Mapping...................................................................... 9
Using the Mapping Guide File for Multibit Cell Mapping ............................................ 10
Impact on Checkpoint ............................................................................................ 15
Interaction with Renaming Rules............................................................................ 15
Impact of Multibit Instance Mapping on Hierarchical Comparison .......................... 15
Using Fixed Pattern for Multibit Cell Mapping ............................................................ 15
Using Renaming Rules for Multibit Register Mapping................................................ 21
Summary ................................................................................................................... 22
References ................................................................................................................ 23
Support ...................................................................................................................... 23
Feedback ................................................................................................................... 23
Purpose
Synthesis and physical implementation tools can map and replace multiple register bits
into a single multibit register cell to achieve reduced power, area, and clock skew.
Synthesis tools target the register bits belonging to the same bus or heterogeneous
register bits identified by you for implementation using a multibit register cell.
Physical implementation tools target the single-bit register cells that are physically
placed close to each other for replacement with multibit register cells, provided they are
compatible for grouping into a single multibit cell. This method is able to map
functionally unrelated registers, as well as bused registers, to multibit register cells.
The verification of multibit register cells is challenging because Conformal LEC needs to
correctly infer the single-bit registers from the multibit register cell and map them to the
corresponding single-bit register instances in the other design.
Audience
This document is intended for Design or CAD engineers who want to perform
verification of multibit register cells against a golden RTL or a netlist with single-bit
register cells.
Terms
MBIT cell Multibit cell
In the Liberty syntax, the ff_bank or latch_bank group describes a multibit cell
consisting of a collection of parallel, single-bit sequential components. Each sequential
component shares control signals with the other parts and performs the same function
as the other parts.
You can use either the bus or bundle Liberty syntax to model these multibit signal pins
in the library.
The general Liberty syntax for a multibit flip-flop using the bus pin-group is as follows:
cell (cell_name) {
...
pin (pin_name) {
...
}
bus (bus_name) {
...
}
ff_bank (variable1, variable2, bits) {
clocked_on : "Boolean_expression" ;
next_state : "Boolean_expression" ;
clear : "Boolean_expression" ;
preset : "Boolean_expression" ;
clear_preset_var1 : value ;
clear_preset_var2 : value ;
clocked_on_also : "Boolean_expression" ;
}
}
The general Liberty syntax for a multibit flip-flop using the bundle pin-group is as
follows:
cell (cell_name) {
...
pin (pin_name) {
...
}
bundle (bus_name) {
members(pin_list);
...
}
ff_bank (variable1, variable2, bits) {
clocked_on : "Boolean_expression" ;
next_state : "Boolean_expression" ;
clear : "Boolean_expression" ;
preset : "Boolean_expression" ;
clear_preset_var1 : value ;
clear_preset_var2 : value ;
clocked_on_also : "Boolean_expression" ;
}
}
The members attribute of a bundle group lists the pins that form the multibit bus. The
pin mapping of individual sequential elements follow the order in which the pins are
listed in the members attribute.
The following snippet shows the Liberty definition of a multibit DFF cell that consists of
four pins each for input and output, and is grouped into a bundle group.
cell (DFF4B) {
area : 1 ;
pin (CLK) {
...
}
bundle (D) {
members(D1, D2, D3, D4);
...
}
pin (CLR) {
...
}
pin (PRE) {
...
}
ff_bank (IQ, IQN, 4) { /* consists of 4 bits */
next_state : "D" ;
clocked_on : "CLK" ;
clear : "CLR’" ;
preset : "PRE’" ;
clear_preset_var1 : L ;
clear_preset_var2 : L ;
}
bundle (Q) {
Learn more at Cadence Online Support - http://support.cadence.com
© 2016 Cadence Design Systems, Inc. All rights reserved worldwide. Page 6
Verification of Multibit Registers in Conformal
}
bundle (QN) {
members(Q1N, Q2N, Q3N, Q4N);
direction : output;
function : "IQN" ;
...
}
} /* end of cell DFF4B */
Note that the bundle group defines multibit member pins for the pins D, Q, and QN.
The cell schematic of the above cell will look like the following, when represented in
terms of individual four single-bit register component:
To learn more about the syntax of ff_bank, latch_bank, bundle, and bus, refer to
the Liberty User Guide.
1) Identifying from the multibit library cell definition the correspondence of a pin and
a particular register bit
2) Partitioning the multibit instance name into individual single-bit register names
and use the name-based mapping method to map them
The first step is automatic in LEC. Conformal automatically identifies the single-bit
register components from the multibit cell definition given in Liberty .lib and generates
single-bit register key points, named after the original multibit instance name.
Here are some examples of intricate multibit instance names, which will help you
understand the difficulty involved in partitioning:
foo_index_08_r_reg_4_AND_2_0
a_eop_r_reg_0__1_0__AND__AND_b_eop_r_reg_1__1_0
fifo_status_r_reg_7_6_AND_3_AND_1
fifo_status_r_reg_5_0
These multibit instance names have different naming styles, different range
specification styles, and also have multi-dimensional array specifications. It is difficult to
partition these names correctly to the individual register names. No renaming rules can
work for all these scenarios.
For example, the first two multibit instance names might imply partitioning as follows:
foo_index_08_r_reg_4_AND_2_0 ->
foo_index_08_r_reg_4
foo_index_08_r_reg_2
foo_index_08_r_reg_1
foo_index_08_r_reg_0
a_eop_r_reg_0__1_0__AND__AND_b_eop_r_reg_1__1_0 ->
a_eop_r_reg_0__1
a_eop_r_reg_0__0
b_eop_r_reg_1__1
b_eop_r_reg_1__0
To handle the mapping of all kinds of multibit instance names, Conformal recommends
a universal solution called “attribute flow”.
To learn more about “attribute flow”, refer to the section “Using the Mapping Guide File
for Multibit Cell Mapping”.
The “attribute flow” relies on a mapping-guide file in JSON (Java Script Object Notation)
format, which describes how to partition the multibit instance name into corresponding
single-bit register names. This is not a direct mapping file. It provides a guidance on
name partitioning. There are slight chances that the name mapping can still fail.
3) LEC cannot figure out the corresponding pins of the multibit library cell due to
complex hierarchy or logic inside the cell.
The mapping-guide file used in the “attribute flow” packs information about multibit cell
mapping as a list of <key>/<value> pairs, where <key> represents a predefined field
name in LEC and <value> stores the information associated with the field.
LEC uses the following <key> identifiers and the associated <value> fields in case of
multibit instance mapping:
<key> <value>
“attribute” “multibit”
“context” “<design_name>”
“objects” [
[“multibit_instance1”, “register1”, “register2”, ..]
[“multibit_instance2”, “register1”, “register2”, ..]
……
]
[
{ "attribute":"multibit",
"context":"top",
"objects":[ ["a_reg_0_AND_a_reg_1", "a_reg_0", "a_reg_1"],
["b_reg_0_AND_b_reg_1", "b_reg_0", "b_reg_1",
In"<UNUSED>",
the above example, the a_reg_0_AND_a_reg_1 multibit instance is partitioned to
the a_reg_0 and a_reg_1 "<UNUSED>"] single-bit]register names. Similarly, the
}
Learn more at Cadence Online Support - http://support.cadence.com
©]2016 Cadence Design Systems, Inc. All rights reserved worldwide. Page 11
Verification of Multibit Registers in Conformal
After this mapping-guide file is created, pass the file to Conformal LEC as follows in
SETUP mode:
LEC will import the partitioning information from this guide file to generate multiple
register name entries in place of the multibit register cell. After partitioning, the individual
registers will be looked up in the RTL and the netlist and will be mapped by name-
match.
Note:
- The order of individual instance names follows the pin declaration order of the
multibit library cell. In the above example, if the output pin declaration order of
the library cell is {Q1, Q0}, a_reg_0 will be associated with Q1 and a_reg_1
with Q0.
- If some members of the multibit cell are not used for mapping, use the
“<UNUSED>” string in place of those members.
- The Conformal attribute file needs to be created by the user. LEC can also
facilitate you to write out an attribute file in JSON syntax using the –
extract_info_to_file option of the read setup information command
while parsing the synthesis guide file as follows:
Duplicate and conflicting information is discarded with the following warning messages:
To report the summary of attribute information recorded and to find out how many of
them are accepted by LEC, use the “report setup information” command as
follows:
The multibit register mapping flow with the mapping-guide file is as follows:
Read .lib for MBIT cells Replaces the MBIT cell with
Read designs, constraints etc. generated single-bit register entries
Impact on Checkpoint
If you are using a checkpoint file to restore a session, the attribute information (from the
JSON file) needs to be read again as follows. It is not saved into the checkpoint
database.
<prepend_string><prefix_string><multibit_name>
where,
For SET MULTIBIT OPTION to work, the following assumptions must hold true:
1. All individual instance names appear in the multibit instance name, and they are
concatenated with a delimiter string.
2. If individual instances are from the same bus, they can be in the range format.
For example, indexes 0, 1, 2, and 3 can be expressed as 0_3. However, the
indexes must be consecutive; no individual bit can be skipped. For example,
indexes 0, 1, 3, and 4 cannot be expressed as 0_4.
3. The order of individual names in the concatenated multibit instance name should
be consistent with the pin declaration order in the multibit library cell. For
example, if the pin declaration order of library cells is {D1, D0} and 'a_reg' is
associated with 'D0' and 'b_reg' with 'D1', the multibit instance name should be
'CDN_MBIT_b_reg_MB_a_reg'.
This command can handle prefix, delimiter, range pattern, group, prepend strings, range
token, and separator token, embedded in the multibit cell instance name.
All <string> arguments are Perl regular expressions that can include Perl operators.
The general format of multibit instance name recognized by this command is:
<prepend_string><prefix_string><multibit_name>
1) Recognize <prepend_string><prefix_string>.
2) Split <multibit_name>.
Step 1:
LEC concatenates the two patterns (as shown below) and uses it to match the multibit
instance name to extract the prepend string:
“^(<prepend_pattern>)<prefix_pattern>”
Step 2:
<reg_1><delimiter><reg_2><delimiter>...<reg_n>[delimiter]
LEC uses the following pattern to (iteratively) match the name and extract individual
names:
<group_pattern><delimiter_pattern>
If the delimiter is some other unique string that is not part of the generated register
names, setting the <delimiter_pattern> alone is good enough for LEC to split the
name. However, if the delimiter is a commonly used string (for example, _), you need to
set the group pattern also as follows:
Note that the parenthesis is mandatory to extract the matched string as individual
names.
(<pattern>)(\d+)<string>(\d+)(<pattern>)
For example, if the range portion in the multibit instance is '3_0', the pattern will be
specified as:
To report the current setting of this command, use the following command:
Figure 6: Displaying the current setting of the “set multibit option” command
To preview how the inferred register names will be created, you can use the “-test”
option with this command as follows:
The following example shows how this command will split the multibit instance name to
infer the individual register names:
Figure 7: Testing how the split register names will look like
The individual single-bit register components are then mapped by name to the
corresponding single-bit registers in the Golden design.
The following image illustrates the multibit cell mapping flow using pattern-based name
mapping:
Consider, for example, the following multibit cell with instance name:
MBINST_SPI_INST_dout_reg[0]_MBIT_SPI_INST_dout_reg[1]
To infer the individual registers back in Conformal, use the following command:
With this command, Conformal will automatically generate two register entries, one for
each of the two sequential components, and replace the key point for the multibit
instance with them as follows:
MBINST_SPI_INST_dout_reg[0]_MBIT_SPI_INST_dout_reg[1]/sttb_$U1/u
dp1/U$1
MBINST_SPI_INST_dout_reg[0]_MBIT_SPI_INST_dout_reg[1]/sttb_$U2/u
dp1/U$1
After the generation of two unique register instances, they are mapped by Conformal
and staged for comparison:
SPI_INST_dout_reg[0] mapped to
MBINST_SPI_INST_dout_reg[0]_MBIT_SPI_INST_dout_reg[1]/sttb_$U1/u
dp1/U$1
SPI_INST_dout_reg[1] mapped to
MBINST_SPI_INST_dout_reg[0]_MBIT_SPI_INST_dout_reg[1]/sttb_$U2/u
dp1/U$1
The following table exemplifies how this command will generate register instances
against a multibit register instance.
mbit_flop_inst/U$1
mbit_flop_inst/U$2
Caveat:
U$1, U$2, and so on in instance names come from the library logic and this might vary
from library to library and also between LEC versions. Therefore, the use of renaming
rules is not a robust solution.
Summary
The three methods of multibit cell mapping are alternative ways to capture the mapping
intent and use it as a guidance for actual mapping.
Out of them, use of JSON file is the recommended approach for mapping a multibit cell
to single-bit registers, because it is unambiguous and is able to cover all situations. The
other two approaches can be used when the naming style is simple to break down into
individual instance names.
In any case, it is recommended to cross-check the final mapping of the multibit cell to
ensure that it conforms to the mapping intention.
References
Liberty User Guide Version 2009.06
Support
Cadence Online Support provides access to support resources, including an extensive
knowledge base, access to software updates for Cadence products, and the ability to
interact with Cadence Customer Support. Visit http://support.cadence.com.
Feedback
Email comments, questions, and suggestions to content_feedback@cadence.com.