upf低功耗的一个简单的例子

一.结构描述

在这里插入图片描述
这里是一个uart_top模块里面例化了两个uart,分别给两个模块给了power_switch,用于电源控制,对这两个模块分别进行隔离关断来写一个简单的upf。

二.代码分析

1.电压域

### create power domain ###
create_power_domain {uart_top}
create_power_domain {uart_1} -elements {u_uart_1}
create_power_domain {uart_2} -elements {u_uart_2}

注意点1:电压域的中这里没有用到scope的内容,create_power_domain {uart_top} 这表达的含义就是uart_top为顶层的意思,不需要使用scope。
注意点2:代码第二行中的{uart_1}是取的名字,是可以随意取的,不影响代码。

2.供电端口及网络

### power supply network ###
create_supply_port {VDD}
create_supply_net  {VDD} -domain {uart_top}
connect_supply_net {VDD} -ports  {VDD}

create_supply_port {VSS}
create_supply_net  {VSS} -domain {uart_top}
connect_supply_net {VSS} -ports  {VSS}

create_supply_net  {VDD}   -domain {uart_1} -reuse
create_supply_net  {VSS}   -domain {uart_1} -reuse
create_supply_net  {VDD_1} -domain {uart_1}

create_supply_net  {VDD}   -domain {uart_2} -reuse
create_supply_net  {VSS}   -domain {uart_2} -resue
create_supply_net  {VDD_2} -domain {uart_2} 

### specfiy the primary supply ###
set_domain_supply_net {uart_top} -primary_power_net {VDD}   -primary_ground_net {VSS}
set_domain_supply_net {uart_1}   -primary_power_net {VDD_1} -primary_ground_net {VSS}
set_domain_supply_net {uart_2}   -primary_power_net {VDD_2} -primary_ground_net {VSS} 

注意点1:create_supply_port 为定义端口,create_supply_net为定义线,connect_supply_net…ports是线和端口连起来,这里VDD用了两次,一个是端口名字,一个是线的名字。
注意点2:VDD是可以复用的,复用的方法为-reuse。
注意点3:定义好端口,线,连上之后,需要使用set_domain_supply_net明确供电线和地线。

3.电源开关

### power switch ###
create_power_switch uart1_sw \
	-domain				{uart_1} \
	-input_supply_port 	{vin VDD} \
	-output_supply_port {vout VDD_1} \
	-control_port		{swctrl sw_ctrl1} \
	-on_state			{sw1_on vin {!swctrl}}

create_power_switch uart2_sw \
	-domain				{uart_2} \
	-input_supply_port 	{vin VDD} \
	-output_supply_port {vout VDD_2} \
	-control_port		{swctrl sw_ctrl2} \
	-on_state			{sw2_on vin {!swctrl}}

注意点1:\之后不要跟空格,不然仿真中会报错
注意点2:sw_ctrl1和sw_ctrl2需要在rtl中进行wire定义并assign赋值,这里vin{!swctrl}所以值为0时候为打开电源开关。

4.电源状态描述

### define power state ###
add_port_state {VDD}  -state {TOF_HV 1.0}  -state {TOP_OFF off}
add_port_state {VSS}  -state {GND 0.0}
add_port_state {uart1_sw/vout} -state {VDD_1_HV 1.0} -state {VDD_1_OFF off}
add_port_state {uart2_sw/vout} -state {VDD_2_HV 1.0} -state {VDD_2_OFF off}

### define port state table for system ###
create_pst {uart_pst} -supplies {VDD VDD_1 VDD_2 VSS}
add_pst_state {add_on1} -pst {uart_pst} -state {TOP_HV  VDD_1_HV  VDD_2_HV  GND}
add_pst_state {add_on2} -pst {uart_pst} -state {TOP_HV  VDD_1_HV  VDD_2_OFF GND}
add_pst_state {add_on3} -pst {uart_pst} -state {TOP_HV  VDD_1_OFF VDD_2_HV  GND}
add_pst_state {add_on4} -pst {uart_pst} -state {TOP_OFF VDD_1_HV  VDD_2_HV  GND}

注意点:add_port_state{uart1_sw/vout}这句话代表的就是VDD_1的值,但是不能直接用VDD_1,因为,VDD_1是一根线,not port,所以直接用会报错。

5.隔离单元

### define isolation constranints ###
set_isolation {uart1_iso_out} \
	-domain {uart_1} \
	-clam_value 0 \
	-applies_to outputs \
	-isolation_power_net {VDD} \
	-isolation_ground_net {VSS}

set_isolation {uart1_iso_out} \
	-domain uart_1 \
	-isolation_signal {uart_iso_on_1} \
	-isolation_sense low \
	-location self
	
set_isolation {uart2_iso_out} \
	-domain {uart_2} \
	-clam_value 0 \
	-applies_to outputs \
	-isolation_power_net {VDD} \
	-isolation_ground_net {VSS}

set_isolation {uart2_iso_out} \
	-domain uart_2 \
	-isolation_signal {uart_iso_on_2} \
	-isolation_sense low \
	-location self

注意点:uart_iso_on_1和uart_iso_on_2需要在rtl中定义wire类型并赋值,低电平表示隔离有效。

三.仿真

仿真参考之前写的文章:upf+vcs仿真

四.拓展阅读

推荐一:低功耗设计——基于UPF进行设计
推荐二:UPF基本概念学习

五.VCLP调试

问题(1)

add_pst_state {add_on4} -pst {uart_pst} -state {TOP_OFF VDD_1_HV  VDD_2_HV  GND}

这个状态虽然在vcs联合仿真中没有报错,但是VCLP中会显示worring,去掉。
问题(2)
-location self 应该改为-location parent。
顶层用self,其他用parent。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

马志高

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值