I have a AND-OR structure written in RTL in a module. After the synthesis I see that the same logic is implemented using different logic elements in different modules. In one module I see AND-OR is formed with 4 instances, in other module with 5 instances.
Is there a way to tell RC to use exactly the same AND-OR structure in different modules, that are using same piece of RTL code?
structures are not infered by simple expresion lookup in most synthesis tools hence something like
a = b && c;
will not always map to
AND2X1 (a, b, c)
and could just as easily be
NOR2X1(a_int, b, c)
BUFX1 (a, a_int)
if such structure offers any advantages (i.e better for congestion, faster, smaller, better power, etc.)
Not only that but many times, a change in one structure enables better optimization which is a common occurrance for arithmetic operations in building better CSA trees, etc.
Long and short of it is that if you want a specific implementation in gates, you might as well hand-instantiate it and preserve/dont_touch but if you are hand-instantiating everything then why use a synthesis tool?
Maybe you can share the rational behind your question
hope this helps,
In reply to grasshopper:
Thanks for quick responce! The idea of having exactly the same structure of AND-OR is that I am going to hand place instances in place & route, so I have repeatable structure and can scipt it
In reply to Aram Shahinyan:
If u start from RTL u are giving the synthesis engine the power to do exactly that, synthesize. You can certainly pre-compile and even harden a small block if you want to replicate / clone it several times in your desig. There are numerous ways to write the same function in RTL. What you are trying to do is frequently done but the scale of what you are doing needs to justify the effort. Adding hierarchy to the logic in question can be a good way to identify the logic even if it is structurallly different in some cases
I understand your point. Structurally different logic does not work good if you had place specific instances from repeating
modules. That's why I need to have exactly the same structure
In that case, you will need to either hardened your structure and place it as a hardened macro or resort to approaches such as SDP which are more geared to the placement of regular structures. For example, a used builds a synchronizer and may turn it into a hardened macro to ensure timing, etc. does not result in meta-stability. It ultimately has to do with what the goal is. Improve runtime? Create regular structures? Consistent QoR? There are several factors that drive this decision and it can be supported but the deciding factor is what your needs ultimately are.
Yes, there are factors that drive this decision. Design is very congested and if I don't preplace cells it will never work.
There are over 100K AND-OR structures in my design and if they have different logic it would be very hard to script
the placement. I'm looking at something repeatable, but hardening probably is not an option. Any other ideas?
Sounds like all you want is to pre-compile them and script the handling in P&R. Without hierarchy for the structure in question, you will be challenged in a number of way. Nothing prevent you from pre-compiling and then reading as netlist and using set_dont_touch/preserve. It sounds like the design is extremely uniform (100K structure and hand-solution is ALWAYS best) or physical aware solution should do a reasonable job addressing your congestion concerns. I suggest you work with your local AE on this since they may be able to provide more specific advise once they see your exact situation