Comments
Description
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