...

竹本 悟

by user

on
Category: Documents
1

views

Report

Comments

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)
Fly UP