論理設計 ICチップを作る No.2 実際に論理を書いてみる DOC08G02A modoruya.jpg(1043 byte) ueya.jpg(1036 byte) susumuya.jpg(1034 byte)

FIG6A.jpg(56933 byte)
FIG6B.jpg(4401 byte)

基本形
左が短いですけれどもひとつのまとまった論理設計をL言語で書いたものです。
実効譜が実際にチップで動作させる論理です機能実行譜は検証用の論理です。 大きな論理を書くときも小さな論理を書くときもこの形式で書きます。 真理値表に近い形式やブール代数でも書くことができますが基本的にこの形式ですべての論理が書けると思います。 左の例では信号はまとめて書いていますがばらばらに書くこともできます論理設計では書いた順番と動作する位置 が無関係だからです。 書き方は自由自在で同じ条件で動く信号を同じところに書く書き方もありますが信号単位で分けて書く書き方が 良いと思います。

プログラムとの比較
コンピュータのプログラムは一筆書きのように連続した動作をするので一行を変更すると全体の動作を狂わせは しないかと重苦しさがぬぐいきれません 論理設計でも一行を変更して全体の動作を狂わせることがある訳ですが論理設計の場合は関連する信号がはっきり していてメモリのように多方面から意図しない変更が行われる可能性を考えなくて済みますし動作をピンポイント で検証できるので多角的な設計の進め方ができると思います。

設計の進め方
論理設計する機能の構造が頭の中にある場合は主軸になる論理を作ってから周辺の論理を作っていったらよいと 思います。 構造が固まっていない場合や混沌としていて切り口が見えないときは小さくて機能のはっきりしている周辺の 論理から作ると主軸になる構造が浮かび上がってくることもあります。 論理設計は動作の順序と位置を厳密に決めていくことなので設計作業の細かな各段階において機能実行譜で動作 の確認を行っていきます。

プログラミングとの相違
コンピュータのプログラミングではCLK単位の位置を指定して設計することはほぼ不可能ですしマイクロプロセッサ の命令単位の動作を厳密にシミュレートしている環境があってもマイクロプロセッサの命令単位の動作までは変 えられません。 コンピュータのプログラミングが命令単位のレンガを積み重ねているとするなら論理設計はブールの論理の土を こねているようなものです。 高級言語でプログラミングしているならマイクロプロセッサの命令も意識されないところで設計しているのです からプログラミングの意識は変えてCLK単位の動作を頭に描きながら考えていくことが重要であり根本と思います。


機能実行
コンピュータのプログラムではどの順番で実行されるのかはプログラムで決まりますがどの位置で実行 されるかはプログラムの設計時には高級言語では把握不可能ですしアセンブリ言語でもかなり困難です。 論理設計ではどの位置でどうするということを決めていきますし複数の論理が同じ位置でどうするかを 決めることもありますから位置を意識することが重要です。 下が機能実行譜を動作させたものです。

FIG5.jpg(28997 byte)

コンピュータがプログラムでどのように動いているかを見るのはデバッガまたはシミュレータ でできるのですが高級言語の場合でもアセンブリ言語の場合でもプログラムの設計者はプログラムがマイクロプ ロセッサのコードにどのよう に展開されているのかを把握しなければならないので設計したプログラムから実際の動作を厳密に解析するのは 大変な作業です。 論理設計ではCLK単位で動作を厳密に設計していきますがコンピュータのような介在がないので設計時の 視点と検証時の視点と実際の動作を解析する視点が同じです。


modoru.jpg(1480 byte)