ROM(リードオンリーメモリ)
概要
- 目的: ROM(リードオンリーメモリ)は、通常の動作中に変更できないプリプログラムされたデータを含むデジタルストレージコンポーネントです。電源が切断されても内容を保持する不揮発性メモリとして機能します。
- シンボル: ROMは、アドレス入力、制御入力(チップセレクト、アウトプットイネーブル)、およびデータ出力を持つ矩形ブロックで表されます。
- DigiSim.io での役割: デジタル回路にプログラム、ルックアップテーブル、および参照データの永続的なストレージを提供し、固定データまたは命令を必要とするシステムの実装に不可欠です。

機能説明
論理動作
ROMは、事前に格納されたデータへの読み取り専用アクセスを提供します。アドレスがアドレス入力に適用されると、制御入力を通じてチップが有効化されている場合に、そのロケーションに格納されたデータが出力されます。
真理値表:
| CS (pin) | OE (pin) | Address (A) | Data Output | 動作 |
|---|---|---|---|---|
| 0 (LOW) | 0 (LOW) | Any value | Data at address | 読み取り(有効) |
| 0 (LOW) | 1 (HIGH) | Any value | High-Z (off) | 出力無効 |
| 1 (HIGH) | X | Any value | High-Z (off) | チップ無効 |
注: CS = チップセレクト(アクティブLOW)、OE = アウトプットイネーブル(アクティブLOW)、X = ドントケア、High-Z = ハイインピーダンス。データ出力がアクティブになるには、CSとOEの両方がLOW(0)である必要があります。
入力と出力
入力:
- Address[7:0]: 256のメモリロケーションのうち1つを選択する8ビットアドレス入力(A0-A7)。
- CS(チップセレクト): チップ全体を有効または無効にする1ビットの制御入力(アクティブLOW)。
- OE(アウトプットイネーブル): データ出力を有効または無効にする1ビットの制御入力(アクティブLOW)。
出力:
- Data[7:0]: 選択されたアドレスに格納された内容を表す8ビットデータ出力。
設定可能なパラメータ
- メモリサイズ: 合計ストレージ容量(例:256バイト、1KBなど)。アドレス幅によって決定されます。
- データ幅: メモリロケーションあたりのビット数(通常8ですが、4、16、32なども可能)。
- 内容: ROMに格納されるプリプログラムされたデータ。設定時にロードされます。
- アクセス時間: アドレス適用から有効なデータが出力に現れるまでの遅延。
DigiSim.io での視覚的表現
ROMは、左側にラベル付きの入力(アドレス用のA0-A7、チップセレクト用のCS、アウトプットイネーブル用のOE)、右側にデータ出力(D0-D7)を持つ矩形ブロックとして表示されます。コンポーネントは出力に表示される値と接続ワイヤの色変化を通じてアクティブ状態を視覚的に示します。ユーザーは専用のダイアログを通じてROM内容を表示および編集できます。
教育的価値
主要概念
- 不揮発性ストレージ: デジタルシステムが永続的なデータをどのように格納するかを示します。
- メモリアドレッシング: バイナリアドレスを使用して特定のデータにアクセスする方法を示します。
- メモリ階層: コンピューティングシステムにおける異なる種類のメモリの概念を紹介します。
- 制御信号: チップセレクトとアウトプットイネーブル信号がデバイスの動作をどのように管理するかを示します。
- メモリ構成: ワードアドレス可能メモリの基本的な構成を提示します。
学習目標
- デジタルシステムにおける永続的ストレージの役割を理解する。
- アドレッシングスキームが特定のメモリロケーションへのアクセスをどのように提供するかを学ぶ。
- さまざまな種類のメモリ(ROM vs. RAM)の違いを認識する。
- ルックアップテーブルやプログラムストレージなどの定数データを必要とする設計にROMを適用する。
- アドレス空間、データ幅、およびメモリ容量の関係を理解する。
使用例
- プログラムストレージ: コンピューティングシステムにおけるファームウェアまたはブートローダーコードの保持。
- 文字生成: ディスプレイシステム用のフォントデータの格納。
- ルックアップテーブル: 事前計算された値による数学関数の実装。
- ステートマシン: 制御システムにおける複雑な状態遷移のエンコード。
- マイクロコードストレージ: CPUにおける命令デコード情報の格納。
- 定数データ: キャリブレーションまたは設定のための参照値の提供。
技術ノート
- ROMの実装には、マスクROM(工場プログラム)、PROM(1回プログラミング可能)、EPROM(UV消去可能)、EEPROMおよびフラッシュ(電気的消去可能)があります。
- アクセス時間はシステムパフォーマンスに影響する重要なパラメータで、技術によって通常45-200nsの範囲です。
- 現代のシステムでは、フラッシュメモリを使用するか、初期化中にストレージからRAMにデータをロードすることでROM機能を実装することが多いです。
- DigiSim.io では、ROMのアクセス時間はリアルなタイミング動作を提供するためにシミュレートされます。
- ROMは、他のストレージからのロード前にシステムが初期命令を必要とするブートストラッププロセスで特に重要です。
- 制御信号: CS(チップセレクト)とOE(アウトプットイネーブル)の両方がアクティブLOW信号として実装されています:
- CS(チップセレクト): CS = 0(LOW)の場合、チップが選択されアクティブ。CS = 1(HIGH)の場合、チップは無効で出力はハイインピーダンス。
- OE(アウトプットイネーブル): OE = 0(LOW)の場合、出力バッファが有効。OE = 1(HIGH)の場合、出力はハイインピーダンス(トライステート)。
- 組み合わせ論理: データはCS = 0(LOW)かつOE = 0(LOW)の両方の場合のみ出力されます。いずれかの信号がHIGHの場合、出力はハイインピーダンスです。
- これはメモリコンポーネントの標準的なデジタルロジック規約に従い、複数のROMデバイスが共通のデータバスを共有できるようにします。
特性
入力構成:
- アドレス入力(ROMサイズ256バイト〜1MBに対して通常8〜20ライン)
- デバイスを有効/無効にするチップセレクト(CS)入力
- 出力バッファを制御するアウトプットイネーブル(OE)入力
- すべての入力は標準デジタルロジックレベルと互換
- アドレスラインがどのメモリロケーションを読み取るかを決定
- 制御入力がデバイスの動作タイミングを管理
出力構成:
- データ出力(通常8ビット幅ですが、4、16、32ビットも可能)
- ハイインピーダンス状態に無効化できるトライステート出力
- 出力は選択されたアドレスに格納されたデータを提供
- 標準デジタル負荷を駆動可能
- 通常、高電流駆動能力のためにバッファされている
機能:
- 固定プログラムコードまたは定数データを格納
- 不揮発性(電源オフ時もデータを保持)
- 通常動作中は読み取り専用
- アクセス時間がアドレス変更後のデータ利用可能速度を決定
- アドレスをデコードして2^nのメモリロケーションの1つを選択
- 選択されたロケーションからプリプログラムされた値を提供
- 通常動作中は書き込み不可
伝搬遅延:
- アドレスアクセス時間: 通常45-200ns
- チップセレクトアクセス時間: 通常45-200ns
- アウトプットイネーブルアクセス時間: 通常20-100ns
- 技術に依存(マスクROM、PROM、EPROMなど)
- システムタイミングの重要パラメータ
- 温度と電圧により変動する可能性あり
ファンアウト:
- 通常10-20の標準負荷を駆動
- バスインターフェース用に設計された出力バッファ
- 設定可能な出力駆動強度を含む場合あり
- 通常、標準バス負荷を駆動するように設計
消費電力:
- 技術によって静的電力は低〜中程度
- アクセス頻度が増加するとアクティブ電力が増加
- チップ非選択時のスタンバイ電力
- 最新デバイスの電力管理モード
- 同等のRAMよりも消費電力が大幅に低い
- バッテリー節約のためのパワーダウンモードを提供する場合あり
回路の複雑度:
- 内部は高い複雑度(アドレスデコーダ、メモリアレイ、出力バッファ)
- 外部インターフェースはシンプル(アドレス入力、制御入力、データ出力)
- 容量と技術により異なる
- プログラマブルバリアント(EPROM、EEPROM)の追加複雑度
- 最新デバイスは高度な機能(エラー訂正など)を含む場合あり
実装方法
マスクROM
- マスク層により製造時にコンテンツがプログラムされる
- 大量生産で最高密度かつ最低コスト
- 製造後は変更不可
- カスタムパターンのリードタイムが長い
- 大量生産に最も効率的
- 通常、大量固定アプリケーションに使用
プログラマブルROM(PROM)
- ヒューズまたはアンチヒューズ技術で1回プログラミング可能
- ユーザーが1回プログラムできるが消去不可
- マスクROMより短いターンアラウンド
- 中程度の生産量に適している
- 専用のPROMプログラマデバイスでプログラミング
- レガシーシステムおよび生産環境で一般的
消去可能プログラマブルROM(EPROM)
- 紫外線で消去し再プログラム可能
- パッケージ上の石英窓で認識可能
- 複数回のプログラミングサイクルが可能
- 消去時間が長い(通常20-30分)
- 開発および少量生産に理想的
- 組み込みシステムおよびマイクロコントローラアプリケーションで人気
電気的消去可能PROM(EEPROM)
- 電気的に消去および再プログラム可能
- バイトレベルの消去とプログラミング
- プログラミングサイクルが限定的(通常100,000回以上)
- RAMより遅い書き込み時間
- 電気的書き換え可能な不揮発性ストレージ
- 設定ストレージおよび小規模データセットに一般的
フラッシュROM
- 高密度の電気的消去可能ROM
- ブロックレベルの消去(バイトレベルではなく)
- 従来のEEPROMより高容量
- EEPROMより高速な消去および書き込み時間
- プログラミングサイクルが限定的(100,000〜1,000,000回)
- 現代の組み込みおよびストレージアプリケーションで主流
FPGA/ASIC実装
- ルックアップテーブルまたは専用ROMブロックとして実装
- 設計時または初期化時に設定可能
- 特定のアプリケーション要件に最適化
- 現代のプログラマブルロジックでリソース効率が高い
- 処理ロジックと組み合わせ可能
- 再プログラム可能なロジックで実装時にフィールドアップデートが可能
エミュレートROM
- RAMと初期化ロジックでROM機能を実装
- 起動時に外部ストレージからコンテンツをロード
- ROMライクなインターフェースを維持しながら容易なアップデートが可能
- マイクロプロセッサベースのシステムで一般的
- 再プログラミングの柔軟性とRAMアクセス速度を組み合わせ
- システムブートストラッピング用のシャドウROM技術
応用
ブートローダーストレージ
- コンピュータにおけるBIOS/UEFIストレージ
- マイクロコントローラのスタートアップコード
- 初期プログラムローダー
- システム初期化ルーチン
- セルフテスト手順
- ブートストラップシーケンスの格納
ファームウェアストレージ
- オペレーティングシステムカーネル
- デバイスドライバ
- 制御プログラムストレージ
- 組み込みシステムソフトウェア
- 固定アルゴリズム実装
- システム制御ルーチン
ルックアップテーブル
- 三角関数値
- 文字セットとフォント
- カラーパレット
- 変換テーブル
- アルゴリズム係数
- 関数近似
マイクロコードストレージ
- CPU命令デコード
- 複雑な命令解釈
- 信号処理アルゴリズム
- 固定シーケンス制御
- 命令展開
- ステートマシンエンコーディング
文字ジェネレータ
- ASCII/Unicode文字パターン
- ディスプレイフォント
- カスタムシンボルセット
- グラフィック要素ストレージ
- アイコンライブラリ
- ディスプレイパターン生成
定数データストレージ
- 設定パラメータ
- キャリブレーション定数
- 固定参照データ
- セキュリティキーと識別子
- シリアル番号とID
- ライセンス情報
デジタル信号処理
- フィルタ係数
- 高速フーリエ変換定数
- オーディオ波形
- 信号パターン認識
- デジタルフィルタ実装
- アルゴリズム定数
制限事項
柔軟性の欠如
- 通常の動作中にコンテンツを変更できない
- アップデートには交換または特別なプログラミング手順が必要
- 可変データストレージには不適
- コンテンツ変更にはシステムの再設計が必要
- 進化する要件に対して柔軟性がない
- 複数のROMバリアントのバージョン管理の課題
アクセス時間の制約
- ほとんどの技術でRAMより遅い
- アクセス時間がシステムパフォーマンスを制限
- 高速プロセッサにはウェイトステートが必要な場合あり
- 高性能システムではキャッシュが必要な場合が多い
- 高速システムのタイミング制約
- 設計における速度-電力のトレードオフ
プログラミングの複雑さ
- プログラミングに特別な機器が必要
- 消去可能バリアントの複雑な手順
- EEPROM/フラッシュのプログラミングサイクル制限
- プログラミング検証要件
- 書き込み保護管理
- 専門的なプログラミングプロトコル
物理的制限
- 最新のストレージと比較して密度が限定的
- サイズと電力の制約
- 温度感度
- 経時的なデータ保持の懸念
- パッケージの制限
- 古い技術の陳腐化
コスト要因
- マスストレージよりビット当たりのコストが高い
- マスクROMにはスケールメリットが必要
- カスタムコンテンツの開発コスト
- テストと検証の費用
- プログラミング機器への投資
- プリプログラムされたデバイスの在庫管理
回路実装の詳細
基本ROMアレイ構造
メモリセルアレイ構成:
graph TB
AddressInputs[Address Inputs<br/>A0, A1, ...] --> RowDecoder[Row Decoder]
RowDecoder --> MemoryArray[Memory Cell Array<br/>Programmed Cells]
MemoryArray --> ColumnDecoders[Column Decoders<br/>& Output Buffers]
ColumnDecoders --> DataOutputs[Data Outputs<br/>D0, D1, D2, D3, ...]
構造コンポーネント:
- 行デコーダ: アドレス入力に基づいてメモリセルの1行を選択
- メモリセルアレイ: プログラマブルセルの2Dマトリックス(● = 1、○ = 0)
- 列デコーダ: 選択された行のデータを出力バッファにルーティング
- 出力バッファ: データ出力を増幅して駆動
動作: アドレスが行を選択 → セル状態を読み取り → データが出力に表示
28C16 EEPROM ICの例
ピン構成(2KB EEPROM):
| Pin Group | Pins | Function |
|---|---|---|
| Address | A0-A10 | 11-bit address (2048 locations) |
| Data | D0-D7 | 8-bit data bus (bidirectional) |
| Control | /CE | Chip Enable (active-low) |
| Control | /OE | Output Enable (active-low) |
| Control | /WE | Write Enable (active-low) |
| Power | VCC, GND | +5V and Ground |
特徴:
- 容量: 2K × 8ビット(2048バイト)
- アクセス時間: 通常150-250ns
- 書き込みサイクル: 100,000回以上の消去/書き込みサイクル
- データ保持: 10年以上
- プログラミング: バイトごとの電気的プログラミング
関連コンポーネント
- RAM(ランダムアクセスメモリ): 同等の速度で読み取りと書き込みの両方が可能
- PROM(プログラマブルROM): 1回プログラミング可能なROM
- EPROM(消去可能PROM): 紫外線で消去し再プログラム可能なROM
- EEPROM(電気的消去可能PROM): 電気的に消去し再プログラム可能なROM
- フラッシュメモリ: ブロック消去を伴う高密度EEPROM
- NVRAM(不揮発性RAM): 電源切断時もデータを保持するRAM
- FRAM(強誘電体RAM): 強誘電体ストレージを使用する不揮発性メモリ
- マスクROM: 製造時にプログラムされるROM
- 連想メモリ: 格納されたコンテンツに対して入力を比較するメモリ
- メモリコントローラ: ROMおよび他のメモリコンポーネントへのアクセスを管理