【文献】
遠藤 真, 高原 厚,テンプレート化論理合成手法,情報処理学会研究報告,日本,社団法人情報処理学会,1993年 3月12日,第93巻/第22号,第33-40頁
(58)【調査した分野】(Int.Cl.,DB名)
前記入力操作受付部は、接続する二つのテンプレートの内の一方のテンプレートに含まれる出力端子を示す記号と、他方のテンプレートに含まれる入力端子の記号と、を信号線を示す記号を用いて接続する記述を受け付ける、
ことを特徴とする請求項2に記載の論理回路設計装置。
【発明を実施するための形態】
【0017】
以下、図面を参照して、本発明の実施形態について説明する。全図に通して同一の構成には同一の符号を付し、重複説明を省略する。
【0018】
図1は、本実施形態に係る論理回路設計装置100のハードウェア構成を示す図である。
図1に示すように、本実施形態に係る論理回路設計装置100は、CPU(Central Processing Unit)101、RAM(Random Access Memory)102、ROM(Read Only Memory)103、HDD(Hard Disk Drive)104及びI/F(Inerface)105がバス108を介して接続されている。また、I/F105には表示装置106及び操作装置107が接続されている。
【0019】
CPU101は演算手段であり、論理回路設計装置100全体の動作を制御する。RAM102は、情報の高速な読み書きが可能な揮発性の記憶媒体であり、CPU101が情報を処理する際の作業領域として用いられる。ROM103は、読み出し専用の不揮発性記憶媒体であり、ファームウェア等のプログラムが格納されている。
【0020】
HDD104は、情報の読み書きが可能な不揮発性の記憶媒体であり、OS(Operating System)や後述する論理回路設計プログラム、各種の制御プログラム、アプリケーション・プログラム等が格納されている。I/F105は、バス108と各種のハードウェアやネットワーク等を接続し制御する。
【0021】
表示装置106は、ユーザが論理回路設計装置100を用いて回路設計を行う際の視覚的ユーザインターフェースであり、例えばLCD(Liquid Crystal Display)を用いて構成される。
【0022】
操作装置107は、キーボードやマウス等、ユーザが論理回路設計装置100に情報を入力するためのユーザインターフェースである。
【0023】
次に、
図2を参照して、本実施形態に係る論理回路設計装置100の機能構成について説明する。
図2は、本実施形態に係る論理回路設計装置の機能構成を示すブロック図である。
図2に示すように、本実施形態に係る論理回路設計装置100は、ソフトウェアプログラミング言語の命令文に対応する、レジスタ転送レベルの命令文のセットの集合体からなるテンプレートを記憶するテンプレート記憶部201と、テンプレート記憶部201に記憶されたテンプレートのうち、所望のテンプレートを選択する操作を受け付ける選択操作受付部202と、表示装置106の画面(
図3の300参照)に、選択操作受付部202が選択操作を受け付けたテンプレートを並べて表示する制御を行う表示制御部203と、表示された複数のテンプレートを接続する操作を受け付ける接続操作受付部204と、ユーザからレジスタ転送レベルの命令文の入力操作を受け付ける入力操作受付部205と、備える。
【0024】
テンプレート記憶部201は、ソフトウェアプログラミング言語の命令文に対応する、レジスタ転送レベルの命令文のセットの集合体からなるデータをHDD104に記憶して構成される。テンプレート記憶部201に記憶されるテンプレートの詳細については後述する。
【0025】
選択操作受付部202、表示制御部203、接続操作受付部204、及び入力操作受付部205は、操作装置106のドライバを含むソフトウェアにより構成される。そして、選択操作受付部202、表示制御部203、接続操作受付部204、及び入力操作受付部205を含むソフトウェアと、
図1で示したハードウェアとが協働することにより論理回路設計装置100の機能を実現するためのソフトウェア制御部200が構成される。
【0026】
次に
図3を参照して、本実施形態に係る論理回路設計装置100による論理回路設計方法について説明する。
図3は、本実施形態に係る論理回路設計装置の設計時に表示される画面表示例を示す図である。
図3に示す設計用画面300は、表示装置106(
図1参照)の画面に表示されるものである。
【0027】
設計用画面300は、ソフトウェアプログラミング言語記述を表示する記述表示領域301、RTLで記述されたテンプレートを設計用画面300の上から下(
図3の上から下に向かう方向)に向かって順次並べて表示する設計領域302、及びテンプレート記憶部201(
図2参照)に記憶されているテンプレートメニューを表示するテンプレート領域303と、を含む。
【0028】
論理回路設計装置100を用いた論理回路設計方法について説明する。記述表示領域301には、RTL記述に変換したいソフトウェアプログラミング言語記述を表示する。この表示は、ユーザが参照するためのものであるので、ユーザが論理回路設計を、例えばソフトウェアプログラミング言語記述の印刷した印刷物を参照しながら行う場合には、記述表示領域301は不要である。その場合、記述表示領域301を非表示にし、代わりに設計領域302を非表示にした記述表示領域301にまで拡張してもよい。
【0029】
ユーザは、テンプレート領域303に表示されたテンプレートの内、記述表示領域301に表示されたソフトウェアプログラミング言語記述の命令文に対応するテンプレートにカーソル304を合わせ、設計領域302にドラックする(選択操作)。このカーソル304の動きを選択操作受付部202(
図2)が検知し、表示制御部203にその検知結果を出力する。表示制御部203は、選択操作されたテンプレートと同じものを、設計領域302におけるカーソル304の移動先にコピーをして表示する。すなわち、テンプレート領域303には、選択操作されたテンプレートは表示され続ける。
【0030】
テンプレートが用意されていない命令文がソフトウェアプログラミング言語記述に含まれる場合、ユーザは、設計領域302におけるその記述に対応する位置にカーソル304を合わせダブルクリック操作(入力欄表示操作)を行う。これにより、RTL入力欄305が表示される。このRTL入力欄305に、ユーザが操作装置107、例えばキーボードを用いてRTLの命令を入力操作する。
【0031】
上記テンプレート記憶部201に格納されるテンプレートの詳細について説明する。
【0032】
以下、プログラミング言語がCソースコードの場合を例に説明する。
【0033】
本実施形態では、for、whileといったループ構文、int、charと宣言いった宣言文、メモリを表現する配列、ifやcaseといった条件文など、Cソースコードを構成する主要な構文について、RTL記述のテンプレートを作成することとする。
【0034】
for、whileといったループ文は、1つのループにつき、ループテンプレートと、バリアテンプレートの2種類で構成する。ループテンプレートは、Cソースコードのループ開始箇所に1対1で実装する。バリアテンプレートは、Cソースコードのループ終了箇所に1対1で実装する。
【0035】
ループテンプレートは、ループの開始タイミングとループ回数の更新タイミングを示す入力信号線を1本ずつ実装する。
【0036】
ループテンプレートはループ開始値と終了値、breakおよびcontine処理を指示することができる。
【0037】
バリアテンプレートは、1ループの終了タイミングを示す入力信号と、ループ回数の更新タイミングを示す出力信号を1本ずつ実装する。
【0038】
本発明では、ループテンプレートの開始タイミングを示す入力信号は、前段処理が出力する処理終了信号に、ループ回数の更新タイミングを示す入力信号は、対応するバリアテンプレートが出力する処理終了信号に、Cソースコードと1対1に対応させながら、数珠つなぎに接続することで、複雑なタイミング制御を撤廃しつつ、アルゴリズムに忠実なループ動作を実現することとする。
【0039】
ループテンプレート、およびバリアテンプレートは、接続形態により、並列動作や、多重ループを可能とする。テンプレート間の接続関係は、RTLレベルのハードウェア言語による記述により行う。その詳細は、
図4を用いて後述する。
【0040】
int、charと宣言いった宣言文は、レジスタテンプレートとして定義する。レジスタテンプレートは、Cソースコード内の宣言毎に1対1で実装する。
【0041】
レジスタテンプレートは、レジスタの設定タイミングを示す入力信号と、レジスタの設定終了タイミングを示す出力信号を1本ずつ実装する。
【0042】
レジスタテンプレートはレジスタのビット幅を指示することができる。
【0043】
本実施形態では、レジスタの設定タイミングを示す入力信号は、前段処理が出力する処理終了信号に、レジスタの設定終了タイミングを示す出力信号は、後段処理に入力する処理開始信号に、Cソースコードと1対1に対応させながら、数珠つなぎに接続することで、複雑なタイミング制御を撤廃しつつ、アルゴリズムに忠実なレジスタ設定動作を実現することとする。
【0044】
レジスタテンプレートは、接続形態により並列動作を可能とする。また、ループテンプレート、およびバリアテンプレートとの接続形態により、パイプライン動作を可能とする。
【0045】
メモリを表現する配列は、メモリアクセステンプレートとして定義する。メモリアクセステンプレートは、Cソースコードの各配列毎に1対1で実装する。
【0046】
メモリアクセステンプレートは、メモリアクセス開始タイミングを示す入力信号と、メモリアクセス終了タイミングを示す出力信号を1本ずつ実装する。
【0047】
本実施形態では、メモリアクセス開始タイミングを示す入力信号は、前段処理が出力する処理終了信号に、メモリアクセス終了タイミングを示す出力信号は、後段処理に入力する処理開始信号に、Cソースコードと1対1に対応させながら、数珠つなぎに接続することで、複雑なタイミング制御を撤廃しつつ、アルゴリズムに忠実なメモリアクセス動作を実現することとする。
【0048】
メモリアクセステンプレートは、接続形態により並列動作を可能とする。また、ループテンプレート、およびバリアテンプレートとの接続形態により、パイプライン動作を可能とする。
【0049】
本実施形態では、ifやcaseといった条件文は、テンプレートではなく、Cソースコードと1対1に対応させながら設計者がRTL記述を行う。タイミングの調整は、前段処理が出力する処理終了信号を、タイミングを調整し、後段処理に出力するテンプレートを備えることで実現することとする。
【0050】
また、並列動作や、パイプライン動作は、テンプレート同士の接続形態や、固有のID番号の識別機能を有することにより可能となる。
【0051】
更に処理単位の並列動作は、各テンプレートが1本ずつ実装している前段処理が出力する処理終了信号を、後段処理に入力する処理開始信号に並列に接続することで、実現することとする。
【0052】
メモリアクセスの並列動作は、各メモリ資源単位に割り当てたID番号を識別することで可能とする。そして、メモリアクセスの並列動作は、メモリアクセステンプレート単位に行うこととする。各テンプレートはメモリ資源と対であり、メモリアクセステンプレートが生成したID番号を識別することにより、矛盾なく、メモリアクセスの並列動作を実行することとする。
【0053】
パイプライン動作の処理単位は、ループテンプレート単位に行うこととする。各テンプレートは、ループテンプレートが生成したID番号を識別することにより、矛盾なく、パイプライン動作を実行することとする。
【0054】
高速動作が必要なハードウェアでは、多重ループ中のメモリアクセスに、空サイクルが無いことが要求される。そのためには、多重ループの最下位ループは、空サイクルなしでループ回数を更新することが必要である。最下位ループ回数の終了と、上位ループ回数の更新との間にサイクル差が生じた場合は、上位ループ回数の状態を、ただちに下位ループへの反映が必要である。
【0055】
本実施形態では、バッファ機能を有するテンプレートを用いることにより、サイクル差を隠蔽し、空サイクルが無いメモリアクセスを実現することとする。
【0056】
本実施形態では、上位ループに接続するシェイクテンプレート、最下位ループに接続するボトムシェイクテンプレート、メモリアクセステンプレートに接続するバッファライトテンプレート、およびバッファリードテンプレートの4種類のテンプレートにより実現することとする。
【0057】
更に、上位ループに接続するシェイクテンプレート、最下位ループに接続するボトムシェイクテンプレートにより、空サイクルの無い、多重ループのパイプラインを形成することとする。
【0058】
また、本実施形態では、最下位ループに接続するボトムシェイクテンプレートと、多重ループ内の処理サイクル分のデータを保持するバッファライトテンプレートと、バッファライトテンプレートから読み出すデータのポインタを管理するバッファリードテンプレートにより、空サイクルのないメモリアクセスを実現することとする。
【0059】
必要のない後続処理を中断することにより、アルゴリズムを高速化する手法がある。C言語のbreak文がこれにあたる。多重ループのパイプライン中に、下位ループ処理内で中断処理が発生した場合は、下位ループの処理をただちに中断し、上位ループのループ回数を更新する必要がある。また、ハードウェアでは、すでに先行してデータを受信しているため、そのデータを無効化する必要がある。
【0060】
また本実施形態では、break文の動作向けに特化したブレイクマスクテンプレートと、下位ループテンプレートとの通信により、数サイクルでアルゴリズムの中断を実現することとする。
【0061】
ブレイクマスクテンプレートは、下位ループテンプレートの後段に接続する。
【0062】
Break文による中断条件が発生すると、下位ループテンプレートは処理を中断するが、パイプライン処理中のため、必要のないデータを余分に出力する。ブレイクマスクテンプレートは、その不要なデータを抑止することで、正常動作を保障する。
【0063】
下位ループテンプレートによる処理中断は、シェイクテンプレートへ報告する。これにより、シェイクテンプレートは、あらかじめ登録済の次ループ回数を後段に出力することで、上位ループのループ回数の更新を実現することとする。
【0064】
本実施形態に係る論理回路設計装置100では、上記のテンプレートを格納する。この]状態で、ユーザがソフトウェアプログラミング言語としてC言語が用いられたソースコードを、ハードウェア記述言語としてVHDL (very high−speed integrated circuit hardware description language)を使用した場合を例に説明する。
【0065】
以下、
図4乃至
図8を参照しつつ、本実施形態に係る論理回路設計装置100によるRTL設計について、具体例を挙げて説明する。
図4は、C言語記述をVHDL記述で書かれたテンプレートを組み合わせて論理回路を設計する際の設計画面例を示す説明図である。
図5は、
図4の設計画面で設定された論理回路の構成を示す説明図である。
図6は、多重ループを含む論理回路の処理の流れを示すチャートを示す。
図7は、空サイクルが無いメモリアクセスを実現論理回路の処理の流れを示すチャートを示す。
図8は、数サイクルでアルゴリズムの中断を実現する論理回路の処理の流れを示すチャートを示す。
【0066】
図4に示すように、論理回路設計に際して記述表示領域301にC言語記述(ソースコード)を表示する。そして、ユーザは、C言語記述の命令文に対応するテンプレートを、テンプレート領域303から選択し、設計領域302にドラッグする。以下、
図4の設計画面400に含まれるテンプレート、命令文等の詳細について説明する。
【0067】
図4の設計画面400において、符号10はハードウェア化対象のCソースによるアルゴリズム記述である。ここでは2重forループを例として取り上げる。
【0068】
符号11はテンプレートブロックの組み合わせで構成するハードウェア内サブモジュールのRTL記述である。
【0069】
符号12はモジュールの入力ポート記述である。この部分はテンプレートの埋め込みではない設計者記述であるが定型フォーマットの記述である。
【0070】
符号13はCソースのfor文に対応したループテンプレートである。Cソースのfor文1行に対し1個のループテンプレートを配置する。ループテンプレートはスタート信号を受信すると、forループ値(j、k)を生成し、for文内の演算処理を行う回路に送信する。ループテンプレートが送信するforループ値は、forループ値送信先の演算回路レイテンシに合わせて更新する。ループテンプレートにはforループの開始値及び終了値が設定できる。インスタンス名L0のループテンプレートが2重forループの外側ループのfor文に対応し、インスタンス名L1のループテンプレートが2重forループの内側ループのfor文に対応する。
【0071】
ここで、テンプレート間の接続方法について、
図4を参照して説明する。テンプレートの接続は、信号線を入力する操作により行う。例えば、
図4のループテンプレート(外側ループ)とループテンプレート(内側ループ)を例にご説明する。
【0072】
ループテンプレートには,SEという出力端子,SSという入力端子が含まれる。
図4では、ループテンプレート(外側ループ)のSEと,ループテンプレート(内側ループ)のSSを下記のようにSE_L0という信号線で接続する。
【0073】
L0:OoperL port map( … SE=>SE_L0, … )
L1:OoperL port map( … SS=>SE_L0(0), … )
上記「SE_L0」は人手で入力する。即ち、信号線を人手で入力してテンプレート間を接続する。
【0074】
符号14はCソースの”j*k”を算出する記述である。この部分テンプレートの埋め込みではない設計者記述である。ユーザは、設計領域302のうち、記述したい領域をダブルクックしてRTL入力欄305を表示させ、この中にVHDL言語を用いて構文を記述する。
【0075】
符号15はCソースの配列アクセスに対応した、メモリアクセステンプレートである。演算によって求めたRAMアドレス、RAMライトデータを受信してRAMに送信する。
【0076】
符号16はCソースのif文に対応した条件判定の記述である。この部分テンプレートの埋め込みではない設計者記述である。
【0077】
符号17は、1つのforループ終了示すステータス信号を生成するバリアテンプレートである。Cソースの1つfor文の終了に対し、1個のバリアテンプレートを配置する。対応するループテンプレートがスタート信号を受信すると同時に、ステータス信号を”ループ処理中”にし、forループの終了によってステータス信号を”ループ終了”とする。
【0078】
符号18はアルゴリズムの終了を示す記述である。この部分はテンプレートの埋め込みではない設計者記述である。多重ループに対応する全てのバリアテンプレートの出力するステータス信号が”ループ終了”の状態で、多重ループ内の処理に対応した回路動作が完了した時、多重ループ終了信号を出力する。
【0079】
符号19はハードウェアモジュールの出力ポート記述である。符号12と同様にこの部分はテンプレートの埋め込みではない設計者記述であるが定型フォーマットの記述である。
【0080】
図5に、
図4で論理回路設計をして得られたハードウェアモジュールの構成を示す。ハードウェアモジュールを構成は、テンプレートの組み合わせで構成したサブモジュールの外部にさらに、ステートマシンやテンプレートブロックなど周辺回路を付加することで構成する。
【0081】
符号20−1、20−2、20−3のそれぞれは、
図4で示したテンプレートの組み合わせで構成したサブモジュールである。
図5では、同一のサブモジュールを3つ含み、この3つのサブモジュールが並列実行する構成とする。
【0082】
符号21は、20−1、20−2、20−3のそれぞれの起動を管理するステートマシンである。符号20−1、20−2、20−3で示すサブモジュールは構成が同一であるので、以下では
符号22はサブモジュール内のループテンプレートブロックがアクセスし、ループ値を生成するブロックである。このブロックをルーパーと呼ぶ。
【0083】
符号23は、サブモジュール内のメモリアクセステンプレートブロックのI/Fを、RAM−I/Fに変換するブロックである。このブロックをコントラクタと呼ぶ。
【0084】
符号24はサブモジュール内のメモリアクセステンプレートブロックがアクセスするRAMである。
【0085】
符号25は、ループテンプレートブロックのルーパーへのアクセス、またメモリアクセステンプレートブロックから、RAMへのアクセスを管理するブロックである、このブロックをメディエーターと呼ぶ。
【0086】
符号26は現在のステートマシンのステートに応じて、RAM、ルーパーにアクセスするサブモジュールを切り替える回路である。
【0087】
上記したブロックの内、ルーパー22、コントラクタ23、メディエーター25は、テンプレートブロックである。
【0088】
ステートマシン21がスタート信号を受信すると、ステートの遷移を開始する。ステートマシン21のステートに応じたサブモジュール(20−1、20−2、20−3のいずれか)にスタート信号を送信し、スタート信号を受信したサブモジュール内の回路が動作を開始する。サブモジュール(20−1、20−2、20−3のいずれか)内では順次、ループテンプレートブロックがルーパー22へ、メモリアクセステンプレートがRAM24へアクセスする。このとき、ステートマシン21のステートによって、RAM24、ルーパー22へのアクセス権を、現在起動中のサブモジュール(20−1、20−2、20−3のいずれか)に与える。サブモジュール(20−1、20−2、20−3のいずれか)内の回路動作が完了したら、サブモジュール(20−1、20−2、20−3のいずれか)は動作終了信号をステートマシン21に送信する。ステートマシン21はサブモジュール(20−1、20−2、20−3のいずれか)から受信した動作終了信号によってステートを次ステートに遷移させ、次ステートに対応したサブモジュール(20−2又は20−3)にスタート信号を送信する。
【0089】
ステートマシン21の遷移とサブモジュール(20−1、20−2、20−3のいずれか)の起動を繰り返し、ステートマシン21の最終ステートに対応したサブモジュール(20−1、20−2、20−3のいずれか)の動作終了によって、ハードウェアモジュール全体の動作が完了する。
【0090】
図6に示すように、ループテンプレート(上位)は、ループの開始タイミングを示すセットと、ループ回数の更新タイミングを示すアップを入力とする。
【0091】
ループテンプレート(最下位)はループ開始値と終了値、breakおよびcontine処理指示するオーダを入力とする。
【0092】
バリアテンプレート(上位)は、1ループの終了タイミングを示す信号を入力とし、ループ回数の更新タイミングを示す信号を出力する。
【0093】
このように多重ループは、対となるループテンプレートとバリアテンプレートを、多重に組み合わせることで実現する。
【0094】
図6では、メモリアクセス処理に空サイクルが生じている。高速動作が必要なハードウェアでは、多重ループ中のメモリアクセスは、空サイクルが無いことが要求される。そのためには、多重ループの最下位ループは、空サイクルなしでループ回数を更新することが必要である。最下位ループ回数の終了と、上位ループ回数の更新との間にサイクル差が生じた場合は、上位ループ回数の状態を、ただちに下位ループへ反映が必要である。
【0095】
そこで、シェイクテンプレート、ボトムシェイクテンプレート、バッファライトテンプレート、及びバッファリードテンプレートと呼ぶ、4種類のバッファ機能を有するテンプレートを用いることにより、サイクル差を隠蔽し、空サイクルが無いメモリアクセスを実現する。
図7では、上位ループテンプレートの後段にシェイクテンプレートを接続する。下位ループテンプレートの後段にボトムシェイクテンプレートを接続する。メモリアクセステンプレートの前段にバッファライトテンプレート、およびバッファリードテンプレートの順に接続する。
【0096】
上位ループテンプレートは、ループ回数をシェイクテンプレートに送出する。シェイクテンプレートは、上位ループテンプレートからループ回数を受信すると、ただちに上位ループテンプレートにループ回数の更新を要求する。上位ループテンプレートは、シェイクテンプレートからのループ回数の更新要求に従い、ループ回数を更新し、ただちにシェイクテンプレートへ送出する。これにより、シェイクテンプレートは、自ループ回数と次ループ回数を保持する。
【0097】
最下位ループテンプレートは、空サイクルなしに、ループ回数を更新し、順次、後段処理へ送出する。
【0098】
ボトムシェイクテンプレートは、多重ループ内の処理レイテンシを考慮し、パイプラインを隠蔽する、タイミングを前倒しした、上位ループのループ回数更新タイミングを、シェイクテンプレートへ出力する(矢印41で図示)。
【0099】
バッファライトテンプレートは、パイプラインレイテンシ分データを保持する。データを保持したポインタは、バッファリードテンプレートに登録する。バッファリードテンプレートは、バッファライトテンプレートのポインタを、パイプラインレイテンシ分サイクルシフト後に、バッファライトテンプレートからデータを読み出しデータを供給することで、空サイクルの無いメモリアクセスを実現する(符号42)。
【0100】
多重ループのパイプライン中に、下位ループ処理内で中断処理が発生した場合は、下位ループの処理をただちに中断し、上位ループのループ回数を更新する必要がある。また、ハードウェアでは、すでに先行してデータを受信しているため、そのデータを無効化する必要がある。
【0101】
ブレイクマスクテンプレートと呼ぶ、break文の動作向けに特化したテンプレートと、下位ループテンプレートとの通信により、数サイクルでアルゴリズムを中断を実現する。
図8にその処理動作を示す。
【0102】
ブレイクマスクテンプレートは、下位ループテンプレートの後段に接続する。
【0103】
break文による中断条件が発生すると、下位ループテンプレートは処理を中断するが、パイプライン処理中のため、必要のないデータを余分に出力する。ブレイクマスクテンプレートは、その不要なデータを抑止することで、正常動作を保障する(符号51に相当する)。
【0104】
下位ループテンプレートによる処理中断は、シェイクテンプレートへの報告する。これにより、シェイクテンプレートは、あらかじめ登録済の、次ループ回数を後段に出力することで、上位ループのループ回数の更新を実現する。ループテンプレート内のオーダ52が次ループの開始を示す。
【0105】
上記実施形態は、本発明を限定するものではなく、要旨を変更しない範囲で様々な変更態様がありうる。例えばソフトウェアプログラム言語記述として、C言語により記述されたソースプログラムを例に挙げ、これをVHDL記述に変換する処理について説明したが、ソフトウェアプログラム言語記述は、C言語に限定されない。例えば、Pascal、C++などでもよい。また、ハードウェア記述言語もVHDLに限定されず、Verilog HDL、SFL(Structured Function description Language)、UDL/I(Unified Design Language for Integrated circuits)でもよい。