150 likes | 446 Views
UPF examples. Judith Richardson. NXP Semiconductors, Corporate I&T, Design Technology and Flows. August 21 , 2007. Simple re-use example for isolation. Five IP blocks arthur mervyn percy tom walter Each IP is instanced once Four domains
E N D
UPF examples Judith Richardson NXP Semiconductors, Corporate I&T, Design Technology and Flows August 21, 2007
Simple re-use example for isolation Five IP blocks arthur mervyn percy tom walter Each IP is instanced once Four domains walter and mervyn are in one domain, the other instances are in their own separate domains. Each domain can be independently switched off
The five boxes LEF and UPF for each IP, Verilog and DEF for placement. Purple indicate nets leaving selected instance, black for nets entering. Output from percy is driving both arthur and walter. One of the inputs to walter is tri-state, driven by arthur or tom.
Setting Scope #Will this generic set_scope work in stand-alone and hierarchical contexts? set originalScope [set_scope .] puts "In tom.upf : original scope $originalScope“ … # Re-set to original scope set leaveScope [set_scope $originalScope] puts "In tom.upf : leaving scope $leaveScope"
Sourcing vs loading #The top module isn't really instanced, so use its module name? set_design_top p1801 # Source the UPF file for tom set originalScope [set_scope tom] puts "value in originalScope before sourcing tom.upf is $originalScope" source tom.upf # The value in originalScope will have been corrupted during loading tom.upf puts "value in originalScope after sourcing tom.upf is $originalScope" # Does this set the scope back to the top? set originalScope [set_scope /] puts "value in originalScope after set_scope / is $originalScope" # Load the UPF file for arthur load_upf arthur.upf -scope arthur # The value in originalScope will NOT have been corrupted during loading arthur.upf puts "value in originalScope after loading arthur.upf is $originalScope"
Wildcards(1) From arthur.upf we have set_isolation walter_inputs -domain PD -isolation_power_net VDD -isolation_ground_net GND \ -elements {WALTER\[9\] WALTER\[8\] WALTER\[7\] WALTER\[6\] WALTER\[5\] WALTER\[4\] WALTER\[3\] WALTER\[2\] WALTER\[1\] WALTER\[0\]} \ -clamp_value 1 -applies_to inputs Could we use -elements {WALTER\[*} rather than enumerate? Can’t use WALTER*, which would also match WALTEROUT[9:0] (which happen to be outputs) on this block Can’t use WALTER[* because Tcl will complain about the “[“ Can we use WALTER and have that match the full bus? Can we use WALTER\[9:0\]?
Wildcards(2) Suppose we were writing that at the chip level in p1801.upf set_isolation arthur_walter_inputs -domain PD -isolation_power_net VDD -isolation_ground_net GND \ -elements {arthur/WALTER\[9\] arthur/WALTER\[8\] arthur/WALTER\[7\] arthur/WALTER\[6\] arthur/WALTER\[5\] \ arthur/WALTER\[4\] arthur/WALTER\[3\] arthur/WALTER\[2\] arthur/WALTER\[1\] arthur/WALTER\[0\]} \ -clamp_value 1 -applies_to inputs Could we use -elements {arthur/WALTER\[*} ? Could we use wildcards for instance names ? Could we use wildcards to match more than one level of hierarchy ? What happens when the instance name contains the “/” character (e.g. when part of the hierarchy has been flattened) ?
Wildcards(3) Possible procs get_module_instances moduleName {–matching string} – returns list of names of all instances in module, optionally matching string get_domain_instances domainName {–matching string} – returns list of names of all instances in domain, optionally matching string. Would this return all the leaf instances throughout the entire hierarchy? get_ports moduleName {-inputs|-outputs|both} {–matching string} – returns list of names of all ports in module, optionally matching string, optionally matching direction get_pins instanceName {-inputs|-outputs|both} {–matching string} – returns list of names of all pins on instance (allow hierarchical name), optionally matching string, optionally matching direction
Multiple destinations(1) Problem with isolation specified for percy - the percyfan net goes to arthur and walter, which may be switched off separately. In the UPF for percy we have # The safe condition for the PERCYFAN* outputs is latch set_isolation percyfan_outputs -domain PD -isolation_power_net VDD \ -isolation_ground_net GND \ -elements {PERCYFAN\[9\] PERCYFAN\[8\] PERCYFAN\[7\] PERCYFAN\[6\] PERCYFAN\[5\] PERCYFAN\[4\] PERCYFAN\[3\] PERCYFAN\[2\] PERCYFAN\[1\] PERCYFAN\[0\]} \ -clamp_value latch -applies_to outputs Now we want to specify the set_isolation_control for this rule We can't specify a subset of the elements of the original set_isolation (all the elements are driving both destinations) And it would be an error to create 2 new set_isolation rules using the same set of elements in the percy/PD domain.
Multiple destinations(2) Is it valid to have this set of commands in the top UPF? set_isolation percy2arthur -domain percyPD -isolation_power_net percy/VDD \ -isolation_ground_net percy/GND \ -elements {arthur/PERCY\[9\] arthur/PERCY\[8\] arthur/PERCY\[7\] arthur/PERCY\[6\] arthur/PERCY\[5\] arthur/PERCY\[4\] arthur/PERCY\[3\] arthur/PERCY\[2\] arthur/PERCY\[1\] arthur/PERCY\[0\]} \ -clamp_value 0 -applies_to inputs set_isolation_control percy2arthur -domain percy/PD -isolation_signal arthurOff -location self set_isolation percy2walter -domain percyPD -isolation_power_net percy/VDD \ -isolation_ground_net percy/GND \ -elements {walter/PERCY\[9\] walter/PERCY\[8\] walter/PERCY\[7\] walter/PERCY\[6\] walter/PERCY\[5\] walter/PERCY\[4\] walter/PERCY\[3\] walter/PERCY\[2\] walter/PERCY\[1\] walter/PERCY\[0\]} \ -clamp_value 0 -applies_to inputs set_isolation_control percy2walter -domain percy/PD -isolation_signal walterOff -location self
Merging domains(1) What do we have to do to ensure the primary power and ground nets for walter and mervyn are shared so that we can merge them? To allow the tracing when the nets aren't already in the RTL, we need to create top level power/ground supply nets and connect them to the supply ports in the existing domains. And to create supply nets we have to first create a domain for them to be in. create_power_domain dummy create_supply_net TOPVDD -domain dummy create_supply_net TOPGND -domain dummy connect_supply_net TOPVDD -ports {mervyn/VDD walter/VDD} connect_supply_net TOPGND -ports {mervyn/GND walter/GND} # Do we also need to have dummy in the list of domains to merge? merge_power_domains PDcombo -power_domains {mervyn/PD walter/PD}
Merging domains(2) When the merge_power_domains happens that puts mervyn and walter in the same domain what happens to the isolation rule mervyn_inputs from walter.upf ? Both mervyn and walter had "set_isolation tom_outputs" commands, but with different -clamp_value. What happens with these rules when the domains are merged obeying the statement "All strategies and mappings defined for the list of power domains shall be applied prior to the merge"? Do the rules still exist ? With a prepended scope name mervyn/tom_outputs Or original (scoped) domain name mervyn/PD/tom_outputs Or is there now just one rule tom_outputs Or what ? I think it has to be mervyn/PD/tom_outputs to ensure uniqueness set_isolation_control mervyn/PD/tom_outputs -domain PDcombo -isolation_signal tomOff set_isolation_control walter/PD/tom_outputs -domain PDcombo -isolation_signal tomOff