Comments
Description
Transcript
竹本 悟
竹本 悟 回路図ベース設計の時代には,シミュレーションにそれほど複雑な作業は必要ありませんでした. それは,回路規模が小さいうえ,機能も比較的単純なものが多かったためです.設計者は入力波 形を入れて,出力波形を観測するだけですみました.ところが HDL 設計はこれらを一変させま した.回路規模は極端に大きくなり,機能も急激に複雑になりました.出力波形の観測だけで回 路を検証することは,非常に難しくなってきました.大規模シミュレーションにおいて波形を表 示するだけで非常に時間がかかることは,前回 (2001 年 9 月号,pp.112-118) 説明したとお りです.ここで必要になるのは,文字によるシミュレーション結果の表示方法です.今回は文字 の出力方法だけでなく,文字を入力パターンとして与える方法なども含めて解説します. (筆者) 文字を入出力するためのパッケージ ばいつでも読めるし,いつでも編集できるのです. VHDL では,ASCII ファイルを読み書きするためのパ 文字を出力するための機能としてVHDL では report ッケージとしてTEXTIO パッケージが用意されています. と assert が定義されています.ただし,これは単に文 これは VHDL 言語の標準として定義されており,どの 字列をディスプレイに出力する機能しか持っていません. VHDL シミュレータにも備わっています(図 2).このパ シミュレーション結果を蓄えたり,シミュレーションの入 ッケージは人間が読める形になった文字や信号の入出力 力パターンを蓄えたりすることはできません.複雑な作 用サブプログラムをまとめたものです.ただし注意しなけ 業を行うには能力不足なのです. ればならないのは,ここにあるのはほとんどが基本的な関 本来こういった機能はシミュレータが持つべきものであ って,HDL の機能ではないように思われます.しかし, 数だということです.しかも通常のプログラム言語による 入出力と違って,少しめんどうな手続きが必要です. シミュレータの機能は,ほとんどの場合,EDA ベンダが VHDL における文字の入出力は,基本的にはディス 決めており,標準となるものがありません.シミュレー ク,あるいはコンソールが対象になります.UNIX シス タ間の移植性を考えたとき,HDL 側にその機能があるほ テムではリダイレクトできるので,直接プリンタなどの機 うが望ましいのは明らかです(図 1).VHDL ではASCII 器にも出力できます. ファイル(人間が読める文字のファイル)を用いて入出力 信号のやりとりをしています.ASCII ファイルを用いれ 文字の入出力に必要な変数のタイプ TEXTIO のパッケージの中には,文字の入出力に必要 な変数のタイプが定義されています(リスト1). おねがいします RTL だけ もらって もね∼ ASCII ファイル 〔図 1〕回路の記述だけでは不十分 入力,出力の信号も移植できなければ,シミュレータ間の移植は難しい. 〔図 2〕ASCII ファイルを読み書きするにはTEXTIO が必要 Design Wave Magazine 2001 November 115 VHDL では,文字は char というタイプで定義されて います.そして複数の文字の集合である文字列は string UNIX を使うならUNIX の書式,Windows を使うなら Windows の書式に従うことになります. として定義されています.TEXTIO では LINE というタイ このときモードの指定が必要です.そのため FILE プが string のアクセス・タイプとして定義されていま _OPEN_KIND という変数タイプが用意されています.こ す.これは読み込む文字列の文字数がいくつであっても のタイプは列挙型で,三つの値しかとりません. 対応できるようにするためのソフトウェア的なくふうで 1)新規に開く す.アクセス・タイプというのは,C 言語のポインタ・ 2)既存のファイルに追加する タイプに相当します.ファイルからの読み込みは,この 3)読み込むだけ LINE をバッファとして経由して行われます. のいずれかをこの変数によって指定しなければなりませ VHDL におけるファイルのアクセスは,file タイプの ん.ファイルの削除やマージといったファイル操作は実 変数を経由して行われます.file タイプは,ほかのプロ 行できません.そして途中でモード変更もできません. グラム言語と違ってその内蔵するデータのタイプが限定 モード変更を行うときは,必ずファイルをいったん閉じ されます.VHDL でファイルの入出力を扱うとき,ほと なければなりません. んどの場合は文字列のみのファイルです.TEXTIO では TEXT という文字列のファイルが定義されています. また返値として,FILE_OPEN_STATUS という変数のタ イプが用意されています.これはオプションで,VHDL のコードは,この変数の値によってファイル操作がうま ファイルのオープン/クローズ くいったかどうかを知ることができます(リスト2). 実際のコーディングではあらかじめファイル変数を定義 VHDL で入出力を行うとき,プログラミング言語と同 しておく必要があります.VHDL ではファイル・タイプ じようにファイル・オープンという手続きをとらなければ を指定するときに,あらかじめどのようなデータが入って なりません.ファイルの名前の付けかたは,VHDL シミ いるかを指定しておかなければなりません.いろいろなデ ュレータが動作する OS の仕様に依存します.つまり ータを扱う場合,文字列にして入出力するので,通常は 文字列のファイルであるTEXT を宣言します. またこれらのファイル操作は,必ずプロセス文の中で 実行することが必要あります.なぜなら,以前述べたよ うにVHDL はイベントによって駆動される言語です.し たがって,もしこのファイル操作がコンカレント文として 書かれた場合,引き数は signal として宣言されません から,信号ではないのでイベントが起こりません.した がって,動作もしません.かりに無理矢理 signal とし 〔リスト2〕ファイル操作の関数 〔図 3〕ファイルはタイプとモードが一致しなければOPEN できない 〔リスト1〕ASCII 文字の入出力に使用する変数のタイプ CHARACTER STRING 単一文字 文字列 (a)標準的に含まれるタイプ type LINE is access STRING; type TEXT is file of STRING; 文字入出力バッファ 文字列を含むファイル (ASCII ファイル) (b)TEXTIO に含まれるタイプ 116 Design Wave Magazine 2001 November procedure FILE_OPEN( File F:FT; --ファイル変数の指定 External_name:in string; --フィル名 Open_Kind:in FILE_OPEN_KIND: =READ_MODE) --ファイル操作のモード procedure FILE_OPEN( Status:out FILE_OPEN_STATUS; --ファイル操作の結果 File F:FT; --ファイル変数の指定 External_name:in string; --ファイル名 Open_Kind:in FILE_OPEN_KIND: =READ_MODE) --ファイル操作のモード procedure FILE_CLOSE( File F:FT)