メディア

高位設計手法にアサーションを適用アスペクト指向プログラミングの活用で(4/4 ページ)

» 2010年04月01日 00時00分 公開
[遠藤 侑介 (東芝 研究開発センター),EDN]
前のページへ 1|2|3|4       

AOPを用いたアサーション記述

 続いて、AOPのポイントカットを用いてPSLの構文を拡張することで、高位設計にアサーションを適用可能になることを示す。


■述語enter/leaveによる解決

表4ASystemCの拡張構文 表4ASystemCの拡張構文 
図3時系列上で拡張構文がとる値 図3時系列上で拡張構文がとる値 
リスト9leave/enterを使用して記述した拡張PSLコード リスト9leave/enterを使用して記述した拡張PSLコード 
リスト10リスト9の拡張PSLコードを基に生成されたアスペクト リスト10リスト9の拡張PSLコードを基に生成されたアスペクト 
リスト11リスト9の拡張PSLコードを基に生成されたPSLコード リスト11リスト9の拡張PSLコードを基に生成されたPSLコード 

 筆者らは、PSLのブーリアン層を独自に拡張し、関数の呼び出しに関するイベントを指定する構文enterとleaveを導入した(表4)。いずれも関数名(またはメソッド名)を引数にとる。enterは「その関数の呼び出しが開始した」というイベントを意味し、一方のleaveは「その関数の呼び出しが終了した」というイベントを意味する。これらの構文は、関数呼び出しというシミュレーションにおける連続的な時系列上でのイベントを、クロックという離散的な時系列上に反映させることを意図して設計されている(図3)。

 これら拡張PSLの構文を使えば、リスト6のアサーションはリスト9のように記述することができる。

■enter/leaveの実装方法

 基本的なアプローチは、リスト5、リスト6の例で示したようなコードの書き換えを、ASystemCのアスペクトを利用して自動化することで実現している。筆者らは、拡張PSLが指定する高位のイベントを基に低位のイベント(変数の変化)を発生させるASystemCのアスペクトと、高位のイベントの代わりに低位のイベントを指定する通常のPSLを生成するツールを開発している。ASystemCを用いて、生成されたアスペクトをSystemCの設計記述に適用することで、従来のPSLでは指定できなかった高位のイベントを反映する低位のイベントが作られる。さらに、生成されたアサーションが満たされているかどうかを従来のPSLベースの検証ソフトで判定することにより、最終的に拡張PSLによるアサーションベース検証が行える。

 具体例を挙げると、リスト9の拡張PSLコードを基にして、リスト10のアスペクトが生成される。また、PSL自体はリスト11のように変換される。

 リスト10のアスペクトは、「must_read -> read」が呼び出された直後にはleave_must_read_receivedに1を代入し、「bus -> read」が呼び出された直後にはenter_bus_read_enteringに1を代入することでフラグを立てる。waitメソッドによって時間が経過すると、PSL検証ソフトによってPSLが検証される。検証が終わったら、leave_must_read_received、enter_bus_read_enteringの両フラグを降ろす必要があるため、waitメソッドの直後で両者に0を代入するようになっている。

現状の課題、今後の展開

 本稿で紹介したASystemCの拡張PSLでは、enterとleaveという2種の述語を追加している。これらの述語はアドホックに考案したものではない。AOPのポイントカットを“借用”したものであり、その意味論や実装方法についてはすでに研究/議論されている。併せて、筆者らは「変数を参照した時点」や「変数に値を代入した時点」といったほかのイベントに対する述語の導入も検討している。加えて、AOPの分野で必要とされ、提案されてきたポイントカットを順次導入すれば、必要となるイベントの大半は指定できるようになると考えている。

 上記の拡張PSLの実装は、現状ではASystemCの使用例を示すための題材に過ぎず、実用的なレベルで考えると種々の制約がある。例えば、waitの直後でフラグを降ろす動作を追加しているため、SystemCのSC_THREADでの実装にしか対応していない。また、1回のwaitの呼び出しで2クロック以上消費するケースにも対応していない。これらについては、将来のASystemCの拡張によって、より柔軟にサポートできるよう検討しているところだ。

 アサーションベース検証以外でのASystemCの活用法についても現在検討中の段階にある。最適化処理や、セキュリティ処理といった横断的になりやすい関心事の実装に用いることや、シミュレーションによる動的なメトリクスやログの取得、性能や必要リソース/回路規模の見積もり、リセット回路やキャッシュ戦略のように横断的になりがちな実装をアスペクトとしてモジュール化するといった応用が考えられる。

参考文献

『高位設計のためのプロパティ記述言語の拡張』(遠藤侑介/今井健男/岩政幹人/片岡欣夫、DAシンポジウム2007)

『A Pointcut-based Assertion for High-level Hardware Design』(Yusuke Endoh/Takeo Imai/Mikito Iwamasa/Yoshio Kataoka、The 7th AOSD Workshop on Aspects, Components, and Patterns for Infrastructure Software[ACP4IS '08])

『ASystemC:システム記述言語のアスペクト指向拡張』(遠藤侑介、第22回 回路とシステム軽井沢ワークショップ、2009年)

前のページへ 1|2|3|4       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSフィード

公式SNS

EDN 海外ネットワーク

All material on this site Copyright © ITmedia, Inc. All Rights Reserved.
This site contains articles under license from AspenCore LLC.