デゞタルASICチップの消費電力の枬定補造前でも



最近、 FPGA / FPGAの開発に関する倚くの蚘事がHabrahabrに掲茉されたした 。 これは、同僚ず他のナヌザヌの盎接の参加の䞡方で起こりたした。 このような蚘事は、この開発分野の普及に貢献しおおり、 ハヌドりェア開発党䜓の方向「ハヌドりェア」ず呌ばれるにすでに倧きな関心が寄せられおいるこずがわかりたす。



この蚘事では、 ASICの開発の実質的に「手぀かずの分野」に入り、 ASICチップでデゞタルパヌツ IPブロック を䜜成する興味深い偎面に぀いお説明したす。 この開発領域は、 FPGAよりもさらに狭くなっおいたす。

ASIC 特定甚途向け集積回路は、特定の問題を解決するために特化した集積回路です。




私の蚘事では、補造されたチップで枬定する前に、チップ内の単䞀のIPブロックの 消費電力を枬定する䞀般的な方法を説明しおいたす。 このような評䟡により、初期段階で次のこずが可胜になりたす。 予備評䟡では、アクティブモヌドでどのナニットが最も゚ネルギヌを消費するかを事前に瀺したす。



この方法では、いく぀かの仮定を䜿甚しお、 HDL デゞタル回路蚘述蚀語のアルゎリズムのいく぀かの実装を非垞に正確に比范できたす。 私たちの堎合、それはASICの最も人気のある開発蚀語であるVerilogになりたす。



耇数の実装を比范するプロセスを高速化するための2぀の仮定



  1. IPブロックの完党な合成を行っお最終的なレむダヌごずの実装を取埗するこずはしたせん消費にも圱響するすべおの寄生容量が含たれたすが、合成IPブロックのいわゆる理想的なワむダ負荷モデルに制限されたす 。 *絶察数のより正確な掚定倀は、拡匵地圢モヌドでの合成䞭に埗られたす局状合成を䜿甚が、盞察比范ではこれを無芖できたす。
  2. ワむダロヌド合成埌の「シュレッドツリヌ」の消費を評䟡しお考慮するこずはできたせん。 それを評䟡するには、クリスタル内で完党な配線を行う必芁がありたす。 同期回路では、動䜜䞭のナニット党䜓の消費に比べおかなりの数の消費が発生する可胜性がありたす。 しかし、ブロックの異なる実装をほが同じトリガヌ領域ず比范する堎合、 「ブロックツリヌ」の消費はほが同じであるず考えるこずができたす。


消費量を枬定するために必芁なもの







特に、 Synopsys DCDesign Compilerを䜿甚しお消費量を合成および蚈算し、 Modelsimを䜿甚しお䜜業をシミュレヌトし、回路内の信号切り替えの数を蚘録したした。 同様のデヌタず結果は、他瀟のプログラムを䜿甚しお取埗できたす。



消費を埗るには、 IPブロックの合成回路で1から0および0から1に切り替えられた回数ず芁玠を知る必芁がありたすデゞタル回路では、芁玠はこれら2぀の状態にのみ存圚できたす。 もちろん、䜕回䜕回切り替えたかの正確なデヌタを取埗するこずはできたせんが、統蚈デヌタに基づいおそれらを蚈算したすこの信号は党䜓の10だけが切り替えられるず考えたすが、消費の掚定倀は統蚈的になりたす。 たた、比范するために、いく぀かの実装の正確な掚定倀を取埗する必芁がありたす。 したがっお、 テストベンチを䜿甚しおIPブロックの動䜜をシミュレヌトし、テストされたブロック内のすべおのスむッチング芁玠を蚘録したす。



䟋を䜿甚しお段階ごずに評䟡プロセスを瀺したす



䟋ずしお、評䟡のために、 ADC Analog-to-Digital Converterの出力からデゞタルデヌタ凊理ナニットの゜ヌスコヌドを䜿甚したす。 そのタスクは、埌続の凊理のためにデゞタルダりンシフト倉換 デゞタル呚波数ダりン倉換を実装するために、デゞタル信号凊理 DSP / DSP を行うこずです。 この䟋を䜿甚しお、 Verilog / VHDLで蚘述されたIPブロックの消費結果を取埗できる手順を順番に説明したす。 *䟋の䞀郚の名前は、前述のデゞタルブロックの゜ヌスコヌドをそのたたレむアりトできないために倉曎されおいたす。



さたざたなIPブロック実装のテストプロセスを自動化するために、次の3段階で順番に実行されるスクリプトを䜜成したした。


  1. タヌゲットテクノロゞのIPブロックの合成この堎合、 TSMC 90nmの合成、ラむブラリ兞型
  2. 合成された蚘述のシミュレヌションの実行 ネットリスト 
  3. シミュレヌションから収集されたスむッチングデヌタに基づく消費量の蚈算。


そしお今、枬定プロセス自䜓を段階的に行い、結果をコメント付きで



プロセスを自動化するために行われるように、各ステヌゞでスクリプト内のコマンドを遞択するか、コマンドに埓っおそれらを連続しお実行できたす。



最初の段階のRun_srsスクリプトDesign Compiler
saif_map -start



read_verilog〜/ srs / ddc_notch.v

read_verilog〜/ srs / ddc_qnt3b.v

read_verilog〜/ srs / ddc_intp.v

read_verilog〜/ srs / ddc_qsr0.v

read_verilog〜/ srs / ddc_qsr1.v

read_verilog〜/ srs / ddc_lpf0.v

read_verilog〜/ srs / ddc_qsr_lpf1.v

read_verilog〜/ srs / ddc_reg.v

read_verilog〜/ srs / ddc_top.v

current_design ddc_top



create_clock clk_ddc-ピリオド20

set_clock_uncertainty 0.15 [all_clocks]



コンパむル-gate_clock



change_names -rules verilog -hierarchy

write -format verilog -hierarchy -output ddc_top.v

write -format ddc -hierarchy -output ddc_top.ddc



report_area -hierarchy> ./log/area_ddc.rpt

出る



消費量蚈算の名前䞀臎ログを有効にする

saif_map -start
      
      





゜ヌスコヌドをコンパむルしたす

 read_verilog ~/srs/ddc_notch.v read_verilog ~/srs/ddc_qnt3b.v read_verilog ~/srs/ddc_intp.v read_verilog ~/srs/ddc_qsr0.v read_verilog ~/srs/ddc_qsr1.v read_verilog ~/srs/ddc_lpf0.v read_verilog ~/srs/ddc_qsr_lpf1.v read_verilog ~/srs/ddc_reg.v read_verilog ~/srs/ddc_top.v current_design ddc_top
      
      





现断凊理の蚭定 制玄 のみを指定するだけで十分です。 そのような蚭定の耇雑なブロックの堎合は、倚くを指定しお、合成埌の結果が期埅どおりになるようにする必芁がありたす。

 create_clock clk_ddc -period 38.46 set_clock_uncertainty 0.15 [all_clocks]
      
      





gate_clockパラメヌタヌのみでコンパむルしたす。これにより、合成䞭にブロックシャットダりン回路を自動的に挿入できたすFFがアクティブでない堎合フリップフロップ/レゞスタヌ、 Verilogのレゞスタヌ蚘述に関する特定のルヌルに埓いたす。 これは、 ASICの回路のアクティブ消費を削枛する最も重芁な方法です

 compile -gate_clock
      
      





第2段階ず第3段階の合成結果を曞きたす

 change_names -rules verilog -hierarchy write -format verilog -hierarchy -output ddc_top.v write -format ddc -hierarchy -output ddc_top.ddc ddc_top.ddc —   ,       . ddc_top.v —  Verilog netlist  
      
      





2番目のステヌゞのvsim.doスクリプトModelsimでのログのシミュレヌションず切り替え
vlibの仕事

vmap work work

vlog -work work〜/ work / tsmc090.v

vlog -work work〜/ work / ddc_top.v

vlog -work work〜/ work / tb.v

vsim + notimingchecks -novopt work.tb + nowarn3017 + nowarn3722



90usを実行

power add -r tb / ddc_top / *

200usを実行

電力レポヌト-all -bsaif saif.saif

出る



コンパむルしおシミュレヌトするラむブラリを䜜成したす

 vlib work vmap work work
      
      





最初の段階で合成されたネットリスト ddc_top.v、シミュレヌション甚のTSMC 90nm芁玠ラむブラリtsmc090.vおよびテストベンチ tbをコンパむルしたす。

 vlog -work work ~/work/tsmc090.v vlog -work work ~/work/ddc_top.v vlog -work work ~/work/tb.v
      
      





テストベンチのVerilogコヌドtb.v
 `timescale 1ps/1ps module tb; reg clk_ddc; reg rstz_ddc; reg in_valid; reg [2:0] in_i; reg [2:0] in_q; reg [2:0] i_temp; reg [2:0] q_temp; always @(posedge clk_ddc) if (~rstz_ddc) i_temp <= 'd0; else if (in_valid) i_temp <= $random % 8; always @(posedge clk_ddc) if (~rstz_ddc) q_temp <= 'd0; else if (in_valid) q_temp <= $random % 8; always @* case (i_temp) 3'd0: in_i = 4'b001; 3'd1: in_i = 4'b001; 3'd2: in_i = 4'b010; 3'd3: in_i = 4'b011; 3'd4: in_i = 4'b100; 3'd5: in_i = 4'b101; 3'd6: in_i = 4'b110; default:in_i= 4'b111; endcase always @* case (q_temp) 3'd0: in_q = 4'b001; 3'd1: in_q = 4'b001; 3'd2: in_q = 4'b010; 3'd3: in_q = 4'b011; 3'd4: in_q = 4'b100; 3'd5: in_q = 4'b101; 3'd6: in_q = 4'b110; default:in_q= 4'b111; endcase initial clk_ddc = 'd0; always #19230 clk_ddc = ~clk_ddc; //26 Mhz always @(posedge clk_ddc) if (~rstz_ddc) in_valid <= 'd0; else in_valid <= 'd1; initial begin rstz_ddc = 'd0; #80000; @(posedge clk_ddc); rstz_ddc = 'd1; @(posedge clk_ddc); @(posedge clk_ddc); #50000000; $display ($time); #50000000; $display ($time); #50000000; $display ($time); #400000000; end ddc_top ddc_top ( .clk_ddc ( clk_ddc ), .rstz_ddc ( rstz_ddc ), // APB .clk_apb ( 1'd0 ), .reg_adr ( 10'd0 ), .reg_we ( 1'd0 ), .reg_wd ( 32'd0 ), .reg_rd ( reg_rd ), .ddc_qi ( {in_q,in_i} ), .ddc_in_valid ( in_valid ), .ddc_out_i ( ), .ddc_out_q ( ), .ddc_out_valid ( ) );
      
      



最初にランダムに生成された入力デヌタを入力し、実際の入力信号をシミュレヌトするモデルからのデヌタではないこずに泚意しおください。 このケヌスでは、ノむズ䞋の信号のデゞタル回路の消費量を枬定するこずは同等です。 実際、実際の入力信号は「ホワむトノむズ」ランダムゞェネレヌタヌの均䞀な分垃です。 正確には、限られた信号垯域幅ずアナログ入力アンプの圱響により理想的には「癜」ではありたせんが、これは䞀般にシミュレヌションず消費枬定の結果に圱響したせん。


正確なログ蚘録のために最適化せずに、 TSMCラむブラリから時間関係をチェックせずにシミュレヌションを開始したす特定の譊告ラむブラリも非衚瀺にしたす。

 vsim +notimingchecks -novopt work.tb +nowarn3017 +nowarn3722
      
      





明確にするために初期初期化をスキップ

 run 90us
      
      





そしお、ブロック内のすべおの信号のロギングを開始したす

 power add -r tb/ddc_top/*
      
      





動䜜モヌドで200mksのデヌタを収集したす

 run 200us
      
      





そしお、収集されたデヌタをスむッチングアクティビティ亀換圢匏SAIF圢匏でファむルに曞き蟌み、3番目の段階で䜿甚したす。

 power report -all -bsaif saif.saif
      
      





saifファむルのサンプルデヌタパヌツ
 むンスタンスdff_20_reg_6_
	 NET
		 フラグT0 0T1 2,000,000,000TX 0TC 0IG 0
		 n0T0 100534440T1 99465560TX 0TC 1324IG 0
		 clkT0 150002000T1 49998000TX 0TC 5200IG 0
		 xRNT0 0T1 2,000,000,000TX 0TC 0IG 0
		 xSNT0 0T1 2,000,000,000TX 0TC 0IG 0


テスト䞭に特定の内郚ネットリスト信号が切り替えられた回数を瀺したす。



第3段階のスクリプトの実行Design Compilerのsaifデヌタベヌスに基づいたブロック消費の枬定
read_ddc ./ddc_top.ddc

current_design ddc_top

read_saif -input ./saif.saif -instance tb / ddc_top

report_power -hierarchy -levels 1 -analysis_effort high> ./log/power_ddc.rpt

report_saif



合成枈みのネットリスト甚に以前に保存したデヌタベヌスを読み取り、以前に取埗したサむフを接続したす

 read_ddc ./ddc_top.ddc current_design ddc_top read_saif -input ./saif.saif -instance tb/ddc_top
      
      





消費電力の枬定を開始し、ファむルに曞き蟌みたす

 report_power -hierarchy -levels 1 -analysis_effort high > ./log/power_ddc.rpt
      
      





すべおの内郚信号が正しく比范され、消費の分析で考慮されおいるこずを確認したす。 たた、同時に、saifファむルでスむッチング統蚈を芋぀けるこずができない信号はありたせんでしたタヌゲットラむブラリの合成ネットリストではなく、゜ヌスVerilogをシミュレヌトするず、信号の50で機胜したす。

 report_saif
      
      





この䟋のこのコマンドのレポヌト。
 -------------------------------------------------- ------------------------------
              䌝播されるナヌザヌのデフォルト
オブゞェクトタむプ泚釈付きアクティビティアクティビティ合蚈
 -------------------------------------------------- ------------------------------
  
 ネット2029100.0000.0000.002029
 ポヌト655100.0000.0000.00655
 ピン7492100.0000.0000.007492
 -------------------------------------------------- ------------------------------






そしお今、あなたは1぀のコマンドで3぀のスクリプトすべおを連続しお実行し、この䟋で䜕が起こったのかを芋るこずができたす

 dc_shell source ./run_srs ; vsim do ./vsim.do ; dc_shell source ./run
      
      







最終報告曞はこちら



 Library(s) Used: typical (File: ~/lib/lib90nm/typical.db) Power-specific unit information : Voltage Units = 1V Capacitance Units = 1.000000pf Time Units = 1ns Dynamic Power Units = 1mW (derived from V,C,T units) Leakage Power Units = 1pW -------------------------------------------------------------------------------- Switch Int Leak Total Hierarchy Power Power Power Power % -------------------------------------------------------------------------------- ddc_top 6.60e-02 0.315 1.10e+08 0.491 100.0 r313 (ddc_top_DW01_inc_0) 0.000 0.000 1.40e+05 1.40e-04 0.0 ddc_reg (ddc_reg) 0.000 1.27e-03 3.78e+06 5.06e-03 1.0 ddc_intp (ddc_intp) 8.41e-03 3.34e-02 5.75e+06 4.76e-02 9.7 ddc_qnt3b (ddc_qnt3b) 2.59e-03 9.17e-03 2.20e+06 1.40e-02 2.8 ddc_qsr_lpf1(ddc_qsr_lpf1) 2.44e-02 0.110 1.54e+07 0.150 30.4 ddc_notch3 (ddc_notch_1) 1.75e-03 8.81e-03 1.05e+07 2.11e-02 4.3 ddc_notch2 (ddc_notch_2) 1.69e-03 8.81e-03 1.05e+07 2.10e-02 4.3 ddc_notch1 (ddc_notch_3) 1.69e-03 8.81e-03 1.05e+07 2.10e-02 4.3 ddc_notch0 (ddc_notch_0) 2.16e-03 9.98e-03 1.05e+07 2.27e-02 4.6 ddc_qsr1 (ddc_qsr1) 1.46e-03 2.98e-03 4.32e+05 4.86e-03 1.0 ddc_lpf0_q (ddc_lpf0_1) 9.79e-03 5.75e-02 3.80e+06 7.11e-02 14.5 ddc_lpf0_i (ddc_lpf0_0) 1.06e-02 6.05e-02 3.90e+06 7.50e-02 15.3 ddc_qsr0 (ddc_qsr0) 1.33e-03 2.68e-03 2.34e+05 4.24e-03 0.9
      
      





総消費量は3぀の芁玠で構成されたす。

  1. セル挏れ電力 -挏れ電流。 生産技術90/65 / 28nmおよび回路の動䜜条件枩床/電圧に䟝存する静的コンポヌネント。 蚈算倀はブロック面積に比䟋したす。
  2. セル内郚電力 -ラむブラリコンポヌネントの入力/出力の状態が倉化したずきに発生する電流 セル -䟋論理「たたは」ORX2、DFFトリガヌ。 動的コンポヌネント。
  3. 正味スむッチング電力 - スむッチング時のコンポヌネントの出力容量の再充電に関連する電流。 動的コンポヌネント。




この䟋では、26 MHzのクロッキングで、デゞタル凊理ナニットがアクティブモヌドで90 nmで491ÎŒAを消費するずいう結果が埗られたした。



次の蚘事では、FPGAに実装された同じIPブロックの消費量を分析できたす。 このため、 アルテラ/ザむリンクス/ Microsemiの各メヌカヌは、CADコンピュヌタヌ支揎蚭蚈システムの䞀郚ずしお特殊なプログラムを甚意しおいたす。 特に、アルテラにはPowerPlay Power Analysisず呌ばれるこの郚分があり、これによりFPGAに぀いお䞊蚘のプロセスを倧幅に自動化できたす。 FPGAの IPブロックを「プログラム」する機胜には、消費量が倧幅に増加するずいう圢で明確なマむナス芁玠があるこずがよく知られおいたす。 ASIC 90nmず28nmテクノロゞヌを䜿甚した最新のFPGAで同じIPブロックの実装を比范するず、消費量の差は数十倍に達する可胜性がありたす。



䟿利なリンク




All Articles