⚡ 4科目横断マップ

コンピュータは、物理からソフトウェアまで、同じシステムを違う抽象度で見ているだけ。

このマップは4科目を貫く 10のテーマ × 4種類のMermaid図 で、
「いつ」「どの科目で」「何と何が」「どう繋がるか」まで可視化する。

 

🌐 全体俯瞰:5階層のレイヤーマップ

物理 → アナログ回路 → デジタル回路 → アーキテクチャ → ソフトウェア の5層を、4科目が分担して積み上げてる。

graph TB
    L5["🖥️ Layer 5: ソフトウェア<br/>プログラミング通論"]
    L4["⚙️ Layer 4: アーキテクチャ<br/>計算機通論"]
    L3["🔲 Layer 3: デジタル回路<br/>論理設計学"]
    L2["⚡ Layer 2: アナログ回路<br/>電気電子回路"]
    L1["🔬 Layer 1: 物理<br/>(半導体の物性)"]
    
    L5 -->|"実装の隠蔽"| L4
    L4 -->|"命令セット"| L3
    L3 -->|"ゲート実装"| L2
    L2 -->|"回路素子"| L1
    
    L1 -.->|"物理制約"| L2
    L2 -.->|"トランジスタでNAND"| L3
    L3 -.->|"D-FFでレジスタ"| L4
    L4 -.->|"抽象データ型"| L5
    
    style L5 fill:#f9f,stroke:#333,stroke-width:3px
    style L4 fill:#bbf,stroke:#333,stroke-width:3px
    style L3 fill:#bfb,stroke:#333,stroke-width:3px
    style L2 fill:#fbf,stroke:#333,stroke-width:3px
    style L1 fill:#ff9,stroke:#333,stroke-width:3px

📅 授業時系列コミットグラフ

4月から6月まで、各科目が 「どの日に何を積み上げたか」 をgitのコミット履歴風に見せる。
ブランチ = 科目、コミット = 各回の授業。

gitGraph
    commit id: "4/9 論理設計学 ブール代数"
    commit id: "4/13 計算機通論 2進数と2の補数"
    commit id: "4/14 プログラミング通論 C言語基礎"
    commit id: "4/20 計算機通論 ノイマン型"
    commit id: "4/21 プログラミング通論 ポインタ"
    commit id: "4/23 論理設計学 排他的論理和"
    commit id: "4/27 プログラミング通論 キューと再帰"
    commit id: "5/11 計算機通論 RISCとCISC"
    commit id: "5/12 プログラミング通論 関数とスコープ"
    commit id: "5/18 計算機通論 MIPSレジスタ"
    commit id: "5/26 プログラミング通論 リスト構造"
    commit id: "5/28 論理設計学 D-FFとJ-K FF"
    commit id: "6/1 計算機通論 配列操作"
    commit id: "6/8 計算機通論 スタックと再帰"
    commit id: "6/9 プログラミング通論 スタック実装"
    commit id: "6/11 論理設計学 レジスタとカウンタ"
    commit id: "6/16 プログラミング通論 抽象データ型"
    commit id: "6/22 計算機通論 パイプライン"
    commit id: "6/25 論理設計学 MooreとMealy"
    commit id: "6/29 計算機通論 データハザード"
    commit id: "6/23 プログラミング通論 リスト応用"

    branch denki
    checkout denki
    commit id: "5/18 RCとRL交流回路"
    commit id: "5/25 RLC共振回路"
    commit id: "6/8 伝達関数とフィルタ"
    commit id: "6/15 RC過渡現象と時定数"
    commit id: "6/22 ダイオードと整流回路"
    commit id: "6/29 トランジスタと増幅"
    checkout main
    merge denki tag: "6月末 全層が完成"

読み方のポイント:

  • main ブランチ = 論理設計学・計算機通論・プログラミング通論(4月から始まる)
  • denki ブランチ = 電気電子回路(5/18から合流、ブランチ名はASCIIのみ)
  • 6/29のトランジスタで4科目が 完全合流 (物理からSWまで全部揃う瞬間)

🔗 繋がり①:トランジスタ → NAND → ラッチ → FF → レジスタ → CPU

4科目を貫く最大の進化の流れ。論理設計学は4月から6月まで2ヶ月かけてこの1本を積み上げてる。

物理 → 論理ゲート → 記憶素子 → レジスタ → CPU、という一本のチェーン:

graph LR
    A["⚡トランジスタ<br/>(MOSFET)"]
    B["NANDゲート<br/>(CMOS 4個)"]
    C["SRラッチ<br/>(NAND 2個)"]
    D["D-FF<br/>(マスタースレーブ)"]
    E["レジスタ<br/>(D-FF × n)"]
    F["レジスタファイル<br/>(CPU)"]
    G["パイプライン<br/>(CPU全体)"]
    
    A -->|"スイッチング"| B
    B -->|"NOR/NAND=万能"| C
    C -->|"エッジトリガ化"| D
    D -->|"n個並列"| E
    E -->|"32本"| F
    F -->|"ステージ間"| G
    
    style A fill:#fbb
    style B fill:#bfb
    style C fill:#bfb
    style D fill:#bfb
    style E fill:#bbf
    style F fill:#bbf
    style G fill:#fbf

論理設計学の授業時系列:

  • 4/9 ブール代数・基本ゲート
  • 4/16 排他的論理和・真理値表・最小項展開
  • 4/23 半加算器・全加算器
  • 4/30 桁上げ先見加算器・カルノー図
  • 5/7 NAND/NORの万能性・ドモルガン変換
  • 5/14 多段回路
  • 5/21 SRラッチ・ゲート付きラッチ
  • 5/28 D-FF・J-K FF・マスタースレーブ
  • 6/11 レジスタ・シフトレジスタ・カウンタ
  • 6/18 各種カウンタ設計
  • 6/25 Moore/Mealy型

🔗 繋がり②:時定数 → クロック周波数の物理的限界

講義の順序が偶然シンクロしてて一番感動する繋がり。

電気電子回路で「コンデンサの電圧は急に変わらない(連続)」→ 時定数τ = CR → トランジスタのスイッチング時間 → クリティカルパス → 最大クロック周波数が決まる。

flowchart TD
    A["RC回路の過渡現象<br/>τ = CR"]
    B["トランジスタの<br/>スイッチング時間"]
    C["NANDゲートの<br/>伝搬遅延"]
    D["クリティカルパス遅延<br/>(最長経路)"]
    E["最大クロック周波数<br/>f_max = 1 / t_path"]
    F["DRAMリフレッシュ周期<br/>= キャパシタの放電時定数"]
    
    A -->|"物理的に同じ"| B
    B -->|"チャネル形成時間"| C
    C -->|"段数ぶん累積"| D
    D -->|"これが上限"| E
    A -.->|"キャパシタは<br/>じわじわ放電"| F
    
    style A fill:#fbf,stroke:#333
    style B fill:#fbf,stroke:#333
    style C fill:#bfb,stroke:#333
    style D fill:#fbb,stroke:#333
    style E fill:#fbb,stroke:#333
    style F fill:#fbb,stroke:#333

ノートの証拠:


🔗 繋がり③:全加算器 → ALU → MIPSのadd/sub → 最適化

論理設計学の 全加算器 が、計算機通論の 2の補数ALU に直結し、プログラミング通論の 最適化 にまで繋がる。

graph TB
    subgraph "論理設計学 4/23-4/30"
        HA["半加算器<br/>S=A⊕B, Co=AB"]
        FA["全加算器<br/>Sum=X⊕Y⊕Cin<br/>Cout=YCin+XCin+XY"]
        CLA["桁上げ先見加算器<br/>キャリー伝播を並列化"]
    end
    
    subgraph "計算機通論 4/13-"
        TC["2の補数<br/>A-B = A+~B+1"]
        ADD["MIPS add/sub命令<br/>ALUは1つの加算器"]
        MULT["mult命令<br/>Hi/Loレジスタ"]
    end
    
    subgraph "プログラミング通論 5/19"
        OPT["最適化<br/>定数畳み込み"]
        REC["末尾再帰除去"]
    end
    
    HA -->|"2段重ね"| FA
    FA -->|"32bit並べる"| ADD
    FA -->|"減算も同じ回路で"| TC
    CLA -->|"高速化の鍵"| ADD
    ADD -->|"機械語レベル"| OPT
    ADD -->|"再帰関数のコスト"| REC
    
    style HA fill:#bfb
    style FA fill:#bfb
    style CLA fill:#bfb
    style TC fill:#bbf
    style ADD fill:#bbf
    style MULT fill:#bbf
    style OPT fill:#fbf
    style REC fill:#fbf

「2の補数で減算できる」の論理的な根拠:

  • 1の補数ではキャリーを最下位に戻す必要がある(遅い)
  • 2の補数ならキャリーを無視するだけで正しい結果
  • だからハードウェアは 加算器1つで加減算両方できる
  • さらに桁上げ先見加算器でキャリー伝播を高速化

🔗 繋がり④:ドントケア → Self-Starting → 分岐予測ミスからの回復

論理設計学の「don’t-care状態からの復帰」が、CPU設計の根底に流れる思想と同じ。

graph LR
    A["論理設計学 4/30<br/>カルノー図のdon't-care<br/>都合よく0にも1にも"]
    B["論理設計学 6/11<br/>Self-Starting<br/>電源投入時の暴走防止"]
    C["計算機通論 6/22<br/>分岐予測ミス<br/>パイプライン・フラッシュ"]
    
    A -->|"don't-care状態を<br/>明示的に指定"| B
    B -->|"予測が外れたら<br/>状態を破棄"| C
    
    style A fill:#bfb
    style B fill:#bfb
    style C fill:#bbf

Moore型とMealy型の対比(順序回路の出力決定方式):

stateDiagram-v2
    direction LR
    [*] --> S0: 入力
    S0 --> S1: クロック↑
    S1 --> S0: クロック↓

    note right of S1
        Moore型: 出力は状態のみ
        → クロック後に確定、1クロック遅れ
        → 安定、投機実行に向く
    end note
比較項目Moore型Mealy型
出力の決め方状態のみ状態 + 入力
出力のタイミングクロックエッジ後入力変化と同時
パイプライン投機実行しやすい入力で即変化(偽出力リスク)
用途例カウンタの状態表示組み合わせ的な制御

🔗 繋がり⑤:スタックは授業を超えて同じ(MIPSの$sp ↔ Cのstack)

計算機通論で生のスタック操作を学んだ直後に、プログラミング通論で抽象データ型としてのスタックが出てくる。 同じ動作を違う抽象度で見てるだけ。

概念計算機通論(MIPS)プログラミング通論(C言語)
スタックの構造$spが指すメモリ領域head→nextの連結リスト
pushaddi $sp,-4; swinsert(head, x)
poplw; addi $sp,+4delete(head)
LIFO再帰呼出のフレーム積み重ね逆向き出力・スタックソート
エラー処理underflow/overflow チェック
sequenceDiagram
    participant M as main()
    participant F as fact(n)
    participant S as スタック領域
    
    Note over M,F: 関数が呼ばれるたびにフレームが積まれる
    M->>F: jal fact(3)
    activate F
    F->>S: $sp -= 8<br/>sw $ra, 4($sp)<br/>sw $a0=3, 0($sp)
    F->>F: n != 1 → 再帰呼出
    F->>F: jal fact(2)
    activate F
    F->>S: $sp -= 8<br/>sw $ra, 4($sp)<br/>sw $a0=2, 0($sp)
    F->>F: n != 1 → 再帰呼出
    F->>F: jal fact(1)
    activate F
    F->>F: n == 1 → return 1
    deactivate F
    Note over F: lw $a0 → 2 復元<br/>mul 2*1 = 2
    deactivate F
    Note over M: lw $a0 → 3 復元<br/>mul 3*2 = 6
    deactivate F

🔗 繋がり⑥:メモリ階層とデータ構造の選択

「配列 vs 連結リスト」の本当の違いは計算量だけじゃなく、キャッシュの効き方にある。

graph TB
    subgraph "CPU"
        REG["レジスタ<br/>数十個<br/>数クロック"]
    end
    
    subgraph "キャッシュ(SRAM)"
        L1["L1キャッシュ<br/>数十KB<br/>数ns"]
        L2["L2キャッシュ<br/>数MB<br/>十数ns"]
        L3["L3キャッシュ<br/>数十MB<br/>数十ns"]
    end
    
    subgraph "メインメモリ(DRAM)"
        MEM["8GB〜64GB<br/>50〜100ns"]
    end
    
    subgraph "ストレージ(SSD/HDD)"
        SSD["SSD: 数十μs<br/>HDD: 5ms"]
    end
    
    REG --> L1
    L1 --> L2
    L2 --> L3
    L3 --> MEM
    MEM --> SSD
    
    REG -.- ARR["配列<br/>局所性◎<br/>キャッシュに乗りやすい"]
    REG -.- LL["連結リスト<br/>局所性×<br/>キャッシュミス多発"]

メモリアクセスパターンと局所性の関係:

mindmap
  root((メモリ階層))
    時間的局所性
      同じアドレスを繰り返し参照
      ループ内の変数
      レジスタに載る
    空間的局所性
      隣接アドレスをまとめて参照
      配列のシーケンシャルアクセス
      キャッシュライン単位
    キャッシュミスのコスト
      L1ミス: 数十クロック
      L2ミス: 百クロック
      DRAM: 200クロック
      SSD: 数万クロック
    データ構造の選択
      配列: 空間局所性◎で挿入削除O(n)
      連結リスト: 挿入O(1)だが空間局所性×

🔗 繋がり⑦:J-K FFのトグル → T-FF → カウンタ → プログラムカウンタ

カウンタは、CPUの「プログラムカウンタ(PC)」そのもの。

graph LR
    JK["J-K FF<br/>5/28<br/>J=K=1でトグル"]
    TFF["T-FF<br/>6/11<br/>T=1でビット反転"]
    CNT["バイナリカウンタ<br/>6/18<br/>T-FFをn段重ね"]
    PC["プログラムカウンタ(PC)<br/>5/25計算機通論<br/>次命令 = PC + 4"]
    
    JK -->|"J,Kを一本化"| TFF
    TFF -->|"T₁=1, T₂=A, T₃=BA"| CNT
    CNT -->|"+4ずつインクリメント"| PC
    
    style JK fill:#bfb
    style TFF fill:#bfb
    style CNT fill:#bfb
    style PC fill:#bbf

3bitバイナリカウンタの遷移(状態遷移図):

stateDiagram-v2
    direction LR
    [*] --> S000
    S000 --> S001
    S001 --> S010
    S010 --> S011
    S011 --> S100
    S100 --> S101
    S101 --> S110
    S110 --> S111
    S111 --> S000: 主系列に戻る
    S111 --> S010: フォールトトレラント復帰

    note right of S111
        111→010への遷移を明示的に
        指定して自己復帰 Self-Starting
        を実現する
    end note

🔗 繋がり⑧:共振回路 → クロック発振器(水晶振動子)

CPUのクロック信号の元は、電気電子回路のLC共振の応用。

graph LR
    A["LC共振回路<br/>ω₀ = 1/√LC"]
    B["Q値<br/>= ω₀L/R<br/>(直列共振)"]
    C["水晶振動子<br/>Q値: 10⁴〜10⁶"]
    D["CPUクロック信号<br/>3.5GHz等"]
    E["全FFの同期動作"]
    
    A -->|"鋭い共振"| B
    B -->|"Q値高い=精度高い"| C
    C -->|"圧電効果で<br/>機械→電気変換"| D
    D -->|"クロックエッジで全FF一斉更新"| E
    
    style A fill:#fbf
    style B fill:#fbf
    style C fill:#fbb
    style D fill:#bbf
    style E fill:#bfb
  • RLC共振回路・Q値
    • 共振角周波数: ω₀ = 1/√LC
    • Q値(直列)= ω₀L/R = 1/ω₀CR
    • Q値(並列)= R/ω₀L
    • 共振時インピーダンス最小(直列)/最大(並列)

🔗 繋がり⑨:直列/並列パターンの抽象対応

異なる科目で同じ「直列/並列」のトレードオフが繰り返し現れる。

graph TB
    subgraph "Layer 2: 電気電子回路"
        E1["RC直列回路<br/>電流が共通、位相が遅れる"]
        E2["RC並列回路<br/>電圧が共通、位相が進む"]
    end
    
    subgraph "Layer 3: 論理設計学"
        L1["直列のANDゲート<br/>A→B→C、順次通過"]
        L2["並列のORゲート<br/>A↘B↗C、いずれか"]
    end
    
    subgraph "Layer 4: 計算機通論"
        C1["RISC(レジスタ-レジスタ)<br/>load/store経由、直列的"]
        C2["CISC(レジスタ-メモリ)<br/>メモリ直接操作、並列的"]
    end
    
    subgraph "Layer 5: プログラミング通論"
        P1["配列: 連続領域<br/>シーケンシャルアクセス◎"]
        P2["連結リスト: ノード分散<br/>ランダム挿入◎"]
    end
    
    E1 -.->|"構造的対応"| L1
    E2 -.->|"構造的対応"| L2
    L1 -.->|"設計思想の類似"| C1
    L2 -.->|"設計思想の類似"| C2
    C1 -.->|"実装の選択"| P1
    C2 -.->|"実装の選択"| P2
    
    style E1 fill:#fbf
    style E2 fill:#fbf
    style L1 fill:#bfb
    style L2 fill:#bfb
    style C1 fill:#bbf
    style C2 fill:#bbf
    style P1 fill:#f9f
    style P2 fill:#f9f

🔗 繋がり⑩:抽象データ型(API)= 命令セットアーキテクチャ(ISA)の抽象

プログラミング通論で学ぶ「仕様と実装の分離」は、計算機通論で学ぶ「ISA(命令セットアーキテクチャ)」と全く同じ概念。

mindmap
  root((インターフェース分離の思想))
    プログラミング通論
      抽象データ型
        仕様と実装の分離
        実装を隠蔽
        APIで操作
      例:リスト
        配列実装
        連結リスト実装
        双方向リスト実装
        → どれもinsert/deleteで操作可能
    計算機通論
      ISA
        命令セットの仕様
        ハードウェア実装を隠蔽
        命令で操作
      例:メモリ
        SRAMキャッシュ
        DRAMメインメモリ
        SSDストレージ
        → どれもload/store命令で操作可能
    論理設計学
      ゲートレベル
        NAND/NORの組合せ
        FFの組合せ
        機能の抽象化

具体例で対比:

概念プログラミング通論計算機通論論理設計学
公開する操作API(insert, delete)命令(lw, sw, add)真理値表
隠蔽する実装配列 or 連結リストSRAM or DRAM or SSDNAND or NOR or トランジスタ
透過性ユーザは実装を気にしないプログラマは記憶媒体を気にしない設計者はゲート素子を気にしない

抽象データ型・API設計 のメモ:

ユーザの利点:リストの実装方法によらず同じコードが使える
実装側の利点:ユーザーからの呼出しだけ維持すればさらに効率的な実装をできる

これは RISCの設計思想そのもの :「ハードウェアが命令セットの仕様さえ守れば、回路の最適化は好きにやっていい」


🧠 概念マップ:全テーマの総まとめ

mindmap
  root((4科目の横断テーマ))
    抽象度の階層
      Layer1 物理
      Layer2 アナログ回路
      Layer3 デジタル回路
      Layer4 アーキテクチャ
      Layer5 ソフトウェア
    時間的発展
      4月 基礎・基数・文法
      5月 構造体・ゲート・回路
      6月 統合・最適化
    物理的制約
      時定数τ
      スイッチング時間
      伝搬遅延
      クロック周波数
      リフレッシュ周期
    計算の階層
      トランジスタ
      ゲート
      ラッチ・FF
      レジスタ・ALU
      CPU
      OS
      アプリケーション
    情報の表現
      基数
      補数
      浮動小数点
      データ構造
      抽象データ型
    性能の階層
      命令レベル
        パイプライン
        ハザード
        フォワーディング
      メモリレベル
        局所性
        キャッシュ
        階層構造
      プログラムレベル
        計算量
        最適化
        並列化
    同期と状態
      順序回路
      クロック
      パイプラインレジスタ
      状態機械

⏰ 授業進行のタイムライン

timeline
    title 4月から6月までの4科目の積み上げ
    4月上旬 : 論理設計学が先陣(ブール代数・ゲート)
    4月中旬 : 計算機通論と並走(2進数・2の補数・C言語入門)
    4月下旬 : ポインタと真理値表(アドレッシング・ポインタ)
    5月上旬 : 計算機通論が加速(RISC/CISC・MIPS命令)
    5月中旬 : 電気電子回路が合流(RC/RL・交流回路・共振)
    5月下旬 : 順序回路の核心(D-FF・J-K FF・リスト構造)
    6月上旬 : メモリとスタック(配列・サブルーチン・スタック)
    6月中旬 : パイプラインと抽象化(ハザード・抽象データ型)
    6月下旬 : 全層合流(トランジスタ・パイプライン詳細・メモリ階層)

📚 科目別ノート詳細インデックス

⚡ 電気電子回路

日付内容繋がる科目・トピック
5/181_1電気電子回路/20260518_1 RC/RL交流回路・直列並列の位相・アドミタンス→ 論理設計学のNAND/NOR変換と「直列/並列」のパターン
5/251_1電気電子回路/20260525_1 RLC共振回路・Q値・並列共振・ラジオ受信機→ CPUクロック(水晶発振子)の原理
6/11_1電気電子回路/20260601_1 交流電力・実効値・力率・皮相電力・無効電力
6/81_1電気電子回路/20260608_1 伝達関数・LPF/HPF・カットオフ周波数・インピーダンス法→ τ = CR → トランジスタのスイッチング速度
6/151_1電気電子回路/20260615_1 RC/RL過渡現象・RLC2次系・3つの減衰モード→ τ = 時定数 → セットアップ/ホールドタイム
6/221_1電気電子回路/20260622_1 ダイオード・整流回路・負荷線・ツェナーダイオード→ 論理ゲートの入力保護
6/291_1電気電子回路/20260629_1 トランジスタのスイッチング・増幅・小信号等価回路論理設計学のNANDゲートの物理的実装

🔲 論理設計学

日付内容繋がる科目・トピック
4/94_4論理設計学/20260409_4 ブール代数・NOT/AND/OR・スイッチ対応→ 電気電子回路のトランジスタスイッチ
4/164_4論理設計学/20260416_4 排他的論理和・コンセンサス・最小/最大項展開→ 全加算器のS=A⊕B
4/234_4論理設計学/20260423_4 半加算器・全加算器・全減算機・カルノー図計算機通論の2の補数/ALU
4/304_4論理設計学/20260430_4 桁上げ先見加算器・不完全定義関数・ドントケア計算機通論の2の補数/ALU
5/74_4論理設計学/20260507_4 NAND/NORのみで全論理式・多段回路電気電子回路のトランジスタでNAND
5/144_4論理設計学/20260514_4
5/214_4論理設計学/20260521_4 S-Rラッチ・NANDラッチ・ゲート付きラッチ・スリーステート・エンコーダ/デコーダD-FFの構成要素
5/284_4論理設計学/20260528_4 D-FF・マスタースレーブ・J-K FF計算機通論パイプラインレジスタの構成要素
6/114_4論理設計学/20260611_4 レジスタ・シフトレジスタ・カウンタ・LFSR計算機通論のレジスタファイル
6/184_4論理設計学/20260618_4 カウンタ設計(T/D/SR/JK-FF)・よく使うカウンタ
6/254_4論理設計学/20260625_4 Moore型/Mealy型・パリティチェッカー・Ch12解析計算機通論の制御回路設計

⚙️ 計算機通論

日付内容繋がる科目・トピック
4/131_2計算機通論/20260413_2 基数表記・2の補数・浮動小数点IEEE754・IEEE754特殊値論理設計学の全加算器で加減算
4/201_2計算機通論/20260420_2 ノイマン型・機械語・マルチサイクル実行→ プログラミング通論の計算量
4/271_2計算機通論/20260427_2
5/111_2計算機通論/20260511_2 命令セット分類(RISC/CISC)・アドレス指定・コンパイラ/インタプリタ→ 電気電子回路の直列/並列パターン
5/181_2計算機通論/20260518_2 MIPSレジスタ・呼出規約・アラインメント・エンディアン論理設計学のレジスタ設計
5/251_2計算機通論/20260525_2 MIPS命令形式(R/I/J)・条件分岐・乗除算・SPIM
6/11_2計算機通論/20260601_2 MIPS配列操作・サブルーチン→ プログラミング通論の配列処理
6/81_2計算機通論/20260608_2 スタック操作・フレーム・再帰呼出プログラミング通論のstack実装
6/151_2計算機通論/20260615_2 パイプライン・スループットとレイテンシ論理設計学のD-FF(パイプラインレジスタ)
6/221_2計算機通論/20260622_2 パイプライン詳細・ハザード・フォワーディング論理設計学のD-FFのエッジトリガ動作
6/291_2計算機通論/20260629_2 データハザード・SRAM/DRAM・局所性電気電子回路の過渡現象(DRAMリフレッシュ)

🖥️ プログラミング通論

日付内容繋がる科目・トピック
4/142_3プログラミング通論/20260414_3 C言語基礎・if/switch・スコープ
4/212_3プログラミング通論/20260421_3 ポインタ・配列・malloc・参照渡し計算機通論のメモリとアドレス
4/272_3プログラミング通論/20260427_3 キュー実装(ring buffer)・再帰・計算量O(n)→ 計算機通論の再帰呼出
5/122_3プログラミング通論/20260512_3
5/192_3プログラミング通論/20260519_3 プログラム実行性能・キャッシュ・再帰除去計算機通論のパイプライン・キャッシュ
5/262_3プログラミング通論/20260526_3 ポインタ・リスト構造の実装計算機通論のメモリとアドレス
6/92_3プログラミング通論/20260609_3 スタックとキュー(連結リスト実装)・リスト応用計算機通論の$sp操作と同じLIFO
6/162_3プログラミング通論/20260616_3 抽象データ型・API設計計算機通論のISA(仕様と実装の分離)
6/232_3プログラミング通論/20260623_3 リスト応用・逆転・整列・バックトラック法計算機通論のメモリアクセスパターン

📐 このマップの使い方

  1. 授業の復習時に、このマップを開いて「今やってることは他の科目のどの部分と繋がってるか」を確認する
  2. 科目間で用語が違っても同じ概念だということに気付く
  3. 授業の「なぜこれを学ぶのか」に詰まったとき、上下のレイヤーを見ると理由が分かることが多い

「電気電子回路の過渡現象、何の役に立つの…」→ 「DRAMのリフレッシュの理由」「なぜD-FFにセットアップタイムが必要かの物理的根拠」「最大クロック周波数の限界」が全部ここから来てる。


🎯 1枚の全体サマリー図

graph TB
    subgraph "【物理層】電気電子回路"
        E_TR["トランジスタ<br/>スイッチング"]
        E_RC["RC時定数τ"]
        E_LC["LC共振・Q値"]
    end
    
    subgraph "【ゲート層】論理設計学"
        L_NAND["NANDゲート"]
        L_FF["D-FF<br/>マスタースレーブ"]
        L_REG["レジスタ・カウンタ"]
        L_FSM["Moore/Mealy FSM"]
    end
    
    subgraph "【アーキ層】計算機通論"
        C_ALU["ALU・パイプライン"]
        C_CACHE["キャッシュ・局所性"]
        C_ISA["ISA(MIPS命令)"]
        C_CTRL["制御ハザード<br/>投機実行"]
    end
    
    subgraph "【SW層】プログラミング通論"
        P_API["抽象データ型・API"]
        P_DS["データ構造"]
        P_PERF["計算量・最適化"]
        P_REC["再帰・末尾呼出除去"]
    end
    
    %% 物理 → ゲート
    E_TR -->|"2個でNAND"| L_NAND
    E_RC -->|"τ=CR<br/>スイッチング時間"| L_FF
    E_LC -->|"水晶発振子"| C_ALU
    
    %% ゲート → アーキ
    L_NAND -->|"組合せ"| L_FF
    L_FF -->|"n段重ね"| L_REG
    L_REG -->|"レジスタファイル"| C_ALU
    L_FSM -->|"状態機械で"| C_CTRL
    
    %% アーキ → SW
    C_ISA -->|"仕様"| P_API
    C_CACHE -->|"局所性で性能差"| P_DS
    C_ALU -->|"ハードウェア<br/>コスト"| P_PERF
    C_CTRL -->|"投機実行"| P_REC
    
    %% SW → 物理への制約
    P_PERF -.->|"性能要求"| C_ALU
    P_DS -.->|"局所性で選択"| C_CACHE
    P_API -.->|"仕様"| L_FSM
    P_REC -.->|"スタック使用"| C_ISA
    
    style E_TR fill:#fbb,stroke:#333,stroke-width:2px
    style E_RC fill:#fbb,stroke:#333,stroke-width:2px
    style E_LC fill:#fbb,stroke:#333,stroke-width:2px
    style L_NAND fill:#bfb,stroke:#333,stroke-width:2px
    style L_FF fill:#bfb,stroke:#333,stroke-width:2px
    style L_REG fill:#bfb,stroke:#333,stroke-width:2px
    style L_FSM fill:#bfb,stroke:#333,stroke-width:2px
    style C_ALU fill:#bbf,stroke:#333,stroke-width:2px
    style C_CACHE fill:#bbf,stroke:#333,stroke-width:2px
    style C_ISA fill:#bbf,stroke:#333,stroke-width:2px
    style C_CTRL fill:#bbf,stroke:#333,stroke-width:2px
    style P_API fill:#fbf,stroke:#333,stroke-width:2px
    style P_DS fill:#fbf,stroke:#333,stroke-width:2px
    style P_PERF fill:#fbf,stroke:#333,stroke-width:2px
    style P_REC fill:#fbf,stroke:#333,stroke-width:2px

矢印の意味:

  • 実線矢印:下位層 → 上位層(実装する・構成する)
  • 破線矢印:上位層 → 下位層(要求する・選択する)