竹下世界塔の計算機よもやま話

アクセスカウンタ

zoom RSS 論理回路のループ探し

<<   作成日時 : 2009/06/19 17:19   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

 モジュール単位で設計した論理回路を接続してシステムシミュレーションを行うと、初期の段階では発振することがよくある。これは組み合わせ回路がどこかでループしてしまい、シミュレーションの最小単位時間単位で1→0→1→0→…を繰り返すからだ。
これはモジュール内では正しく設計できていても、他のモジュールを経由して自分に接続が還ってくることにより生じる。通常は発振が開始した時刻から丁寧にさかのぼって調べなければならない。
 ある時相談を受けた。verilogで設計したモジュールを接続してシミュレーションしたら発振してしまい、どのモジュールで発生したかわからないとのこと。当時はVerilog-XLしかなく、波形で観測することもできなかったので静的に調査できないものか検討した。
 まず全モジュールをもらい、論理合成に使うSynopsysのDesign-Compilerでモジュールを全展開した。こうしてフラットになった論理回路に対して、配線がループしているかどうか調べることにした。
 組み合わせ回路はI/Oの入力かFFの出力が起点となり、I/Oの出力かFFの入力が終点となる。この間に同じ名前の配線が見つかればループしていることになる。
 具体的にはI/Oの出力かFFの入力から幅優先検索(横型検索)を開始する。論理回路を出力側から入力側にさかのぼって、I/Oの入力かFFの出力に到着すれば終わり。この間の配線名はすべて記録しておき、一致するかどうかでループを判断する。
 スクリプトはawkで書いた。配線名の一致は連想配列で簡単に判断できる。論理回路のソースはフロッピーに収まったから500KBくらいだったと思う。これを自宅の486-66MHzのMS-DOSパソコン上で実行し、30分程で該当箇所を発見することができた。
 最近はverilog用のlintみたいなものが販売されているのでそれで見つかるだろう。

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
URL(任意)
本 文




論理回路のループ探し 竹下世界塔の計算機よもやま話/BIGLOBEウェブリブログ
文字サイズ:       閉じる