English



マイクロアーキテクチャ設計入門
「超高速オンデマンド機能シミュレーション」



【イベント駆動方式シミュレーションと要求駆動方式シミュレーション】

従来技術のイベント駆動方式は,タイムホイール(time-wheel)と呼ばれるリングバッファを使うことで,各エントリにイベントのリストを格納して論理値の変化を追跡するシミュレーション方式です.

現在の時刻を示すポインタがあって,注目する時刻のイベントを格納したエントリを指しています.当該時刻のイベントによって引き起こされる新たなイベントを,該当する未来の時刻に対応するエントリに追加して,ポインタを進める形でシミュレーションが進みます.未来の時刻は数単位時間後であり得ますが,シミュレーションは1単位時間ずつ進みます.正確にはすべての論理素子の遅延時間の最大公約数時間ずつシミュレーションを進めることが出来ます.

イベント駆動方式のシミュレーションは複雑な論理回路の動作を追跡するには必須ですが,レジスタ転送レベル(register transfer level),略してRTLでは起こりえないイベントまで想定してしまっています.RTLはレジスタ間のデータ転送を扱う設計のレベルです.論理回路の振る舞いを扱うレベルはゲートレベルと言われます.RTLはゲートレベルより上位のレベルで,より高速なシミュレーションが期待されます.

筆者らは以下の論文で必要最小限の評価だけをして機能シミュレーションを行う要求駆動方式のシミュレータを提案しました.ここに「要求駆動」は「必要があって初めて評価が行われる」という意味に用いています.本要求駆動シミュレーション方式では「レジスタに対する代入文の右辺を評価する必要が生じて初めて」評価が行われます.「評価する必要が生じて初めて」はオンデマンド(on demand)であることを意味します.:

Ryuichi TAKAHASHI, Takeshi YOSHIMURA and Satoshi GOTO: "A VLSI Architecture Evaluation System," ACM,IEEE Proc. International Conference on Computer Design (ICCD), pp.60-63 (1986)


【オンデマンド機能シミュレーション】

筆者(高橋隆一)が当該機能シミュレーション方式を思いついたのはRTLでの機能シミュレータをどう作るか考えていた1983年のことでした.「組合せ回路の出力値を出力側から入力に遡ってオンデマンドで評価すれば良い」というアイデアでした.上記の発表は1986年のことであり,要求駆動方式シミュレーションの原典とされる下記より早い発表でした:

S. P. Smith, M. R. Mercer and B. Brodk: "Demand driven simulation: BACKSIM," Proc. Design Automation Conference,pp.181-187 (1987)


【C言語に翻訳しての実現】

筆者らの処理系の場合,RTLの動作記述はC言語の関数に分解することでシミュレータを実現していました.

RTLでの動作記述は原子領域(primitive sections)と名付けた動作単位に分解していました.各原子領域をC言語のひとつの関数に翻訳して,原子関数(primitive function)と呼んでいました.これらの関数をコンパイルし,実行時支援パッケージにリンクしていました.

シミュレーション時,メイン関数は以下を繰り返しました:

  1. 時刻を更新してクロック信号を進めること
  2. アクティブな原子関数を呼び出すこと
  3. 記憶素子の値を更新すること

組合せ回路の出力が入力に遡る形にオンデマンドで評価されることから,このシミュレーション手法を「オンデマンド機能シミュレーション」と呼ばせていただいています.

1980年代において,RTLでの話ですが,私どものシミュレータは,当時世界最高速とされていたVerilog-XL(TM)より高速でした♪無論,

  1. Verilog-XL(TM)の本領はゲートレベルの超高速シミュレーションであり,私どもの処理系はゲートレベルを扱えなかったこと,
  2. 私どもの処理系ではコンパイルに多くの時間を要する一方で,Verilog-XL(TM)はコンパイル時間が当時のプロセッサの記述全体に対してで数秒だったこと
などから公平な比較ではありません.しかしこのことはRTLではより高速なシミュレーションが行えるという事実を否定するものではないと考えます.

上述したプロトタイプではC言語に翻訳する実現方法を用いましたが,後に高位合成(ハイレベルシンセシス)も行える処理系A^2DL-DA(エイ・スクエア・ディーエル・ディーエイ)を作る際には構造体で張られるグラフの上を巡回(traverse)する形で実現していました.

筆者がNECで開発していた独自のオートマトン記述A^2DL(エイ・スクエア・ディーエル)の記述例


が用いていたシミュレーション方式について詳しくは高橋隆一:”ブール式を要求駆動で評価するRTレベルシミュレーション,”情処研報 設計自動化51-8(1990)でご覧になれます.


【ハードウエア記述言語DDLでのハンドシェークの記述】

「オンデマンド機能シミュレーション」をC言語に翻訳する形で実現するにはクリアすべきハードルがありました.イベントを意識しない記述です.

J. R. Duley とD. L. Dietmeyerらが提案したハードウエア記述言語DDL[5]はオートマトン記述を行っている点で好ましく思えました.ここに「オートマトン記述」は状態単位にレジスタ間転送を列挙して次の状態を指定していることを意味します.状態遷移はシーケンサと呼ばれる制御部に直接対応させることが出来るので,回路の合成をし易いという点で,ハードウエアの記述に適していると思われました.ただし,DDLは,以下のように,イベントを意識した記述を行っていました:


オートマトン記述をするDDLというハードウエア記述言語は端子への代入文を含んでいたのです.プリフェッチユニット(PFU)は状態"P0"で"REQ_PFU"という端子に値1を代入して"RAM"に対してイベントを発生させています."REQ_PFU"はプリフェッチユニットによるバス使用要求です.右向きの矢印は状態遷移先の指定です.状態P1に遷移してアクノレッジ信号"ACK_PFU"を待つことになります.

以下は"REQ_PFU"という信号を受ける"RAM"というオートマトンの記述です:


"REQ_PFU"は上述したプリフェッチユニット(PFU)からのリクエスト信号,"REQ_EXU"は実行ユニット(EXU)からのリクエスト信号です."RAM"はこれら2つの端子"REQ_PFU"と"REQ_EXU"を監視していて,実行ユニットからのリクエストがないか,優先権がプリフェッチユニットにある場合にプリフェッチユニットへのアクノレッジ信号"ACK_PFU"を返します.DDLではアクノレッジ信号も端子への代入という形で記述されていました.

上述した端子への代入の記述はシミュレータを実現するにあたってイベントの追跡を強います.C言語に翻訳してシミュレーションをしようとしていた私どもは,C言語の関数に翻訳し易くするために下記のような記述を工夫しました.A^2DL(エイ・スクエア・ディーエル)のlogic文です:


【SSMDの「静的」とは】

私どものlogic文の記述では"REQ_PFU"という端子に値1を代入する記述はなくなり,"REQ_PFU"という端子はこのイベントの元になるフリップフロップにとって代わります."ACK_PFU"は組み合わせ回路の出力にとって代わり,次のクロックに同期してオンデマンドで評価されます.このような記述は追跡すべきイベントがないという意味において静的(static)であると見做すことができます.

実に20年以上してからですが,2008年になってVerilog HDLの本[1]を書く機会に恵まれたとき,静的なハンドシェークの記述を含むオートマトン記述を静的オートマトン記述(static state machine description),略してSSMDと呼ばせていただくことにしました:

高橋隆一:::Verilog HDLによるシステム開発と設計, 共立出版(2008)ISBN978-4-320-12222-2


SSMDが「静的」であるとは「イベントを発生させる端子(信号線)への代入は記述しない」という意味なのです.言うまでもなく,SSMDのセールスポイントは,まずはオートマトン記述を行っている点にあります.オートマトン記述では状態単位にレジスタ間転送を列挙して状態遷移先を指定することで手続き的な記述を行っています.手続き的な記述を行っているという意味で,オートマトン記述は動作記述だと言えます.オートマトン記述ならどのようなレジスタ間転送を行うかを各状態毎に記述して次の状態を指定するだけで良く,マイクロアーキテクチャ設計を進めながら書き下すことが出来ます.生産性を劇的に向上させます.

レジスタ間転送の箇条書きであり,手続き的な記述をしていないという点で,世の中で言う「RTL記述」は構造記述だと言えます.世の中で言う「RTL記述」では,当該レジスタに対するデータ転送をあらゆる場合についてまとめて記述する必要があるため,RTLでの設計が終ってからでないと書き下せません.

静的なハンドシェークのA^2DLによるlogic文に対応するVerilog HDLでの記述は下記となります:


Verilog HDLでもオートマトン記述は行うことが出来,A^2DLと同様に高レベル自動設計システムの入力として用いることが出来ます.拙著[1]では上記の記述に対応する回路図を示し,"`define"で状態割り当てをする静的オートマトン記述,SSMDを詳述しています.

以下はInternational Journal of Computer Science and Network Security(IJCSNS), Vol.16 No.10, pp.116-121 (2016)で紹介した静的オートマトン記述(SSMD)の記述例です:


超高速オンデマンド機能シミュレーション技術については下記でも紹介しています:

高橋隆一:電子機器設計に活かすディジタル代数学,科学情報出版 (2013) ISBN978-4-904774-11-3


この本自体は電子機器設計を支える代数学の基本を網羅的に扱った著作になっています.内定をもらって,これから実務に付こうという大学生や大学院生にお勧めの本になっています.


高橋隆一(たかはし・りゅういち)



文献


  1. Ryuich TAKAHASHI and Yoshiyasu TAKEFUJI: "Instructional Scaffolding for ASIP Design Education with System Verilog Assertion considering Situated Nature of Learning," International Journal of Computer Science and Network Security, Vol.16 No.10, pp.116-121 (2016)

    SystemVerilog Assertion(SVA)を含む書き物です.あらためてSSMDを紹介しています.


  2. 高橋隆一: Verilog HDLによるシステム開発と設計, 共立出版(2008)ISBN978-4-320-12222-2

    SSMDを詳述している拙著です.記述例が「Verilog HDLによるシステム開発と設計」のWEBサイトでダウンロードできます.


  3. 高橋隆一: ”ブール式を要求駆動で評価するRTレベルシミュレーション”…IPSJ 情処研報 設計自動化51-8(1990)

    要求駆動方式の機能シミュレーションの二通りの実現方法を紹介しています.


  4. S. P. Smith, M. R. Mercer and B. Brodk: "Demand driven simulation: BACKSIM," Proc. Design Automation Conference,pp.181-187(1987)

    要求駆動方式シミュレーションの原典とされる文献ですが,私どもの発表はこの前の年(下記)でした.


  5. Ryuichi TAKAHASHI, Takeshi YOSHIMURA and Satoshi GOTO: "A VLSI Architecture Evaluation System," Proc. International Conference on Computer Design, pp.60-63(1986)

    C言語に翻訳する形での超高速オンデマンド機能シミュレーションを初めて発表した国際会議の書き物です.特許は書いておらず,超高速オンデマンド機能シミュレーション技術は無料でご自由にお使いいただけます.


  6. J. R. Duley and D. L. Dietmeyer: "A Digital System Design Language(DDL)," IEEE Transactions on Computers, Vol. C-17, No.9, pp.850-861 (1968)

    オートマトン記述の原典です.参考にさせていただきました.




NEC若手社員時代の高橋隆一に戻る



NEC主任時代の高橋隆一:オートマトン記述からの高位合成に戻る



広島市立大学・助教授/准教授時代の高橋隆一のページに戻る



「Verilog HDLによるシステム開発と設計」のWEBサイトへ



マイクロコンピュータ設計教育環境City-1のホームページへ



高橋隆一のパーソナル・ホームページのトップページに戻る