NANDゲートシミュレータの部品一覧


Pin

コンストラクタ引数
  (self, parent, name, v=None)

端子
  端子そのもの

主要なメソッド
  enque_set(self, v)
    set(v)呼び出しをスケジューラに登録する

  set(self, v)
    端子の状態をvにセットする

本編の箇所
  端子を付けてつないでみる


NAND

コンストラクタ引数
  (self, parent, name='nand', latency=10)

端子
  inp_a, inp_b, out

本編の箇所
  満を持してNANDゲートクラス


         +---+
inp_a ---|    \
         |     |O--- out
inp_b ---|    /
         +---+


Joint

コンストラクタ引数
  (self, parent, name='jt', latency=None, pos=(0,0), lamp_name=None)

端子
  new_pin()メソッドで生成

主要なメソッド
  new_pin(self)
    ジョイントの保持する端子を生成して追加する

  new_pin_conn_n(self, n, targ, name, sta_i)
    new_pin()で端子をn個追加して
    targの名前 {name}_0, {name}_1, ... {name}_n-1 な端子につなぐ
    方向はジョイントからtargへ

本編の箇所
  ジョイントで分岐してつないでみる


     .-----
     |
-----@-----
     |
     .-----


Joint_N

コンストラクタ引数
  (self, parent, n, name='jt_n', latency=None, pos=(0,0), slide=('y',1), lamp_name=None)

端子
  Joint_N そのものは複数のJointを保持してるだけで
  直接端子を持たない

主要なメソッド
  new_pin_conn(self, targ, targ_pin_name, sta_i=0, n=-1, direc='to_targ')
    保持するジョイント群のnew_pin()を呼び出して、1つづつ端子を追加し、
    targの名前 {targ_pin_name}_0, {targ_pin_name}_1, .. {tafg_pin_name}_n-1
    な端子につなぐ
    targの端子名の開始番号を sta_i で変更可能
    端子数は、保持してるジョイントの数がデフォルトだが指定も可能
    接続方向も指定可能

内部
  Joint

本編の箇所
  カウンタとデコーダ


BUF

コンストラクタ引数
  (self, parent, name='buf', latency=10)

端子
  inp, out

内部
  Joint

本編の箇所
  何となく対策


inp ---@--- out


       +
       |\
inp ---| >--- out
       |/
       +

inp ---|>--- out


NOT

コンストラクタ引数
  (self, parent, name='not_', latency=10)

端子
  inp, out

内部
  NAND

本編の箇所
  NANDえも出来るの手始めに


           +---+
inp ---@---|    \
       |   |     |O--- out
       .---|    /
           +---+


       +
       |\
inp ---| >O--- out
       |/
       +

inp ---|>o--- out


AND

コンストラクタ引数
  (self, parent, name='and_', latency=10)

端子
  inp_a, inp_b, out

内部
  NAND
  NOT

備考
  latency指定の2倍の遅延!

本編の箇所
  NANDえも出来るの手始めに


         +---+
inp_a ---|    \
         |     |O---|>o--- out
inp_b ---|    /
         +---+


         +---+
inp_a ---|    \
         |     |--- out
inp_b ---|    /
         +---+


OR

コンストラクタ引数
  (self, parent, name='or_', latency=10)

端子
  inp_a, inp_b, out

内部
  NAND
  NOT

備考
  latency指定の2倍の遅延!

本編の箇所
  NANDえも出来るの手始めに


      	       +---+
inp_a ---|>o---|    \
      	       |     |O--- out
inp_b ---|>o---|    /
      	       +---+
      	       

         +---+
inp_a ---|    \
         )     >--- out
inp_b ---|    /
         +---+


NOR

コンストラクタ引数
  (self, parent, name='nor', latency=10)

端子
  inp_a, inp_b, out

内部
  NAND
  NOT

備考
  latency指定の3倍の遅延!

本編の箇所
  NANDえも出来るの手始めに


      	       +---+
inp_a ---|>o---|    \
      	       |     |O---|>o--- out
inp_b ---|>o---|    /
      	       +---+


         +---+
inp_a ---|    \
         )     >O--- out
inp_b ---|    /
         +---+


XOR

コンストラクタ引数
  (self, parent, name='xor', latency=10)

端子
  inp_a, inp_b, out

内部
  NAND

備考
  latency指定の3倍の遅延!

本編の箇所
  NANDえも出来るの手始めに


                             +---+
inp_a ---@-------------------|    \
         |                   |     |O---.
         |   +---+      .----|    /     |   +---+
         .---|    \     |    +---+      .---|    \
             |     |O---@                   |     |O--- ou
         .---|    /     |    +---+      .---|    /
         |   +---+      .----|    \     |   +---+
         |                   |     |O---.
inp_b ---@-------------------|    /
                             +---+

      
         |+---+
inp_a ---||    \
         ))     >--- out
inp_b ---||    /
         |+---+


AND_N

コンストラクタ引数
  (self, parent, n, name='and_n', latency=10)

端子
  inp_x, out

内部
  OR_N
  NOTSet
  NOT

備考
  latency指定の3倍の遅延!

本編の箇所
  多入力のゲート
  多入力ORの実装を変更


           +---+
inp_0 -----|    \
inp_1 -----|     \
  :           :
           |       |--- out
  :           :
inp_n-1 ---|    /
           +---+


OR_N

コンストラクタ引数
  (self, parent, n, name='or_n', latency=10)

端子
  inp_x, out

内部
  Joint

本編の箇所
  多入力のゲート
  多入力ORの実装を変更


           +---+
inp_0 -----|    \
inp_1 -----|     \
  :           :
           )       >--- out
  :           :
inp_n-1 ---|    /
           +---+


NAND_N

コンストラクタ引数
  (self, parent, n, name='nand_n', latency=10)

端子
  inp_x, out

内部
  AND_N
  NOT

備考
  latency指定の4倍の遅延!

本編の箇所
  多入力のゲート


           +---+
inp_0 -----|    \
inp_1 -----|     \
  :           :
           |       |O--- out
  :           :
inp_n-1 ---|    /
           +---+


NOR_N

コンストラクタ引数
  (self, parent, n, name='nor_n', latency=10)

端子
  inp_x, out

内部
  OR_N
  NOT

備考
  latency指定の2倍の遅延!

本編の箇所
  多入力のゲート


           +---+
inp_0 -----|    \
inp_1 -----|     \
  :           :
           )       >O--- out
  :           :
inp_n-1 ---|    /
           +---+


PosiNega

コンストラクタ引数
  (self, parent, name='posi_nega', latency=10)

端子
  inp, Q, nQ

内部
  BUF
  NOT

本編の箇所
  何となく対策


inp ---@---|>---- Q
       |
       .---|>o--- nQ


RSFF

コンストラクタ引数
  (self, parent, name='rsff', latency=10)

端子
  R, S, Q, nQ

内部
  NAND

本編の箇所
  RSフリップフロップなぞ


        +---+
R ------|    \
        |     |O---@------ Q
   .----|    /     |
   |    +---+      |
   .----    -------.
         \ /
          X
         / \
   .----    -------.
   |    +---+      |
   .----|    \     |
        |     |O---@------ nQ
S ------|    /
        +---+

+---+---+----+----+
|R  |S  |Q   |nQ  |
+---+---+----+----+
|1  |1  |keep|keep|
+---+---+----+----+
|1  |0  |0   |1   |
+---+---+----+----+
|0  |1  |1   |0   |
+---+---+----+----+
|0  |0  |X   |X   |
+---+---+----+----+


JKFF

コンストラクタ引数
  (self, parent, name='jkff', latency=10)

端子
  J, K, CLK, Q, nQ

内部
  RSFF
  NAND
  AND
  BUF

本編の箇所
  JKフリップフロップでも
  エッジトリガなJKFF
  何となく対策


         .-------------------------------------------.
         |   +---+         +------+                  |
         .---|    \        |      |                  |
             |     |O--|>--| R  Q |                  |
J -----------|    /        |      |                  |
             +---+         |      |                  |
                           |      |                  |
             +---+         |      |       +------+   |
       .-----|    \        |      |       |      |   |
       |     |     |-------| S nQ |---@---| R  Q |---|--@--- Q
       | .---|    /        |      |   |   |      |   |  |
       | |   +---+         +------+   |   |      |   |  |
       | .----------\ /---------------.   |      |   |  |
CLK ---@             X                    |      |   |  |
       | .----------/ \---------------.   |      |   |  |
       | |   +---+         +------+   |   |      |   |  |
       | .---|    \        |      |   |   |      |   |  |
       |     |     |-------| R  Q |---@---| S nQ |---@--|--- nQ
       .-----|    /        |      |       |      |      |
             +---+         |      |       +------+      |
                           |      |                     |
             +---+         |      |                     |
K -----------|    \        |      |                     |
             |     |O--|>--| S nQ |                     |
         .---|    /        |      |                     |
         |   +---+         +------+                     |
         .----------------------------------------------.


+---+---+---+-------+
| J | K | Q | nextQ |
+---+---+---+-------+
| 0 | 0 | 0 | 0     |
+---+---+---+-------+
| 0 | 1 | 0 | 0     |
+---+---+---+-------+
| 1 | 0 | 0 | 1     |
+---+---+---+-------+
| 1 | 0 | 1 | 1     |
+---+---+---+-------+
| 1 | 1 | 0 | 1     |
+---+---+---+-------+
| 1 | 1 | 1 | 0     |
+---+---+---+-------+


TFF

コンストラクタ引数
  (self, parent, name='tff', latency=10)

端子
  CLK, Q, nQ

内部
  JKFF

本編の箇所
  T-FF と D-FF


     'H'
      |
      |   +----------+
      @---|J        Q|--- Q
      |   |          |
CLK ------|CLK JKFF  |
      |   |          |
      .---|K       nQ|--- nQ
          +----------+


DFF

コンストラクタ引数
  (self, parent, name='dff', latency=10)

端子
  D, CLK, Q, nQ

内部
  JKFF
  PosiNeag

本編の箇所
  T-FF と D-FF
  何となく対策


     +---------------+   +--------+
     |              Q|---|J      Q|--- Q
D ---|inp PosiNeag   |   |  JKFF  |
     |             nQ|---|K     nQ|--- nQ
     +---------------+   |        |
CLK ---------------------|CLK     |
                         +--------+


LATCH

コンストラクタ引数
  (self, parent, n, name='latch', latency=10)

端子
  inp_x, CLK, out_x

内部
  DFF

本編の箇所
  表示がバラつくので


        CLK
         |   +----------+
inp_0 ---|---|D         |
         |   |   D-FF  Q|---- out_0
         @---|CLK       |
         |   +----------+
         |   +----------+
inp_0 ---|---|D         |
         |   |   D-FF  Q|---- out_0
         @---|CLK       |
         |   +----------+
         :        :
         |   +----------+
inp_n-1 -|---|D         |
         |   |   D-FF  Q|---- out_n-1
         .---|CLK       |
             +----------+


LATCH_N

コンストラクタ引数
  (self, parent, n, dbit_n, name='latch', latency=10)

端子
  inp_dx, CLK, sel_x, out_x_dx

内部
  JointANDSet
  LATCH

本編の箇所
  まずは素直に作ってみたところ


                           CLK
                            |
                            |
                +------------------------+
                |          inp           |
sel_0           |sel_0                   |
sel_1           |sel_1     JointANDSet   |
  :      ---/---|  :                     |
sel_N-1         |sel_N-1                 |
                |                        |
                |out_0 out_1 .. out_N-1  |
                +------------------------+
                     |
                     |
                     /
                    |||
                    ||| +---------------+
                    ||.-|CLK            |
                    /|  |               |
                    ||  |   LATCH 0     |
inp_0               ||  |   dn bit      |        out_0_0
inp_1               ||  |               |        out_0_1
  :      ---/---@-/-----|inp_x     out_x|---/---  :
inp_dn-1        |   ||  +---------------+        out_0_dn-1
                /   ||
                |   ||  +---------------+
                |   |.--|CLK            |
                |   |   |               |
                |   /   |   LATCH 1     |
                |   |   |   dn bit      |        out_1_0
                |   |   |               |        out_1_1
                @-/-----|inp_x     out_x|---/---  :        
                |   |   +---------------+        out_1_dn-1
                /   /
                |   |

                :   :                             :

                |   |   +---------------+
                |   .---|CLK            |
                |       |               |
                |       |   LATCH N-1   |
                |       |   dn bit      |        out_N-1_0   
                |       |               |        out_N-1_1   
                .-/-----|inp_x     out_x|---/---  :        
                        +---------------+        out_N-1_dn-1


COUNTER

コンストラクタ引数
  (self, parent, bit_n, name='counter', latency=10)

端子
  CLK, out_x

内部
  TFF

本編の箇所
  カウンタとデコーダ


           +------------+
           |           Q|--- out_0
CLK -------|CLK  T-FF   |
           |          nQ|---.
           +------------+   |
       .--------------------.
       |   +------------+
       |   |           Q|--- out_1
       .---|CLK  T-FF   |
           |          nQ|---.
           +------------+   |
       .--------------------.
                :
       .--------------------.
       |   +------------+
       |   |           Q|--- out_n-1
       .---|CLK  T-FF   |
           |          nQ|---
           +------------+


DECODER

コンストラクタ引数
  (self, parent, bit_n, name='decoder', latency=10)

端子
  en, inp_x, out_x

内部
  PosiNega
  AND_N
  GATE
  DECODER (bit_n - 1)

本編の箇所
  カウンタとデコーダ
  デコーダの実装を変更


PinSet

コンストラクタ引数
  (self, parent, n, dlst=(), name='pin_set')

端子
  p_x

内部
  Pin

本編の箇所
  実装の構成を少し修正


+----------+
|          |---- p_0
| PinSet   |---- p_1
|          |  :
|          |---- p_n-1
+----------+


NOTSet

コンストラクタ引数
  (self, parent, n, name='not_set', latency=10)

端子
  inp_x, out_x

内部
  NOT

本編の箇所
  多入力ORの実装を変更


inp_0 -----|>o--- out_0
inp_0 -----|>o--- out_0
  :         :       :
inp_n-1 ---|>o--- out_n-1


ANDSet

コンストラクタ引数
  (self, parent, n, name='and_set', latency=10)

端子
  inp_x, sel_x, out_x

内部
  AND

本編の箇所
  実装の構成を少し修正


     sel_0, sel_1, ..., sel_n-1
         ||
         ||
         ||   +---+
         . ---|    \
         ||   |     |--- out_0
inp_0 --------|    /
         ||   +---+
         ||   +---+
         . ---|    \
         ||   |     |--- out_1
inp_1 --------|    /
         ||   +---+

         :      :

         ||   +---+
         . ---|    \
              |     |--- out_n-1
inp_n-1 ------|    /
              +---+


ANDSetOr

コンストラクタ引数
  (self, parent, n, name='and_set_or', latency=10)

端子
  inp_x, sel_x, out

内部
  ANDSet
  OR_N

本編の箇所
  初期化が長いので


             sel_0 sel_1    sel_n-1
               |     |        |
               |     |   ..   |
          +-------------------------+
          |  sel_0 sel_1 .. sel_n-1 |
          |                         |     +---+
D_0 ------|inp_0    ANDSet     out_0|-----|    \
D_1 ------|inp_1    n bit      out_1|-----|     \
  :       |                         |  :  ) OR   >--- out
D_n-1 ----|inp_n-1           out_n-1|-----|     /
          +-------------------------+     |    /
                                          +---+


JointANDSet

コンストラクタ引数
  (self, parent, n, name='joint_and_set', latency=10)

端子
  inp, sel_x, out_x

内部
  Joint
  ANDSet

本編の箇所
  まずは素直に作ってみたところ


                   inp
                    |
                    @--------------.
                    ||             |
                    ||             |
                    ||       ..    |
                +------------------------+
                |inp_0 inp_1 .. inp_N-1  |
                |                        |
sel_0           |sel_0                   |
sel_1           |sel_1      ANDSet       |
  :      ---/---|  :          N          |
sel_N-1         |sel_N-1                 |
                |                        |
                |out_0 out_1 .. out_N-1  |
                +------------------------+
                     |
                     /
                     |
                 out_0 out_1 .. out_N-1


DESEL2

コンストラクタ引数
  (self, parent, name='desel2', latency=10)

端子
  inp, A_0, out_0, out_1

内部
  PosiNega
  JointANDSet

本編の箇所
  バス


       +----------+   +-------------+
       |          |   |             |
       | PosiNega |   | JointANDSet |
       |          |   | (n=2)       |
       |          |   |             |
       |        nQ|---|sel_0   out_0|--- out_0
A_0 ---|inp       |   |             |
       |         Q|---|sel_1   out_1|--- out_1
       +----------+   |             |
inp ------------------|inp          |
                      +-------------+


GATE

コンストラクタ引数
  (self, parent, n, name='gate', latency=10)

端子
  inp_x, en, out_x

内部
  Joint
  ANDSet

本編の箇所
  初期化が長いので


en ----------------------@--------.
                         |        |
           +---------------------------+
           |           sel_0..sel_d-1  |
           |                           |
inp_0 -----|inp_0    ANDSet       out_0|---- out_0
inp_1 -----|inp_1    n bit        out_1|---- out_1
  :        |                           |      :
inp_n-1 ---|inp_n-1             out_n-1|---- out_n-1
           +---------------------------+


SELECTOR

コンストラクタ引数
  (self, parent, bit_n, name='selector', latency=10)

端子
  en, A_x, D_x, out

内部
  DECODER
  ANDSetOr

本編の箇所
  実装の構成を少し修正


           +---------------------------+
en --------|en                         |
           |          DECODER          |
A_0 -------|inp_0     n bit            |
A_1 -------|inp_1                      |
  :        |                           |
A_n-1 -----|inp_n-1                    |
           |                           |
           |  out_0 out_1 .. out_N-1   |
           +---------------------------+
                |     |   ..   |
                |     |   ..   |
           +---------------------------+
           |  sel_0 sel_1 .. sel_N-1   |
           |                           |
           |          ANDSetOr         |
D_0 -------|inp_0     n bit            |
D_1 -------|inp_1                   out|--- out
  :        |                           |
D_N-1 -----|inp_N-1                    |
           |                           |
           +---------------------------+

           ( N = 1 << n )


MUX

コンストラクタ引数
  (self, parent, dbit_n, abit_n, name='mux', latency=10)

端子
  en, A_x, inp_ax_dx, out_dx

内部
  DECODER
  ANDSetOr

本編の箇所
  初期化が長いので


           +---------------------------+
en --------|en                         |
           |          DECODER          |
A_0 -------|inp_0     n bit            |
A_1 -------|inp_1                      |
  :        |                           |
A_n-1 -----|inp_n-1                    |
           |                           |
           |  out_0 out_1 .. out_N-1   |
           +---------------------------+
                |     |   ..   |
                |     |        |            deco_out_0
                @-----@== .. ==@=========== deco_out_1
                |     |        |               :
                |     |        |            deco_out_N-1
                |     |   ..   |
                |\    |\       |\
           +------\-----\--------\-----+
           |       \     \        \    |
D_0_0 -----|       ...  ...     ...    |
D_1_0 -----|          \     \        \ |--- out_0
  :        |          |\    |\       |\
D_N-1_0 ---|     +------|-----|--------|-----+
                 | +---------------------------+
                 | |  sel_0 sel_1 .. sel_N-1   |
                 | |                           |
                 | |          ANDSetOr         |..--- out_dn-2
     D_0_dn-1 -----|inp_0                      |
     D_1_dn-1 -----|inp_1                   out|-------- out_dn-1
       :           |                           |
     D_N-1_dn-1 ---|inp_N-1                    |
                   |                           |
                   +---------------------------+

           ( N = 1 << n )


DEMUX

コンストラクタ引数
  (self, parent, dbit_n, n, name='demux', latency=10)

端子
  sel_x, inp_dx, out_x_dx

内部
  JointANDSet

本編の箇所
  バス


              +-------------+
              |             |
              | JointANDSet |
              |             |
inp_0 --------|inp          |
              |        out_n|---/--- out_n_0
sel_n --/--@--|sel_n        |
           |  |             |
           |  +-------------+
           |  +-------------+
           |  |             |
           |  | JointANDSet |
           |  |             |
inp_1 --------|inp          |
           |  |        out_n|---/--- out_n_1
           @--|sel_n        |
           |  |             |
           |  +-------------+
           :         :
           |  +-------------+
           |  |             |
           |  | JointANDSet |
           |  |             |
inp_dn-1 -----|inp          |
           |  |        out_n|---/--- out_n_dn-1
           .--|sel_n        |
              |             |
              +-------------+


ROM_D1

コンストラクタ引数
  (self, parent, abit_n, dlst=(), name='rom_d1', latency=10)

端子
  en, A_x, D_0

内部
  SELECTOR
  PinSet

本編の箇所
  まずはデータ・ビット数「1」から


                   +------------+
en ----------------|en          |
                   |    SELECTOR|
A_0 ---------------|A_0         |
A_1 ---------------|A_1         |
  :                | :          |
A_an-1 ------------|A_an-1      |
                   |         out|--- D_0
+--------------+   |            |
|           p_0|---|D_0         |
| PinSet    p_1|---|D_1         |
|              | : | :          |
|        p_dn-1|---|D_dn-1      |
+--------------+   +------------+


ROM

コンストラクタ引数
  (self, parent, dbit_n, abit_n, dlst=(), name='rom', latency=10)

端子
  en, A_x, D_x

内部
  MUX
  PinSet

本編の箇所
  そしてデータ・ビット数「n」に


                   +-------------------+
en ----------------|en                 |
                   |        MUX        |
A_0 ---------------|A_0           out_0|---- D_0
A_1 ---------------|A_1           out_1|---- D_1
  :                | :              :  |
A_an-1 ------------|A_an-1     out_dn-1|---- D_dn-1
                   |                   |
+--------------+   |                   |
|           p_0|---|inp_0_0            |
| PinSet    p_1|---|inp_0_1            |
|              | : | :                 |
|        p_dn-1|---|inp_0_dn-1         |
|          p_dn|---|inp_1_0            |
|        p_dn+1|---|inp_1_1            |
|              | : | :                 |
|      p_dn*N-1|---|inp_N-1_dn-1       |
+--------------+   +-------------------+


ROM_SEQ

コンストラクタ引数
  (self, parent, dbit_n, abit_n, dlst=(), name='rom_seq', hz=1.0, pos=(0,0), lamp_name=None, latency=10)

端子
  en, out_x, Q, nQ

内部
  CLK
  COUNTER
  LATCH
  ROM

本編の箇所
  どやって試すべしか


            Q
            |
            |
            @---------------------------------------------------------------------.
            |                                                                     |
+--------+  |   +----------+   +------------------+   +--------------+   +------------------+
|       Q|--@---|CLK  out_0|---|inp_0        out_0|---|A_0        D_0|---|inp_0  CLK   out_0|--- out_0
|        |      |     out_1|---|inp_1        out_1|---|A_1        D_1|---|inp_1        out_1|--- out_1
|  CLK   |      |          | : |                  | : |              | : |                  | :
|        |      | COUNTER  |   |      LATCH       |   |     ROM      |   |      LATCH       |
|        |      | an bit   |   |      an bit      |   |              |   |      dn bit      |
|        |      |          | : |                  | : |              | : |                  | :
|        |      |  out_an-1|---|inp_an-1  out_an-1|---|A_an-1  D_dn-1|---|inp_dn_1  out_dn-1|--- out_dn-1
|        |      +----------+   |        CLK       |   |      en      |   |                  |
|        |                     +------------------+   +--------------+   +------------------+
|        |                               |                   |
|      nQ|-------------------------------@                   |
|  en    |                               |                   |
+--------+                               |                   |
   |                                     |                   |
   @---------------------------------------------------------.
   |                                     |
   |                                     |
   en                                    nQ


RAM

コンストラクタ引数
  (self, parent, dbit_n, abit_n, name='ram', latency=10)

端子
  en, CLK, A_x, inp_x, out_x

内部
  LATCH_N
  MUX

本編の箇所
  まずは素直に作ってみたところ


                CLK                           en   A_0 A_1 .. A_an-1
                 |                            |           |
                 |                            |           |
                 |                            |           /
                 |                            |           |
               +-----------------------+    +-----------------------+
               |CLK                    |    | en   A_0 A_1 .. A_an-1|
               |                       |    |                       |
               |  LATCH_N              |    |             MUX       |
               |                  sel_0|----|deco_out_0             |
               |                  sel_1|----|deco_out_1             |
               |                   :   | :  |  :                    |
               |                sel_N-1|----|deco_out_N-1           |
               |                       |    |                       |
               |                       |    |                       |
               |                out_0_0|----|inp_0_0                |
               |                out_0_1|----|inp_0_1                |
               |                 :     | :  |  :                    |
               |             out_0_dn-1|----|inp_0_dn-1             |
               |                out_1_0|----|inp_1_0                |
               |                out_1_1|----|inp_1_1                |
               |                 :     | :  |  :                    |
               |             out_1_dn-1|----|inp_1_dn-1             |
inp_0          |inp_0            :     | :  |  :               out_0|        out_0
inp_1          |inp_1         out_N-1_0|----|inp_N-1_0         out_1|        out_1
  :     ---/---|  :              :     | :  |  :                :   |---/---  :
inp_dn-1       |inp_dn-1   out_N-1_dn-1|----|inp_N-1_dn-1   out_dn-1|        out_dn-1
               +-----------------------+    +-----------------------+

                                             ( N = 1 << an )


RAM_TEST_4

コンストラクタ引数
  (self, parent, abit_n, dlst=(), name='ram_test_4', hz=1.0, pos=(0,0), latency=10)

端子
  en

内部
  ROM_SEQ
  RAM
  DECODER_7seg
  DEV_TEST_4

本編の箇所
  どやって試すべしか



  en
  |
  @---------------------@-----------------.
  |                     |                 |
+------------+       +-------------+   +-------+
| en         |       |  en         |   |  en   |
|            |       |             |   |       |
|            |       |             |   |  ---  |
|            |       |             |   | |   | |
|            |       |             |   |  ---  |
| ROM_SEQ    |       | RAM         |   | |   | |
| 8 bit      |       | 4 bit       |   |  ---  |
|            |       |             |   |       |
|       out_0|-------|inp_0   out_0|---|inp_0  |
|       out_1|-------|inp_1   out_1|---|inp_1  |
|       out_2|-------|inp_2   out_2|---|inp_2  |
|       out_3|-------|inp_3   out_3|---|inp_3  |
|            |       |             |   |       |
|       out_4|-------|A_0          |   |       |
|       out_5|-------|A_1          |   |       |
|       out_6|-------|A_2          |   |       |
|            |       |        CLK  |   |       |
|            |       +-------------+   +-------+
|            |                 |
|            |       +---+     |
|       out_7|-------|    \    |
|            |       |     |---.
|          nQ|-------|    /
|            |       +---+
|            |
+------------+


    en
    |
+------------+
|   en       |
|            |
| DEV_TEST_4 |
|            |
| +--------+ |
| |        | |
| |  RAM   | |
| |  4 bit | |
| |        | |
| +--------+ |
|            |
+------------+


DEV_BASE

コンストラクタ引数
  (self, parent, dbit_n, abit_n, name='dev_base', latency=10)

端子
  en, CLK, A_ax, inp_dx, out_dx, dev_out_x_dx, dev_inp_x_dx

内部
  LATCH_N
  MUX

本編の箇所
  日の字3つのデバイス


                         CLK                                  en       A_{abit_n}
                          |                                   |         |
                          |                                   |         /
                          |                                   |         |
               +----------------------+                  +------------------------+
               |         CLK          |                  |    en       A_{abit_n} |
               |                      |                  |                        |
               |     LATCH_N          |                  |    MUX                 |
               |                      |                  |                        |
               |                      |                  |                        |
               |              sel_{AN}|--------/---------|deco_out_{AN}           |
               |                      |                  |                        |
               |                      |                  |                        |
               |                      |                  |                        |
inp_{dn}---/---|inp_{dn}              |                  |                out_{dn}|---/---out_{dn}
               |                      |                  |                        |
               |         out_{AN}_{dn}|--/--.            |                        |
               |                      |     |            |                        |
               |                      |     |            |                        |
               |                      |     |      .--/--|inp_{AN}_{dn}           |
               |                      |     |      |     |                        |
               |                      |     |      |     |                        |
               +----------------------+     |      |     +------------------------+
                                            |      |
                                            |      |
                                dev_out_{AN}_{dn}  |
                                                   |
                                                   |
                                               dev_inp_{AN}_{dn}
               AN = (1 << abit_n)


CLK

コンストラクタ引数
  (self, parent, hz=1.0, name='clk', pos=(0,0), lamp_name=None, latency=10)

端子
  en, out, Q, nQ

内部
  NAND
  PosiNega
  GATE
  Lamp

本編の箇所
  現実の時間でLチカさせてみる
  表示がバラつくので
  何となく対策


                                                           [ Lamp ]
         .---------------.  +-----------+   +------------+    |
         |    +---+      |  | PosiNega  |   |  GATE 2bit |    | .--- out
         .----|    \     |  |           |   |            |    |/
              |     |O---@--|inp       Q|---|inp_0  out_0|----@----- Q
   en ---@----|    /        |           |   |            |
         |    +---+         |         nQ|---|inp_1  out_1|---------- nQ
         |                  +-----------+   |            |
         .----------------------------------|en          |
                                            +------------+


Lamp

コンストラクタ引数
  (self, parent, name='lamp', latency=None, pos=(0,0), show_inf={})

端子
  inp

本編の箇所
  ジョイントで分岐してつないでみる
  JKFFでLチカしてみる
  日の字の7セグ


       +------+
inp ---| Lamp |
       +------+


Lamp_N

コンストラクタ引数
  (self, parent, n, name='lamp_n', latency=None, pos=(0,0), slide=('y',1))

端子
  inp_x

内部
  Lamp

本編の箇所
  カウンタとデコーダ


           +----------+
inp_0 -----| Lamp 0   |
inp_1 -----| Lamp 0   |
  :        |   :      |
inp_n-1 ---| Lamp n-1 |
           +----------+


Lamp_7seg

コンストラクタ引数
  (self, parent, name='lamp_7seg', latency=None, pos=(0,0))

端子
  inp_x

内部
  Lamp

本編の箇所
  日の字の7セグ


           +-------+
inp_0 -----|  ---  |
inp_1 -----| |   | |
  :        |  ---  |
inp_6 -----| |   | |
           |  ---  |
           +-------+


DECODER_7seg

コンストラクタ引数
  (self, parent, name='dec_7seg', latency=10)

端子
  en, inp_x, out_x

内部
  ROM

本編の箇所
  日の字の7セグ

        
         +-------------------------+
en ------|en                       |
         |      ROM                |
inp_0 ---|A_0   address 4 bit   D_0|--- out_0
inp_1 ---|A_1   data 7 bit      D_1|--- out_1
inp_2 ---|A_2                    : |      :
inp_3 ---|A_3                   D_6|--- out_6
         |                         |
         +-------------------------+

        0x77, 0x24, 0x5d, 0x6d, 0x2e, 0x6b, 0x7b, 0x25,
        0x7f, 0x6f, 0x3f, 0x7a, 0x53, 0x7c, 0x5b, 0x1b,


DECODER_Lamp_7seg

コンストラクタ引数
  (self, parent, name='deco_lamp_7seg', latency=10, pos=(0,0))

端子
  en, inp_x

内部
  DECODER_7seg
  Lamp_7seg

本編の箇所
  足し算できるかな


         +-------------------------+   +--------+
en ------|en                       |   |        |
         |                         |   |  ---   |
         |                         |   | |   |  |
         |                         |   |  ---   |
         |                         |   | |   |  |
         |                         |   |  ---   |
         |      DECO_7seg          |   |        |
         |                         |   |        |
inp_0 ---|inp_0               out_0|---|inp_0   |
inp_1 ---|inp_1               out_1|---|inp_1   |
inp_2 ---|inp_2                :   | : | :      |
inp_3 ---|inp_3               out_6|---|inp_6   |
         |                         |   |        |
         +-------------------------+   +--------+


LAMP_7_DEV_3

コンストラクタ引数
  (self, parent, name='lamp_7_dev_3', latency=10, pos=(0,0))

端子
  en, CLK, A_0, A_1, inp_x, out_x

内部
  DEV_BASE
  DECODER_Lamp_7seg

本編の箇所
  日の字3つのデバイス


                  +-------------------------+
                  |                         |
                  |         DEV_BASE        |
                  |                         |
en ---------------|en                       |
                  |                         |
CLK --------------|CLK                      |
                  |                         |
A_0 ----------/---|A_0                      |
A_1 ----------/---|A_1                      |
                  |                         |
inp_{dn} -----/---|inp_{dn}                 |
                  |                         |
out_{dn} -----/---|out_{dn}                 |
                  |                         |       +----------+
                  |                         |       |DECODER_  |
                  |                         |       | Lamp_7seg|
                  |              dev_out_3_0|---@---|en        |
                  |                         |   |   |   ---    |
                  |              dev_inp_3_0|---.   |  |   |   |
                  |                         |       |   ---    |
                  |                         |       |  |   |   |
                  |                         |       |   ---    |
                  |           dev_out_0_{dn}|-/-@-/-|inp_{dn}  |
                  |                         |   |   +----------+
                  |                         |   |
                  |           dev_inp_0_{dn}|-/-.
                  |                         |       +----------+
                  |                         |       |DECODER_  |
                  |                         |       | Lamp_7seg|
                  |              dev_out_3_1|---@---|en        |
                  |                         |   |   |   ---    |
                  |              dev_inp_3_1|---.   |  |   |   |
                  |                         |       |   ---    |
                  |                         |       |  |   |   |
                  |                         |       |   ---    |
                  |           dev_out_1_{dn}|-/-@-/-|inp_{dn}  |
                  |                         |   |   +----------+
                  |                         |   |
                  |           dev_inp_1_{dn}|-/-.
                  |                         |       +----------+
                  |                         |       |DECODER_  |
                  |                         |       | Lamp_7seg|
                  |              dev_out_3_2|---@---|en        |
                  |                         |   |   |   ---    |
                  |              dev_inp_3_2|---.   |  |   |   |
                  |                         |       |   ---    |
                  |                         |       |  |   |   |
                  |                         |       |   ---    |
                  |           dev_out_2_{dn}|-/-@-/-|inp_{dn}  |
                  |                         |   |   +----------+
                  |                         |   |
                  |           dev_inp_2_{dn}|-/-.
                  |                         |
                  |                         |
                  |              dev_out_3_3|---@--
                  |                         |   |
                  |              dev_inp_3_3|---.
                  |                         |
                  +-------------------------+


ADD

コンストラクタ引数
  (self, parent, name='add', latency=10)

端子
  A, B, Y, C

内部
  XOR
  AND

本編の箇所
  足し算できるかな


           |+---+
A -----@---||    \
       |   )) XOR >--- Y
B --@------||    /
    |  |   |+---+
    |  |
    |  |   +---+
    |  .---|    \
    |      |AND  |--- C
    .------|    /
           +---+


ADD_C

コンストラクタ引数
  (self, parent, name='add_c', latency=10)

端子
  Cin, A, B, Y, C

内部
  ADD
  OR

本編の箇所
  足し算できるかな


                     +-------+
Cin------------------|A     Y|--------------- Y
       +-------+     |  ADD  |   +---+
A -----|A     Y|-----|B     C|---|    \
       |  ADD  |     +-------+   ) OR  >----- C
B -----|B     C|-----------------|    /
       +-------+                 +---+


ADD_N

コンストラクタ引数
  (self, parent, n, name='add_n', latency=10)

端子
  Cin, A_x, B_x, Y_x, C

内部
  ADD_C

本編の箇所
  足し算できるかな


       +--------+
Cin ---|Cin    Y|----- Y0
       |        |
A0 ----|A ACC_C |
       |        |
B0 ----|B      C|--.
       +--------+  |
   .---------------.
   |   +--------+
   .---|Cin    Y|----- Y1
       |        |
A1 ----|A ACC_C |
       |        |
B1 ----|B      C|--.
       +--------+  |
   .---------------.
   |   +--------+
   .---|Cin    Y|----- Y2
       |        |
A2 ----|A ACC_C |
       |        |
B2 ----|B      C|--.
       +--------+  |
   .---------------.
   |
   :       :
   |   +--------+
   .---|Cin    Y|----- Yn-1
       |        |
An-1 --|A ACC_C |
       |        |
Bn-1 --|B      C|----- C
       +--------+


ADD_DEV

コンストラクタ引数
  (self, parent, dbit_n, name='add_dev', latency=10)

端子
  en, CLK, A_0, inp_x, out_x

内部
  LATCH_N
  ADD_N
  MUX

本編の箇所
  足し算デバイス
  日の字3つのデバイス



                         CLK                                              en       A_0
                          |                                               |         |
                          |                                               |         |
                          |                                               |         |
               +----------------------+                              +---------------------+
               |         CLK          |                              |    en       A_0     |
               |                      |                              |                     |
               |     LATCH_N          |                              |    MUX              |
               |     (N=2)            |                              |    (dbit_n=dn)      |
               |                      |                              |    (abit_n=1)       |
               |                      |                              |                     |
               |                 sel_0|------------------------------|deco_out_0           |
               |                 sel_1|------------------------------|deco_out_1           |
               |                      |                              |                     |
               |                      |       +--------------+       |                     |
               |                      |       |              |       |                     |
               |                      |       |    ADD_N     |       |                     |
               |                      |       |    (N=dn)    |       |                     |
               |                      |       |              |       |                     |
               |                      |      -|Cin           |       |                     |
               |                      |       |              |       |                     |
inp_0          |inp_0          out_0_0|       |A_0        Y_0|       |inp_0_0         out_0|       out_0
inp_1          |inp_1          out_0_1|       |A_1        Y_1|       |inp_0_1         out_1|       out_1
  :     ---/---|  :             :     |---/---| :          : |---/---|  :               :  |---/--- :
inp_dn-1       |inp_dn-1    out_0_dn-1|       |A_dn-1  Y_dn-1|       |inp_0_dn-1   out_dn-1|       out_dn-1
               |                      |       |              |       |                     |
               |               out_1_0|       |B_0          C|-------|inp_1_0              |
               |               out_1_1|       |B_1           |      -|inp_1_1              |
               |                :     |---/---| :            |      :|  :                  |
               |            out_1_dn-1|       |B_dn-1        |      -|inp_1_dn-1           |
               |                      |       |              |       |                     |
               +----------------------+       +--------------+       +---------------------+


                  +-------------------------+
                  |                         |
                  |         DEV_BASE        |
                  |                         |
en ---------------|en                       |
                  |                         |
CLK --------------|CLK                      |
                  |                         |
A_0 ----------/---|A_0                      |
A_1 ----------/---|A_1                      |
                  |                         |
inp_{dn} -----/---|inp_{dn}                 |
                  |                         |
out_{dn} -----/---|out_{dn}                 |
                  |                         |       +--------+
                  |                         |       |        |
                  |                         |       | ADD_N  |
                  |                         |       |        |
                  |           dev_out_0_{dn}|---/---|A_{dn}  |
                  |                         |       |        |
                  |           dev_out_1_{dn}|---/---|B_{dn}  |
                  |                         |       |        |
                  |           dev_inp_0_{dn}|---/---|Y_{dn}  |
                  |                         |       |        |
                  |              dev_inp_1_0|---/---|C       |
                  |                         |       |        |
                  |                         |      -|Cin     |
                  |                         |       |        |
                  +-------------------------+       +--------+


DEV_TEST_4

コンストラクタ引数
  (self, parent, dev, abit_n, dlst=(), name='dev_test_4', hz=1.0, pos=(0,0), latency=10)

端子
  en

内部
  ROM_SEQ
  DECODER_7seg

本編の箇所
  足し算デバイス


  en
  |
  @---------------------@-----------------.
  |                     |                 |
+------------+       +-------------+   +-------+
| en         |       |  en         |   |  en   |
|            |       |             |   |       |
|            |       |             |   |  ---  |
|            |       |             |   | |   | |
|            |       |             |   |  ---  |
| ROM_SEQ    |       | DEV         |   | |   | |
| 8 bit      |       | 4 bit       |   |  ---  |
|            |       |             |   |       |
|       out_0|-------|inp_0   out_0|---|inp_0  |
|       out_1|-------|inp_1   out_1|---|inp_1  |
|       out_2|-------|inp_2   out_2|---|inp_2  |
|       out_3|-------|inp_3   out_3|---|inp_3  |
|            |       |             |   |       |
|       out_4|-------|A_0          |   |       |
|       out_5|-------|A_1          |   |       |
|       out_6|-------|A_2          |   |       |
|            |       |        CLK  |   |       |
|            |       +-------------+   +-------+
|            |                 |
|            |       +---+     |
|       out_7|-------|    \    |
|            |       |     |---.
|          nQ|-------|    /
|            |       +---+
|            |
+------------+


BUS

コンストラクタ引数
  (self, parent, dbit_n, abit_n, dev_abit_n, name='bus', latency=10)

端子
  TO_DEV, CLK, DEV_CLK_{dev#}, en, dev_en_{dev#},
  inp_{dev#}_{dbit#}, out_{dev#}_{dbit#}, DEV_A_{dev_abit#}, AI_{abit#}, AO_{dev#}_{abit#}, 

内部
  DSEL2
  MUX
  LATCH
  DEMUX

本編の箇所
  バス


TO_DEV
  |
  |    +----------+
  |    |          |
  |    |  DESEL2  |
  |    |          |
  .----|A_0       |
       |          |
       |     out_0|-----------------------------------------------------.
CLK ---|inp       |                                                     |
       |     out_1|----------------------------------------.            |
       +----------+                                        |            |
                                                           |            |
DEV_A_{dev_abit#} ---/-----.                               |            |
                           |                               |            |
                       +--------------------------------+  |  +-------------------------+
                       |  A_{abit#}                     |  |  |        CLK              |
                       |                                |  |  |                         |
                       |       MUX                      |  :  |        LATCH            |
                       |                                |  :  |                         |
inp_{dev#}_{dbit#}--/--|inp_{dev#}_{dbit#}   out_{dbit#}|--/--|inp_{dbit#}              |
                       |                                |  :  |                         |
en ------------@-------|en      deco_out_{dev#}         |  :  |        out_{dbit#}      |
               |       +--------------------------------+  |  +-------------------------+
               |                      |                    |               |
               |                      /                    |               |
               |                      |                    |               |
               |       +--------------------------------+  |               |
               |       |           sel_{dev#}           |  |               |
               |       |                                |  |               |
               .-------|inp_{dbit#+abit#}               |  |               |
                       |                                |  |               |
                       |             inp_{dbit#+abit#+1}|--.               |
                       |                                |                  |
                       |                     inp_{dbit#}|------------------.
                       |                                |                  
AI_{abit#} ---/--------|inp_{dbit#:dbit#+abit#}         |
                       |                                |
                       |                                |
                       |       DEMUX                    |
                       |       (n=dev# N=dbit#+abit#+2) |
                       |                                |
                       |                                |
                       |              out_{dev#}_{dbit#}|---/--- out_{dev#}_{dbit#}
                       |                                |
                       |  out_{dev#}_{dbit#:dbit#+abit#}|---/--- AO_{dev#}_{abit#}
                       |                                |
                       |        out_{dev#}_{dbit#+abit#}|---/--- dev_en_{dev#}
                       |                                |
                       |      out_{dev#}_{dbit#+abit#+1}|---/--- DEV_CLK_{dev#}
                       |                                |
                       +--------------------------------+