Home > Community > Blogs > Digital Implementation > how to create a repeating power switch pattern with addpowerswitch
 
Login with a Cadence account.
Not a member yet?
Create a permanent login account to make interactions with Cadence more convenient.

Register | Membership benefits
Get email delivery of the Digital Implementation blog (individual posts).
 

Email

* Required Fields

Recipients email * (separate multiple addresses with commas)

Your name *

Your email *

Message *

Contact Us

* Required Fields
First Name *

Last Name *

Email *

Company / Institution *

Comments: *

How to Create a Repeating Power Switch Pattern with addPowerSwitch

Comments(0)Filed under: Digital Implementation, addpowerswitch, low power

I mentioned in my last post that I'd been having lots of fun with power switches lately. One thing I learned how to do was to set up a regular pattern for my switch columns. My first stop for learning something new is always the documentation, but there are so many different options to the addPowerSwitch command that I asked one of our experts, Richard Chou, for help. Setting up a pattern is really quite easy!

Here is a basic addPowerSwitch command for creating switch columns with just one type of cell. This will put the same switch buffer cell on every row in the column:

addPowerSwitch -column \
                         -offPD PD_A \
                         -switchModuleInstance top_sw_mod \
                         -enablePinIn sw_en_in \
                         -enablePinOut sw_en_out \
                         -enableNetIn sw_in\[0\] \
                         -enableNetOut sw_out \
                         -leftOffset 8.4 \
                         -bottomOffset 0.0 \
                         -horizontalPitch 50.96 \
                         -globalSwitchCellName SWITCHBUFX16

Now, let's say you found that the switches are taking up a bit too much real estate or you need some more powerful switches to minimize IR-drop. Instead of the same switch buffer cell on every row in the column, you want every fourth row to be a switch buffer cell, and the rows in between to be non-buffer switch cells, which are smaller and source more current. This will set up a repeating pattern, starting at the bottom, of one switch buffer cell followed by three non-buffer switch cells:

addPowerSwitch -column \
                         -offPD PD_A \
                         -switchModuleInstance top_sw_mod \
                         -enablePinIn sw_en_in \
                         -enablePinOut sw_en_out \
                         -enableNetIn sw_in\[0\] \
                         -enableNetOut sw_out \
                         -leftOffset 8.4 \
                         -bottomOffset 0.0 \
                         -horizontalPitch 50.96 \
                         -globalSwitchCellName {SWITCHBUFX16 SWITCHX16} \
                         -globalPattern {SWITCHBUFX16 SWITCHX16 SWITCHX16 SWITCHX16}


Finally, let's say you had a really complicated pattern you wanted to implement. Something like one switch buffer, three switch, one switch buffer, two switch, two switch buffer, three switch. (Hey, it could happen!) That -globalPattern argument is going to get pretty long and unreadable, right? Well, it doesn't have to. You can assign a cell id to each type of cell you're using, then use these cell ids as a kind of shorthand in creating the pattern, like this:

addPowerSwitch -column \
                         -offPD PD_A \
                         -switchModuleInstance top_sw_mod \
                         -enablePinIn sw_en_in \
                         -enablePinOut sw_en_out \
                         -enableNetIn sw_in\[0\] \
                         -enableNetOut sw_out \
                         -leftOffset 8.4 \
                         -bottomOffset 0.0 \
                         -horizontalPitch 50.96 \
                         -globalSwitchCellName {{SWITCHBUFX16 SB1} {SWITCHX16 S1}} \
                         -globalPattern {SB1 S1 S1 S1 SB1 S1 S1 SB1 SB1 S1 S1 S1}


I think you could also do this, but the previous example looks cleaner in a script, at least to my eye:

                         -globalPattern {SB1 {S1 * 3} SB1 {S1 * 2} {SB1 *2} {S1 * 3}}

Anyone out there have some interesting switch patterns they've been playing with? Let me know in the comments.

Comments(0)

Leave a Comment


Name
E-mail (will not be published)
Comment
 I have read and agree to the Terms of use and Community Guidelines.
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.