Home Ai-One

Ai-One

Ai-One 2020年度

 本AIチップ設計拠点ではアルゴリズムを実行するエンジンとして中小・ベンチャー企業などが開発する独自のAIアクセラレータ向け評価プラットフォームの構築を進めています。開発されるAIアクセラレータを実環境で評価するには、そのAIアクセラレータと標準システム回路を有するSoC、いわゆるAIチップを開発し、それを用いてシステムレベルでの評価を行う必要があります。本評価プラットフォームは、共通基盤技術として標準システム回路、検証回路、テスト回路、および評価ボードなどを開発し、中小・ベンチャー企業などにこれら共通技術をAIアクセラレータ向け評価プラットフォームとして提供することで、各企業独自のAIアクセラレータ搭載チップの開発とそれを用いたシステムレベルでの評価を短期間に実現することを目指します。
 このたび、本評価プラットフォームの実証として中小・ベンチャー企業の協力を得て、6種類の独自AIアクセラレータを搭載したCMOS28nmプロセスを用いる評価チップ(AI-One)の設計を完了し、外部の製造会社にて試作を開始しました。

評価プラットフォーム

 AIアクセラレータ向け評価プラットフォームを利用することで、AIアクセラレータの動作周波数・電力・機能・性能を評価することが出来ます。評価プラットフォームは、TSMC28HPC+に設定済みのEDAツール、AIアクセラレータを接続しLSI化の可否を検証するRTLガイドライン、Linuxの動作に必要な標準システム回路を装備し、機能・実モデルでAIアクセラレータの機能と性能を検証する1ChipSim検証環境から構成されます。評価プラットフォームの一部であるソフトウエアと評価ボードは開発中です。

1.評価プラットフォームの利点

評価プラットフォームは、AIアクセラレータの研究開発に専念できるOne−Stop設計環境です。今回は、TSMC28nmHPC+プロセス向けに構築中で、AIアクセラレータの動作周波数・電力・性能を評価出来ます。 AIアクセラレータのRTLガイドライン(RTL構造検証、上限周波数検討環境)は、(LPDDRの場合)実モデルと検証モデル等を提供している場合がありますので、目的に応じて利用してください。

2.EDAツール設定

今回は、TSMC28nmHPC+プロセス向け、及びAi-Oneのアーキテクチュアに沿った設定をおこなっております。設定内容や特定条件への対応はマニュアルを参照ねがいます。本環境は、LSI設計向けの計算機使用(Shellプログラミング、Linuxコマンド、各種言語等)経験とEDAツールを用いてTapeout設計とそのチップの不良解析を経験された方を前提に記載しております。各詳細に関しては拠点のマニュアルやその他Webを参照願います。

3.RTLガイドライン

今回は、Ai-Oneのアーキテクチュアに沿った設定に沿ったClockRstのPrimitive、Spyglassの実行、合成と等価検証の実行ガイドラインを設定しております。詳しくは、RTLガイドライン詳細を参照ください。NoCの仕様定義とMemory生成の依頼は、Memory-NoC仕様のDownloadを参照ください。DF及びCFにリリースされたRTLは、拠点で実装可否の検査をおこないます。もし実装不可の場合は対応をお願い致します。

4.1ChipSimulation

AI向けアクセラレータは、以下の基本機能ブロックに接続することで1チップとして機能検証を行うことができます。詳しくは、1chipSim環境を参照ください。
1.外部の画像データ等を入出力するPCIeインターフェイス
2.画像データ等を高速に読み書きするLPDDRメモリインターフェイス
3.プログラムをロードするQSPIインターフェイスや標準IO
4.チップの制御や処理を行うCPU、WDT、INT、PLL
5.基本機能ブロックとアクセラレータを接続するInter Connect
拠点が提供する1ChipSimulation環境では、AIアクセラレータから上記の基本機能ブロックへのアクセス及びチップの動作を制御するCPUからの起動をテストすることができます。
1.LPDDRでは仮想モデル(機能検証用でSimulation実行スピードが早い)と実モデル(実際のMemoryモデルにアクセスし、実スピード(3200bps, 2400bps)でのテストを行います。2.PCIeG3では、対向モデルとしてHostモデルとSlaveモデルを提供しますので、対向からの動作検証を行います。
3.QSPIの仮想モデル(機能検証用でSimulation実行スピードが早い)と実モデル(実際のメモリからプログラムをLoadする)でのテストを行います。

5.拡張

評価後のプラットフォームをベースに、CutDownや拡張など様々なAIチップ研究開発に応用が可能です。

6.Ai-One協力企業

 拠点の本活動にご賛同いただける協力企業様には、以下の設計作業をご尽力いただき、拠点のAi向け評価プラットフォームの実証検証にご協力いただきます。
1.自社のAi向けの自社アクセラレータを拠点の評価プラットフォームに接続し、LSI化に必要な設計を行っていただきます。
2.1Chipsim検証環境を使用し、1チップ化した際の機能性能検証を行っていただきます。
3.試作したチップの評価と1Chip検証環境結果の比較検証で、評価プラットフォームの実証評価を行っていただきます。

7.Ai-One DesignFlow

Aiアクセラレータ搭載

AIアクセラレータがC++の場合は、
設計ツール:Catapult
合成・検証:Catapult
C++モデルで設計できます。Xilinxで開発したC++はCatapultで検証ねがいます。Xilinuxの実行ライブラリモデル(RTL)は契約上使用不可能です。拠点が提供する合成Lib・AXIpackageを使用してください。CatapultでRTLを生成します。

AIアクセラレータがRTLの場合は、
AXIインタフェース仕様を提出願います。
Clock, Reset, DFTのprimitive modelをInstanceしてください。
使用するMemoryのサイズを提出ねがいます。
iocheck:TopModuleのIOポートをとIOList(Excel)を検査します。
Spyglass:形式検証でRTLの構文がLSI化できるか検査します。
DesignCompiler:物理Libertyを使用して論理合成し、所望の周波数で動作可能であることを検証します。
Formality:等価検証でRTLと合成結果の論理が同一である検証を行います。

評価チップ設計

設計Flowとは、EDAツールを使用してブロックやチップ設計作業を行う工程です。
Ai-OnePlatFormとは、拠点で準備した設計環境やLibertyです。
Block論理設計Flowでは、AIアクセラレータやNoC等のブロックにDFT設計(LogicBist、MemoryBist)を行い、実装設計を行い各ブロックのLSI化可否を検証します。
Chip実装設計Flowでは、ブロックをチップに組上げ、Timing設計(各コーナ、バラツキ、モード)を行い、電源網の検証を行います。
CPUPlatformは、2つのHS38CPUコアをAi-One向けに生成したもので、CPUの制御やAIアクセラレータに入出力するデータの前後処理を実施します。
ArchetecturePlatFormは、NoCの構造、BootやRecovery制御、Test機能、Reset制御を提供します。
物理部品Platformは、TSMC28HPC+向けにAi-OneのArchetectureに従った物理Libertyを提供します。
Package・Board・SoftwarePlatformは、開発中です。

RTLガイドライン

cgate・rsync_prim	拠点提供のClockとResetのPrimitiveを使用します。
AiIPxx仕様書		AiIPxxのTopモジュールの信号ピンをIOlistに定義します。
			AiIPxxが使用するMemoryの構成をMemoryに定義します。
			AiIPxxが使用するNoCインターフェイスをNoCに定義します。	

上記のAiIPxx仕様書から拠点は1ChipSimulation環境を生成します。
RTLガイライン検証では、下記の検証をします。

形式検証			SDCとSWLを定義し、形式検証します。
論理合成・等価検証		SDCを定義し、論理合成と等価検証します。
1chipSimulation		HS38のプログラムを作成し、検証します。

RTLリリース後、拠点が実装検証を行いFeedbackします。

1. cgate・rsync_prim

v01では論理合成するとセット・リセット両付きのFlipFlopにマッピングされて、
論理合成時にエラー検出されてしまうためリセット付きFlipFlopに正しくマッピングできるようにRTLを更新しました。
Warning: Design AiIP0X contains unmapped cell: rst_dv/FF0/dout_reg[0](**FFGEN**). (OPT-1411)
論理に変更はありません。合成時、シミュレーション時ともに、/incoming_AiOne/common/rtl/v02をお使いください。
このバージョンに対応する論理合成は、/incoming_AiOne/common/DF/synth/06以降をお使いください。

 user0101@login0001-n:/incoming_AiOne/common/rtl> tree 
 .
v02
`-- libs
    |-- cgate_prim
    |   `-- cgate_prim.v	<==Clock Gating  Moduleです。Ai−One/DF 3.1.1を参照ください。
    `-- rsync_prim
        |-- d_ff.v
        |-- rsync_prim.f
        `-- rsync_prim.v

過去の掲載

各IPトップのwrapperで使用いただくリセット信号同期モジュールのverilogモデルをリリースしました。 今後もAiOneで共通に使用するrtl部品を追加していきます。
 user0101@login0001-n:/incoming_AiOne/common/rtl> tree 
 .
 `-- v01
     `-- libs
         `-- rsync_prim
             |-- d_ff.v
             |-- rsync_prim.f
             `-- rsync_prim.v

2. iocheck

iocheckは、Excelで作成したTopModuleのPinlistとTop.vを比較するutilityです。
IOlist_AiIP0Xは、Downloadし作成願います。

ExcelファイルをCSV UTF-8(comma delimited)(.csv) 形式でSaveしAiIPxx.pinlistとして下記のDirectoryにUpload願います。
Excelファイルの先頭3行は削除してください。

/incoming_AiOne/common/iochk/
`-- 11
    `-- iochk
        |-- AiIP0X.v -> ../rtl/AiIP0X.v    	<== go_check_pinlist.cshを変更してください。
        |-- AIIPXX.pinlist -> IOist_AiIP0X.csv	<== go_check_pinlist.cshを変更してください。
        |-- bin
        |   |-- chgPinlist.pl
        |   `-- iochk2.pl
        |-- go_check_pinlist.csh		<== 起動ファイルです。
        |-- iochk.setup
        |-- IOist_AiIP0X.csv     		<== Excelからcsvファイルを作成ねがいます。
        |-- README
        `-- README.pdf
起動ファイルの内容です。
cat go_check_pinlist.csh
#! /bin/csh -f
# setup
setenv IOCHK_HOME /incoming_AiOne/iochk/iochk
setenv BUILDPATH ${IOCHK_HOME}/bin

set path = (${IOCHK_HOME}/bin ${path})

set chgPinlist = ./bin/chgPinlist.pl
set iocheck = ./bin/iochk2.pl

# block name
set BLKNAME = AiIP0X

# pinlist format must be csv and cut top 3 lines.
$chgPinlist	${BLKNAME}.pinlist > tmp_${BLKNAME}.pinlist
echo "--------- iochk2 ---------"
echo "======= ${BLKNAME} ======"
$iocheck ./tmp_${BLKNAME}.pinlist ${BLKNAME}.v
#rm tmp_${BLKNAME}.pinlist


3. SpyGlass

2020.10.14	/incoming_AiOne/common/DF/spyglass/01/
		SpyGlass環境で指定するライブラリとSTDセルとSRAMのみに変更しました。in Ai_One.prj
		SRAMのライブラリは最新のV18を指定しました。in Ai_One.prj
		分散処理の変数を追加しました(166~167行目)in Ai_One.prj
		Memory_wrapper.vを先に読み込むようにしました。 in AiIP0X.f
2020.10.07	/incoming_AiOne/common/DF/spyglass/00/
2020.09.07	/incoming_AiOne/common/RTL_PoN/spyglass

このセットは、AiIP0Xを対象にDF向け記載しております。SoCPF向けのIPリリースも同様に対応してください。

Rule設定

以下は参照Manualです。 SpyGlass_GuideWare_2020.03-EarlyAdopter_UserGuide.pdf SpyGlass_GuideWare_2020_03_UserGuide.pdf SpyGlass_BaseMethodology_GuideWare2.0_UserGuide.pdf SpyGlass_CDCMethodology_GuideWare2.0_UserGuide.pdf

sgdc


Directory構成

user0101@login0001-n:/incoming_AiOne/common/DF> tree spyglass
spyglass/
`-- 01
    `-- RTL-version				<==RTLのバージョン階層です。
        `-- AiIP0X				<==この名称はsimで使用します。
            |-- rtl
            |   `-- AiIP0X.f			<==Synth, Spyglass, Simで共有します。
            |-- spyglass
            |   |-- Ai_One			<==Reportファイルです。内容を確認ねがいます。
            |   |   `-- spyglass.out		<==logファイルです。tailf Ai_One/spyglass.outで見れます。
            |   |-- Ai_One.prj			<==Spyglassのスクリプトです。
            |   |-- go_sg.csh			<==Spyglassの実行Shellです。
            |   |-- Makefile			<==御社の使用環境に合わせて修正ねがいます。
            |   |-- sgdc
            |   |   `-- AiIP0X.sgdc		<==SgdcListです。御社のAiIP0Xに合わせて修正ねがいます。
            |   `-- swl
            |       `-- AiIP0X.swl		<==WaveListです。御社のAiIP0Xに合わせて修正ねがいます。
            `-- 

go_sg.csh

Spyglassの実行スクリプトです。

user0101@login0001-n:/incoming_AiOne/common/DF/spyglass/00/RTL-version/AiIP0X/spyglass> cat go_sg.csh 
#!/bin/csh -f
source /common/aidl/synopsys/env/cshrc.spyglass_O-2018.09-SP2-11
xhost +
make all

Makefile

SpyglassのMakefileです。 <==御社の使用環境に合わせて修正ねがいます。

user0101@login0001-n:/incoming_AiOne/common/DF/spyglass/00/RTL-version/AiIP0X/spyglass> cat Makefile 
export TOP = AiIP0X				<==御社のTop名称に合わせて修正ねがいます。
RunQue = qr94001014				<==御社の実行サーバQueに合わせて修正ねがいます。

PRJ = Ai_One
export SGDC = ./sgdc/$(TOP).sgdc
export SWL  = ./swl/$(TOP).swl

### ----------------------------------------------------------------------
### all check
### ----------------------------------------------------------------------
all:
	@echo "TOP = $(TOP)"
	make clean
	make lint_chk
	make cdc_chk
	make rdc_chk
	make dft_chk

### ----------------------------------------------------------------------
### lint check
### ----------------------------------------------------------------------
lint_chk:
	@echo "TOP = $(TOP)"
	bsub -K -a sg     -q $(RunQue)	"spyglass -project $(PRJ).prj -batch -goal lint/lint_rtl"
	bsub -K -a sg     -q $(RunQue)	"spyglass -project $(PRJ).prj -batch -goal lint/design_audit"

### ----------------------------------------------------------------------
### cdc/rdc check
### ----------------------------------------------------------------------
cdc_chk:
	@echo "TOP = $(TOP)"
	bsub -K -a sg-cdc -q $(RunQue)	"spyglass -project $(PRJ).prj -batch -goal cdc/cdc_setup"
	bsub -K -a sg-cdc -q $(RunQue)	"spyglass -project $(PRJ).prj -batch -goal cdc/cdc_setup_check"
	bsub -K -a spygd  -q $(RunQue)	"spyglass -project $(PRJ).prj -batch -goal cdc/clock_reset_integrity"
	bsub -K -a sg-cdc -q $(RunQue)	"spyglass -project $(PRJ).prj -batch -goal cdc/cdc_verify_struct"
	bsub -K -a sg-cdc -q $(RunQue)	"spyglass -project $(PRJ).prj -batch -goal cdc/cdc_verify"

rdc_chk:
	@echo "TOP = $(TOP)"
	bsub -K -a sg-rdc -q $(RunQue)	"spyglass -project $(PRJ).prj -batch -goal rdc/rdc_verify_struct"

### ----------------------------------------------------------------------
### scan check
### ----------------------------------------------------------------------
dft_chk:
	@echo "TOP = $(TOP)"
	export SGDC=$(TOP)_dft.sgdc ; export SWL=$(TOP)_dft.swl ; bsub -K -a sg-dft -q $(RunQue)	"spyglass -project $(PRJ).prj -batch -goal dft/dft_best_practice"
	export SGDC=$(TOP)_dft.sgdc ; export SWL=$(TOP)_dft.swl ; bsub -K -a sg-dft -q $(RunQue)	"spyglass -project $(PRJ).prj -batch -goal dft/dft_scan_ready"
	export SGDC=$(TOP)_dft.sgdc ; export SWL=$(TOP)_dft.swl ; bsub -K -a sg-dft -q $(RunQue)	"spyglass -project $(PRJ).prj -batch -goal dft/dft_bist_ready"
	export SGDC=$(TOP)_dft.sgdc ; export SWL=$(TOP)_dft.swl ; bsub -K -a sg-dft -q $(RunQue)	"spyglass -project $(PRJ).prj -batch -goal dft/dft_dsm_best_practice"

### ----------------------------------------------------------------------
GUI:
	bsub -K -a spygd  -q $(RunQue)	"spyglass -project $(PRJ).prj"

### ----------------------------------------------------------------------
clean:
	rm -rf $(PRJ) *.log WORK

Ai_One.prj: 分散処理の変数を追加しました(166~167行目)。もし、分散処理変更必要であれば、コメントアウトもしくは4でご使用ください。

166 set_parameter dft_rrf_tp_use_multiple_threads on
167 set_parameter dft_rrf_tp_thread_count 8

DF:確認ファイル

DF時:確認対象の出力ファイル一覧 ・・・ Errorがないこと、Warningが問題ないことをご確認ください。

色の意味は、必須、 推奨、 対象外です。

【lint】

 Ai_One/<コア名>/lint/lint_rtl/spyglass.log				:lint_rtl実行ログ
 Ai_One/<コア名>/lint/lint_rtl/spyglass_reports/moresimple.rpt		:lint_rtl実行結果レポート

 Ai_One/<コア名>/lint/design_audit/spyglass.log				:design_audit実行ログ
 Ai_One/<コア名>/lint/design_audit/spyglass_reports/moresimple.rpt	:design_audit実行結果レポート
【cdc】
 Ai_One/<コア名>/cdc/cdc_setup/spyglass.log				:cdc_setup実行ログ
 Ai_One/<コア名>/cdc/cdc_setup/spyglass_reports/moresimple.rpt		:cdc_setup実行結果レポート
 Ai_One/<コア名>/cdc/cdc_setup_check/spyglass.log			:cdc_setup_check実行ログ
 Ai_One/<コア名>/cdc/cdc_setup_check/spyglass_reports/moresimple.rpt	:cdc_setup_check実行結果レポート
 Ai_One/<コア名>/cdc/cdc_verify/spyglass.log				:cdc_verify実行ログ
 Ai_One/<コア名>/cdc/cdc_verify/spyglass_reports/moresimple.rpt		:cdc_verify実行結果レポート

 Ai_One/<コア名>/cdc/cdc_verify_struct/spyglass.log			:cdc_verify_struct実行ログ
 Ai_One/<コア名>/cdc/cdc_verify_struct/spyglass_reports/moresimple.rpt	:cdc_verify_struct実行結果レポート

 Ai_One/<コア名>/cdc/clock_reset_integrity/spyglass.log			:clock_reset_integrity実行ログ
 Ai_One/<コア名>/cdc/clock_reset_integrity/spyglass_reports/moresimple.rpt	:clock_reset_integrity実行結果レポート
【rdc】
 Ai_One/<コア名>>/rdc/rdc_verify_struct/spyglass.log			:rdc_verify_struct実行ログ
 Ai_One/<コア名>/rdc/rdc_verify_struct/spyglass_reports/moresimple.rpt	:rdc_verify_struct実行結果レポート
【dft】
 Ai_One/<コア名>/dft/dft_best_practice/spyglass.log			:dft_best_practice実行ログ
 Ai_One/<コア名>/dft/dft_best_practice/spyglass_reports/moresimple.rpt	:dft_best_practice実行結果レポート
 Ai_One/<コア名>/dft/dft_scan_ready/spyglass.log			:dft_scan_ready実行ログ
 Ai_One/<コア名>/dft/dft_scan_ready/spyglass_reports/moresimple.rpt	:dft_scan_ready実行結果レポート
 Ai_One/<コア名>/dft/dft_bist_ready/spyglass.log			:dft_bist_ready実行ログ
 Ai_One/<コア名>/dft/dft_bist_ready/spyglass_reports/moresimple.rpt	:dft_bist_ready実行結果レポート

 Ai_One/<コア名>/dft/dft_dsm_best_practice/spyglass.log			:dft_dsm_best_practice実行ログ
 Ai_One/<コア名>/dft/dft_dsm_best_practice/spyglass_reports/moresimple.rpt	:dft_dsm_best_practice実行結果レポート

CF:確認ファイル

CF時:確認対象の出力ファイル一覧 ・・・ Errorがないこと、Warningが問題ないことをご確認ください。

色の意味は、必須、 推奨、 対象外です。

【lint】

 Ai_One/<コア名>/lint/lint_rtl/spyglass.log				:lint_rtl実行ログ
 Ai_One/<コア名>/lint/lint_rtl/spyglass_reports/moresimple.rpt		:lint_rtl実行結果レポート

 Ai_One/<コア名>/lint/design_audit/spyglass.log				:design_audit実行ログ
 Ai_One/<コア名>/lint/design_audit/spyglass_reports/moresimple.rpt	:design_audit実行結果レポート
【cdc】
 Ai_One/<コア名>/cdc/cdc_setup/spyglass.log				:cdc_setup実行ログ
 Ai_One/<コア名>/cdc/cdc_setup/spyglass_reports/moresimple.rpt		:cdc_setup実行結果レポート

 Ai_One/<コア名>/cdc/cdc_setup_check/spyglass.log			:cdc_setup_check実行ログ
 Ai_One/<コア名>/cdc/cdc_setup_check/spyglass_reports/moresimple.rpt	:cdc_setup_check実行結果レポート
 Ai_One/<コア名>/cdc/cdc_verify/spyglass.log				:cdc_verify実行ログ
 Ai_One/<コア名>/cdc/cdc_verify/spyglass_reports/moresimple.rpt		:cdc_verify実行結果レポート


 Ai_One/<コア名>/cdc/cdc_verify_struct/spyglass.log			:cdc_verify_struct実行ログ
 Ai_One/<コア名>/cdc/cdc_verify_struct/spyglass_reports/moresimple.rpt	:cdc_verify_struct実行結果レポート


 Ai_One/<コア名>/cdc/clock_reset_integrity/spyglass.log			:clock_reset_integrity実行ログ
 Ai_One/<コア名>/cdc/clock_reset_integrity/spyglass_reports/moresimple.rpt	:clock_reset_integrity実行結果レポート

【rdc】
 Ai_One/<コア名>/rdc/rdc_verify_struct/spyglass.log			:rdc_verify_struct実行ログ
 Ai_One/<コア名>/rdc/rdc_verify_struct/spyglass_reports/moresimple.rpt	:rdc_verify_struct実行結果レポート
【dft】
 Ai_One/<コア名>/dft/dft_best_practice/spyglass.log			:dft_best_practice実行ログ
 Ai_One/<コア名>/dft/dft_best_practice/spyglass_reports/moresimple.rpt	:dft_best_practice実行結果レポート

 Ai_One/<コア名>/dft/dft_scan_ready/spyglass.log			:dft_scan_ready実行ログ
 Ai_One/<コア名>/dft/dft_scan_ready/spyglass_reports/moresimple.rpt	:dft_scan_ready実行結果レポート
 Ai_One/<コア名>/dft/dft_bist_ready/spyglass.log			:dft_bist_ready実行ログ
 Ai_One/<コア名>/dft/dft_bist_ready/spyglass_reports/moresimple.rpt	:dft_bist_ready実行結果レポート


 Ai_One/<コア名>/dft/dft_dsm_best_practice/spyglass.log			:dft_dsm_best_practice実行ログ
 Ai_One/<コア名>>/dft/dft_dsm_best_practice/spyglass_reports/moresimple.rpt	:dft_dsm_best_practice実行結果レポート

GUI起動方法

Error/Warning項目の内容確認にご利用ください。
spyglassディレクトリにおいて、

source /common/aidl/synopsys/env/cshrc.spyglass_o-2018.09-SP2-11
xhost +
make GUI

でGUIを立ち上げることができます。

過去の掲載

/incoming_AiOne/common/RTL_PoN/spyglass/00/
このセットは、AiIP0Xを対象にRTL_PoN向け記載しております。SoCPF向けのIPリリースは個別対応します。
lint/design_audit              全体概要をレポートする。
lint/lint_rtl                  Floating, Mismatch, Simulation問題, 合成不可
cdc/cdc_verify_struct          Verifies all aspects of clock domain crossings.
rdc/rdc_verify_struct          Verifies and reports reset domain crossings.
dft/dft_best_practice          Checks the design for best practices to find issues
dft/dft_dsm_best_practice      d-pin controllability, test clock domains, and path issues
以下のManualを参照ください。
SpyGlass_GuideWare_2020.03-EarlyAdopter_UserGuide.pdf
SpyGlass_GuideWare_2020_03_UserGuide.pdf
SpyGlass_BaseMethodology_GuideWare2.0_UserGuide.pdf
SpyGlass_CDCMethodology_GuideWare2.0_UserGuide.pdf


4. 論理合成

History
/incoming_AiOne/common/DF/synth/09	Formality対応修正。duet_mem/v15に戻しました。duet_memのv19が必要な方は修正ねがいます。
/incoming_AiOne/common/DF/synth/08	duet_mem/v17対応です。(onGoing)
/incoming_AiOne/common/DF/synth/07	Don't Use ListをUpdateしました。
/incoming_AiOne/common/DF/synth/06	MakefileのLogをstdoutに戻した版。
/incoming_AiOne/common/DF/synth/05	sim環境合わせた構造対策版
/incoming_AiOne/common/DF/synth/04	等価性検証対策版
・合成環境(資料)をRTLバージョン階層有りのディレクトリ構造に修正
・ハンドオフ(資料)のmax_transitionを環境に合わせて0.5nsに修正
・Makefileに”synth_notopo”追加
・Makefile内で使用VT種を選択できるように変更
・HPkitは使用しないようにライブラリ定義から削除(現状NDMが存在しないため)
 ⇒DF検討次第では追加要望する方針。
・topo合成時のみPhysicalライブラリ設定するよう変更
・topo合成時のみ-spgでcompile実行するよう変更
・FormalityとDesign-compilerのライブラリ設定を00_setup.tclで共通化
・ライブラリパスをdsgn下に統一し、STD、MEMを指定。
 ⇒ AiIP01で使用しているv15に存在しない一部MEMのみv13からリンク
・notopo時はセル遅延のderateを+10%にするよう変更
・タイミングのカテゴリをFF間/In→FF/FF→Outに切り分け
/incoming_AiOne/common/DF/synth/03	階層構造整理版

1. Directory構造

user0101@login0001-n:/incoming_AiOne/common/DF/synth> tree 
`-- 08
    |-- ReadMe
    `-- RTL-version				<==RTLのバージョン階層です。
        `-- AiIP0X				<==この名称はsimで使用します。
            |-- rtl
            |   `-- AiIP0X.f			<==Synth, Spyglass, Simで共有します。
            |-- synth
            |   |-- go_syn.csh			<==実行Shellです。
            |   |-- Makefile
            |   |-- scr
            |   |   |-- 00_int.tcl
            |   |   |-- 00_setup.tcl		<==StdCell v05, Mem v13 v15, 06->07
            |   |   |-- 01_synth.tcl		<==修正しています。
            |   |   |-- 02_prefv.tcl
            |   |   |-- 03_fm.tcl		<==修正しています。06->07
            |   |   |-- 04_leak.tcl
            |   |   |-- proc_create_run_fm_script.tcl.10122017
            |   |   |-- set_timing_margin.tcl  <==修正しています。06->07
            |   |   `-- utility
            |   |       |-- check_code
            |   |       |-- check_dc.tcl
            |   |       |-- check_list_kyes.txt
            |   |       |-- get_meminfo.tcl
            |   |       |-- ignore_code
            |   |       |-- report_clock_gating_info.tcl
            |   |       |-- report_ct_summary.tcl
            |   |       `-- sum_qor_noscenario.pl
            |   |-- run_fm.log			<==等価検証結果のLog。
            |   |-- report			<==等価検証結果のレポート。
            |   |-- synth.log			<==論理合成のLog。
            |   `-- sdc
            |       `-- AiIP0X.sdc		<==AiIPxxにあわせて作成ください。

2. 実行環境のコピー

 /release0X/AiIP0X/10/AiIP0X $ cd /release0X/AiIP0X/10/AiIP0X		 				#合成実行Directoryに移動
 /release0X/AiIP0X/10/AiIP0X $ cp -pr /incoming_AiOne/common/DF/synth/09/RTL-version/AiIP0X/synth ./	#合成バージョンをコピーする。
 /release0X/AiIP0X/10/AiIP0X $ tree -L 1
 /release0X/AiIP0X/10/AiIP0X $ tree -L 1
.
|-- iochk
|-- rtl
`-- synth

3. Makefile修正

/release0X/AiIP0X/10/AiIP0X/synth $ cat Makefile 
export TOP = AiIP0X				<==AiIP0Xを御社の名称に変更してください。
export DESIGN_NAME = AiIP0X			<==AiIP0Xを御社の名称に変更してください。
export DEF_FILE = XXXX
export USE_HVT30 = ON
export USE_HVT35 = ON
export USE_HVT40 = ON
export USE_SVT30 = OFF
export USE_SVT35 = OFF
export USE_SVT40 = OFF
export USE_LVT30 = OFF
export USE_LVT35 = OFF
export USE_LVT40 = OFF
export CPU_NUM = 1				<==ライセンスは1で1,4,8coreを指定できます。

ENVROOT  = $(shell pwd)
SCRDIR   = $(ENVROOT)/scr
WORKDIR  = $(ENVROOT)/work
RunQue   = qr94001014				<==御社の実行サーバのQueに変更してください。
DCSHELL  = dc_shell
DCSHELLT = dc_shell-xg-t
FMSHELL  = fm_shell

synth0: 
	bsub -Is -q $(RunQue) "$(DCSHELLT) -topo -f $(SCRDIR)/00_int.tcl"

synth: 
	bsub -K -a synth -q $(RunQue) "$(DCSHELLT) -topo -f $(SCRDIR)/01_synth.tcl |& tee synth.log"

synth_notopo: 
	bsub -K -a synth -q $(RunQue) "$(DCSHELL) -f $(SCRDIR)/01_synth.tcl |& tee synth_notopo.log"

leak: 
	bsub -K -a synth -q $(RunQue) "$(DCSHELL) -f $(SCRDIR)/04_leak.tcl |& tee synth_leak.log"

#run_fm.tcl:
#	bsub -K -a synth -q $(RunQue) "$(DCSHELL) -topo -f $(SCRDIR)/02_prefv.tcl |& tee prefv.log"

fv:
	bsub -K -a fm    -q $(RunQue) "$(FMSHELL) -f $(SCRDIR)/03_fm.tcl | tee -i run_fm.log"

clean:
	rm -rf log

clean_all:
	rm -rf alib-52 log report result work *.svf *.log DC-T-MW-DESIGN __tmp_tf*

4. 実行スクリプト作成

/release0X/AiIP0X/10/AiIP0X/synth $ vi go_syn.csh 
#! /bin/csh -f
#source /common/aidl/synopsys/env/cshrc.dc_P-2019.03-SP4
source /common/aidl/synopsys/env/cshrc.dc_Q-2019.12-SP3
source /common/aidl/synopsys/env/cshrc.formality_P-2019.03

make clean_all
#make synth_notopo
make synth
make fv

/release0X/AiIP0X/10/AiIP0X/synth $ chmod +x go_syn.csh 

過去の掲載

/incoming_AiOne/common/RTL_PoN/synth/00/
このセットは、AiIP0Xを対象にRTL_PoN向け記載しております。SoCPF向けのIPリリースは個別対応します。

5. AiIP0X.f作成

/release0X/AiIP0X/10/AiIP0X/synth $ vi ../rtl/AiIP0X.f
../../AiIP0X/rtl/AiIP0X.v				<==AiIP0X.fはsimでも使用します。../../AiIP0X/rtlで記述ねがいます。
../../AiIO0X/rtl/AiIP0x_sub.v
/incoming_AiOne/common/rtl/v02/libs/rsync_prim/d_ff.v	<==絶対パスで指定ください。
/incoming_AiOne/common/rtl/v02/libs/rsync_prim/rsync_prim.v
							V==絶対パスで指定ください。
/apps/aidl/ip_snps_dsgn/duet_mem/v15/SP11L/sadglsph4s1p1024x128m2b2w0c0p0d0t1s10/sadglsph4s1p1024x128m2b2w0c0p0d0t1s10_bus_wrapper.v
/apps/aidl/ip_snps_dsgn/duet_mem/v13/DP11/sadglsph4s2p128x128m2b1w1c0p0d0t1s10/sadglsph4s2p128x128m2b1w1c0p0d0t1s10_bus_wrapper.v
AiIP0X_sim.fの記述例
/release0X/AiIP0X/10/AiIP0X/synth $ vi ../rtl/AiIP0X_sim.f
/apps/aidl/ip_snps_dsgn/duet_mem/v15/SP11L/sadglsph4s1p1024x128m2b2w0c0p0d0t1s10/sadglsph4s1p1024x128m2b2w0c0p0d0t1s10_fast_func.v
/apps/aidl/ip_snps_dsgn/duet_mem/v13/DP11/sadglsph4s2p128x128m2b1w1c0p0d0t1s10/sadglsph4s2p128x128m2b1w1c0p0d0t1s10_fast_func.v

6. sdc作成

クロック定義、同期グループ、タイミング例外制約のみ記載をお願いします。
その他設定は実行スクリプト側で設定します。

/release0X/AiIP0X/10/AiIP0X/synth $ vi sdc/AiIP0X.sdc
# Set Clock						<==Clock 定義
create_clock -name CLK_A -period 1.25  [get_port CLK_A_i] ;#800MHz
create_clock -name CLK_B -period 2.50  [get_port CLK_B_i] ;#400MHz
create_clock -name CLK_C -period 5.00  [get_port CLK_C_i] ;#200MHz
# Set Clock Group					<==同期Clock Group定義
set CLK_A_group	[get_clocks {CLK_A CLK_B}]
set CLK_C_group [get_clocks CLKC]
							<==同期Clock Group間をfalse指定
set_clock_groups -asynchronous -name async_clock_group \
	-group $CLK_A_group \
	-group $CLK_C_group
# Timing exception					<==Timing例外制約(必要な場合)
set_false_path      -from [get_clocks CLK_A] -to [get_clocks CLK_C]
set_false_path      -from [get_clocks CLK_C] -to [get_clocks CLK_A]

# following definitions are not necessary
#-----------------------------------------------
#   input output delay
#-----------------------------------------------
#set_input_delay  [expr 0.5*1.25] -clock CLK_A [get_ports "*0" "*1"]
#set_output_delay [expr 0.5*1.25] -clock CLK_A [get_ports "*0" "*1"]
#-----------------------------------------------
#   Setup
#-----------------------------------------------
#set sdc_version    2.0
#set_units -time ns -resistance kOhm -capacitance pF -voltage V -current mA
#set_operating_conditions        TT0P9V25C               -library ts28nphhlogl30udl140f_tt0p9v25c
#set_wire_load_selection_group   ts28nphhlogl30udl140f   -library ts28nphhlogl30udl140f_tt0p9v25c
#-----------------------------------------------
#   others
#-----------------------------------------------
#set_clock_uncertainty -setup 0.25   [get_clocks clock]
#set_max_delay 1.25  -from [get_clocks CLK_A] -to   [get_clocks CLK_C] -reset_path
#set_max_delay 1.25  -to   [get_clocks CLK_A] -from [get_clocks CLK_C] -reset_path

過去の掲載

7. 実行方法

/release0X/AiIP0X/10/AiIP0X/synth $ vi go_syn.csh 
#! /bin/csh -f
#source /common/aidl/synopsys/env/cshrc.dc_P-2019.03-SP4
source /common/aidl/synopsys/env/cshrc.dc_Q-2019.12-SP3
source /common/aidl/synopsys/env/cshrc.formality_P-2019.03

make clean_all
#make synth_notopo
make synth
make fv

/release0X/AiIP0X/10/AiIP0X/synth $ chmod +x go_syn.csh 
/release0X/AiIP0X/10/AiIP0X/synth $ ./go_syn.csh

8. Report

5. サインオフ

PoN-DF-CF条件


過去の掲載

合成条件


過去の掲載

クロック情報


過去の掲載

Timing調整


過去の掲載

AIチップ設計拠点 Confidential Document