UPFを用いたPG設計

  • Unified Power Formatによる記述とDesign Compiler、IC Compiler上で使用する際のメモ
  • シフタを実装例に取る 高速ライブラリ:CS203SN
  • 無理矢理多電力ドメインにするため、以下のように意味のないwrapperを設ける

shift_unit.v

   …
   input               sleepCon;
   output [`BitBus] shift_out;
   
   m_shift_unit m_shift_unit( .shift_out(shift_out), .shift_a(shift_a), .shift_b(shift_b), .aluop(aluop) );
   …

shift_unit.upf

  • Low Power ~ Methodという本にある記述をそのまま書いてもなぜかエラー吐きまくった
create_power_domain PD_TOP -include_scope
create_power_domain PD_SHI -elements {m_shift_unit}

create_supply_net VDD -domain PD_TOP
create_supply_net VDD -domain PD_SHI -reuse

create_supply_net VSS -domain PD_TOP
create_supply_net VSSV -domain PD_TOP
create_supply_net VSSV -domain PD_SHI -reuse

set_domain_supply_net PD_TOP -primary_power_net VDD -primary_ground_net VSS
set_domain_supply_net PD_SHI -primary_power_net VDD -primary_ground_net VSSV

create_supply_port VSS -domain PD_TOP -direction in
create_supply_port VDD -domain PD_TOP -direction in

connect_supply_net VDD -ports {VDD}
connect_supply_net VSS -ports {VSS}

create_power_switch SHI_SW -domain PD_TOP \
         -output_supply_port {SW_OUT VSSV} \
         -input_supply_port {SW_IN VSS} \
         -control_port {SW_CTRL sleepCon} \
         -on_state {PW_ON SW_IN {SW_CTRL == 1}}

set_isolation SHI_ISO -domain PD_SHI \
         -isolation_power_net VDD -isolation_ground_net VSS \
         -clamp_value 0 \
         -applies_to outputs
set_isolation_control SHI_ISO -domain PD_SHI \
         -isolation_signal sleepCon \
         -isolation_sense low \
         -location parent

add_port_state VDD \
         -state {VDD_NORM 0.90000}
add_port_state SHI_SW/SW_OUT \
        -state {VSSV_NORM 0.00000}
add_port_state SHI_SW/SW_OUT \
        -state {VSSV_OFF off}
add_port_state VSS \
        -state {VSS_NORM 0.00000}

create_pst TOP_PST -supplies [list SHI_SW/SW_OUT VDD VSS]
add_pst_state SHI_ON -pst TOP_PST -state {VSSV_NORM VDD_NORM VSS_NORM}
add_pst_state SHI_OFF -pst TOP_PST -state {VSSV_OFF VDD_NORM VSS_NORM}
  • 以下簡単な説明

電力ドメインの作成

  • PD_TOP 通常の電力ドメイン、-include_scopeですべての要素が含まれる
  • PD_SHI PG対象の電力ドメイン、m_shift_unitの階層を指定
create_power_domain PD_TOP -include_scope
create_power_domain PD_SHI -elements {m_shift_unit}

供給ネットの作成と設定

  • VDD,GND,VGNDを作る
  • 2つ以上のドメインに跨る場合は -reuse
  • 各ドメインの電源、グラウンドの供給ネットを指定
create_supply_net VDD -domain PD_TOP
create_supply_net VDD -domain PD_SHI -reuse

create_supply_net VSS -domain PD_TOP
create_supply_net VSSV -domain PD_TOP
create_supply_net VSSV -domain PD_SHI -reuse

set_domain_supply_net PD_TOP -primary_power_net VDD -primary_ground_net VSS
set_domain_supply_net PD_SHI -primary_power_net VDD -primary_ground_net VSSV

供給ポートの作成と接続

  • TOPのドメインに供給ポートを作成し、前で作成したネットと接続
create_supply_port VSS -domain PD_TOP -direction in
create_supply_port VDD -domain PD_TOP -direction in

connect_supply_net VDD -ports {VDD}
connect_supply_net VSS -ports {VSS}

Power Switchの設定

  • パワースイッチがどの電力ドメインか、inputとoutputのネット(順番注意)を指定
  • 制御信号を指定し、power-on時の条件を書く
create_power_switch SHI_SW -domain PD_TOP \
         -output_supply_port {SW_OUT VSSV} \
         -input_supply_port {SW_IN VSS} \
         -control_port {SW_CTRL sleepCon} \
         -on_state {PW_ON SW_IN {SW_CTRL == 1}}

Isolation Cellの設定

  • set_isolationで固定する値(0か1)、inputかoutputのどっちで固定するか指定.
  • set_isolation_controlで制御信号など 
  • この場合、m_shift_unitの出力に対してPD_SHIの親階層であるPD_TOPでISOセルを挿入する. sleepCon信号がlowの時、値を0に固定するようになっている
  • 上記の条件のISOセルをライブラリから勝手に見つけてくれる(自分で指定も可能)
set_isolation SHI_ISO -domain PD_SHI \
         -isolation_power_net VDD -isolation_ground_net VSS \
         -clamp_value 0 \
         -applies_to outputs
set_isolation_control SHI_ISO -domain PD_SHI \
         -isolation_signal sleepCon \
         -isolation_sense low \
         -location parent

Power State Tableの作成

  • pstとは設計を実行する場合に取りうる状態の組み合わせを定義. 合成や最適化に使われる
  • まず存在するポートの取りうる状態をすべて書く(VDD、VSS、PSのoutput). PGなのでPSのoutputはON/OFFの2状態
  • pstを作成し、取りうる状態の組み合わせを全部追加していく
add_port_state VDD \
         -state {VDD_NORM 0.90000}
add_port_state SHI_SW/SW_OUT \
        -state {VSSV_NORM 0.00000}
add_port_state SHI_SW/SW_OUT \
        -state {VSSV_OFF off}
add_port_state VSS \
        -state {VSS_NORM 0.00000}

create_pst TOP_PST -supplies [list SHI_SW/SW_OUT VDD VSS]
add_pst_state SHI_ON -pst TOP_PST -state {VSSV_NORM VDD_NORM VSS_NORM}
add_pst_state SHI_OFF -pst TOP_PST -state {VSSV_OFF VDD_NORM VSS_NORM}
  • dcにはupfのview modeがある(誰も使わないでしょうけど)

論理合成

  • compile前に以下のコマンドを加える
load_upf shift_unit.upf
set_voltage 0  -min 0  -object_list VSS
set_voltage 0  -min 0  -object_list VSSV
set_voltage 0.9  -min 0.9  -object_list VDD
  • UPFの場合、complieというコマンドは使えない. かわりにcompile_ultraを. オプションがcompileと違ったりするので自分の環境に応じてmanで確認
compile_ultra -オプション
  • 最後に電力評価ツールやICC用のupfファイルを吐き出す
save_upf SHIFT_UNIT.upf

配置配線

前準備

  • ICCでUPF使う場合、論理ライブラリ(*.db)に電源ピンの情報を追加する必要がある. milkywayを逆利用
  • dc_shellかicc_shellのどっちかで次を実行. core、 nscanあたり. isoはできなかった(特別セルだから?後で問題になる)
add_pg_pin_to_db cs203sn_uc_core_*.db -mw_library_name CS203SN -output pgpin_cs203sn_uc_core_*.db
add_pg_pin_to_db cs203sn_uc_nscan_*.db -mw_library_name CS203SN -output pgpin_cs203sn_uc_nscan_*.db

Place & Route

  • 以下普通のフローと違うところだけ述べる
  • read_sdcの前にupfを読み込む
load_upf SHIFT_UNIT.upf
  • 電源グラウンドの接続は簡単だが、ISOセルは論理セルにピンを付けれなかったので指定する
  • 配置配線後とかもderive_pg_connection -reconnectだけやればいい
derive_pg_connection -create_nets
derive_pg_connection -reconnect
derive_pg_connection -power_net {VDD} -power_pin {VDD} -cells {*ISO} 
derive_pg_connection -ground_net {VSS} -ground_pin {VSS} -cells {*ISO}
  • 電力の位置を決める. 今回PD_TOPとPD_SHIしかないのでPD_SHIのみ指定すればよく、この範囲の中にPD_SHIのセルが、この外にISOセルが配置される
  • -guard_band_x(y)は電力ドメインの周りにblockageみたいなものを作れる
create_voltage_area -power_domain PD_SHI -coordinate {10.5 8.1 55 58.5} -guard_band_x 0 -guard_band_y 0 -is_fixed
  • 使用するスイッチセルを指定. 何個でも可能
  • 配置するとき一番最初のものが選ばれるが、のちのち最適化の際この中のセルでリサイズされる
map_power_switch SHI_SW -domain PD_TOP -lib_cells {SC27RFPSTAPXH1 SC27RFPSTAPXA1 SC27RFPSTAPXB1 SC27RFPSTAPXC1 SC27RFPSTAPXD1 SC27RFPSTAPXF1}
  • スイッチを入れる. create_power_switch_arrayやcreate_power_switch_ringを使う
  • arrayの場合、以下のように入れられる. 詳しくはman(ry
 create_power_switch_array -lib_cell {SHI_SW} \
                -x_increment 40 -y_increment 1.8 \
                -start_row 0 \
                -start_column 0 \
                -bounding_box {3.5 8.1 6.9 58.5} \
                -prefix "RINGL" \
                -snap_to_row_and_tile \
                -orientation FS \
                -respect hard_blockage
  • スイッチのポートとSLEEPCONを結びつける
  • connect_power_switchのほうは-modeでdaisy-chainかhigh-fanoutか指定できるが、PSセルによっては使えない
connect_power_switch -mode hfn -source {SLEEPCON} -port_name {MTE} -voltage_area PD_TOP -verbose
または
connect_pin -from {SLEEPCON} -to {RING*/MTE}
  • 配置後にPSセルの最適化
  • map_power_switchで指定したセルの抵抗を指定してから、基準となるIR Dropを決めておく

 
tapeout_enter/upf.txt · 最終更新: 2013/07/05 08:38 (外部編集)
 
特に明示されていない限り、本Wikiの内容は次のライセンスに従います:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki