はじめに
論理の設計と検証を自由自在に行うために、完全同期
式の論理だけを前提としたL言語を作りました。
完全同期式では時系列を信号化して扱うので順序論理
を組み合わせ論理のように明瞭に記述することができ
ます。
これによって、設計することも、検証することも、完
全に論理的に扱えるので、大きな論理も容易に設計と
検証をすることができます。
完成した論理をチップ化するときは下記のコンパイラ
が出力したVHDLなどのチップメーカの開発ツールが受
け付ける言語のファイルを使います。
L言語で設計するための論理設計ツールのLTOOLを作り
ました。
LTOOLはL言語で論理設計するための論理検証まで含ん
だ論理設計環境を支援するプログラム群です。
LTOOLはLDCがコンパイラを担い、検証(シミュレーシ
ョン)はLSIMが担い、検証結果の閲覧はLSIM VIEWが担
い論理設計環境を構成しています。
名称 機能 実行プログラム
LDC L言語コンパイラ LDC.EXE
LSIM シミュレータ SIM.EXE
LSIM VIEW ビューワ VIEW.EXE
LSIMの行う検証は機能検証であり、実チップにあるデ
バイス固有の素子の遅延は含まれません。
2種類の条件文だけで論理設計と論理検証を行いVHDL等のファイルを得ることができます。
-
単純な言語で論理設計から検証設計までを行い論理を完成
させます。
-
ステップ数の多い検証もすぐにシミュレーションから閲覧
ができ、結果をPDFにすることも簡単です。
-
LTOOL はインストール不用なので どのパソコンでもすぐ
に論理設計を始めたり、シミュレーションをしたりできます。
-
L言語で設計してチップ化することも他言語に変換したフ
ァイルを使って簡単にできます。
L言語ではブール代数を原典とする論理設計について取り扱っています。
L言語は論理設計のための言語ですので記述されたものはすべて内部的にブール代数に表現できる
データに変換されます。
同期式の記憶を使った順序論理はブール代数で取り扱うことができますのでL言語の設計
範囲です。
非同期式の記憶を使った順序論理はブール代数で取り扱うことができないのでL言語の設
計の範囲外です。
ですから、L言語で表記することはすべてブール代数で書いていることと同じです。
ブール代数ですべての論理設計を表せますがブール代数の式の並びから論理構造を読み取ることは大変
なので設計することが難しくなります、そこで if や switch などの文章構造を使うことで容易に論理設計
できるようになりました。
if (a)
if (b)
y=1;
else
y=0;
endif
else
y=0;
endif
|
は右のブール式と同じです。 |
y = a & b
|
はもっと簡単に書いた右とも同じです。 |
if (a)
if (b)
y=1;
endif
endif
|
ところでブール代数に時間の概念はありません。
L言語で
と書いた場合はふたつの代入は同時に行われます。
時間を取り入れたい場合は時間を表す信号を入力にすることで時間を自由自在に扱えます。
if (t==3)
a = 1;
else
a = a;
endif
if (t==5)
b = 1;
else
b = b;
endif
|
a と b が記憶信号であった場合に t が時間を表す信号なら上のように書いて代入に時間差が付けられます。
 
論理設計とは
論理設計は電気特性を設計するものではありませんの
で電気設計には当たりません。
もちろん、論理設計に電気の知識は必要ではありませ
ん、論理設計することを回路設計と同じに考えること
は誤りです、回路設計には当然に電気の知識が必要で
す。
論理設計はハードウェアだけに属していると考えるの
も誤りです、プログラム言語では論理演算が使えるも
のがほとんどですし、とくにアセンブリ言語では論理
演算なしではプログラムが組み立てられません。
ハードウェアとソフトウェアの言葉づかいはコンピュ
ータに発祥していると思います。
ハードウェアには論理設計と電気設計が含まれていま
す、プログラムは全部が論理設計です。
なぜなら、高級言語で書かれたプログラムも実行時に
は機械語に変換されますが、機械語が論理演算を実行
しているからです。
ハードウェアはディジタル回路とほぼ同義の意味と思
います、これらの言葉には論理的なことと電気的なこ
とが包括されています。
当WEBでは論理設計と電気設計は明瞭に区分して扱う方
が設計者の利益に適うと判断して、ハードウェア、デ
ィジタル回路などの言葉は使いません。
コンピュータプログラミングと論理設計と言うことを考えると基本的な違いはないと考えます。
コンピュータプログラミングは書いたものを逐次実行するためコンピュータの性能に起因する時間的制約が
大きいので全く同じに扱えない面がありますがアセンブラレベルで見るとブール代数の逐次実行であり機能
面では論理設計と同じものを作りあげることができます。
論理設計は論理構造を作り上げるものですがコンピュータプログラミングはコンピュータという論理構造が
逐次実行する手順として書かれてコンピュータとプログラムが一体になったところにプログラマの意図した
論理構造に完成させるものです。
コンピュータプログラムの振る舞いはコンピュータの論理構造であるアーキテクチャによるものなのであま
り固定的に言うこともできませんがコンピュータの論理構造は論理設計によるものなのでプログラムまでを
含んだコンピュータシステムは論理設計に含まれるものでブール代数の原理で動いている装置と理解してよ
いと思います。
パスカルは歯車を組み合わせて計算機を作ったそうです。
ブール代数が発案された頃は真空管もリレーもトランジスタもない時代です。
論理設計を具現化するとき今では電気的な部品を使って作るのですが、これは現時点の技術では論理設計を
具現化するためには電気装置に実現するのが最も容易だという理由によります。
論理設計のある程度の機能がひとつのICに集約されてTTLやCMOSの標準ICをつなぎ合わせて電気装置を作る
時代になると論理設計は軽視され、つなぎ合わされた部品が電気的に正常動作するかに関心が移りました。
論理設計に関心の薄い人が論理的な解決と電気的な解決をよく分けることができないことにより論理設計
と電気設計を一体に考えて「ブール代数などの知識は知らないよりましだがディジタル回路の設計の実際
には役に立たない」と本に記した専門家もいます。
しかし今後は標準ICをつなぎ合わせるようなことでは実現の難しかったものを容易にひとつのICに論理設計
できるようになりました。
論理設計を標準ICを探して解決することはできなくなりました、論理設計が標準ICを組み合わせる制約から
自由になったので再び論理設計が重視されるようになりました。
当サイトでは論理設計の方法とそれを具現化する技術を別々のものと考えています、ブールらの先達の大き
な功労の成果に感謝したいと思います。
コンピュータチップやマルチタスクOSなどの複雑な機構にたよらなくても
並列動作を高速に行う装置を容易に論理設計によって構築できます。
具現化するときはCPLDやFPGAになりますが論理が入り端子数や動作速度が
合えば品種やメーカは問わないので時間の経過による部品の供給などの問
題も心配することなく設計をどんどん蓄積していくことができます。
 
順序について
論理設計が記憶された値を使うときは、順序にそった
動きをするようになります。
なぜなら、記憶された値は、記憶する要因になった信
号値が元に戻っても記憶値は元に戻らないからです。
例えば押し釦式の計数器から指を離しても増えた数が
減って元に戻ったりしないのと同じです。
時系列が同期式で駆動される場合には記憶された値も
記憶されない値と同じように扱えます。
実際に組み合わせ論理も順序論理も同じ最適化や論理
圧縮のプログラムで処理しています。
論理設計が時系列を含むことを前提にするのなら順序
論理は組み合わせ論理に含まれることになり同じ方法
で設計できます。
状態遷移表は時系列を論理値に組み込んだ真理値表と
考えてよいと思います。
注意すべきことは記憶されない値だけで組まれた論理
の出力が、その論理の入力の値になってしまうことで
す。
この場合は出力がクロックと無関係に記憶されて、非
同期式になり時系列の前提がくずれてしまいます。
知らない内にそうなってしまっていることもよくあり
ますので、よく分からない不具合の原因にもなること
もあります。
L言語のシミュレータLSIMでは記憶されない値の循環
があるとエラーを示して処理を中断しますので、論理
に非同期の記憶が混入しているのを察知できます。
|
 
実際の設計
74シリーズ
番号 |
機能 |
譜 |
検 |
74LP00 |
2入力 NAND 4個 |
→ |
→ |
74LP02 |
2入力 NOR 4個 |
→ |
→ |
74LP04 |
NOT 6個 |
→ |
→ |
74LP08 |
2入力 AND 4個 |
→ |
→ |
74LP10 |
3入力 NAND 3個 |
→ |
→ |
74LP11 |
3入力 AND 3個 |
→ |
→ |
74LP20 |
4入力 NAND 2個 |
→ |
→ |
74LP21 |
4入力 AND 2個 |
→ |
→ |
74LP27 |
3入力 NOR 3個 |
→ |
→ |
74LP30 |
8入力 NAND |
→ |
→ |
74LP32 |
2入力 OR 4個 |
→ |
→ |
74LP42 |
BCD to DECIMAL |
→ |
→ |
74LP51 |
複合ゲート 2個 |
→ |
→ |
74LP73 |
JK 2個 |
→ |
→ |
74LP74 |
D 2個 |
→ |
→ |
74LP75 |
4ビットD |
→ |
→ |
74LP76 |
JK 2個 |
→ |
→ |
74LP77 |
4ビットD |
→ |
→ |
74LP85 |
4ビット比較器 |
→ |
→ |
74LP86 |
2入力 XOR 2個 |
→ |
→ |
74LP109 |
JK 2個 |
→ |
→ |
74LP131 |
3to8 復号器 |
→ |
→ |
74LP133 |
13入力 NAND |
→ |
→ |
74LP138 |
3to8 復号器 |
→ |
→ |
74LP139 |
2to4 復号器 2個 |
→ |
→ |
74LP147 |
10to4 符号器 |
→ |
→ |
74LP148 |
8to3 符号器 |
→ |
→ |
74LP151 |
8入力1 選択器 |
→ |
→ |
74LP153 |
4入力1 選択器 2個 |
→ |
→ |
74LP154 |
4to16 復号器 |
→ |
→ |
74LP155 |
2to4 復号器 2個 |
→ |
→ |
74LP157 |
2to1 選択器 2個 |
→ |
→ |
74LP158 |
2to1 選択器 否定 2個 |
→ |
→ |
74LP162 |
4ビット設定付 10進計数器 |
→ |
→ |
74LP163 |
4ビット設定付 2進計数器 |
→ |
→ |
74LP164 |
8ビットシフトレジスタ |
→ |
→ |
74LP165 |
8ビットシフトレジスタ 並列入力直列出力 |
→ |
→ |
74LP166 |
8ビットシフトレジスタ 並列入力直列出力 初期化付 |
→ |
→ |
74LP173 |
4ビットD 絶縁付 |
→ |
→ |
74LP174 |
4ビットD 初期化付 |
→ |
→ |
74LP175 |
4ビットD 初期化付 否定出力付 |
→ |
→ |
74LP192 |
4ビット10進増減計数器 |
→ |
→ |
74LP193 |
4ビット2進増減計数器 |
→ |
→ |
74LP194 |
4ビットシフトレジスタ並列入出力 |
→ |
→ |
74LP195 |
4ビットシフトレジスタ直列入力並列出力 |
→ |
→ |
74LP238 |
3to8 復号器 |
→ |
→ |
74LP240 |
4ビットバスバッファ 否定出力 絶縁付 2個 |
→ |
→ |
74LP241 |
4ビットバスバッファ 正出力 絶縁付 2個 |
→ |
→ |
74LP242 |
4ビット双方向バスバッファ 否定出力 |
→ |
→ |
74LP243 |
4ビット双方向バスバッファ 正出力 |
→ |
→ |
74LP244 |
4ビットバスバッファ 正出力 2個 |
→ |
→ |
74LP245 |
8ビット双方向バスバッファ 正出力 |
→ |
→ |
74LP251 |
8入力 選択器 絶縁付 |
→ |
→ |
74LP253 |
4入力 選択器 絶縁付 2個 |
→ |
→ |
74LP257 |
2入力 選択器 絶縁付 2個 |
→ |
→ |
74LP258 |
2入力 選択器 否定出力 絶縁付 2個 |
→ |
→ |
74LP259 |
記憶位置指定レジスタ |
→ |
→ |
74LP273 |
8ビットD 初期化付 |
→ |
→ |
74LP280 |
9ビットパリティ |
→ |
→ |
74LP283 |
4ビット全加算器 |
→ |
→ |
74LP298 |
2入力 選択器 レジスタ 4個 |
→ |
→ |
74LP354 |
8レジスタ入力 選択器 レベル記憶 |
→ |
→ |
74LP356 |
8レジスタ入力 選択器 エッジ記憶 |
→ |
→ |
74LP365 |
バスバッファ 正出力 6個 |
→ |
→ |
74LP366 |
バスバッファ 否定出力 6個 |
→ |
→ |
74LP367 |
バスバッファ 正出力 6個 |
→ |
→ |
74LP368 |
バスバッファ 否定出力 6個 |
→ |
→ |
74LP373 |
8ビットD 正出力 絶縁付 レベル記憶 |
→ |
→ |
74LP374 |
8ビットD 正出力 絶縁付 エッジ記憶 |
→ |
→ |
74LP375 |
4ビットD 正否出力 |
→ |
→ |
74LP390 |
4ビット 10進計数器 2個 |
→ |
→ |
74LP393 |
4ビット 2進計数器 2個 |
→ |
→ |
74LP533 |
8ビットD 否定出力 絶縁付 レベル記憶 |
→ |
→ |
74LP534 |
8ビットD 否定出力 絶縁付 エッジ記憶 |
→ |
→ |
74LP595 |
8ビットシフトレジスタ 記憶 絶縁付 |
→ |
→ |
74LP597 |
8ビットシフトレジスタ 入力レジスタ付 |
→ |
→ |
74LP640 |
8ビット双方向バスバッファ 否定出力 |
→ |
→ |
74LP643 |
8ビット双方向バスバッファ 正否出力 |
→ |
→ |
74LP688 |
8ビット比較器 |
→ |
→ |
 
プロセッサ編
|
プロセッサを論理設計したものを置きます。
|
小プロセッサ
|
CPU8A
|
8ビットの独自仕様のプロセッサです。
- 開発室A : 8ビットマイコンの設計をしています。
- 支援室A : 開発室A で設計した8ビットマイコンのデバッガがあります。
- プログラム支援室A : 開発室A で設計した8ビットマイコンのプログラムがあります。
- プログラム支援室A0 : 開発室A で設計した8ビットマイコンをプログラム的に16ビットマイコンにして使います。
|
開発室A
 
支援室A
 
プログラム支援室A
 
プログラム支援室A0
|
 
USB編
|
設計中の備忘録です。
|
 
部品編
|
論理設計したあらゆるものを種類分けしてここに置きます。
|
番号 |
機能 |
LDL06E02A |
8ビットのデータをパリティなしの1ストップビットで直列送信します。 |
LDL06E02B |
8ビットのデータを偶数パリティつきの1ストップビットで直列送信します。 |
番号 |
機能 |
LDL06E05A |
8ビットのデータをパリティなし1ストップビットで受信します。受信CLKは1ビットの16倍の周波数を使います。 |
|