JP2018200634A - SystemCモデル生成方法およびSystemCモデル生成プログラム - Google Patents

SystemCモデル生成方法およびSystemCモデル生成プログラム Download PDF

Info

Publication number
JP2018200634A
JP2018200634A JP2017105814A JP2017105814A JP2018200634A JP 2018200634 A JP2018200634 A JP 2018200634A JP 2017105814 A JP2017105814 A JP 2017105814A JP 2017105814 A JP2017105814 A JP 2017105814A JP 2018200634 A JP2018200634 A JP 2018200634A
Authority
JP
Japan
Prior art keywords
model
systemc
syntax tree
hdl
tree model
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2017105814A
Other languages
English (en)
Inventor
公彰 山下
Kimiaki Yamashita
公彰 山下
賢一 今里
Kenichi Imazato
賢一 今里
豊 田宮
Yutaka Tamiya
豊 田宮
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2017105814A priority Critical patent/JP2018200634A/ja
Priority to CN201880028506.XA priority patent/CN110612526A/zh
Priority to EP18809491.6A priority patent/EP3633529A4/en
Priority to PCT/JP2018/012695 priority patent/WO2018220974A1/ja
Publication of JP2018200634A publication Critical patent/JP2018200634A/ja
Priority to US16/654,060 priority patent/US20200050714A1/en
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9027Trees
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/903Querying
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/32Circuit design at the digital level
    • G06F30/327Logic synthesis; Behaviour synthesis, e.g. mapping logic, HDL to netlist, high-level language to RTL or netlist
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/32Circuit design at the digital level
    • G06F30/33Design verification, e.g. functional simulation or model checking

Abstract

【課題】HDL動作モデルを論理回路設計に使えるようにすることができるSystemCモデル生成方法およびSystemCモデル生成プログラムの提供を図る。【解決手段】HDLのシミュレーション構文で設計したHDL動作モデルBMから、高位合成が可能なSystemCモデルSCMを生成するSystemCモデル生成方法であって、前記HDL動作モデルを解析して構文木モデルを生成し(PA)、前記構文木モデルを解析して解析情報(AI)を取り出し(PMA01,PMA02)、前記構文木モデルおよび前記解析情報に基づいて前記構文木モデルを再構成し(PMR01,PMR02)、前記SystemCモデルを生成する(PSCG)。【選択図】図7

Description

本発明は、SystemCモデル生成方法およびSystemCモデル生成プログラムに関する。
近年、例えば、LSIやFPGA(Field-Programmable Gate Array)の論理回路を設計する場合、Verilog−HDLやVHDLといったハードウェア記述言語(HDL:Hardware Description Language)が利用されている。そして、HDL(言語)によるレジスタ転送レベル(RTL:Register Transfer Level)設計が主流になっている。
RTL設計とは、HDL言語を用いてレジスタ転送レベルの抽象度で設計したモデル(RTLモデル)を、論理合成ツールでゲートレベルのネットリスト(ゲート回路)に変換する設計手法のことである。ここで、HDL言語でシーケンス処理回路を設計する場合、論理合成が可能なRTLで設計するには、例えば、状態遷移回路(ステートマシン)と組み合わせ回路に分離した構造で設計を行う。
ところで、従来、HDL言語によるRTL設計の手法としては、様々な提案がなされている。
特開2013−020329号公報
前述したように、HDL言語によるRTL設計は、例えば、状態遷移回路と組み合わせ回路に分離した構造で設計を行うが、状態遷移回路のRTL設計は、論理が複雑になるため設計難易度が高く、設計に要する工数(時間および費用)が嵩むことになる。さらに、設計が複雑になると、それに伴って、不具合も生じ易いことにもなる。
また、HDL言語のシミュレーション構文で設計した動作モデル(HDL動作モデル)は、作成は容易に行えても、ネットリストに変換するための論理合成ツールは提供されておらず、動作モデルを使用してネットリストに変換するのは難しい。なお、本明細書において、HDL動作モデルは、例えば、高位合成が可能なSystemCモデルを含まず、Verilog−HDLやVHDLといった純然たるHDL言語のシミュレーション構文で設計した動作モデルとして使用している。
一実施形態によれば、HDLのシミュレーション構文で設計したHDL動作モデルから、高位合成が可能なSystemCモデルを生成するSystemCモデル生成方法が提供される。
前記SystemCモデル生成方法は、前記HDL動作モデルを解析して構文木モデルを生成し、前記構文木モデルを解析して解析情報を取り出す。さらに、前記SystemCモデル生成方法は、前記構文木モデルおよび前記解析情報に基づいて前記構文木モデルを再構成し、前記SystemCモデルを生成する。
開示のSystemCモデル生成方法およびSystemCモデル生成プログラムは、HDL動作モデルを論理回路設計に使えるようにすることができるという効果を奏する。
図1は、論理回路設計手法の一例を模式的に示す図である。 図2は、図1に示す論理回路設計におけるRTL設計の一例を説明するための図(その1)である。 図3は、図1に示す論理回路設計におけるRTL設計の一例を説明するための図(その2)である。 図4は、動作レベル設計の一例を説明するための図である。 図5は、論理回路設計手法における課題を模式的に示す図である。 図6は、本実施形態に係るSystemCモデル生成方法を適用した論理回路設計手法の一例を模式的に示す図である。 図7は、本実施形態に係るSystemCモデル生成方法の全体構成を説明するためのフローチャートである。 図8は、SystemCモデル生成方法の一実施例を説明するためのフローチャート(その1)である。 図9は、SystemCモデル生成方法の一実施例を説明するためのフローチャート(その2)である。 図10は、図8および図9に示すSystemCモデル生成方法のフローチャートにおけるそれぞれの処理内容を説明するための図である。 図11は、図8および図9に示すSystemCモデル生成方法のフローチャートにおけるそれぞれの処理の依存関係を説明するための図である。 図12は、図8および図9に示すSystemCモデル生成方法のフローチャートにおけるそれぞれの処理を説明するための図(その1)である。 図13は、図8および図9に示すSystemCモデル生成方法のフローチャートにおけるそれぞれの処理を説明するための図(その2)である。 図14は、図8および図9に示すSystemCモデル生成方法のフローチャートにおけるそれぞれの処理を説明するための図(その3)である。 図15は、図8および図9に示すSystemCモデル生成方法のフローチャートにおけるそれぞれの処理を説明するための図(その4)である。 図16は、図8および図9に示すSystemCモデル生成方法のフローチャートにおけるそれぞれの処理を説明するための図(その5)である。 図17は、図8および図9に示すSystemCモデル生成方法のフローチャートにおけるそれぞれの処理を説明するための図(その6)である。 図18は、図8および図9に示すSystemCモデル生成方法のフローチャートにおけるそれぞれの処理を説明するための図(その7)である。 図19は、図8および図9に示すSystemCモデル生成方法を適用して、HDL動作モデルからSystemCモデルを生成する処理の一例を説明するための図(その1)である。 図20は、図8および図9に示すSystemCモデル生成方法を適用して、HDL動作モデルからSystemCモデルを生成する処理の一例を説明するための図(その2)である。 図21は、図8および図9に示すSystemCモデル生成方法を適用して、HDL動作モデルからSystemCモデルを生成する処理の一例を説明するための図(その3)である。 図22は、図8および図9に示すSystemCモデル生成方法を適用して、HDL動作モデルからSystemCモデルを生成する処理の一例を説明するための図(その4)である。 図23は、図8および図9に示すSystemCモデル生成方法を適用して、HDL動作モデルからSystemCモデルを生成する処理の一例を説明するための図(その5)である。 図24は、図8および図9に示すSystemCモデル生成方法を適用して、HDL動作モデルからSystemCモデルを生成する処理の一例を説明するための図(その6)である。 図25は、図8および図9に示すSystemCモデル生成方法を適用して、HDL動作モデルからSystemCモデルを生成する処理の一例を説明するための図(その7)である。 図26は、図8および図9に示すSystemCモデル生成方法を適用して、HDL動作モデルからSystemCモデルを生成する処理の一例を説明するための図(その8)である。 図27は、図8および図9に示すSystemCモデル生成方法を適用して、HDL動作モデルからSystemCモデルを生成する処理の一例を説明するための図(その9)である。 図28は、図8および図9に示すSystemCモデル生成方法を適用して、HDL動作モデルからSystemCモデルを生成する処理の一例を説明するための図(その10)である。 図29は、図8および図9に示すSystemCモデル生成方法を適用して、HDL動作モデルからSystemCモデルを生成する処理の一例を説明するための図(その11)である。 図30は、図8および図9に示すSystemCモデル生成方法を適用して、HDL動作モデルからSystemCモデルを生成する処理の一例を説明するための図(その12)である。 図31は、図8および図9に示すSystemCモデル生成方法を適用して、HDL動作モデルからSystemCモデルを生成する処理の他の例を説明するための図(その1)である。 図32は、図8および図9に示すSystemCモデル生成方法を適用して、HDL動作モデルからSystemCモデルを生成する処理の他の例を説明するための図(その2)である。 図33は、図8および図9に示すSystemCモデル生成方法を適用して、HDL動作モデルからSystemCモデルを生成する処理の他の例を説明するための図(その3)である。 図34は、図8および図9に示すSystemCモデル生成方法を適用して、HDL動作モデルからSystemCモデルを生成する処理の他の例を説明するための図(その4)である。 図35は、図8および図9に示すSystemCモデル生成方法を適用して、HDL動作モデルからSystemCモデルを生成する処理の他の例を説明するための図(その5)である。 図36は、図8および図9に示すSystemCモデル生成方法を適用して、HDL動作モデルからSystemCモデルを生成する処理の他の例を説明するための図(その6)である。 図37は、図8および図9に示すSystemCモデル生成方法を適用して、HDL動作モデルからSystemCモデルを生成する処理の他の例を説明するための図(その7)である。 図38は、図8および図9に示すSystemCモデル生成方法を適用して、HDL動作モデルからSystemCモデルを生成する処理の他の例を説明するための図(その8)である。
まず、本実施例のSystemCモデル生成方法およびSystemCモデル生成プログラムを詳述する前に、図1〜図5を参照して、論理回路設計手法の例およびその課題を説明する。
図1は、論理回路設計手法の一例を模式的に示す図である。図1に示されるように、論理回路設計手法の一例は、例えば、RTLモデル(レジスタ転送レベルモデル)1に対して論理合成ツール2を適用し、ネットリスト(ゲート回路)3に変換する。
ところで、現在、LSIやFPGAの論理回路設計は、Verilog−HDLやVHDLといったHDL言語(ハードウェア記述言語)によるRTL設計(レジスタ転送レベル設計)が主流である。前述したように、HDL言語でシーケンス処理回路を設計する場合、論理合成が可能なRTLで設計するには、例えば、ステートマシンと組み合わせ回路に分離した構造で設計を行う。
図2および図3は、図1に示す論理回路設計におけるRTL設計の一例を説明するための図であり、図2(a)は、シーケンス処理のRTL設計の一例を示し、図2(b)は、ステートマシンを示す。また、図3(a)は、RTLで記述したステートマシンを示し、図3(b)は、RTLで記述した組み合わせ回路を示す。図2(a)に示されるように、この例では、リクエスト信号reqを受信したら、6クロックのデータ信号data『100110』と、そのデータdataの最後にアクノリッジ信号ackを返す。
すなわち、図2(a)のRTL設計を行う場合、図2(b)のステートマシンで、図3(a)のreqを受信したら6クロック分をカウントするカウンタを設計し、図3(b)のカウンタの値に従って、出力するデータ値を定義する。
しかしながら、このステートマシンのRTL設計は、論理が複雑になるため設計難易度が高く、設計に要する時間および費用も嵩むことになり、さらに、設計が複雑になるのに伴って、不具合も生じやすくなる。すなわち、シーケンス処理のRTL設計を行う場合、考慮することが多くて面倒であり、また、分かり難いため、間違え易くて修正し難いといった課題がある。
図4は、動作レベル設計の一例を説明するための図であり、図4(a)は、前述した図2(a)と同様のものであり、図4(b)は、シーケンス処理の動作モデル設計の一例を示す。図4(b)に示されるように、例えば、HDL動作モデル等の動作モデル設計は、図4(a)に示すタイムチャート(動作仕様)に基づいて、クロック毎の動作を定義すればよいため、簡単で分かり易く、間違え難くて修正し易いといった利点がある。すなわち、動作レベル設計は、シーケンス制御回路を容易に作成することができる。
図5は、論理回路設計手法における課題を模式的に示す図である。図5に示されるように、RTLモデル1は、論理合成ツール2を適用することにより、ネットリスト3に変換することが可能である。しかしながら、論理合成ツール2は、例えば、HDL言語のシミュレーション構文には対応しておらず、HDL言語のシミュレーション構文で設計した動作モデル4は、論理シミュレータ上では動作しても論理合成を行うのが困難であった。すなわち、動作モデル4は、論理合成ツール2を適用してネットリスト3に変換することが難しいといった課題がある。
以下、SystemCモデル生成方法およびSystemCモデル生成プログラムの実施例を、添付図面を参照して詳述する。図6は、本実施形態に係るSystemCモデル生成方法を適用した論理回路設計手法の一例を模式的に示す図である。
図6と、前述した図1の比較から明らかなように、本実施形態のSystemCモデル生成方法およびSystemCモデル生成プログラムは、図6におけるSystemCモデル生成部41に対応する。すなわち、SystemCモデル生成部41は、HDL動作モデル(BM)40からSystemCモデル(SCM)42を生成(変換)する。さらに、SystemCモデル生成部41は、合成スクリプト43(SS)を生成してもよい。そして、SystemCモデル42および合成スクリプト43に対して、高位合成ツール44を適用することにより、RTLモデル1を生成する。なお、生成されたこのRTLモデル1に対しては、前述した図1と同様に、論理合成ツール2を適用することで、ネットリスト3に変換(生成)することができる。すなわち、本実施形態のSystemCモデル生成方法およびSystemCモデル生成プログラムによれば、HDL動作モデルを論理回路設計に使えるようにすることが可能になる。
ここで、SystemCは、既に、提供および使用されており、C/C++言語をベースにした言語による高位合成設計を行うためのものである。このSystemCは、例えば、純然たるHDLであるVerilog−HDLやVHDLに比べて、動作レベルモデリング等が、よりシステムに近寄った記述言語である。
本実施形態のSystemCモデル生成方法は、HDLのシミュレーション用構文で設計した動作モデルを、高位合成可能なSystemCモデルに変換(生成)するためのものである。そして、例えば、高位合成でRTLに変換することにより、HDL言語のシミュレーション構文で設計した動作モデルをネットリストに変換し、論理回路設計に活用することが可能になる。なお、本実施形態は、コンピュータのLinux(登録商標)やWindows(登録商標)等のOS(Operating System)上で実行させるSystemCモデル生成プログラムとして提供することもできるのはいうまでもない。
そして、本実施形態のSystemCモデル生成方法およびSystemCモデル生成プログラムによれば、HDL言語のシミュレーション構文で設計した動作モデルを論理合成の設計に使えるようにすることができる。その結果、シーケンス制御処理回路を、シミュレーション構文を用いた動作モデルで簡潔かつ容易に設計することが可能になり、例えば、RTL設計と比較して、設計工数(設計期間および費用)の低減および不具合実装リスクの削減等を行うことができる。
図7は、本実施形態に係るSystemCモデル生成方法の全体構成を説明するためのフローチャートである。図7において、参照符号BMはHDL動作モデル、SFは設定ファイル、AIは解析情報、SCMはSystemCモデル、そして、SSは合成スクリプトを示す。これらHDL動作モデルBM、設定ファイルSF、解析情報AI、SystemCモデルSCMおよび合成スクリプトSSは、例えば、DRAM(Dynamic Random Access Memory)等のメモリに格納されて保持される。
ここで、HDL動作モデルBMは、Verilog−HDLやVHDL等のHDL言語のシミュレーション構文で設計した動作モデルである。また、SystemCモデルSCMは、例えば、高位合成ツールを適用して論理合成可能なRTLを生成(RTLモデルに変換)する高位合成が可能なものである。なお、図6および図1を参照して説明したように、RTLモデル(1)は、論理合成ツール(2)を適用することで、ネットリスト(3)に変換することができる。また、前述したように、HDL動作モデルBMは、例えば、高位合成が可能なSystemCモデルを含まず、Verilog−HDLやVHDLといった純然たるHDL言語のシミュレーション構文で設計した動作モデルを表している。
図7に示されるように、本実施形態のSystemCモデル生成方法は、HDL動作モデルBMを解析して構文木モデルSTM01を生成し(PA)、さらに、構文木モデルSTM01,STM02を解析して解析情報AIを取り出す(PMA01,PMA02)。ここで、HDL動作モデルBMを解析して構文木モデルSTM01を生成する処理PAは、HDL動作モデルBMの字句および構文を解析して行う。
そして、構文木モデルSTM01,STM02および解析情報AIに基づいて構文木モデルを再構成し(PMR01,PMR02),再構成された構文木モデルSTM02,STM03を生成する。この構文木モデルおよび解析情報に基づいた構文木モデルの再構成処理(PMR01,PMR02)は、必要に応じて複数回行われ、最終的な構文木モデル(最終構文木モデル)STMfが生成される。
構文木モデルの再構成処理PMR01,PMR02,…は、それぞれの処理の依存関係に基づいた順番に従って構文木モデルSTM01,STM02,…の異なる解析情報AIを取り出し、その異なる解析情報に基づいて構文木モデルの異なる再構成を行う。すなわち、構文木モデル(モデル)の再構成処理には、それぞれの処理に対する依存関係があるため、依存関係を考慮した処理の順番で、異なる内容のモデル解析処理とモデル再構成処理を実施する。
そして、最終構文木モデルSTMfを生成し、最終的なモデル解析を行って(PMAf)最終的な解析情報を取得し、その最終的な解析情報を使用してSystemC(コード)を生成し(PSCG)し、SystemCモデルSCMを生成する。最終的なモデル解析処理PMAfは、SystemCコード生成に必要な情報の事前調査であり、例えば、高位合成時に問題のある記述のチェック等を行う。
なお、設定ファイルSFは、例えば、クロック、リセット信号およびメモリ指定といった様々なデータを含み、そのデータは、構文木モデルの再構成処理PMR01,PMR02等で使用されるだけでなく、合成スクリプトSSの生成処理PSSGでも使用される。すなわち、合成スクリプトの生成処理PSSGは、最終構文木モデルSTMfの情報および設定ファイルSFからの情報(様々なデータ)に基づいて、合成スクリプトSSを生成する。なお、SystemCモデルSCM(42)および合成スクリプトSS(43)に対して、高位合成ツール44を適用することでRTLモデル(1)を生成するのは、図6を参照して説明した通りである。
図8および図9は、SystemCモデル生成方法の一実施例を説明するためのフローチャートであり、上述した図7に示すSystemCモデル生成方法の一例をより詳細に説明するためのものである。
まず、設定ファイルSFは、例えば、ユーザーが次のような情報を設定する。すなわち、設定ファイルSFの情報(データ)としては、例えば、入力ソースファイル、トップモジュール名、トップモジュールのクロック情報、トップモジュールのリセット情報、対象高位合成ツール、および、高位合成の合成制約等が含まれる。ここで、トップモジュールのクロック情報としては、ポート名および動作エッジ等であり、トップモジュールのリセット情報としては、ポート名、同期リセットか非同期リセットかの情報、および、極性等である。また、高位合成の合成制約としては、メモリの指定、および、その他の制約(例えば、クロック周期等)である。
次に、解析情報AIとしては、アトリビュート情報AI1、モジュール情報(定義、入れ子関係)AI3、クロック/リセット情報AI5、および、タスク/ファンクション(task/function)情報AI611が含まれる。さらに、解析情報AIとしては、変数情報AI612、メモリ情報AI62、および、信号線アクセス情報AI63が含まれる。
アトリビュート情報AI1は、例えば、各アトリビュート記述について、アトリビュート名、値および適用対象等の情報を格納したテーブルとして形成することができる。また、モジュール情報AI3は、例えば、各モジュールについて、モジュール名、ポート情報、パラメータ情報、内部でインスタンスしているモジュールおよび抽象構文木内のノード等の情報を格納したテーブルとして形成することができる。
クロック/リセット情報AI5は、例えば、各モジュールについて、モジュール名、クロック信号名およびリセット信号名等の情報を格納したテーブルとして形成することができる。さらに、task/function情報AI611は、例えば、各タスク/ファンクションについて、定義されているモジュール、名前、引数および戻り値の情報、並びに、抽象構文木内のノード等の情報を格納したテーブルとして形成することができる。
変数情報AI612は、例えば、各変数について、定義されているスコープ、変数名、種別および型情報等の情報を格納したテーブルとして形成することができる。ここで、種別としては、例えば、出力(ouput)、入力(input)、レジスタ(reg)および配線(wire)のどれかである。また、型情報としては、例えば、符号あり/なし、ビット幅、配列の次元数および配列の各次元の要素数等が含まれる。
メモリ情報AI62は、例えば、メモリになる変数について、定義されているスコープ、変数名およびメモリ構成の情報を格納したテーブルとして形成することができる。ここで、メモリ構成としては、メモリのポート数およびレイテンシ等が含まれる。そして、信号線アクセス情報AI63は、例えば、各プロセスについて、定義されているモジュール名、プロセス名、ライトしている信号線名およびリードしている信号線名の情報を格納したテーブルとして形成することができる。
図10は、図8および図9に示すSystemCモデル生成方法のフローチャートにおけるそれぞれの処理内容を説明するための図である。図10に示されるように、アトリビュート取得&ノード削除処理PMR1(PMA1)では、アトリビュートの情報を取得し、構文木からは削除する。モジュール定義正規化処理PMR2では、モジュール定義のポート宣言およびパラメータ(parameter)宣言の形式を合わせ、モジュール定義解析処理PMA3では、モジュール定義の取得および各モジュールがインスタンスしているサブモジュールの取得を行う。
未使用モジュール削除処理PMR3では、インスタンスされていないモジュール定義を構文木から削除し、インスタンス記述正規化処理PMR4では、サブモジュールのインスタンスの形式を合わせる(ポート接続、および、パラメータオーバーライド等)。また、クロック/リセット解析処理PMA5では、クロック信号およびリセット信号の特定を行う。ここで、トップモジュールのクロックおよびリセット信号は、設定ファイルSFから取得し、サブモジュールのクロックおよびリセット信号は、信号線の接続から取得する。
さらに、インスタンス記述修正処理PMR5では、サブモジュールのインスタンス記述の変更(SystemC用にポートの型を合わせ、例えば、wire変数およびassign文の追加を行う)。assign文をalways@*に変換する処理PMR6では、assign文をalways@*に変換し、各種定義(変数/task/function)の取得処理PMA61では、各種定義(変数/task/function)の取得を行う。
また、メモリ情報取得処理PMA62では、設定ファイルSFからメモリ情報の取得およびメモリになる変数の特定を行い、信号線アクセスの解析処理PMA63では、各プロセス(initial文、always文)の信号線アクセスの解析を行う。さらに、always@*のセンシティビティリスト解決処理PMR7では、例えば、always@*のような記述をalways@(a or b)のような記述に変換する。
そして、高位合成ツール別変換処理PMR8では、高位合成ツール別の変換を行い、高位合成用のチェック処理PMAfでは、高位合成用のチェックを行う。ここで、高位合成用のチェックには、例えば、initial文は指定の形式になっているか、always文でセンシティビティリスト抜けはないか、不定値を使っていないか、および、組み合わせ回路alwaysからメモリへアクセスしていないか等の様々なチェックが含まれる。
図11は、図8および図9に示すSystemCモデル生成方法のフローチャートにおけるそれぞれの処理の依存関係を説明するための図である。図11において、各ブロックは、図8および図9における各処理を示し、各ブロックを結ぶ接続線(矢印付き直線)D1〜D24は、それぞれの処理における依存関係を示す。
接続線D1に示されるように、モジュール定義正規化処理PMR2は、構文木に対する操作であるため、構文木モデルの生成(字句解析/構文解析)処理PAに依存する。同様に、D10に示されるように、アトリビュート取得&ノード削除処理PMR1も、構文木に対する操作であるため、字句解析/構文解析処理PAに依存する。また、D2に示されるように、モジュール定義解析処理PMA3は、モジュール定義が1つの形式に統一されていた方が解析し易いため、モジュール定義正規化処理PMR2に依存する。さらに、D3に示されるように、インスタンス記述正規化処理PMR4は、順番による接続を名前による接続に変換する際に、モジュール定義情報を参照するため、モジュール定義解析処理PMA3に依存する。また、D4に示されるように、クロック/リセット解析処理PMA5は、クロック信号/リセット信号の接続関係を調べる際に、接続先が明確な形式(名前による接続)になっている方が解析し易いため、インスタンス記述正規化処理PMR4に依存する。
次に、D5に示されるように、インスタンス記述修正処理PMR5は、クロック信号/リセット信号の接続が他と違う方法で接続(例えば、wireを経由せずに接続)するように、インスタンス記述修正するため、クロック/リセット解析処理PMA5に依存する。同様に、D6に示されるように、assign文をalways@*に変換する処理PMR6は、インスタンス記述の修正でassign文が追加されるため、インスタンス記述修正処理PMR5に依存する。
さらに、D17に示されるように、各種定義の取得処理PMA61は、インスタンス記述の修正でwriteが追加されるため、インスタンス記述修正処理PMR5に依存する。また、D18に示されるように、メモリ情報取得処理PMA62は、どの変数がメモリかを特定するために変数の情報を使用することになるため、各種定義の取得処理PMA61に依存する。同様に、D20に示されるように、信号線アクセスの解析処理PMA63は、各プロセスがどの信号線をアクセスしているかを解析するために、変数の情報や呼び出しているtask/functionの情報を使用するため、各種定義の取得処理PMA61に依存する。
また、always@*のセンシティビティリスト解決処理PMR7は、D7に示されるように、always文が追加されるため、assign文をalways@*に変換する処理PMR6に依存し、さらに、D21に示されるように、信号線アクセスの解析処理PMA63にも依存する。すなわち、always@*のセンシティビティリスト解決処理PMR7は、センシティビティリストの導出に各プロセスがどの信号線にアクセスしているかの情報を使用するため、assign文をalways@*に変換する処理PMR6だけでなく、信号線アクセスの解析処理PMA63にも依存することになる。
さらに、D8に示されるように、高位合成ツール別変換処理PMR8は、最終的な構文木モデルで高位合成ツール別の変換を実施したいため、always@*のセンシティビティリスト解決処理PMR7に依存するのが好ましい。例えば、変換中の構文木でPMR8の処理を実施すると、高位合成ツール別に変換したものが途中で適合しない形に変換されてしまう、或いは、途中の変換で高位合成ツール用に変換しなければならないような構文木に変換されてしまうといった虞がある。すなわち、接続線D8は、高位合成ツール別変換処理PMR8が、always@*のセンシティビティリスト解決処理PMR7によるセンシティビティリストの導出を必要とするということではなく、この処理(変換)以外の変換が全て完了しているのが求められるということを意味する。
そして、D19に示されるように、SystemC生成処理PSCGは、メモリになる変数と信号線になる変数では、SystemCで生成するコードが変わるため、メモリ情報取得処理PMA62に依存する。また、D13に示されるように、未使用モジュール削除処理PMR3は、未使用モジュールを特定する際に、モジュール定義情報を参照するので、モジュール定義解析処理PMA3に依存する。さらに、D9に示されるように、SystemC生成処理PSCGは、全ての変換が完了したものに対して、SystemCの生成を行いたいので、高位合成ツール別変換処理PMR8にも依存する。さらに、D14に示されるように、SystemC生成処理PSCGは、未使用モジュールはSystemC(コード)に含めないため、未使用モジュール削除処理PMR3に依存する。また、D11に示されるように、SystemC生成処理PSCGは、SystemCの生成でアトリビュート情報を使用するため、アトリビュート取得&ノード削除処理PMR1にも依存する。すなわち、SystemC生成処理PSCGは、メモリ情報取得処理PMA62、高位合成ツール別変換処理PMR8、未使用モジュール削除処理PMR3およびアトリビュート取得&ノード削除処理PMR1の4つの処理に依存することになる。
また、D23に示されるように、高位合成用のチェック処理PMAfは、全ての変換が完了したものに対して、高位合成が可能かどうかの最終的な判断を行いたいので、高位合成ツール別変換処理PMR8に依存する。さらに、D15に示されるように、高位合成用のチェック処理PMAfは、未使用モジュールに対しては高位合成用のチェックは不要なので、未使用モジュール削除処理PMR3にも依存する。すなわち、高位合成用のチェック処理PMAfは、高位合成ツール別変換処理PMR8および未使用モジュール削除処理PMR3の2つの処理に依存することになる。
そして、D24に示されるように、合成スクリプト生成処理PSSGは、全ての変換が完了したものに対して、合成スクリプトを生成したいので、高位合成ツール別変換処理PMR8に依存する。さらに、D16に示されるように、合成スクリプト生成処理PSSGは、未使用モジュールに対しては高位合成スクリプトの生成は不要なので、未使用モジュール削除処理PMR3にも依存する。また、D22に示されるように、合成スクリプト生成処理PSSGは、メモリ合成制約の生成にメモリ情報を使用するため、メモリ情報取得処理PMA62にも依存する。そして、D12に示されるように、合成スクリプト生成処理PSSGは、合成スクリプトの生成でアトリビュート情報を使用するため、アトリビュート取得&ノード削除処理PMR1にも依存する。すなわち、合成スクリプト生成処理PSSGは、高位合成ツール別変換処理PMR8、未使用モジュール削除処理PMR3、メモリ情報取得処理PMA62およびアトリビュート取得&ノード削除処理PMR1の4つの処理に依存することになる。
このように、本実施形態のSystemCモデル生成方法において、それぞれの処理は、相互に依存しているため、この各処理の間の依存関係を考慮して処理(変換)を行うことが求められる。すなわち、構文木モデルおよび解析情報に基づいて構文木モデルを再構成する様々な処理は、それぞれの処理の依存関係に基づいた順番に従って、構文木モデルの異なる解析情報を取り出し、その異なる解析情報に基づいて構文木モデルの異なる再構成を行う。そして、最終的な構文木モデル(最終構文木モデル)を生成し、SystemCモデルSCMおよび合成スクリプトSSを生成する。
図12〜図18は、図8および図9に示すSystemCモデル生成方法のフローチャートにおけるそれぞれの処理を説明するための図である。ここで、図12は、アトリビュートの削除(アトリビュート取得&ノード削除処理PMR1(PMA1))を説明するためのものであり、図13は、未使用モジュール削除処理PMR3を説明するためのものである。また、図14および図15は、インスタンス記述正規化処理PMR4を説明するためのものであり、図16は、always@*のセンシティビティリスト解決処理PMR7を説明するためのものである。そして、図17および図18は、高位合成ツール別変換処理PMR8を説明するためのものである。
図8および図9に示すSystemCモデル生成方法のフローチャートにおいて、まず、字句解析/構文解析処理PAは、入力ソース(HDL動作モデルBM)に対して、字句および構文の解析を行って、抽象構文木モデル(構文木モデルSTM1)を生成する。次に、図12を参照して、アトリビュート取得&ノード削除処理PMR1(PMA1))を説明する。ここで、図12(a)は、抽象構文木を走査して、アトリビュートを使用している個所を見つける様子の一例を示し、図12(b)は、アトリビュートを削除している様子の一例を示す。
図12(a)に示されるように、抽象構文木(構文木モデルSTM1)を走査して、アトリビュートを使用している個所UP1を検出し、アトリビュートの情報をテーブル(アトリビュート情報AI1)に追加する。図12(a)に示す例では、アトリビュート情報AI1に追加するアトリビュート情報は、例えば、次の通りである。
アトリビュート名: dont_touch
値: "true"
適用対象: test.debug
また、図12(b)に示されるように、アトリビュートのノードを構文木モデル(抽象構文木)STM1から削除(モデル再構成)し、構文木モデルSTM2を生成する。なお、図12(a)以降の各図において、削除個所は、消し線で示し、追加個所は、アンダーラインで示す。
モジュール定義正規化処理PMR2は、モジュール定義においてVerilog−HDLでは、例えば、ポートの宣言、および、パラメータの宣言の項目について、複数の記述方法があるが、構文木モデル上の表現を1つの形式に統一する。すなわち、構文木モデルSTM2に対して、モジュール定義正規化処理PMR2を行って構文木モデルSTM3を生成する。次に、モジュール定義解析処理PMA3では、構文木モデルSTM3を走査して、モジュール情報を取得し、テーブル(モジュール情報AI3)に追加する。
未使用モジュール削除処理PMR3は、インスタンスされていないモジュール定義を構文木モデルSTM3から削除して構文木モデルSTM4を生成(再構成)するもので、例えば、次の手順により行う。
(1) 設定ファイルSFからトップモジュール名を取得する。
(2) モジュール情報を使用して、トップモジュールからインスタンスされているモジュールをすべて列挙する。ここで、列挙するモジュールは、例えば、間接的にインスタンスされているモジュールを含む。なお、間接的にインスタンスされているモジュールとは、トップモジュールからインスタンスされているモジュールの中でインスタンスされているモジュール、或いは、そのモジュールからさらにインスタンスされているモジュール等である。
(3) モジュール情報に登録されているモジュールで、(2)で列挙したモジュールに含まれないものを未使用モジュールとする。
(4) 未使用モジュールの定義を構文木モデルSTM3から削除する。
すなわち、未使用モジュール削除処理PMR3は、構文木モデルSTM3の情報および解析情報AIに基づいて、構文木モデルSTM4を生成する。なお、後に、図19〜図30を参照して説明する処理の一例(第1変換例)、並びに、図31〜図38を参照して説明する処理の他の例(第2変換例)を説明するが、ここでは、第1変換例における未使用モジュールの判定処理を説明する。すなわち、第1変換例におけるモジュール情報は、図13のようになっており、図13では、モジュール情報の内、第1変換例の処理に必要な情報のみ記載している。具体的に、未使用モジュール削除処理PMR3は、例えば、次の手順により行う。
(1) 設定ファイルSFからトップモジュール名topを取得する。
(2) モジュール情報より、topがインスタンスしているモジュールはmul、add。
(3) モジュール情報より、mulがインスタンスしているモジュールはなし。
(4) モジュール情報より、addがインスタンスしているモジュールはなし。
したがって、インスタンス化されているモジュールは、top、mul、addの3つであり、unusedモジュールは、インスタンス化されていないので未使用モジュールとする。
また、インスタンス記述正規化処理PMR4は、モジュールのインスタンスにおいて、例えば、Verilog−HDLでは、ポートの接続、および、パラメータのオーバーライドの項目について、複数の記述方法がある。そこで、構文木モデルSTM4における表現を1つの形式に統一する。具体的に、インスタンス記述正規化処理PMR4は、例えば、順番によるポートの接続/パラメータのオーバーライドを、名前によるポートの接続/パラメータのオーバーライドに変更することで行う。すなわち、インスタンス記述正規化処理PMR4は、構文木モデルSTM4の情報および解析情報AIに基づいて、構文木モデルSTM5を生成する。
ここで、図14は、変換前の構文木モデル(STM4)のVerilog−HDL記述の一例を示し、図15(a)は、この記述でのモジュール情報を示し、図15(b)は、再構成(正規化,変換)された構文木モデルSTM5を示す。ただし、図15(a)では、モジュール情報のうち、この変換に必要な項目のみを示す。図15(a)に示されるように、topにおけるmulモジュールのインスタンス化の記述では、順番によるポートの接続/パラメータのオーバーライドが使用されている。モジュール情報よりmulのポートはA,B,C、パラメータはWであることが分かるので、m_mulのポートAにはAを接続、ポートBにはBを接続、ポートCにはmを接続、パラメータWには8をオーバーライドしていることが分かる。
これにより、mulモジュールのインスタンス化の記述を名前によるポートの接続/パラメータのオーバーライドに修正(再構成)すると、例えば、「mul#(8) m_mul(A, B, m);」を、『mul#(.W(8)) m_mul(.A(A), .B(B), .C(m));』に書き換える。すなわち、図15(b)に示されるように、『mul#(8) m_mul(A, B, m);』を削除(消し線個所は、削除)して、『mul#(.W(8)) m_mul(.A(A), .B(B), .C(m));』を追加(アンダーライン個所は、追加)することになる。
さらに、クロック/リセット解析処理PMA5は、各モジュールのクロック信号およびリセット信号を特定する。具体的に、クロック/リセット解析処理PMA5は、例えば、次の手順により行う。
(1) 設定ファイルSFに記載されているクロック信号名およびリセット信号名から、トップモジュールのクロック信号およびリセット信号を特定する。
(2) (1)信号が下位のモジュールのポートに接続されていた場合、そのポートをクロック信号およびリセット信号であると判定する。
また、インスタンス記述修正処理PMR5は、SystemCでのポート接続の制限を満たすようにインスタンス記述を修正する。すなわち、インスタンス記述修正処理PMR5は、構文木モデルSTM5の情報および解析情報AIに基づいて、構文木モデルSTM6を生成する。具体的に、インスタンス記述修正処理PMR5は、例えば、ポートの型とポートに接続する信号線の型を合わせるように修正することで行う。さらに、各種定義(変数/task/function)の取得処理PMA61は、構文木モデルSTM6を走査して、変数/task/functionの情報を取得することで行う。そして、メモリ情報取得処理PMA62は、設定ファイルSFで指定されたメモリになる変数を特定し、また、信号線アクセスの解析処理PMA63は、各プロセスが読み出し(リードし)ている信号および書き込み(ライトし)ている信号を特定する。
さらに、assign文をalways@*に変換する処理PMR6は、assign文をalways@*に変換し、always@*のセンシティビティリスト解決処理PMR7は、always文のセンシティビティリストを明示的に示さない記述(always@*またはalways@(*))を、明示的に示す記述に変換(修正)する。すなわち、always@*のセンシティビティリスト解決処理PMR7は、構文木モデルSTM7の情報および解析情報AIに基づいて、構文木モデルSTM8を生成する。図16は、always@*のセンシティビティリスト解決処理PMR7を説明するためのものであり、図16(a)は、具体的な一例の記述を示し。図16(b)は、信号線アクセス情報の例を示し、そして、図16(c)は、図16(a)の記述を修正したものを示す。
図16(a)に示す記述では、mulモジュールのalways文はセンシティビティリストを明示的に示さない記述になっている。また、図16(b)に示されるように、信号線アクセス情報において、always_0は、プロセスを識別するためにツールがつけた名前になっている。この信号線アクセス情報により、mulモジュールのalways文がリードしている信号はAとBであることが分かる。これより、always文を、センシティビティリストを明示的に示す記述に修正すると、図16(c)のようになる。すなわち、図16(a)と、図16(c)の比較から明らかなように、「always@(*) C = A*B;」は、『always@(A or B) C = A*B;』に修正される。
また、高位合成ツール別変換処理PMR8は、ターゲットの高位合成ツールに適合するように、構文木モデルSTM8を変換(修正)して構文木モデルSTM9(最終構文木モデルSTMf)を生成する。すなわち、高位合成ツール別変換処理PMR8は、構文木モデルSTM8の情報、解析情報AIおよび設定ファイルSFの情報に基づいて、最終構文木モデルSTMfを生成する。なお、ターゲットの高位合成ツールによって様々な変換が考えられるが、一例として一部の高位合成ツールの制限である「出力信号(SystemCではsc_out)からのリードは禁止」を回避するように修正する例を示す。すなわち、図17および図18は、高位合成ツール別変換処理PMR8を説明するためのものであるり、「出力信号(SystemCではsc_out)からのリードは禁止」を回避する例を示す。
ここで、図17(a)は、修正前の構文木モデル(STM8)を示し、図17(b)および図17(c)は、信号線アクセス情報および変数情報を示し、そして、図18は、修正後の構文木モデル(STM9(最終構文木モデルSTMf))を示す。なお、図17(a)(図18)では、出力信号からのリードを行う記述が含まれているが、ここでは、「C <= C+ A;」において出力信号Cからのリードが行われている。次に、高位合成ツール別変換処理PMR8の具体的な手順を示す。
(1) リードされている出力信号を特定する。なお、信号線アクセス情報よりリードされている信号はAとCであり、変数情報よりAはinputなので除外し、そして、Cはoutputなので対象になる。
(2) 中間変数(ここでは、tmpC)を導入して、Cへのリード/ライトを中間変数へのリード/ライトに変更し、tmpCをCへライトするalways文を追加する。すなわち、図17(a)に示す記述(構文木モデル(STM8))は、図18に示す記述(構文木モデルSTM9(STMf))のように修正されることになる。
さらに、高位合成用のチェック処理PMAfは、高位合成可能な記述であるかどうかをチェックする。具体的に、高位合成用のチェック処理PMAfでは、例えば、initial文は指定の形式になっているか、always文でセンシティビティリスト抜けはないか、不定値を使っていないか、および、組み合わせ回路alwaysからメモリへアクセスしていないか等の様々なチェックが行われる。
そして、SystemC生成処理PSCGは、構文木モデルSTM9(最終構文木モデルSTMf)を走査しながらSystemCコードの生成を行う。ここで、SystemC生成処理PSCGでは、SystemCコード生成がし易いように構文木の変換が行われているので、SystemCコードの生成処理は、単純な操作で行うことが可能である。すなわち、SystemC生成処理PSCGは、最終構文木モデルSTMfの情報および解析情報に基づいて、SystemCモデルSCMを生成する。なお、合成スクリプト生成処理PSSGは、最終構文木モデルSTMfおよび設定ファイルSFの情報(データ)に基づいて、高位合成用の合成スクリプトSSを生成する。
このようにして得られたSystemCモデルSMCは、例えば、高位合成ツールを適用して論理合成可能なRTLモデルに変換することができ、そのRTLモデルに対して、論理合成ツールを適用することで、ネットリストに変換することができる。すなわち、本実施形態のSystemCモデル生成方法によれば、HDL動作モデルを論理回路設計に適用することが可能になる。
以下、上述したSystemCモデル生成方法の一実施例を適用して、HDL動作モデルからSystemCモデルを生成する2つの処理の例を、図19〜図30、並びに、図31〜図38を参照して説明する。すなわち、図19〜図30は、図8および図9に示すSystemCモデル生成方法を適用して、HDL動作モデルからSystemCモデルを生成する処理の一例を説明するための図である。なお、図19〜図30(図31〜図38も同様)において、例示した処理内容は、特別な意味を持つものではなく、単なる例に過ぎない。
図19は、HDL動作モデルBMの一例を示すものであり、図20は、図19に示すHDL動作モデルBMに対して、字句解析/構文解析処理PAを行って変換(生成、モデル再構成)した後の構文木モデルSTM1を示す。すなわち、図19に示すHDL動作モデルBMは、前述した字句解析/構文解析処理PAを行うことにより、図20のような構文木モデルSTM1に変換(生成)されるのが分かる。
図21は、構文木モデルの一例を示し、図21(a)は、ブロック図形式で表したものであり、図21(b)は、記述形式(Verilog−HDL:テキスト)で表したものである。すなわち、図21(a)に示すブロック図形式の構文木モデルは、図21(b)の記述形式として示すことができ、両者は同じものを表している。なお、本明細書では、理解を容易化するために、構文木モデルをテキストにより説明しているが、ブロック図形式或いは他の記述形式等を用いて表現することも可能なのはいうまでもない。
図22は、アトリビュート取得&ノード削除処理PMR1(PMA1)を説明するためのものであり、構文木モデルSTM2を示す。なお、アトリビュートの削除に関しては、図12(a)および図12(b)を参照して説明したのと同様である。すなわち、図22では、前述した図12(b)と同様に、アトリビュート取得&ノード削除処理PMR1により、「(* dont_touch = "true" *)」が削除され、構文木モデルSTM2が生成されるのが分かる。
図23は、モジュール定義正規化処理PMR2を説明するためのものであり、構文木モデルSTM3を示す。すなわち、図23では、モジュール定義正規化処理PMR2により、構文木モデル(STM2)上の表現が1つの形式に統され、構文木モデルSTM3が生成されるのが分かる。ここで、入力信号および出力信号は、モジュール内で定義され(STM2の「module top(input … output reg DONE);」は、STM3では、『module top(CLK, XRESET, START, A, B, DONE); … output reg DONE;』に変換され)、1つの宣言文では、1つの変数のみ宣言する(STM2の「input [7:0] A, B,」は、STM3では、『input [7:0] A;』および『input [7:0] B;』の2つに分割される)ようになっている。さらに、パラメータ(parameter)は、モジュール内で定義する(STM2の「module mul#(parameter W = 32) … output reg [W-1:0] C;」は、STM3では、『module mul(A, B, C); … output reg [W-1:0] C;』に変換される)ようになっている。
図24は、未使用モジュール削除処理PMR3を説明するためのものであり、構文木モデルSTM4を示す。すなわち、図24では、未使用モジュール削除処理PMR3により、インスタンスされていないモジュール定義が構文木モデルSTM3から削除され、構文木モデルSTM4が生成されるのが分かる。具体的に、構文木モデルSTM3の「module unused(A, B, C); … endmodule // unused」が削除され、構文木モデルSTM4が生成される。
図25は、インスタンス記述正規化処理PMR4を説明するためのものであり、構文木モデルSTM5を示す。ここで、インスタンス記述正規化処理PMR4は、図14および図15を参照して説明した通りであり、図25は、前述した図15(b)に対応する。すなわち、図25に示されるように、インスタンス記述正規化処理PMR4を行うことにより、parameter、入力信号および出力信号は名前で接続され、STM4の「mul#(8) m_mul(A, B, m);」は、『mul#(.W(8)) m_mul(.A(A), .B(B), .C(m));』に変換されて、STM5が生成される。
図26は、インスタンス記述修正処理PMR5を説明するためのものであり、構文木モデルSTM6を示す。ここで、SystemCでは、同じ型のsc_signalでなければ接続できないため、ポートと同じ型のwireを経由して接続する。すなわち、STM5の「mul#(.W(8)) m_mul(.A(A), .B(B), .C(m));」および「add#(.W(4)) m_add(.A(m[7:4]), .B(m[3:0]), .C(n));」は、それぞれ『localparam m_mul_W_ = 8; … mul#(.W(m_mul_W_)) m_mul(.A(m_mul_A_), .B(m_mul_B_), .C(m_mul_C_));』および『localparam m_add_W_ = 4; … add#(.W(m_add_W_)) m_add(.A(m_add_A_), .B(m_add_B_), .C(m_add_C_));』に変換されて、STM6が生成される。
図27は、assign文をalways@*に変換する処理PMR6を説明するためのものであり、構文木モデルSTM7を示す。すなわち、assign文をalways@*に変換する処理PMR6は、assign文をalways@*に変換する。具体的に、STM6の「wire [m_mul_W_-1:0] m_mul_A_; assign m_mul_A_ = A;」および「wire [m_add_W_-1:0] m_add_A_; assign m_add_A_ = m[7:4];」は、それぞれ『reg [m_mul_W_-1:0] m_mul_A_; always@(*) m_mul_A_ = A; … wire [m_mul_W_-1:0] m_mul_C_; always@(*) m = m_mul_C_;』および『reg [m_add_W_-1:0] m_add_A_; always@(*) m_add_A_ = m[7:4]; … wire [m_add_W_-1:0] m_add_C_; always@(*) n = m_add_C_;』に変換されて、STM7が生成される。
図28は、always@*のセンシティビティリスト解決処理PMR7を説明するためのものであり、構文木モデルSTM8を示す。ここで、always@*のセンシティビティリスト解決処理PMR7は、always文のセンシティビティリストを明示的に示さない記述(always@*またはalways@(*))を、明示的に示す記述に変換する。すなわち、例えば、STM6の「reg [m_mul_W_-1:0] m_mul_A_; always@(*) m_mul_A_ = A;」および「always@(*) C = A*B;」等の記載は、『reg [m_mul_W_-1:0] m_mul_A_; always@(A) m_mul_A_ = A;』および『always@(A or B) C = A*B;』等に変換されて、STM8が生成される。なお、図28の一部は、前述した図16(c)に対応する。なお、高位合成ツール別変換処理PMR8は、例えば、高位合成ツールによっては合成不可となる記述があるので、合成可能となるように構文木モデルSTM8を処理して、構文木モデルSTM9(最終構文木モデルSTMf)を生成するものであるが、ここでは、その説明を省略する。
図29および図30は、SystemC生成処理PSCGを説明するためのものであり、SystemCモデルSMCを示す。ここで、図29は、SystemCモデルSMCのヘッダファイルを示し、図30は、SystemCモデルSMCのソースファイルを示す。上述したように、図19に示すHDL動作モデルBMに対して、図8および図9に示すSystemCモデル生成方法を適用することにより、図29および図30に示されるようなSystemCモデルSMCを生成することが可能なのが分かる。なお、このようにして得られたSystemCモデルSMCは、例えば、高位合成ツールを適用して論理合成可能なRTLを生成(RTLモデルに変換)することができ、そのRTLモデル(1)に対して、論理合成ツール(2)を適用することで、ネットリスト(3)に変換することができるのは前述した通りである。
次に、図31〜図38を参照して、HDL動作モデルからSystemCモデルを生成する処理の他の例を説明する。図31は、シーケンス処理の一例を示し、リクエスト信号reqを受信したら、2バイト(16ビット)のデータ0xab,0xcdを各バイトの回から1ビット単位で出力し、終了したらアクノリッジ信号ackを返すものを示す。図32は、図31に示すシーケンス処理に対応したHDL動作モデルBMの一例を示すものである。
まず、アトリビュート取得&ノード削除処理PMR1(PMA1)を行うが、図32に示すHDL動作モデルBMでは、アトリビュートの削除処理を行っても構文木モデルは変化しない。すなわち、構文木モデルSTM2は、構文木モデルSTM1と同じものになっている。図33は、モジュール定義正規化処理PMR2を説明するためのものであり、構文木モデルSTM3を示す。すなわち、図33では、モジュール定義正規化処理PMR2により、構文木モデル(STM2)上の表現が1つの形式に統され、構文木モデルSTM3が生成されるのが分かる。ここで、入力信号および出力信号は、モジュール内で定義され(STM2の「module seq(input clk, xrst, … output out);」および「module serializer(input CLK, output reg O);」は、STM3では、それぞれ『module seq(clk, xrst, req, ack, out); … output out;』および『module serializer(CLK, O); … output reg O;』に変換され)るようになっている。なお、未使用モジュール削除処理PMR3を行っても構文木モデルは変化せず、構文木モデルSTM4は、構文木モデルSTM3と同じものになっている。
図34は、インスタンス記述正規化処理PMR4を説明するためのものであり、構文木モデルSTM5を示す。ここで、インスタンス記述正規化処理PMR4は、例えば、モジュール情報からポート名を取得し、名前による接続に修正する。すなわち、図34に示されるように、STM4(STM3)の「m_serializer(clk, out);」は、『m_serializer(.CLK(clk), .O(out));』に変換されて、STM5が生成される。また、図35は、インスタンス記述修正処理PMR5を説明するためのものであり、構文木モデルSTM6を示す。ここで、ポートと同じ型のwireを経由して接続させるために、STM5の「serializer#(.W(8)) m_serializer(.CLK(clk), .O(out));」は、『localparam m_serializer_W = 8; … m_serializer(.CLK(clk), .O(m_serializer_O));』に変換されて、STM6が生成される。
図36は、assign文をalways@*に変換する処理PMR6を説明するためのものであり、構文木モデルSTM7を示す。すなわち、assign文をalways@*に変換する処理PMR6は、assign文をalways@*に変換するが、具体的に、STM6の「assign out = m_serializer_O;」は、『always@* out = m_serializer_O;』に変換されて、STM7が生成される。
図37は、always@*のセンシティビティリスト解決処理PMR7を説明するためのものであり、構文木モデルSTM8を示す。ここで、always@*のセンシティビティリスト解決処理PMR7は、always文でセンシティビティリストを明示的に指定するように変換するもので、具体的に、STM6の「always@* out = m_serializer_O;」は、『always@(m_serializer_O) out = m_serializer_O;』に変換されて、STM8が生成される。なお、always文でリードされている信号は、例えば、信号線アクセス情報から取得することができる。また、高位合成ツール別変換処理PMR8を行っても構文木モデルは変化せず、構文木モデルSTM9(最終構文木モデルSTMf)は、構文木モデルSTM8と同じものになっている。
図38は、SystemC生成処理PSCGを説明するためのものであり、SystemCモデルSMCを示す。上述したように、図32に示すHDL動作モデルBMに対して、図8および図9に示すSystemCモデル生成方法を適用することにより、図38に示されるようなSystemCモデルSMCを生成することが可能なのが分かる。ここで、得られたSystemCモデルSMCは、例えば、高位合成ツールを適用して論理合成可能なRTLモデルに変換することができ、そのRTLモデルに対して、論理合成ツールを適用することで、ネットリストに変換することができる。なお、上述した図19〜図30、並びに、図31〜図38を参照して説明した変換例は、単なる例であり、本実施形態のSystemCモデル生成方法は、様々なHDL動作モデルBMに対して幅広く適用することが可能である。さらに、本実施形態は、コンピュータのLinux(登録商標)やWindows(登録商標)等のOS上で実行させるSystemCモデル生成プログラムとして提供することもできる。
以上、実施形態を説明したが、ここに記載したすべての例や条件は、発明および技術に適用する発明の概念の理解を助ける目的で記載されたものであり、特に記載された例や条件は発明の範囲を制限することを意図するものではない。また、明細書のそのような記載は、発明の利点および欠点を示すものでもない。発明の実施形態を詳細に記載したが、各種の変更、置き換え、変形が発明の精神および範囲を逸脱することなく行えることが理解されるべきである。
以上の実施例を含む実施形態に関し、さらに、以下の付記を開示する。
(付記1)
HDLのシミュレーション構文で設計したHDL動作モデルから、高位合成が可能なSystemCモデルを生成するSystemCモデル生成方法であって、
前記HDL動作モデルを解析して構文木モデルを生成し、
前記構文木モデルを解析して解析情報を取り出し、
前記構文木モデルおよび前記解析情報に基づいて前記構文木モデルを再構成し、前記SystemCモデルを生成する、
ことを特徴とするSystemCモデル生成方法。
(付記2)
前記HDL動作モデルを解析して前記構文木モデルを生成するのは、
前記HDL動作モデルの字句および構文を解析して行う、
ことを特徴とする付記1に記載のSystemCモデル生成方法。
(付記3)
前記構文木モデルおよび前記解析情報に基づいて前記構文木モデルを再構成するのは、
それぞれの処理の依存関係に基づいた順番に従って、前記構文木モデルの異なる解析情報を取り出し、
前記異なる解析情報に基づいて前記構文木モデルの異なる再構成を行い、最終構文木モデルを生成する、
ことを特徴とする付記1または付記2に記載のSystemCモデル生成方法。
(付記4)
さらに、
前記最終構文木モデルを解析して最終解析情報を取り出し、
前記最終構文木モデルおよび前記最終解析情報に基づいて、前記SystemCモデルを生成する、
ことを特徴とする付記3に記載のSystemCモデル生成方法。
(付記5)
前記構文木モデルおよび前記解析情報に基づいて前記構文木モデルを再構成するのは、
インスタンスされていないモジュール定義を構文木から削除する未使用モジュール削除処理、
サブモジュールのインスタンスの形式を合わせるインスタンス記述正規化処理、
前記サブモジュールのインスタンス記述を変更するインスタンス記述修正処理、
assign文をalways@*に変換するalways@*のセンシティビティリスト解決処理、および、
高位合成ツール別の変換を行う高位合成ツール別変換処理の少なくとも1つの処理を含む、
ことを特徴とする付記1乃至付記4のいずれか1項に記載のSystemCモデル生成方法。
(付記6)
前記未使用モジュール削除処理は、
未使用モジュールを特定する際に、モジュール定義情報を参照するのため、モジュール定義解析処理、および、前記構文木モデルに依存する、
ことを特徴とする付記5に記載のSystemCモデル生成方法。
(付記7)
前記インスタンス記述正規化処理は、
順番による接続を名前による接続に変換する際に、モジュール定義情報を参照するため、モジュール定義解析処理、および、前記構文木モデルに依存する、
ことを特徴とする付記5に記載のSystemCモデル生成方法。
(付記8)
前記インスタンス記述修正処理は、
クロック信号およびリセット信号の接続が他と違う方法で接続するようにインスタンス記述修正するため、クロック/リセット解析処理、および、前記構文木モデルに依存する、
ことを特徴とする付記5に記載のSystemCモデル生成方法。
(付記9)
前記センシティビティリスト解決処理は、
always文が追加されると共に、センシティビティリストの導出に各プロセスがどの信号線にアクセスしているかの情報を使用するため、assign文をalways@*に変換する処理、信号線アクセスの解析処理、および、前記構文木モデルに依存する、
ことを特徴とする付記5に記載のSystemCモデル生成方法。
(付記10)
前記高位合成ツール別変換処理は、
最終構文木モデルで高位合成ツール別の変換を実施するため、前記always@*のセンシティビティリスト解決処理、および、前記構文木モデルに依存する、
ことを特徴とする付記5に記載のSystemCモデル生成方法。
(付記11)
前記高位合成は、前記SystemCモデルから高位合成ツールを使用して論理合成可能なRTLを生成し、
生成された前記RTLに対して、論理合成ツールを適用してネットリストに変換する、
ことを特徴とする付記1乃至付記10のいずれか1項に記載のSystemCモデル生成方法。
(付記12)
前記HDL動作モデルは、Verilog−HDLまたはVHDLである、
ことを特徴とする付記1乃至付記11のいずれか1項に記載のSystemCモデル生成方法。
(付記13)
HDLのシミュレーション構文で設計したHDL動作モデルから、高位合成が可能なSystemCモデルを生成するSystemCモデル生成プログラムであって、
コンピュータに、
前記HDL動作モデルを解析して構文木モデルを生成し、
前記構文木モデルを解析して解析情報を取り出し、
前記構文木モデルおよび前記解析情報に基づいて前記構文木モデルを再構成し、前記SystemCモデルを生成する、処理を実行させる、
ことを特徴とするSystemCモデル生成プログラム。
(付記14)
前記構文木モデルおよび前記解析情報に基づいて前記構文木モデルを再構成する処理は、
それぞれの処理の依存関係に基づいた順番に従って、前記構文木モデルの異なる解析情報を取り出し、
前記異なる解析情報に基づいて前記構文木モデルの異なる再構成を行い、最終構文木モデルを生成する、処理を含む、
ことを特徴とする付記13に記載のSystemCモデル生成プログラム。
(付記15)
さらに、
前記コンピュータに、
前記最終構文木モデルを解析して最終解析情報を取り出し、
前記最終構文木モデルおよび前記最終解析情報に基づいて、前記SystemCモデルを生成する、処理を実行させる、
ことを特徴とする付記14に記載のSystemCモデル生成プログラム。
(付記16)
前記構文木モデルおよび前記解析情報に基づいて前記構文木モデルを再構成する処理は、
インスタンスされていないモジュール定義を構文木から削除する未使用モジュール削除処理、
サブモジュールのインスタンスの形式を合わせるインスタンス記述正規化処理、
前記サブモジュールのインスタンス記述を変更するインスタンス記述修正処理、
assign文をalways@*に変換するalways@*のセンシティビティリスト解決処理、および、
高位合成ツール別の変換を行う高位合成ツール別変換処理の少なくとも1つの処理を含む、
ことを特徴とする付記13乃至付記15のいずれか1項に記載のSystemCモデル生成プログラム。
1 RTLモデル
2 論理合成ツール
3 ネットリスト(ゲート回路)
4 動作モデル
40,BM HDL動作モデル
41 SystemCモデル生成部
42,SCM SystemCモデル
43,SS 合成スクリプト
44 高位合成ツール
AI 解析情報
PMA01,PMA02,PMA3,PMA5,PMA6,PMA61,PMA63 モデル解析処理
PMAf 高位合成用のチェック処理
PMR01,PMR02,PMR1〜PMR8 モデル再構成処理
PSCG SystemC生成処理
PSSG 合成スクリプト生成処理
SF 設定ファイル
STM01〜STM03,STM1〜STM9 構文木モデル
STMf 最終構文木モデル

Claims (7)

  1. HDLのシミュレーション構文で設計したHDL動作モデルから、高位合成が可能なSystemCモデルを生成するSystemCモデル生成方法であって、
    前記HDL動作モデルを解析して構文木モデルを生成し、
    前記構文木モデルを解析して解析情報を取り出し、
    前記構文木モデルおよび前記解析情報に基づいて前記構文木モデルを再構成し、前記SystemCモデルを生成する、
    ことを特徴とするSystemCモデル生成方法。
  2. 前記HDL動作モデルを解析して前記構文木モデルを生成するのは、
    前記HDL動作モデルの字句および構文を解析して行う、
    ことを特徴とする請求項1に記載のSystemCモデル生成方法。
  3. 前記構文木モデルおよび前記解析情報に基づいて前記構文木モデルを再構成するのは、
    それぞれの処理の依存関係に基づいた順番に従って、前記構文木モデルの異なる解析情報を取り出し、
    前記異なる解析情報に基づいて前記構文木モデルの異なる再構成を行い、最終構文木モデルを生成する、
    ことを特徴とする請求項1または請求項2に記載のSystemCモデル生成方法。
  4. さらに、
    前記最終構文木モデルを解析して最終解析情報を取り出し、
    前記最終構文木モデルおよび前記最終解析情報に基づいて、前記SystemCモデルを生成する、
    ことを特徴とする請求項3に記載のSystemCモデル生成方法。
  5. 前記構文木モデルおよび前記解析情報に基づいて前記構文木モデルを再構成するのは、
    インスタンスされていないモジュール定義を構文木から削除する未使用モジュール削除処理、
    サブモジュールのインスタンスの形式を合わせるインスタンス記述正規化処理、
    前記サブモジュールのインスタンス記述を変更するインスタンス記述修正処理、
    assign文をalways@*に変換するalways@*のセンシティビティリスト解決処理、および、
    高位合成ツール別の変換を行う高位合成ツール別変換処理の少なくとも1つの処理を含む、
    ことを特徴とする請求項1乃至請求項4のいずれか1項に記載のSystemCモデル生成方法。
  6. 前記高位合成は、前記SystemCモデルから高位合成ツールを使用して論理合成可能なRTLを生成し、
    生成された前記RTLに対して、論理合成ツールを適用してネットリストに変換する、
    ことを特徴とする請求項1乃至請求項5のいずれか1項に記載のSystemCモデル生成方法。
  7. HDLのシミュレーション構文で設計したHDL動作モデルから、高位合成が可能なSystemCモデルを生成するSystemCモデル生成プログラムであって、
    コンピュータに、
    前記HDL動作モデルを解析して構文木モデルを生成し、
    前記構文木モデルを解析して解析情報を取り出し、
    前記構文木モデルおよび前記解析情報に基づいて前記構文木モデルを再構成し、前記SystemCモデルを生成する、処理を実行させる、
    ことを特徴とするSystemCモデル生成プログラム。
JP2017105814A 2017-05-29 2017-05-29 SystemCモデル生成方法およびSystemCモデル生成プログラム Pending JP2018200634A (ja)

Priority Applications (5)

Application Number Priority Date Filing Date Title
JP2017105814A JP2018200634A (ja) 2017-05-29 2017-05-29 SystemCモデル生成方法およびSystemCモデル生成プログラム
CN201880028506.XA CN110612526A (zh) 2017-05-29 2018-03-28 系统c模型生成方法和系统c模型生成程序
EP18809491.6A EP3633529A4 (en) 2017-05-29 2018-03-28 METHOD FOR GENERATING A SYSTEMC MODEL AND PROGRAM FOR GENERATING A SYSTEMC MODEL
PCT/JP2018/012695 WO2018220974A1 (ja) 2017-05-29 2018-03-28 SystemCモデル生成方法およびSystemCモデル生成プログラム
US16/654,060 US20200050714A1 (en) 2017-05-29 2019-10-16 Systemc model generation method and computer-readable recording medium recording systemc model generation program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2017105814A JP2018200634A (ja) 2017-05-29 2017-05-29 SystemCモデル生成方法およびSystemCモデル生成プログラム

Publications (1)

Publication Number Publication Date
JP2018200634A true JP2018200634A (ja) 2018-12-20

Family

ID=64455798

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017105814A Pending JP2018200634A (ja) 2017-05-29 2017-05-29 SystemCモデル生成方法およびSystemCモデル生成プログラム

Country Status (5)

Country Link
US (1) US20200050714A1 (ja)
EP (1) EP3633529A4 (ja)
JP (1) JP2018200634A (ja)
CN (1) CN110612526A (ja)
WO (1) WO2018220974A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2022536648A (ja) * 2019-06-10 2022-08-18 バテル メモリアル インスティチュート 平坦化されたネットリストからの挙動設計回復

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111310396B (zh) * 2020-02-13 2023-10-03 深圳航天科技创新研究院 一种fpga虚拟平台及实现fpga虚拟平台的方法
CN113010182B (zh) * 2021-03-25 2022-05-03 北京百度网讯科技有限公司 升级文件的生成方法、装置和电子设备
CN113158613B (zh) * 2021-04-02 2022-08-12 上海国微思尔芯技术股份有限公司 一种将超图结构转rtl级hdl文件的方法及装置
CN116882336B (zh) * 2023-09-07 2023-12-01 芯动微电子科技(珠海)有限公司 一种基于高级语言模拟rtl的建模方法与装置
CN117077583B (zh) * 2023-10-17 2024-02-02 北京汤谷软件技术有限公司 一种寄存器传输级电路设计的资源估算方法及装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10116302A (ja) * 1996-09-12 1998-05-06 Sharp Corp 集積回路の設計方法及びそれによって設計された集積回路
JP2007087215A (ja) * 2005-09-22 2007-04-05 Hitachi Ltd ハードウェアモデルの変換処理に用いられるデータ構造、コンピュータプログラム、方法、及びシステム
JP2008077330A (ja) * 2006-09-20 2008-04-03 Fujitsu Ltd ハードウエア高速シミュレーション用モデル生成装置及びそのシミュレーション装置。

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3620860B2 (ja) * 1992-06-05 2005-02-16 株式会社メガチップス シミュレーション装置
JPH11110428A (ja) * 1997-10-02 1999-04-23 Nec Corp 論理回路の面積予測方法と装置および論理回路の面積予測プログラムを記憶した記憶媒体
US7000213B2 (en) * 2001-01-26 2006-02-14 Northwestern University Method and apparatus for automatically generating hardware from algorithms described in MATLAB
US7080365B2 (en) * 2001-08-17 2006-07-18 Sun Microsystems, Inc. Method and apparatus for simulation system compiler
JP2004192334A (ja) * 2002-12-11 2004-07-08 Fujitsu Ltd 設計データ解析方法及び設計データ解析プログラム
EP2175387A1 (en) * 2008-10-10 2010-04-14 Sigasi B.V.B.A. Device and method for refactoring hardware code
JP5751669B2 (ja) 2011-07-08 2015-07-22 ルネサスエレクトロニクス株式会社 言語変換処理方法及び言語変換処理プログラム

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10116302A (ja) * 1996-09-12 1998-05-06 Sharp Corp 集積回路の設計方法及びそれによって設計された集積回路
JP2007087215A (ja) * 2005-09-22 2007-04-05 Hitachi Ltd ハードウェアモデルの変換処理に用いられるデータ構造、コンピュータプログラム、方法、及びシステム
JP2008077330A (ja) * 2006-09-20 2008-04-03 Fujitsu Ltd ハードウエア高速シミュレーション用モデル生成装置及びそのシミュレーション装置。

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
SCHONEVELD, G.J., VHDL TO SYSTEMC: THE DESIGN OF A TRANSLATOR [ONLINE], JPN6021007680, 2009, pages 1 - 18, ISSN: 0004458668 *
立岡真人,青木利晃,金子峰雄: "再利用のためのRTLからの関数コード生成手法", 電子情報通信学会技術研究報告, vol. 113, no. 454, JPN6018023760, 24 February 2014 (2014-02-24), pages 171 - 176, ISSN: 0004458669 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2022536648A (ja) * 2019-06-10 2022-08-18 バテル メモリアル インスティチュート 平坦化されたネットリストからの挙動設計回復

Also Published As

Publication number Publication date
US20200050714A1 (en) 2020-02-13
CN110612526A (zh) 2019-12-24
EP3633529A1 (en) 2020-04-08
WO2018220974A1 (ja) 2018-12-06
EP3633529A4 (en) 2020-06-03

Similar Documents

Publication Publication Date Title
WO2018220974A1 (ja) SystemCモデル生成方法およびSystemCモデル生成プログラム
Meeus et al. An overview of today’s high-level synthesis tools
US7143388B1 (en) Method of transforming software language constructs to functional hardware equivalents
US10586003B1 (en) Circuit design using high level synthesis and linked hardware description language libraries
US20080244541A1 (en) Code translator and method of automatically translating modeling language code to hardware language code
JP2007087215A (ja) ハードウェアモデルの変換処理に用いられるデータ構造、コンピュータプログラム、方法、及びシステム
CN111985055B (zh) 一种模型封装方法、装置及电子设备
CN113255258B (zh) 逻辑综合方法、装置、电子设备及存储介质
US8881074B2 (en) Device and method for refactoring hardware code
Kamppi et al. Kactus2: Environment for embedded product development using ip-xact and mcapi
Boutekkouk et al. UML2. 0 Profiles for Embedded Systems and Systems On a Chip (SOCs).
Le Tallec et al. Combining SystemC, IP-XACT and UML/MARTE in model-based SoC design
JP2022536648A (ja) 平坦化されたネットリストからの挙動設計回復
US6952817B1 (en) Generating hardware interfaces for designs specified in a high level language
US20100088656A1 (en) Property checking system, property checking method, and computer-readable storage medium
Asheim et al. VHDL Generation From Python Synchronous Message Exchange Networks
Stefanov et al. Deriving process networks from weakly dynamic applications in system-level design
JP2007323206A (ja) 動作合成装置、同方法、シミュレーション装置、同方法及び設計装置
JP5577619B2 (ja) 論理回路設計装置
CN112115615A (zh) 面向scr的安全关键系统模型转换方法、装置和系统
Le Tallec et al. SCIPX: a SystemC to IP-XACT extraction tool
WO2008075087A1 (en) Code translator and method of automatically translating modelling language code to hardware language code
Correa et al. High level system-on-chip design using UML and SystemC
US8447581B1 (en) Generating simulation code from a specification of a circuit design
US20230072735A1 (en) Refinement of an integrated circuit design

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200310

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210309

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20211012