...

Perl使いになろう《実践編》

by user

on
Category: Documents
32

views

Report

Comments

Transcript

Perl使いになろう《実践編》
per
in/ l -
while $
$2;'
AR
1.'
G
.$
$*" if $
$0
ru
eval "
ec
ex /
ハード設計者のためのPerl 入門 第 5 回
S
shift;
&&
)/
ing_under
_
nn
/^([A-Za-z_]
=~
+=
)(.
0]
*
V[
プログラム
_shell; eval '
$'
me
so
r/local/b
us
Perl使いになろう《実践編》
――16 進表示スクリプトとVerilog-XL用
エラー・ビューワを作成
古都 哲生
テキスト処理言語 Perl の入門講座の第 5 回です.今回は,
①の一度にすべてのデータを取り込む方法は,プログラム
実際の設計業務のなかで利用された二つのスクリプトを紹介
の流れが,「データを取り込む」→「処理する」→「表示する」
します.サンプルの記述を参考に,自分の業務に合ったスク
というように非常にわかりやすくなる反面,一時的にでもコ
リプトをどんどん作成してみましょう.なお,今回のスクリプ
ンピュータのメイン・メモリをある程度占有してしまうという
トは,本誌付属のCD-ROM に収録されています.(編集部)
問題があります.そこで,検索をともなう大がかりな処理に
限って使われることが多いようです.
前回(本誌 2000 年 2 月号)までは,Perl の文法の概要をお
②の逐次的にデータを取り込む方法は,メイン・メモリへ
話ししましたが,いかがでしたか? 今回は実践編として,
の圧迫を軽減するので,簡易ツール向けとしてはよいアプロ
LSI 設計業務で使用できる二つのスクリプトを紹介します.ど
ーチだと思います.ただし,1 文字ずつ取り込むので,OS 側
ちらも筆者が実際に設計業務で使用していたスクリプトですの
のオーバヘッドが若干増える可能性があり,CPU パワーを必
で,ちょっとの修正でみなさんの業務にも使えると思います.
要とするかもしれません.
③の方法は,①と②の方法のよいところを合わせもってい
16 進表示スクリプトの作成
ます.処理が複雑になってしまいますが,実用的な方法です.
今回の16 進表示スクリプトは,③の方法で作ります.練習の
まず,オーソドックスな例として,16 進表示スクリプトを
ために,①の一度にデータを取り込む方法と,②の逐次的に
紹介します.これは,ある特定のファイル・データを読み込
データを取り込む方法のスクリプトは,読者のみなさんが各
み,それを表示するテクニックを学ぶにはもっともよい例だと
自で考えてみてださい.
思います.短いサンプルですので,全部のスクリプトを理解
¹ データの出力方法
するのも簡単です.
データの出力方法もまた,取り込み方法と同じように,①
あらかじめ出力文字列を作って一度に表示する,②逐次的に
●データの入力,出力にはそれぞれ3 種類の方法がある
データを入力し(取り込み),処理し,表示するというPerl
表示する,③一部分の出力文字列だけを最初に作って表示す
る(①と②の中間),という方法があります.
スクリプトには,じつにさまざまな記述方法があります.具
これらの方法の優劣の差は,それほどないと思います.②,
体的なアルゴリズムや詳細なテクニックは専門書に任せると
③の方法だと,若干の試行錯誤(「表示」→「修正」→「表示」
して,ここではハードウェア設計者が知っているとメリットの
…の繰り返し)が発生するようです.今回は③の一部分の出力
ある内容に限定して説明したいと思います.
文字列だけを最初に作る方法で実現します.
さまざまな方法があると言っても,¸ データの入力(取り
込み),¹ データの処理,º データの出力(表示),の三つの
º データの処理方法
データの処理方法は,入力方法や出力方法に強く依存しま
手続きがある点は共通です.
す.今回は入力も出力も半バッファによる制御なので,それ
¸ データの入力(取り込み)
に合った方法を採用します.
データの取り込み方法として,一般的には,①一度にすべ
てのデータを取り込む,②逐次的にデータを取り込む,③一
部分のデータを逐次的に取り込む,などがあります.
126 Design Wave Magazine 2000 April
●処理を七つのブロックに分ける
図 1 に16 進表示スクリプトの処理のフロー図を示します.
START
処理は,大きく七つのブロックに分けることができます.
最初はPerl のいつもの「おまじない」から始まって,
「ファ
①おまじない
イルのオープン」を行います.ここで,該当するファイルをオ
ープンできなければ(ファイル名が異なる,ファイルの読み込
み特権がないなど)
,エラーとして処理します.
②ファイルのオープン
その後,「16 文字ずつ取り込み」を行います.ここで,取り
込むデータがなければすでに最後まで取り込んだことになりま
できなかった
すので,処理を終了させます.
ファイルをオープン
できたか?
できた
データを取り込んだ後は表示に入ります.まず,「ヘッダの
表示」の処理を行います.これは,アドレス256 ごとに表示す
るようにしてあります.ヘッダを表示した後,取り込んだデ
③16文字ずつ取り込み
エラー
ータに対して「非表示文字の置き換え」をおこないます.これ
は非表示文字(改行コード,改ページ・コードなど)を表示文
取り込んだ
最後まで
取り込んだか?
字の .(ピリオド)に変換します.その後,取り込んだデータ
取り込んでいない
を「16 進文字列の作成」で16 進数に換えます.
④ヘッダの表示
これですべての準備が整ったので,「表示」で出力した後,
再度「16 文字ずつ取り込み」に戻ります.
⑤非表示文字の置き換え
●テキストでもバイナリでも扱え,拡張が容易
リスト1 に16 進表示スクリプトを示します.リスト中にコ
⑥16進結果文字列の作成
メントを入れていますので参考にしてください.またリスト2
に,以下のコマンドで出力した結果の一部を示します.
⑦表示
% perl hexdump.pl hexdump.pl
この類のスクリプトは応用範囲が広いのが特徴です.たと
えば,新規・未知のバイナリ・ファイルの表示などに使用す
ることができます.Perl は,awk の場合と違って,入力デー
END
〔図1〕16 進表示スクリプトのフロー図
大きく分けて,七つの処理から構成されている
タがテキストでもバイナリでも使えるので非常に便利です.
ハードウェア設計時に使われるデータは,ほとんどがバイ
ナリ・データなので,このサンプルをベースに,みなさんの設
計業務に役立つスクリプトを作ってみて下さい.
従来の回路図エディタを中心とした設計スタイルとは異な
り,最近のHDL 主体の設計では,論理機能は「RTL シミュ
Verilog-XL 用エラー・ビューワの作成
レーション」で,タイミング(遅延)は「静的タイミング解析」
で検証します.ただし,非同期入力などを含むゲート・レベ
L S I 設計に利用できる具体的なサンプルとして,米国
ル回路の動作保証は,上記の2 種類の検証方法では得にくい
Cadence Design Systems 社の論理シミュレータである
のが現状です.そこで,筆者のグループでは,その部分につ
Verilog-XL 用のタイミング・エラー・ビューワを紹介します.
いてゲート・レベル・シミュレーションを実行しています.
この非同期入力関連のゲート・レベル・シミュレーション
●シミュレーションよりもエラー・ログの解析に時間がかかる
では,大部分の時間をVerilog-XL の実行よりも,出力され
LSI 開発においてCadence 社のVerilog-XL は,デファク
るタイミング・エラー・レポートの解析に費やしています(た
ト・スタンダードと言えるほどメジャーな論理シミュレータだ
だし,こうした状況は,設計している回路の種類,設計ポリ
と思います.筆者の所属する会社でも,以前よりは比率こそ
シーの違い,開発期間や費用,設計信頼性のトレードオフな
減りましたが,ゲート・レベル・シミュレーション(仮配線遅
どの要因に依存するので,一概にすべての設計プロジェクト
延/実配線遅延シミュレーション)にVerilog-XL を使用して
において,そうであると断言することはできない).正直なと
います(最近ではRTL シミュレーションが主流になり,論理
ころ,EDA ツール・サポートの立場としては,タイミング・
シミュレータもコンパイル型に移行しつつあるが…)
.
エラーはゼロにしてほしいのですが,実際にはそういう設計は
Design Wave Magazine 2000 April 127
Fly UP