How do you write a level-shifter strategy with set_level_shifter, and what do its key options control?
From PDVerse Low-Power Physical Design Mentor Guide · pdVerse Mentor Guide
Explanation
set_level_shifter defines a strategy for inserting level-shifting cells wherever a signal crosses a voltage boundary, specifying which ports it applies to, the direction of voltage change it should handle, and where the shifter cell should physically sit.
Implementation Walkthrough
Typically pair two strategies for a domain, one for inputs and one for outputs: set_level_shifter LS_INPUTS -domain PD_SHUTDOWN applies_to inputs -rule low_to_high -location self; set_level_shifter LS_OUTPUTS -domain PD_SHUTDOWN -applies_to outputs -rule high_to_low -location parent. Mychip mirrors this for PD_CPU with FROM_PD_CPU_LST (outputs, low_to_high, parent) and TO_PD_CPU_LST (inputs, high_to_low, self).
Command
set_level_shifter LS_INPUTS -domain_name PD_SHUTDOWN -applies_to inputs
-rule low_to_high -location selfSwitch-by-switch
-domain_name: the domain the strategy attaches to; -element (list):
restricts which ports/pins receive shifters; -applies_to inputs|
outputs|both: which boundary ports the strategy covers; threshold : minimum voltage difference required to trigger
insertion, overriding the library's own threshold; -rule
low_to_high|high_to_low|both: the voltage-transition direction the
strategy handles; -location self|parent|fanout|automatic: placement
choice; -non_shift: marks elements that should NOT get a level
shifter even where a voltage difference exists.Expected Tool Behavior
create_mv_cells inserts a level-shifter cell on each qualifying boundary port, oriented for the direction specified by -rule and sited based on -location.
Example
PD_SHUTDOWN's LS_INPUTS strategy shifts incoming low-voltage signals up as they enter the domain (self); LS_OUTPUTS shifts outgoing signals down after they leave (parent).
Common Mistake
Mismatching -rule with the actual voltage relationship between domains -- e.g. specifying low_to_high on a domain that is actually the highervoltage side -- leaving the real crossing unshifted.
Likely Error Or Warning
This topic is not covered in enough depth here to give a fully reliable answer for a set_level_shifter-specific error string; general levelshifter insertion failures surface via analyze_mv_design as MV-1108 ('Cannot insert level shifter... because the path does not have an effective level shifter strategy') or MV-1104.
Debugging Approach
Run analyze_mv_design -level_shifter [-through net_or_pin] to get a diagnostic report of domains, related supplies, and any insertion failures for a given crossing.
Continue learning free
Get a practical low-power chapter
Receive the existing “Low Power and Multivoltage Fundamentals” PDF chapter and its download link by email.
Continue practising