• 検索結果がありません。

SCE-MI仕様協調エミュレーション環境およびエミュレーション用モジュール自動生成環境の開発/評価

N/A
N/A
Protected

Academic year: 2021

シェア "SCE-MI仕様協調エミュレーション環境およびエミュレーション用モジュール自動生成環境の開発/評価"

Copied!
6
0
0

読み込み中.... (全文を見る)

全文

(1)2005−EVA−12(6)   2005/3/23. 社団法人 情報処理学会 研究報告 IPSJ SIG Technical Report. SCE-MI 仕様協調エミュレーション環境および エミュレーション用モジュール自動生成環境の開発/評価 †. 大山将城 清 水 尚 彦. †. 近 藤 信 行 星野 民夫. † ††. SoC 開発における検証は大規模化、複雑化の一途を辿っている. これまでソフトウェアとハード ウェアの検証を同時に行う協調検証環境は標準と呼べる環境が無く、移植性の点で問題があった. accellera 社は協調エミュレーションにおけるテストベンチ開発の標準化/容易化を目的に SCEMI(Standard Co-Emulation Modeling Interface) 仕様を提案した. 本稿では SCE-MI 仕様を踏ま えた独自協調エミュレーション環境の開発と評価について述べる.. Development and Evaluation of Co-Emulation Environment and Automatic Hardware Generation Environment featuring SCE-MI Masashiro Ohyama ,† Nobuyuki Kondoh ,† Naohiko Shimizu and Tamio Hoshino ††. †. Recentry, the scale of verification for SoC gets larger and larger. But there is a problem of portability of Co-Verification enviromnent. accellera proposed a Co-Emulation environment named SCE-MI(Standard Co-Emulation Modeling Interface) for standardize of test bench development. In this report, we present detailed development and evaluation of our original Co-Emulation environment featuring SCEMI.. SCE-MI を利用することで,. 1. は じ め に. • SCE-MI 定義の 6 つの API 仕様を理解するのみ. SoC 開発においてハードウェア-ソフトウェア協調. でテストベンチ開発が可能である. • DUT をサブモジュールとするエミュレーション. 検証が盛んに行われるようになった. accellera 社 は協調エミュレーション用テストベンチの設計/使用. 用ハードウェア論理は自動で生成される. を容易にすることを目的に SCE-MI(Standard Co-. • DUT のインタフェース仕様を SCE-MI が吸収す. Emulation Modeling Interface) を提案した1) .. るので DUT が違っても同じ方法で実装できる. SCE-MI は DUT(Device/Design Under Test) と. といったメリットがある.. テストベンチ間のインタフェース仕様である (図 1).. 我々は SCE-MI 仕様に沿った協調エミュレーション. 図 1 の SW model は DUT 検証用のアプリケーショ. 環境とエミュレーション用モジュールの自動生成環境. ン/テストベンチ,DUT はユーザが設計した CPU やメ. を独自の実装仕様で構築し,Linux と FPGA ボード. モリなどの IP コアである. DUT は Transactor と呼. を用いて実装/評価をした.. ばれるインタフェースモジュールを介してソフトウェ アサイドと通信する. SCE-MI はテストベンチ側のイ ンタフェースとして 6 つの API を提供し,DUT の入. Software Side SW model (testbench). 出力信号のタイミング等について隠蔽する.. Hardware Side DUT SCE-MI. CPU core IP. Input File. † 東海大学 Tokai University †† 株式会社 アプリスター Applistar Corporation. Output File. 図 1 SCE-MI 概念図. −31−. Mem.

(2) Test Bench. Transactor. Infrustructure. DUT. MessageInPort. MessageData(Class for set message to MessageInPort). datain. mdata. MessageInPortProxy(Class for sending message to DUT). register. Send(); MessageOutPort. Port_datain. dataout. MessageOutPortProxy(Class for receiving message from DUT). Port_dataout. Serviceloop();. SceMi(Class for initialization SW side ). scemi SceMiParameters(Class for parameter data instans for initialization ). Clock/Reset Generation& Control. param. Software Side. Cclock Creset. Hardware Side. 図 2 SCE-MI の実装例 表1. ソフトウェアサイドのクラス仕様概要. クラス名. 機能概要. SceMiEC. エラーハンドリング用クラス.このクラスはエラー箇所,エラー内容などの情報を保持するための構 造体を持つ.. SceMi. SCE-MI ソフトウェアサイドの主要な処理を行うクラス.SCE-MI ソフトウェアサイドの初期化が 呼び出されると,SceMiParameters クラスが生成するパラメータセットに基づいてハードウェアサ イドの Message Port に対応する Message Port Proxy のインスタンスを生成する. ハードウェアサイドの MessageInPort と接続する MessageInPortProxy を提供するクラス. ハードウェアサイドの MessageOutPort と接続する MessageOutPortProxy を提供するクラス. Infrastructure Linker が出力したパラメータファイルを読み込み,SceMi クラスが初期化する際 に使用するパラメータセットを生成する. 送信 Message を保存するクラス.送信 Message をこのクラスのインスタンスに格納する.. SceMiMessageInPortProxy SceMiMessageOutPortProxy SceMiParameters SceMiMessageData. int main(void){ try{ SceMiEC *errhandler = new SceMiEC;. 2. SCE-MI 仕様概要 SCE-MI の仕様概要を説明する (実装例を図 2 に示. SceMiParameters *scepam = new SceMiParameters("param.para",NULL);. す).. SceMi *scemi = SceMi::Init(versionchk,scepam,NULL);. ソフトウェアサイドの Message Port Proxy とハー ドウェアサイドの Message Port は SCE-MI Infras-. SceMiMessageInPortBinding inbinding = {NULL,isready,sceClose};. tructure を介して1対1で接続する.各 Message Port. SceMiMessageOutPortBinding outbinding = {NULL,receiveRdy,sceClose};. Proxy と Message Port は通信方向が入力または出力. SceMiMessageInPortProxy *Port_datain = scemi->BindMessageInPort ("TransactorC","datain", &inbinding, NULL);. に固定され、Message 単位でデータを送受信する.テ ストベンチから操作する場合、DUT への Message 送. SceMiMessageOutPortProxy *Port_dataout = scemi->BindMessageOutPort("TransactorC","dataout",&outbinding,NULL);. 信では MessageData クラスのインスタンスにデータ をセットし、MessageInPortProxy の Send メソッド. SceMiMessageData *mdata = new SceMiMessageData(*Port_datain, NULL);. をコールする. DUT から Message を受信する場合. unsigned int mDat = 1;. は,SceMi クラスのインスタンスの Seviceloop メソッ. mdata->Set(0, mDat, NULL);. ドをコールする.Seviceloop メソッドは DUT に Trans-. Port_datain->Send(*mdata, NULL);. actor 内の ClockPort を介して 1 クロックの供給を行. scemi->Serviceloop(); }. い、全ての MessageOurPort からの Message を読み 出す. 図 2 の左側にはテストベンチ開発時に使用する. }. クラスを, 図 3 にテストベンチの例を示す. 基本的に は各クラスのインスタンスを生成するだけで DUT と の通信ができる状態になる.. −32−. 図 3 テストベンチの例.

(3) Software Side. Transactor. address 0000 Transactor Select. TransactorControl MessageInport msginreg<1024>. WriteMemDone_out. msgreg<1024> WriteMsg. Write. WriteMemReq_in. DataOut<1024> In<1024>. Out<1024>. ReadMemDone_out DataOut<1024>. ReadMemReq_in MsgIn<32> msgoutreg<1024>. pcidata_in<32> MsgOut<32>. 0004. Creset. 0008. Cclock. 000c. msginreg[31:0] msginreg[63:32]. 0010 DataIn<1024>. ...... DataIn<1024>. PortAddress<9> PortAddress<9>. GenerateCclock. Parameter Register CclockDone. 0090. Cclock. CclockAck. 0094. Creset. CresetAck. 3.1 SCE-MI ハードウェアサイド SCE-MI ハードウェアサイドモジュール (Transactor) の実装仕様を以下のように決めた. SCE-MI Infrastructure には PCI インタフェー スを用いる. ☆. トランザクションレベルではなくクロックアキュ レイトレベルの通信をサポートする. (3). msgoutreg[31:0] msgoutreg[63:32]. DataOut[102:101] DataOut[105:103]. OutA OutB[1:0] OutC[2:0]. msgoutreg[95:64]. //メッセージデータインスタンス生成 SceMiMessageData *mdata = new SceMiMessageData(*Port_datain, NULL); //メッセージデータセット mdata->Set(0, mDat, NULL); //データ送信 InP1->Send(*mdata, NULL);. 図 6 Message 送信に関わるソースコード (抜粋). DUT の外部インタフェースは入力または出力 とし双方向の端子は使用できない. (4). DataOut[100]. msgoutreg<1024>. InB[1:0] InC[2:0]. //インポートプロキシへのポインタを用意 //自分が必要なトランザクタのポートをバインドして, そのポインタをもらう SceMiMessageInPortProxy *Port_datain = scemi->BindMessageInPort("TransactorC", "datain", &inbinding, NULL);. 3. 実 装 仕 様. (2). DataOut[105:103]. 図 5 Transactor 内部のレジスタを PCI のメモリ空間,DUT の 入出力ピンにマッピングした様子. 図 4 Transactor のブロック図. (1). DataOut[102:101]. InA. ...... GenerateCreset. CresetDone. ...... CresetReq. 008c. ClockPort. CclockReq. DUT DataOut[100]. msginreg<1024>. msginreg[95:64]. ...... 0014. pcidata_out<32>. Hardware Side. Transactor. 1Transactor は入出力端子を各々合計 1024 ビッ トまでサポートし、最大 4Transactor までと する. 設計した Transactor のブロック図を図 4 に示す.. //アウトポートプロキシへのポインタ用意 //自分が必要なトランザクタのポートをバインドして, そのポインタをもらう SceMiMessageOutPortProxy *Port_dataout = scemi->BindMessageOutPort("TransactorC", "dataout", &outbinding, NULL); //受信確認 scemi->Serviceloop();. 図 7 Message 受信に関わるソースコード (抜粋). Transactor は送信用に 1024 ビットのレジスタを 1 本, 受信用に 1024 ビットのレジスタを1本, クロック. いう形で Infrastructure Linker が出力し、これをソフ. とリセットの供給用モジュールとコントローラにより. トウェアサイドが初期化で使用し MessagePortProxy. 構成する. 送受信用の内部レジスタを 32 ビット毎に. を生成する.. 3.2 SCE-MI ソフトウェアサイド. PCI のメモリ空間にマップし, レジスタを Transactor. SCE-MI 仕様に従って SCE-MI ソフトウェアサイ. の入出力端子に接続する. これにより PCI のアドレス 空間にアクセスすることで対応したレジスタにアクセ. ド (API) を C++言語用いて設計した (表 1).. スをし、結果として DUT の入出力ピンのアクセスが. MessageInPort を介して DUT に Message を送信. 可能となる (図 5). また、クロックとリセットの供給. する際は SceMiMessageData クラスのインスタンス. についてもメモリマップし、同様のアクセス方式で行. にデータをセットし, SceMiMessageInPortProxy ク. うようにした. この方式で SCE-MI における Message. ラスの Send メソッドを使用して行う (図 6).. MessageOutPort から Message を受信する際は. の送受信の概念を実現した.. Transactor の生成と PCI インタフェース,DUT と. SceMi クラスの Serviceloop メソッドを使用する (図. の接続,PCI のアドレス空間へのマッピングは後述する. 7).Serviceloop メソッドは以下の処理を行う.. Infrastructure Linker が自動で行う. また, マッピング. (1). ClockPort より 1 クロックを供給する. したアドレスの情報についてはパラメータファイルと. (2). 全ての MessageOutPort に対して Message の 読みだしを行う (読み出しは Port 毎にユーザ. ☆. PCI インタフェースモジュール/ドライバは研究室所有 IP ア を使用2)3). −33−. 定義の関数を登録できる).

(4) parameter file. Pre-Process. Verilog assignment Code Generation. Deletion comment block Field separation. Input DUT,Reset,CLK name and other parameters. Analyze DUT module interface declaration. Parameter Setting. DUT Analyze. 1. Number of Message InPort. 2. Number of Message OutPort. 3. Number of ClockPort. 4. Number of ClockBind. .......... Verilog Source Code. Top Module Code Generation top module source code. Detail of Message InPort Detail of Message OutPort Detail of ClockPort Detail of ClockBind. 図 10 パラメータファイルのフォーマット Detail of Message InPort. 図 8 Infrastructure Linker の処理フロー 1(ID). 1 1 1 1 1,TransactorA,datain,32,0,0 2,TransactorA,dataout,32,0,1024,0 3,m_clock,33000,33000,50,50,0,5 4,TransactorA,m_clock. Transactor name. Port name. 2(ID). 3(ID). Transactor Port name name. Data Width. 4(ID). 図 11. Infrastructure Linker は Transactor とソフトウェ. Transactor name. ClockPort name. TOP Transactor. PCI BUS MessageOut. ションが可能となる.. Reset Clock. Infrastructure Linker は DUT の Verilog ソース コードを読み込み, クラスファイルで使用するパラ. 図 12 自動生成する top モジュールのインタフェース仕様. メータファイルと DUT,PCI インタフェースを合成可 能な Verilog コードとして生成する. 前処理部, 解析 部, コード生成部の 3 部で構成する (図 8). 前処理部ではコメント部の削除, フィールドの分割 など解析部が処理しやすい形にソースコードを変形す る. 解析部ではユーザが指定した情報 (top モジュー ル名,clock ポート名,reset ポート名) を元に DUT イ ンタフェース記述の解析を行う. コード生成部では解 析部の出力したパラメータファイルを元に Transactor モジュールの生成を行う. パラメータファイルは図 10 のフォーマットである.. ClockPort,ClockBind の詳細な設定情報 のレコードで構成する.. DUT MessageIn. ストベンチと DUT のソースコードのみでエミュレー. • 5 行目以降 MessageInPort,MessageOutPort. Transactor Number. InPort,OutPort,ClockPort,ClockBind レコードの フォーマット. tructure Linker により SCE-MI API を使用したテ. • 4 行目 ClockBind の数. Offset Address. Reset ClockPort Clock Clock Duty Duty name Denominator Numerator Denominator Numerator Phase Time. ソースコードより生成するプログラムである. Infras-. • 3 行目 ClockPort の数. Port Priority. Detail of ClockBind. アサイドの初期化用パラメータファイルを DUT の. • 2 行目 Message OutPort の数. Transactor Number. Detail of ClockPort. 3.3 Infrastructure Linker. • 1 行目 Message InPort の数. Offset Address. Detail of Message OutPort. 図 9 自動生成したパラメータファイル. 図 10 のように,. Data Width. MessageInPort, MessageOutPort, ClockPort, ClockBind 各レコードの詳細な設定情報について図 11 に示 す. 図 11 のうち、MessageIn/OutPort の名前とその. Port が存在する Transactor の名前についてはテスト ベンチの開発で必要になる. PCI メモリ空間にマップ された各 Port のアドレスについてはソフトウェアサ イド SceMi クラスが管理し、テストベンチの開発者 が知る必要は無い. パラメータファイルを元に SceMiParameters クラ スは SceMi クラスの初期化用パラメータセットを生成 する. また、パラメータファイルを元に SCE-MI ハー ドウェアサイドモジュールを生成する (図 12). 図 12 よりエミュレーション用のモジュールは PCI のインタ フェース部のみを外部インタフェースとして持つ. こ のためユーザは使用する評価ボード, 論理合成ツール 用に PCI インタフェース部のみのピンアサインファ イルを用意すれば実装が可能となる.. −34−.

(5) 表 3 評価用マシンのスペック. CPU Memory OS. Celeron 1.8[GHz] PC2100 128[MB] RedHat Linux 7.3. for(int time = 0 ; time < 100000 ; time++) { //メッセージデータセット mdata->Set(0 , mDat , NULL); //データ送信 InP1->Send(*mdata , NULL); //受信確認 scemi->Serviceloop();. 図 13 使用した FPGA ボード DN3000K10. //メッセージデータ更新 mDat++; }. 表 2 合成結果. Device Module Name top. 図 15. Virtex2 XC2V4000. 表 4 時間計測結果. ---------------------------------------input data = 2 writting now! receiveRdy called ReceiveOutData = 2 ----------------------------------------. 図 14. 時間計測用のソースコード (抜粋). slice 408. エミュレーションテストのテキストログ (抜粋). 4. エミュレーションテスト. データ幅 [bit]. 時間 [us]. 周波数 [KHz]. 転送バンド幅 [MB/s]. 16 32 64 128 256 512 768 1024. 7.76 7.99 8.27 9.90 13.32 20.08 26.96 33.80. 131 125 121 101 75.1 49.8 37.1 29.6. 0.258 0.501 0.967 1.62 2.40 3.19 3.56 3.79. 開発した SCE-MI によるエミュレーションテストを. 4. Red Hat Linux7.3 上で行った.ハードウェアサイド. 3.5. (PCI インタフェース,Transactor,DUT) は Xilinx. 3. 40. time frequency band width. 140 35 120. 動作周波数は 95[MHz] であった.. 80. 2. 1.5. time[us]. 25. frequency[KHz]. 実装結果を表 2 に示す.論理規模は 408[slice], 最高. band width[MB/s]. ISE6.0 を使用し XC2V4000 に実装した (図 13).. ☆. 30 100. 2.5. 20. 60. 15. エミュレーションテストではテストベンチから DUT. 1. の入力ピンに対して1サイクル毎にデータを書き込. 0.5. 20. 5. 0. 0. 0. み,その時の出力ピンから Message の読み出しを行っ. 10. 0. た.エミュレーションテストのテキストログを図 14 に示す.正常に Message の送受信が行えているのが. 40. 200. 400 600 MessagePort Data Width[bit]. 800. 1000. 図 16 MessagePort のデータ幅の変化に対するエミュレーション 実行時間, 周波数, 転送バンド幅の変化. 確認できた.. 4.1 エミュレーション性能評価. した時の、実時間の計測で行った (図 15). パラメー. エミュレーション性能についての評価を行った. 性. タとして MessageInPort,MessageOutPort のデータ. 能評価に用いたマシンのスペックを表 3 に示す.. 幅を 16,32,64,128,256,512,768,1024[bit] と変化させ. 評価は 1 つの MessageInPort と 1 つの Message-. た場合の結果を表 4 に示す. 表 4 において時間とは. OutPort を持つ DUT に対し、Message の送信 (Send. Send と Serviceloop を 1 回ずつ実行した時の平均時. メソッド) と Serviceloop(クロックの供給と全 Mes-. 間である. 表 4 よりデータ幅が 16[bit] 時に 131[KHz]、. sageOutPort の読み出し) を交互に 10 万回繰りかえ ☆. ソフトウェアサイドから正常な Message の書き込みが行えて いるかを確認するために書き込まれた Message をそのまま返 すモジュールを DUT とした.. 1024[bit] 時に 29.6[KHz] でエミュレーションが行え ることが分かる (グラフを図 16 に示す).. MessagePort のデータ幅を変えた場合、PCI ドラ イバに渡すデータバファのサイズのみが変化しその他. −35−.

(6) 結果を示す. 表 5 ドライバ内の時間計測結果 (read). ☆. . 表 5 より PCI ドライバの read では. 16[bit] 時に 1277[KHz],1024[bit] 時に 46.9[KHz] で データ幅 [bit]. 時間 [us]. 周波数 [KHz]. 転送バンド幅 [MB/s]. 16 32 64 128 256 512 768 1024. 0.783 0.849 1.38 2.77 5.32 10.6 15.9 21.3. 1277 1178 725 361 188 94.3 62.8 46.9. 2.55 4.71 5.80 5.78 6.02 6.04 6.04 6.01. あった (グラフを図 17 に示す). 表 6 より PCI ドラ イバの write では 16[bit] 時に 704[KHz],1024[bit] 時 に 190[KHz] であった (グラフを図 18 に示す). この結果より,MessagePort のデータ幅が大きい場 合、特に Message read が遅くなることが分かった. 現 在の read 実装では unreachable な PCI 空間に 4Byte 単位で読み書きを行っており、ストアバッファが利用. 30. 7. 6. できる write に対し 4 倍の時間がかかったものと思わ. time frequency band width. 1200. れるが、詳細原因について現在調査中である.. 25 1000. 5. ま と め. 5. 4. 3. 15. 600. 400. 2. SCE-MI 仕様に沿ったハードウェア論理 (Transac-. time[us]. frequency[KHz]. band width[MB/s]. 20 800. tor), クラスライブラリ, 実装用ハードウェアモジュー. 10. 1. 200. 5. 0. 0. 0. ルとソフトウェアサイド初期化用パラメータファイル を自動生成する Infrastructure Linker を開発した. そ して, これらを使用し自動生成したモジュールとパラ 0. 200. 400 600 MessagePort Data Width[bit]. 800. 1000. メータファイルによる FPGA 上でのエミュレーショ. 図 17 MessagePort のデータ幅の変化に対する read システム コール実行時間, 周波数, 転送バンド幅の変化. ンを行い正常動作を確認した. また, エミュレーション 性能の評価より現在のドライバ仕様では DUT の入出 力ピン数が多い場合に性能が低下する結果となった.. 表 6 ドライバ内の時間計測結果 (write). 今後はドライバ内での性能をさらに詳細に計測し性 データ幅 [bit]. 時間 [us]. 周波数 [KHz]. 転送バンド幅 [MB/s]. 16 32 64 128 256 512 768 1024. 1.42 1.55 1.25 1.49 2.02 3.09 4.18 5.25. 704 645 800 671 495 324 239 190. 1.41 2.58 6.40 10.7 15.8 20.7 23.0 24.4. 能低下の原因特定と改善、複数 MessagePort を持つ. DUT によるエミュレーション動作の確認と評価を行 う予定である.. 参 考. 文 献. 1) accellera:”SCE-MI Reference Manual DRAFT”,2003 2) 早坂, 志水, 横山, 孕石:”第 9 回 ASIC デザインコ. 25. 6. 800. 20. ンテスト 規定課題 B PCI バスインタフェース”. time frequency band width. 第 22 回パルテノン研究会,2003. 5. 3) ALESSANDRO RUBINI ”LINUX デバイスド. 10. ライバ” O’REILLY ジャパン,1998. 600 time[us]. frequency[KHz]. Band Width[MB/s]. 4 15. 3. 謝. 400. 辞. 2. 5. 本研究において SCE-MI の実装評価は株式会社ア. 200. プリスターにおいて、同社所有の FPGA 評価ボード. 1. 0. 0. DN3000K10 と Linux 搭載 PC により行った. 評価の. 0 0. 200. 400 600 MessagePort Data Width[bit]. 800. 1000. 図 18 MessagePort のデータ幅の変化に対する write システム コール実行時間, 周波数, 転送バンド幅の変化. の処理には影響しない. このため、PCI ドライバ部分. 協力に感謝する.. ☆. だけの実行時間の変化について計測を行った. 表 5, 6 に PCI ドライバ内の read,write それぞれの時間計測. −36−. 表 5, 6 はドライバ内での時間であり、実際にはシステムコー ル呼び出しによるオーバーヘッドが加わる. ドライバ内で何も 実行せずシステムコールを呼ぶだけで消費されるクロックは約 1800[clk] であったので各 read,write に対し 1[us] のオーバー ヘッドとなる..

(7)

図 3 テストベンチの例
図 5 Transactor 内部のレジスタを PCI のメモリ空間,DUT の 入出力ピンにマッピングした様子
図 10 パラメータファイルのフォーマット
表 2 合成結果
+2

参照

関連したドキュメント

現状と課題.. 3R・適正処理の促進と「持続可能な資源利用」の推進 自然豊かで多様な生きものと 共生できる都市環境の継承 快適な大気環境、良質な土壌と 水循環の確保 環 境 施 策 の 横

[No.20 優良処理業者が市場で正当 に評価され、優位に立つことができる環 境の醸成].

第2章 環境影響評価の実施手順等 第1

これから取り組む 自らが汚染原因者となりうる環境負荷(ムダ)の 自らが汚染原因者となりうる環境負荷(ムダ)の 事業者

このような環境要素は一っの土地の構成要素になるが︑同時に他の上地をも流動し︑又は他の上地にあるそれらと

自動車環境管理計画書及び地球温暖化対策計 画書の対象事業者に対し、自動車の使用又は

  [ 外部環境 ] ・耐震化需要の高まり ・県内に非破壊検査業(コンクリート内部)を行うものが存しない   [

2017 年 12 月には、 CMA CGM は、 Total の子会社 Total Marine Fuels Global Solutions と、 2020 年以降 10 年間に年間 300,000 トンの LNG