Tuesday 27 September 2016

Does the state defined on Supply Set propagates to associated supply nets?

We defined a state on supply set through add_power_state command in UPF. Also the supply is having different function i.e power,ground,nwell,pwell . Let us understand this by example.


create_supply_set SS -function {power VDD} -function {ground VSS}
add_power_state SS -state {ON  –simstate NORMAL -supply_expr {(power == {FULL_ON 0.8})}

create_pst pst_1 -supplies {VDD}
add_pst_state  s1 -pst pst_1 -state {ON}


Typically many user write their UPF in above way . State "ON" is defined on Supply Set "SS" . But user uses this state name for "VDD" in PST table which associated with Supply Set "SS".

This is wrong usage as per UPF LRM. 

State which is defined on Supply Set is limited to Supply set only and not supposed to be propagated to associated supply net.

Now the question is why state should not be allowed to propagates on supply nets.

consider a below case.

create_supply_set ss_top
create_supply_set ss_pd1 -function {power ss_top.power}

add_power_state ss_top -state {ON  –simstate NORMAL -supply_expr {(power == {FULL_ON 0.8})}
add_power_state ss_pd1 -state {ON  –simstate NORMAL -supply_expr {(power == {FULL_ON 1.0})}

Here  ss_pd1.power is connected to ss_top.power.

If we allow propagating supply set state to supply nets . We have below issue .

With add_power_state used above user is trying to create state named "ON" with value 0.8 and 1.0 on same net. This is not possible as same net can not have different voltage value with same state name.

So this issue will get resolved if we do not propagates the state names to associated supply nets.

Tuesday 20 September 2016

What is lower domain boundary concept in UPF?

Idea of lower domain boundary is introduced to allow adding isolation at top level for macro/ip in which directly you can not add isolation during SOC level integration.


Consider a below case to understand this .




Here for the TOP level domain only TOP o/p port is considered as power domain boundary port if lower domain boundary concept is not there. But with lower domain boundary support o/p port of PD1 is also visible in TOP domain and it is known as lower domain boundary port for TOP domain.


Here PD1 o/p is connected to TOP o/p port. Now in order to place isolation cell b/w PD1 o/p port and TOP o/p port , In usual way we write below strategy.

set_isolation  iso_1 -domain PD1 -elements {CORE1/out} -location parent

But if you do not have have the access of UPF file of PD1 domain , considering it is so,me third party IP. So in that case the who integrates this IP in top level has to write isolation strategy as below.


set_isolation  iso_1 -domain TOP -elements {CORE1/out} -location self

Tuesday 13 September 2016

What is location fanout in UPF ?

Certain UPF command has -location switch . i.e set_isolation , set_level_shifter . Again -location can be "fanout".

Consider a below example to understand that how isolation cell will be inserted/placed by synthesis tool when -location fanout is specified .

Here domain PD1 domain o/p signal is going to two different domain PD2 and PD3 .So this is a case of fanout .

Now if user has isolation strategy on PD1 domain with -location fanout , Isolation cell will be inserted as shown in figure under Netlist option (named as ISO) .


UPF:

set_isolation iso_1 -domain PD1 -applies_to outputs -location fanout


RTL:






Netlist:



What is the use of set_retention_elements command from user prospective?

UPF has command set_retention_elements . This command is used to create list of signals/register which are supposed to be retained . This list will be used in set_retention -elements command.

Now the question is if we are directly able to specify the signal/register name in set_retention -elements command , why we need to create the list using set_retention_elements command and then using it in set_retention -elements .

Answer to this question is that when any third party vendor is creating an IP for any block and developing UPF for the same . At that time he does not have the information that if this block will be shutdown when used in SOC level by end user. So what he will do is just give the list of signal/register which are important and need to be retained by the user if domain in which this block will be placed is shutdown . So this list he will provide using set_retention_elements command .

Now if end user need this block to be in switchable domain , he need to write retention strategy for the elements specified in the list created by set_retention_elements . This way end user need not to analyse the internal of the IP block. And will serve the purpose of retaining important registers as well.

Also if the end user does not know the critical registers he has to retain all registers in the IP. Which can lead to area overhead and which might not be be required as all the registers might not be critical to be retained.


Example:

RTL:

module dut (input d,clk,rst, output reg q,q1) ;

always @ (posedge clk) begin
  if (!rst)
       q <= 0;
 else
      q <= d;
end

always @ (posedge clk) begin
  if (!rst)
       q1 <= 0;
 else
      q1 <= d;
end
endmodule

UPF:

set_retention_elements ret_list -elements { q q1}
set_retention ret_1 -domain TOP -elements {ret_list}



Monday 12 September 2016

What is the use of logic port/net created using UPF command ?

UPF LRM has below commands for creating logic port/net and connect them . Question comes to user that what is the use of creating logic(design) port/net through UPF command.

cretae_logic_port
create_logic_net
connect_logic_net

Generally this is mainly used for creating control port/net used in the other UPF commands.

Let us take one example for isolation.

At RTL level let's say user is writing a isolation strategy in his UPF. Now user does not have the isolation control signal defined in the design . So in alternative way he can define isolation control signal using cretae_logic_net command and then use it as isolation signal in isolation strategy. So at the time of Netlist creation , Synthesis tool will create a port/net in actual design with the same name.
This way user can avoid defining UPF control signals in design at RTL level.

RTL:

module dut (in1,in2,out);
input in1,in2;
output out;

assign out = in1 & in2;

endmodule

UPF:

create_power_domain TOP
create_logic_port iso_en
create_logic_net iso_en
connect_logic_net iso_en -ports iso_en

set_isolation iso_1 -domain TOP  -clamp_value 0
set_isolation_control iso_1 -domain TOP -isolation_signal {iso_en} -isolation_sense low -location self

Netlist :

module dut (in1,in2,out,iso_en);
input in1,in2;
input iso_en;
output out;

AND (in1,in2,w1);
ISO (w1,iso_en,out1) ;

endmodule