今日のテクノロジ

ModelSim上で、Verilog テストベンチからSAIFを抽出する

まず、テストベンチ上のinitialに次のような記述を加える。

	// create initial signals including reset
	initial
	begin
		$readmemh(`IM_FNAME, INSTMEM);
		$readmemh(`DM_FNAME, DATAMEM);

		$set_toggle_region(TestBench.DUT);
		$toggle_start();

つぎにシミュレーションを止める記述で、

	if (IM_data == {(`IM_DW){1'b1}}) begin
		$toggle_stop();
		$toggle_report("out.saif", 1.0e-12, "TestBench.DUT");

としてSAIFの出力システムタスクを記述する。

このままコンパイルしてシミュレーションしても、システムタスクは未定義状態なので何も起こらない。シミュレーション時に、例えば Synopsys の提供する PLI ライブラリをリンクし、システムタスクを認識させる。

% vsim -novopt -t ns -sdftyp /DUT=dump.sdf -pli /export/cad/synopsys/cores_2008.09
/amd64/power/vpower/libvpower.so -do wave.do TestBench

DesignCompilerでクロックツリーの消費電力をはかる

消費電力を見積もる場合、SAIFを読ませた上で、report_power、これは常識。
ではクロックツリーだけ、その消費電力だけ抽出する場合は?

IC Compiler 等でCTSした記述にたいして、dc_shell 上で、

% create_clock CLK
% report_clock_tree_power

する。report_clock_tree_power はdc_shellの補完で出てこないので注意したい。ただし、2008.09バージョンの話。