L言語

hyousi.jpg(2670 byte) hajimeni_m.jpg(3181 byte) seltukeihouhou.jpg(3001 byte) tsukaikata.jpg(2731 byte) seltukeikankyou.jpg(3031 byte) bunpou.jpg(2505 byte) kinoujiltukou.jpg(3022 byte) ronrialtusyuku.jpg(3033 byte) haifu.jpg(2514 byte)


 はじめに
 論理設計とは
 順序について
 実際の設計

 

はじめに

論理の設計と検証を自由自在に行うために、完全同期 式の論理だけを前提とした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言語で表記することはすべてブール代数で書いていることと同じです。 ブール代数ですべての論理設計を表せますがブール代数の式の並びから論理構造を読み取ることは大変 なので設計することが難しくなります、そこで ifswitch などの文章構造を使うことで容易に論理設計 できるようになりました。

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言語で

a = 1;
b = 1; 

と書いた場合はふたつの代入は同時に行われます。 時間を取り入れたい場合は時間を表す信号を入力にすることで時間を自由自在に扱えます。

if (t==3)
   a = 1;
else
   a = a;
endif

if (t==5)
   b = 1;
else
   b = b;
endif 

a と b が記憶信号であった場合に t が時間を表す信号なら上のように書いて代入に時間差が付けられます。


modoru.jpg(1480 byte)  

論理設計とは

論理設計は電気特性を設計するものではありませんの で電気設計には当たりません。
もちろん、論理設計に電気の知識は必要ではありませ ん、論理設計することを回路設計と同じに考えること は誤りです、回路設計には当然に電気の知識が必要で す。
論理設計はハードウェアだけに属していると考えるの も誤りです、プログラム言語では論理演算が使えるも のがほとんどですし、とくにアセンブリ言語では論理 演算なしではプログラムが組み立てられません。

ハードウェアとソフトウェアの言葉づかいはコンピュ ータに発祥していると思います。
ハードウェアには論理設計と電気設計が含まれていま す、プログラムは全部が論理設計です。
なぜなら、高級言語で書かれたプログラムも実行時に は機械語に変換されますが、機械語が論理演算を実行 しているからです。
ハードウェアはディジタル回路とほぼ同義の意味と思 います、これらの言葉には論理的なことと電気的なこ とが包括されています。
当WEBでは論理設計と電気設計は明瞭に区分して扱う方 が設計者の利益に適うと判断して、ハードウェア、デ ィジタル回路などの言葉は使いません。


コンピュータプログラミングと論理設計と言うことを考えると基本的な違いはないと考えます。 コンピュータプログラミングは書いたものを逐次実行するためコンピュータの性能に起因する時間的制約が 大きいので全く同じに扱えない面がありますがアセンブラレベルで見るとブール代数の逐次実行であり機能 面では論理設計と同じものを作りあげることができます。
論理設計は論理構造を作り上げるものですがコンピュータプログラミングはコンピュータという論理構造が 逐次実行する手順として書かれてコンピュータとプログラムが一体になったところにプログラマの意図した 論理構造に完成させるものです。
コンピュータプログラムの振る舞いはコンピュータの論理構造であるアーキテクチャによるものなのであま り固定的に言うこともできませんがコンピュータの論理構造は論理設計によるものなのでプログラムまでを 含んだコンピュータシステムは論理設計に含まれるものでブール代数の原理で動いている装置と理解してよ いと思います。


パスカルは歯車を組み合わせて計算機を作ったそうです。 ブール代数が発案された頃は真空管もリレーもトランジスタもない時代です。 論理設計を具現化するとき今では電気的な部品を使って作るのですが、これは現時点の技術では論理設計を 具現化するためには電気装置に実現するのが最も容易だという理由によります。

論理設計のある程度の機能がひとつのICに集約されてTTLやCMOSの標準ICをつなぎ合わせて電気装置を作る 時代になると論理設計は軽視され、つなぎ合わされた部品が電気的に正常動作するかに関心が移りました。 論理設計に関心の薄い人が論理的な解決と電気的な解決をよく分けることができないことにより論理設計 と電気設計を一体に考えて「ブール代数などの知識は知らないよりましだがディジタル回路の設計の実際 には役に立たない」と本に記した専門家もいます。


しかし今後は標準ICをつなぎ合わせるようなことでは実現の難しかったものを容易にひとつのICに論理設計 できるようになりました。 論理設計を標準ICを探して解決することはできなくなりました、論理設計が標準ICを組み合わせる制約から 自由になったので再び論理設計が重視されるようになりました。 当サイトでは論理設計の方法とそれを具現化する技術を別々のものと考えています、ブールらの先達の大き な功労の成果に感謝したいと思います。


コンピュータチップやマルチタスクOSなどの複雑な機構にたよらなくても 並列動作を高速に行う装置を容易に論理設計によって構築できます。 具現化するときはCPLDやFPGAになりますが論理が入り端子数や動作速度が 合えば品種やメーカは問わないので時間の経過による部品の供給などの問 題も心配することなく設計をどんどん蓄積していくことができます。

modoru.jpg(1480 byte)  

順序について

論理設計が記憶された値を使うときは、順序にそった 動きをするようになります。
なぜなら、記憶された値は、記憶する要因になった信 号値が元に戻っても記憶値は元に戻らないからです。
例えば押し釦式の計数器から指を離しても増えた数が 減って元に戻ったりしないのと同じです。

時系列が同期式で駆動される場合には記憶された値も 記憶されない値と同じように扱えます。
実際に組み合わせ論理も順序論理も同じ最適化や論理 圧縮のプログラムで処理しています。

論理設計が時系列を含むことを前提にするのなら順序 論理は組み合わせ論理に含まれることになり同じ方法 で設計できます。
状態遷移表は時系列を論理値に組み込んだ真理値表と 考えてよいと思います。

注意すべきことは記憶されない値だけで組まれた論理 の出力が、その論理の入力の値になってしまうことで す。
この場合は出力がクロックと無関係に記憶されて、非 同期式になり時系列の前提がくずれてしまいます。
知らない内にそうなってしまっていることもよくあり ますので、よく分からない不具合の原因にもなること もあります。
L言語のシミュレータLSIMでは記憶されない値の循環 があるとエラーを示して処理を中断しますので、論理 に非同期の記憶が混入しているのを察知できます。


modoru.jpg(1480 byte)  

実際の設計
基本編   基本論理   74シリーズ   応用編   プロセッサ編   USB編   部品編   計数器   比較器   送信器   受信器   分周器   キーボード   表示器   メモリ   変換器   端末   演算器

 
   基本編
L言語を使った論理設計の基本になるものを置きます。

真理値表   状態遷移   手続きの作り方   記憶   体験見本    低速動作   書き方

 
   基本論理
論理設計の基本要素となるようなもので小規模なものを集めてあります。

一桁の加算器   四桁の加算器   四桁の減算器   四桁の計数器
比較器   八桁の比較器
四桁の乗算器1   四桁の乗算器2   八桁の除算器
パリティ1   パリティ2
D記憶   RS記憶   JK記憶   シフトレジスタ
CRC5   CRC16   CRC32
計数器1   計数器2   計数器3   計数器4
起点1   起点2   起点3   起点4   起点5
分周器1   分周器2   分周器3   分周器4   分周器5
受信1   受信2   送信1   送信2
ALU

 
   74シリーズ
標準ICの74シリーズですが非同期のものは同期化してあります。

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ビット比較器

 
   応用編
論理設計を始めるときに参考になるものを置きます。

メモリ   計数器   8ビット中の1を数える   チャタリング   パルス発生器   累算器   シフトレジスタ   乗算器   除算器   低速動作   数値調査   並び替え

 
   プロセッサ編
プロセッサを論理設計したものを置きます。

小プロセッサ


   CPU8A
8ビットの独自仕様のプロセッサです。
  • 開発室A : 8ビットマイコンの設計をしています。
  • 支援室A : 開発室A で設計した8ビットマイコンのデバッガがあります。
  • プログラム支援室A : 開発室A で設計した8ビットマイコンのプログラムがあります。
  • プログラム支援室A0 : 開発室A で設計した8ビットマイコンをプログラム的に16ビットマイコンにして使います。
開発室A   支援室A   プログラム支援室A   プログラム支援室A0

 
   USB編
設計中の備忘録です。

基礎知識 デバイス
コントローラ
ホスト
コントローラ
手続き テストベンチ
電気部 概要 概要 手続き譜(栞付き) 準備と方法
初期化 実効譜(栞付き) 使い方 手続き譜(目次付き) 機能実効譜(栞付き)
通信概要 実効譜(目次付き) 実効譜(栞付き) 機能実効譜(目次付き)
パケット 実効譜(目次付き)
信号
データ
デバイスリクエスト
ディスクリプタ
文書 日時 備考
USB LP 初出 : 2006. 1.18 チップ化前

 
   部品編
論理設計したあらゆるものを種類分けしてここに置きます。

 
   計数器
番号 機能
LDL06D25A リセットとイネーブルのついた4ビットのアップカウンタです。
LDL06D26A リセットとイネーブルのついた4ビットのダウンカウンタです。
LDL06D26B リセットとイネーブルのついた4ビットの固定上限つきのアップカウンタです。
LDL06D27A リセットとイネーブルのついた4ビットの固定下限つきのダウンカウンタです。
LDL06D28A リセットとイネーブルのついた4ビットのアップダウンカウンタです。

 
   比較器
番号 機能
LDL06D29A 4個の8ビット値から最大値を選んでそれが入力された場所を番号で示します。
LDL06D30A 4個の8ビット値から最小値を選んでそれが入力された場所を番号で示します。
LDL06E01A 4個の8ビット値から最大値を選んで出力します。
LDL06E01B 4個の8ビット値から最小値を選んで出力します。
LDL06E01C 次々に入力される8ビット値からより大きい値を記憶して出力します。
LDL06E01D 次々に入力される8ビット値からより小さい値を記憶して出力します。

 
   送信器
番号 機能
LDL06E02A 8ビットのデータをパリティなしの1ストップビットで直列送信します。
LDL06E02B 8ビットのデータを偶数パリティつきの1ストップビットで直列送信します。

 
   受信器
番号 機能
LDL06E05A 8ビットのデータをパリティなし1ストップビットで受信します。受信CLKは1ビットの16倍の周波数を使います。

 
   分周器
番号 機能
LDL06E06A 24ビットの分周器です。
LDL06E07A 出力選択式の分周器です。

 
   キーボード
番号 機能
LDL06E04A 5×5のキーボードを読み取ります。

 
   表示器
番号 機能
LDL06E09A 8桁の7セグメントLEDの表示器です。

 
   メモリ
番号 機能
LDL06E10A 4ビット×8の2ポートRAMです。
LDL06E12A 4ビット×8の3ポートRAMです。
LDL06E14A 入力データの番地を上昇計数式にした4ビット×8の3ポートRAMです。
LDL06E25A せり上がり記憶の4ビット×8の3ポートRAMです。
LDL06F02A せり上がり記憶と番地指定書き込みの4ビット×8の4ポートRAMです。

 
   変換器
番号 機能
LDL06E12B 4桁の10進数のBCDを16ビット値に変換します。
LDL06E21A 8桁の10進数のBCDを32ビット値に変換します。
LDL06F04A 32ビット値を8桁のBCD値に変換します。

 
   端末
番号 機能
LDL06E13A 10進数を8桁まで入力できる端末です。
LDL06E26A 10進数を8桁まで入力できるせり上がり入力の端末です。
LDL06E27A 10進数を8桁まで入力できる数値出力の端末です。
LDL06E30A 10進数を8桁まで入力できる機能番号出力付の数値出力の端末です。
LDL06E31A 10進数を8桁まで入力できる加算機能付きの数値出力の端末です。
LDL06F06A 10進数を8桁まで入力できる外部から表示データの変更可能な端末です。

 
   演算器
番号 機能
LDL06E17A 32ビットの加算器です。
LDL06E18A 32ビットの減算器です。
LDL06E19A 32ビットの乗算器です。
LDL06E20A 32ビットの除算器です。
LDL06F04B 剰余付の32ビットの除算器です。

modoru.jpg(1480 byte)