Contents

  1. Abstract
  2. Introduction
  3. Case 1, All output ports pull down
  4. Case 2, Add different isolation type
  5. Case 3, Insert isolation gates to new output ports only

Insert Isolation Gates

Abstract

In low power design, power-off modules have their output ports isolated to comply power flow spec. The isolation gate can be 'AND' type or 'NAND' type, depending on the signal's required state in power-off mode. The use case shows how to add isolation cells to a power-off module's output ports in different scenarios.

Introduction

Isolation cells are inserted on all output ports. The isolation type is 'AND' or 'NAND'. The enable signal has level high to enable the output signals of the block.

There are two choices for isolation cells location. They can be inside the power off block for the IP re-usability. Or they can be outside of the power off block. Physical wise, it's easier to implement outside isolation gates, since Enable path and isolation gates can stay in always on domain as the top level.

Case 1, All output ports pull down

undo_eco; 
setup_eco("pd_iso"); # Setup ECO name so that new added instances/wires have the prefix
read_library("libdir/hvt.lib", "libdir/rvt.lib");
read_design("-imp", "netdir/netlist.v");
set_top("parent_mod"); # The parent module that has the power-off instance
my @outpins = get_pins("-output", "u_power_down_inst"); 
foreach my $pin (@outpins){
  # Make sure the pin is not output floating, otherwise dont do the following
  # AND's A pin connects to the original wire, B pin connects to power_up signal
  change_pin($pin, "AND2X1", "", ".A(-),.B(power_up)"); 
}
write_verilog("iso_netlist.v");

Case 2, Add different isolation type

undo_eco; 
setup_eco("pd_iso"); # Setup ECO name so that new added instances/wires have the prefix
read_library("libdir/hvt.lib", "libdir/rvt.lib");
read_design("-imp", "netdir/netlist.v");
set_top("parent_mod"); # The parent module that has the power-off instance
my @outpins = get_pins("-output", "u_power_down_inst"); 
foreach my $pin (@outpins){
  my $isolation = "AND2X1";
  # Assume the ports have naming convention to tell the power-off state, like '*_stay_1', or '*_stay_0'
  if($pin =~ m/stay_1/){
     $isolation = "NAND2X1";
  }
  # AND's A pin connects to the original wire, B pin connects to power_up signal
  change_pin($pin, $isolation, "", ".A(-),.B(power_up)"); 
}
write_verilog("iso_netlist.v");

Case 3, Insert isolation gates to new output ports only

DFT flow may add new output ports to the power-off module. Functional ECO may add new output ports without adding isolation gate. The script should check if output ports have already isolation gates inserted.

undo_eco; 
setup_eco("pd_iso"); # Setup ECO name so that new added instances/wires have the prefix
read_library("libdir/hvt.lib", "libdir/rvt.lib");
read_design("-imp", "netdir/netlist.v");
set_top("parent_mod"); # The parent module that has the power-off instance
my @outpins = get_pins("-output", "u_power_down_inst"); 
foreach my $pin (@outpins){
  my $con_net = get_net_of($pin);
  my @conns = get_conns("-load", $con_net);
  # If the port has isolation gate added already, skip it
  if(scalar(@conns)==1 && $conns[0][0] =~ m/pd_iso_/){
     next;
  }
  # AND's A pin connects to the original wire, B pin connects to power_up signal
  change_pin($pin, "AND2X1", "", ".A(-),.B(power_up)"); 
}
write_verilog("iso_netlist.v");

Follow us:
NanDigits.com US | NanDigits.cn China
© 2024 NanDigits Design Automation. All rights reserved.