• Skip to main content
  • Skip to search
  • Skip to footer
Cadence Home
  • This search text may be transcribed, used, stored, or accessed by our third-party service providers per our Cookie Policy and Privacy Policy.

  1. Community Forums
  2. Logic Design
  3. sub architecture selection

Stats

  • Locked Locked
  • Replies 13
  • Subscribers 61
  • Views 19092
  • Members are here 0
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

sub architecture selection

archive
archive over 18 years ago

In a block with deep asynchronous logic, there are some multiplier stages. I synthesized this block stand-alone and "report datapath" does not show me a multiplier architecture for it. Then I have applied following pragma:

assign some_prod[24:0] = {15'h0,some_term1[9:0]} * /* cadence sub_arch booth */ {{10{some_term2[14]}},some_term2[14:0]};

Please note the sign extension for the 2nd term.

Neither elab nor "synthesize -to_generic -effort high" shows me an information about this setting. The results with pragma above are without pragma are the same, ie. pragma does not seem to have an effect.

set_attr user_sub_arch booth [find / -design my_design]

does not work, because the attribute can be assigned only to subdesigns.

The reason why I do this experiment in a stand-alone synthesis is that the runtime of the complete system takes ca. 6 hours.

RC is v06.20-p003_1.

Can the HDL coding style affect the mechanism of inferring synthetic operators?


Originally posted in cdnusers.org by sporadic crash
  • Cancel
  • archive
    archive over 17 years ago

    I doubt much can be done. Once you change the default it simply looks like a comment so I cannot imagine the tool doing anything about it.

    gh-


    Originally posted in cdnusers.org by grasshopper
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • archive
    archive over 17 years ago

    Grasshopper,

    thank you very much for your kind help. The setting of the said attribute is used only for inline pragmas. But despite that I can achieve the same effect by setting user_sub_arch to booth for all synthetic operators implied for multipliers [find / -subdesign mult*signed*].

    However this is not explicitly stated in Cadence documents. Cadence documents do not tell me that I have to set architecture selection of these synthetic operators. Instead, the document tells me that I just need to set the attribute to the module.

    When RTL Compiler sees an arithmetic operation during elaboration time, it infers syntetic operators. However the names of these operators (inferred submodules) are unknown by the user during elaboration time.

    Therefore the user only can know the name of the module in which the multiplier is implied, nothing more. In my case above it is "mult_kernel". Then you might think it must be OK to set the multiplier architecture for the said module (done after elaboration):

    rc:/> set_attr user_sub_arch booth [find / -subdesign mult_kern*]
    Setting attribute of subdesign 'mult_kernel_WIDTH_A5_WIDTH_B10': 'user_sub_arch' = booth

    However, when you look at the design, synthetic operator will not take Booth architecture selection.

    rc:/> foreach item [find / -subdesign *] { puts "[basename $item] -> [get_attr user_sub_arch $item]" }
    mult_kernel_WIDTH_A5_WIDTH_B10 -> booth
    mult_unsigned ->
    mux ->
    mux_59 ->
    mux_78 ->

    rc:/> foreach item [find / -subdesign *] { puts "[basename $item] -> [get_attr sub_arch $item]" }
    mult_kernel_WIDTH_A5_WIDTH_B10 -> booth
    mult_unsigned -> non_booth
    mux ->
    mux_59 ->
    mux_78 ->
    rc:/>

    Therefore the architecture will never be Booth.


    Originally posted in cdnusers.org by sporadic crash
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • archive
    archive over 17 years ago

    To my point "name of synthetic operators are unknown by user during runtime":

    This behaviour can be controlled by gen_module_prefix attribute. If we set this attribute before elaboration, then the synthetic operators generated during elaboration time will have this prefix. Very good.

    The side effect of this attribute is that any uniquification will take this prefix, too. Therefore to identify operators in your uniquified design for debugging purposes, this attribute (gen_module_prefix) must be set some other value right before any uniquificaton.


    Originally posted in cdnusers.org by sporadic crash
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
<

Community Guidelines

The Cadence Design Communities support Cadence users and technologists interacting to exchange ideas, news, technical information, and best practices to solve problems and get the most from Cadence technology. The community is open to everyone, and to provide the most value, we require participants to follow our Community Guidelines that facilitate a quality exchange of ideas and information. By accessing, contributing, using or downloading any materials from the site, you agree to be bound by the full Community Guidelines.

© 2025 Cadence Design Systems, Inc. All Rights Reserved.

  • Terms of Use
  • Privacy
  • Cookie Policy
  • US Trademarks
  • Do Not Sell or Share My Personal Information