ご購入はこちら．
http://shop.cqpub.co.jp/hanbai/books/48/48061.htm

見本

第4部

第

論理設計入門

16 章

16

論理設計を知り，味わい，そして楽しむ

17

論理設計入門18●はじめに

自分の思い描くシステムを構築するには，ハード
ウェアとソフトウェアの知識と経験が必要です．
ソフトウェアについては入手しやすいマイコン評価
基板があるので触れるチャンスも多く，多くの方が経験を積みながら腕を上げていると思います．
一方，ハードウェアの製作は，一般的には壁が高いです．アナログとデジタルが混在したミクスト・シグ
ナル型のシステムの場合，アナログ回路なら多くのケースは比較的小規模であり，OP アンプや A−D 変換器など市販の IC を組み合わせて実現できる範囲にあるでしょう．
ディジタル回路（論理回路）
側は，汎用マイコンで済む範囲なら簡単ですが，特殊で高性能かつ高機能な論
理回路が必要になるケースだと一般的に規模が大きくなります．これを TTL などの標準ロジック IC をた
くさん組み合わせて大量の配線をする職人技で実現するのは，今の世の中では現実的ではありません．
MAX 10 は論理設計の経験を積む素晴らしいプラッ
トフォームです．手配線は要りません．RTL コーディ
ングでディジタル回路が完成します．この FPGA を使って思う存分論理設計して，現実に動作するシステ
ム開発を数多く経験して腕をメキメキ上げていきましょう．
そのためには，何はともあれ論理設計の基礎について学ぶ必要があります．本稿では必要最小限ではありますが，論理設計のキモになるところを解説します．
本書で必要になる知識はすべて網羅していきますの

クロック
（clk）
リセット
（res̲n）

入力信号
図1

論理設計とは

ディジタル
機能

出力
信号

で，じっくり理解してください．すでに論理設計を十分知り尽くしている方は，読み飛ばしても構いません．

論理設計を始める前に

19
20
21

大きな流れ
●第 1 歩は入出力インターフェースと内部機能
仕様の決定
まずは論理設計とはなんぞや，から説明します．
図 1 にそのイメージを示します．実現したいディ

ジタル機能について，まず，入出力インターフェース
を明確に定義します．また，内部機能仕様を明確に矛
盾なく定義します．
論理機能モジュールの例を表 1 に示します．ロジ

カルに矛盾のない入出力インターフェースや内部仕様
を，早い段階でしっかり規定することがとても重要
で，ここの失敗による手戻りは全体の設計工数に多大な悪影響を及ぼします．

22
23
24
25

●仕様が決まった後の設計の流れ

次に，内部ハードウェアの実現方式（アルゴリズム）を規定します．ここが最も頭を使うところで，機能面，タイミング面，経済面（ハードウェア量，消費電力）
を見渡しながら，最適な方式を決定します．

論理設計とは入出力インターフェースを明確に定義
内部機能仕様を明確に矛盾なく定義
内部ハードウェア方式（アルゴリズム）の規定
̶ 機能面/タイミング面/経済面を見渡して組み合わせ回路/順序回路による論理回路の組み立て
網羅的な機能検証
論理合成とタイミング検証

見本※ 本稿は，『ARM PSoC で作る My スペシャル・マイコン（開発編）』（2014 年 1 月，CQ 出版社）の第 19 章「論理設計入門」の内容に大幅加筆したものです．

大きな流れ

273

第

17 章

16

論理設計の道具を自分のものにしよう

VerilogHDLによるRTL記述入門●はじめに

本章ではハードウェア記述言語の代表格，Verilog
HDL による RTL 記述方法の基礎を説明します．本稿の内容が理解できれば，ほとんどの論理回路は問題なく記述できると思います．

ハードウェア記述言語「Verilog HDL」とは●Verilog HDL とは論理回路を抽象的に記述するためのハードウェア記
述言語としては，Verilog HDL と VHDL が有名です．
歴史的には，まず VHDL が米国国防総省によって開発されました．VHDL は記述量が多いのですが，明確に機能仕様を定義できる特徴があります．その後，論理シミュレータと一体化した言語として Verilog が開発されました．Verilog は記述量が VHDL よりも少なく手軽にコーディングできますが，論理シミュレー
タ側の視点で定義された言語であり，物理的な論理回路を確実に記述する際には多少の注意が必要です．
Verilog は歴史的に複数のバージョンが定義されてきました．本稿では Verilog 1995 と Verilog 2001 を説明します．Verilog 2001 は Verilog 1995 の改良版です．現在では，さらに改良され多くの機能が加えられた System Verilog も普及しています．System Verilogを使った機能検証方法については，本書内で改めて触れる予定です．

● Verilog 1995 と Verilog 2001

1995 と Verilog 2001 の記述方法で意識すべき差異は，
この後に説明します．

論理機能のモジュール構造記述

17
18
19
20

●モジュール構造と階層構造の記述

21

endmodule 文で挟み，入出力信号と内部機能を記

22

論理機能はモジュールという単位で記述します．リス ト 1（a）の よ う に， 論 理 機 能 は module 文 と述します．
モジュールは一般的に階層構造をもちます．例えば，一つの LSI の中に CPU や DMAC が内蔵されている場合，LSI という階層の下に CPU と DMAC があります．さらに CPU の下にも，例えば DATAPATHと CONTROL という階層が置かれるのが通常でしょ
う．

23
24

●インスタンス化

あるモジュールの下の階層として，別のモジュールを配置する場合の記述方法をリスト 1（b）に示します．
ここで重要な概念があります．一つのモジュールは，あちこちで使いまわされることが一般的です．例えば，

25

デュアル・コアをもつ LSI の場合は同じ CPU が 2 個あるでしょうし，2 入力 NAND ゲートをモジュールとして定義すれば，LSI 内で同じものが大量に使いまわされます．
このとき，ある階層内に置く個々の下位階層モ

基本的に，アルテラ社が提供する開発環境 Quartus
Prime や ModelSim-Altera では Verilog 1995 も Verilog

ジュールを区別するため，その階層内で固有となるイ
ンスタンス名を付けて，その下位階層モジュールを置
き ま す． こ れ を モ ジ ュ ー ル の イ ン ス タ ン ス 化2001 も共に使えます．もちろん System Verilog もサポートしています．
本稿で解説する Verilog 1995 と Verilog 2001 の間（instantiation）といいます．インスタンス化というのは「実体化・具体化」という意味です．module 文に記述するモジュール名は，定義名にすぎないことに注は，さほど大きな差はありませんが，Verilog 2001 のほうが組み合わせ回路の記述方法が楽になる利点があります．Verilog 1995 型の記述と Verilog 2001 型の記述は，一つの RTL 記述の中で混在可能です．Verilog

意してください．
原則として各モジュールは必ずその上位階層でインスタンス化されます．それでは LSI や FPGA の外部
入出力信号が置かれる階層（LSI や FPGA にとっての見本※ 本稿は，『ARM PSoC で作る My スペシャル・マイコン（開発編）』（2014 年 1 月，CQ 出版社）の第 19 章「論理設計入門」の内容に大幅加筆したものです．

論理機能のモジュール構造記述

301

第

18

単純なレジスタの動作からCPUまで，

章 実際の設計と論理シミュレーションにトライ

論理設計の具体例とシミュレーション
本書付属 DVD-ROM 収録関連データ
DVD-ROM 格納場所

CQ-MAX10¥Verilog_Samples¥simple_register
CQ-MAX10¥Verilog_Samples¥simple_counter
CQ-MAX10¥Verilog_Samples¥simple_debouncer
CQ-MAX10¥Verilog_Samples¥simple_statemachine
CQ-MAX10¥Verilog_Samples¥simple_cpu●はじめに前章までの座学だけでは，実際にどのように RTL記述を書いていけばよいのかわかりにくいかもしれま
せん．そのため本章では具体的に動作する RTL 記述を紹介し，実際に論理シミュレーションして動作確認
してみます．本章の内容が理解できれば，さらに複雑な論理機能も自由に設計することができるようになるでしょう．

●サンプル・ファイルをインストール

まず，付属の DVD-ROM に格納したサンプル・ファ

イルをインストールしてください．C ドライブの最上位階層にディレクトリ「C：¥CQ-MAX10」を作成して，
DVD-ROM の ト ッ プ 階 層 以 下 の「¥CQ-MAX10¥
Verilog_Samples」
を，その「C：¥CQ-MAX10」
以下にコピーしてください．
ディレクトリ「Verilog_Samples」が，「C：¥CQMAX10¥Verilog_Samples」の位置にあれば OK です．
本書の解説では，この位置にサンプル・ファイル類が置かれていることを前提としています．

論理シミュレータModelSim-Altera
を単体で使う方法●論理シミュレータ ModelSim-Altera を単体で使う

前章までは，ModelSim-Altera を Quartus Prime

や Nios II EDS から起動する方法を説明しました．本
章では ModelSim-Altera を単体で使う方法について

内

容

備

考

16
17
18
19

レジスタの設計ファイル一式
カウンタの設計ファイル一式
チャタリング除去回路の設計
ファイル一式
ModelSim-Altera 用，Icarus Verilog 用
ステート・マシンの設計ファ がそれぞれ格納されている
イル一式

20
21

簡易型 8 ビット CPU の設計フ
ァイル一式説明します．

●設計ファイルのディレクトリ階層構造

論理シミュレーション対象の設計ファイルのディレ
クトリ階層構造を統一化しておくと，同じシミュレー
ション環境を使い回せるので便利です．本稿で使う設計サンプルのディレクトリ階層構造を図 1 に示します．各ファイルの内容などは，個々のサンプルのところで説明します．

●立ち上げとプロジェクト作成

本稿のサンプルを論理シミュレーションする場合のModelSim の使い方を図 2 に示します．

22
23
24
25

図2
（a）のように ModelSim 単体を起動して，図 2（b），図 2（c）のように新規プロジェクトを作成します．サンプル・ファイルをそのまま使う場合は，プロ
ジェクト・ファイルをオープンしてください．

●プロジェクトにファイルを登録

図2（d）〜（h）に示す方法でプロジェクトに関連ファイルを登録します．独自の論理設計を行う場合は，新規の空ファイルを登録してください．サンプル・ファ
イルをそのまま使う場合は，既存ファイルの登録を行ってください．

●ファイルを編集

図2（ i）に示すように各ファイルを編集してセーブします．実行スクリプトなどにディレクトリの相対パスを記述する場合は，カレント・ディレクトリ
（相対見本※ 本稿は，『ARM PSoC で作る My スペシャル・マイコン（開発編）』（2014 年 1 月，CQ 出版社）の第 21 章「論理設計の具体例とシミュレーション」の内容に大幅加筆したものです．

論理シミュレータ ModelSim-Altera を単体で使う方法

317

19

タイミング解析の基礎を学び，

章 SDCファイルを自在に書けるようになろう

16

TimeQuestTimingAnalyzer
によるタイミング解析とSDCファイル

17

第● はじめに

論理設計においては，その動作周波数や入出力遅延
時間などのタイミング設計が不可欠です．アルテラ社の FPGA 開発ツール Quartus Prime には，設計した
回 路 の タ イ ミ ン グ 解 析 ツ ー ル と し て TimeQuest
Timing Analyzer（以下，TimeQuest と略す）が組み込まれており，簡単にその強力な機能を使うことができるようになっています．本書のこれまでの章でもTimeQuest の使い方をいくつか紹介してきました．
本章ではあらためて TimeQuest によるタイミング解
析の基本と，タイミング制約 SDC（Synopsys Design
Constraint）の書き方を詳しく解説します．本章を理解することで，安定に動作するロバストな（堅牢な）論
理回路を設計できるようになるでしょう．さらに，
SDC の書き方は業界標準であり，他の FPGA や SoC
設計にも適用できる内容がほとんどです．ここで学んでおいても損はしません．

TimeQuest によるタイミング解析の基本概念● TimeQuest によるタイミング解析は静的かつ網羅的TimeQuest は，設計対象の下記のタイミングを網羅的に解析します．

表1

・レジスタ
（D-F/F）とレジスタ（D-F/F）の間
・入力信号経路・出力信号経路1819
20・非同期リセット信号経路
このために TimeQuest は，データ必要時刻（Data
Required Time），データ到達時刻（Data Arrival
Time），クロック到達時刻（Clock Arrival Time）を21

使って，設計対象のタイミング違反や性能を，静的（static）に解析します．静的解析という意味は，論理シミュレーションのように信号を動的（dynamic）に動
作させずに，回路の接続構造（トポロジー）
だけを見て解析するということです．動的解析よりも網羅的な解22析ができる特長があります．静的なタイミング解析のことを STA（Static Timing Analysis）と呼びます．
このタイミング解析には，FPGA 内のロジック・
アレイ，メモリ，配線などの物理的な回路要素の遅延情報をもったライブラリを，内部的に参照します．こうしたタイミング解析用のライブラリは，FPGA ベ
ンダや SoC ベンダ，あるいは半導体製造のファウン
ダリから提供されています．

23
24
25

● TimeQuest 解析の用語

TimeQuest 解析で使われる用語が，いくつか定義されています．表 1 にその内容をまとめておきます．

TimeQuest 解析の用語
用

語

和文

定義内容

英文

ノード

node

タイミング・ネットリストの基本単位．ポート，ピン，レジスタを表す

セル

cell

LUT（Look Up Table），レジスタ，DSP（Digital Signal Processor），メモリ・ブロック，入出力要素など

ピン

pin

セルの入力または出力

ネット

net

ピン間の結線

ポート

port

モジュールの最上位階層の入力または出力（例：デバイスの端子）

クロック

clock

設計対象の内部または外部に置かれるクロック・ドメイン（領域）を表す抽象オブジェクト

経路

path

信号が伝搬する経路

送信エッジ

launch edge レジスタ出力を変化させるクロック・エッジ

受信エッジ

latch edge

レジスタ入力をラッチするクロック・エッジ

見本

TimeQuest によるタイミング解析の基本概念

365

第

20

C言語とVerilog HDLの混在シミュレーションを章 使ってAvalon-MMスレーブIPを設計しよう

C言語混在シミュレーションとIP設計

CQ-MAX10¥Projects¥PROJ_DPI

内

容

備

考

C 言語と Verilog HDL の混在シミュ
レーションの基本（Quartus Prime，ModelSim 用）このプロジェクトは，バス・マスタの機能モデル
Avalon-MMスレーブIPの設計事例：に SRAM だけ接続する検証にも使うが，DVD に格
CQ-MAX10¥Projects¥PROJ_MM-Slave pic_programmer 用 SPI 機能納したのは pic_programmerまで接続した完成形で（Quartus Prime，ModelSim 用）ある．FPGA_completed フォルダは無視してよい●はじめに

本章では，Nios II などの CPU システム内の周辺機
能，すなわちスレーブ IP（Intellectual Property）を設

Nios II によるシステム設計の中でです．
Nios II のソフトウェア統合開発環境 Nios II EDSの中から論理シミュレータ ModelSim ASE を起動し計するための手法を学びます．
まず，C 言語と Verilog の混在シミュレーション手法 DPI（Direct Programming Interface）
を説明しま
す．論理シミュレーションのテストベンチに C 言語て，ソフトウェアをコンパイルしたバイナリ・ファイ
ルによりシステム内のプログラム・メモリの内容を初期化することで，Nios II CPU コアを含めたシステム
全体の論理シミュレーションを実行していました．

記述を組み込むことができるので，最終的なアプリ
ケーションと同じプログラムを使って論理検証できるようになり，作業効率が向上します．
次に，Nios II のスレーブ IP を設計するのに必要なとても有効なのですが，C 言語のスタートアップ・ルー
チン（メモリ内の変数領域の初期化など）も実行される

この手法はシステム全体をまるごと検証できるので知識として，Avalon-MM インターフェース（内部バス）の信号とタイミング仕様を説明します．
そして，C 言語から制御して Avalon-MM マスタに
バス・アクセスさせて RAM のリード / ライト動作をためサイクル数が長く，シミュレーション時間が長くなる問題があります．
さらに，CPU コアを含めた大規模論理をシミュレー
ションするので，無償版の ModelSim ASE だと実行速度が遅く，PC のメモリや波形記憶用のストレージ容させてみます．この時点で，Quartus Prime，QSys，
ModelSim ASE（Altera Starter Edition）
を総合的に連携させて，Avalon-MM スレーブ IP の設計と検証を進める手法を学べます．
最後に，本書の第 5 章で説明した，PIC マイコンの量も多く消費してしまいます．
もちろん，最終的にシステムが完成してその全体を検証する段階に至れば，上記の手法はとても有効なのですが，検証対象の IP を設計しながらシステム全体を検証する設計工程の前段階では，繰り返して論理シ

FLASH メモリ書き込み用の特殊な SPI 通信モジュー
ル pic_programmer を設計して，C 言語混在シミュ
レーションにより機能検証してみます．

ミュレーションしたいので，時間がかかる上記の手法は実用的ではありません．

C 言語と Verilog の混在シミュレーション技法「DPI」

IP を設計しながら効率的に論理シミュレーション
するには，Verilog だけでテストベンチを作ればよい話です．
しかし，その IP の機能を動作させるためにシーケ●実はもうやっていたC言語混在シミュレーション

本書の読者の方は，実はすでに C 言語と Verilog の混在シミュレーションを行っていました．第 12 章の

17
18
19

本書付属 DVD-ROM 収録関連データ
DVD-ROM 格納場所

16

20
21
22
23
24
25

● C 言語混在シミュレーションの意義

ンス処理やループ処理（フラグがセットされるまで待つなど）が必要なケースでは，テストベンチを Verilog

見本

C 言語と Verilog の混在シミュレーション技法「DPI」 389

第5部

MAX 10 と Raspberry Pi との饗宴21

Raspberry Piのハードウェア機能拡張と，章 MAX 10のコネクティビティ強化を両立する

16

MAX10とRaspberryPiを接続する
拡張用MAX10-EB基板のハードウェア詳説17

本書付属 DVD-ROM 収録関連データ

19

第DVD-ROM 格納場所

内

容

18

・MAX10-EB 基板のガーバ・データ

CQ-MAX10¥Board¥MAX10-EB

・関連ドキュメント

●はじめに

20

MAX10-FB 基板に接続できる Raspberry Pi としては，Raspberry Pi 2 Model B および Raspberry Pi 3
Model B のいずれにも対応しています．本書内でRaspberry Pi と記述があれば，Raspberry Pi 2 Model
B または Raspberry Pi 3 Model B のいずれかのこと

Raspberry Pi に MAX 10 FPGA を搭載した MAX10FB 基板を接続して，さまざまな実験やシステム構築をするための拡張基板 MAX10-EB（EB は，Expansion
Board の略）を，別売りで提供します．本章では，この MAX10-EB 基板のハードウェアについて詳しく解説します．

を指します．

21
22
23

BCM2837（Broadcom） 【裏面】
Cortex-A53コア
LPDDR2メモリ
1.2GHz，4コア（1Gバイト）USB TypeA
コネクタ×456mm【裏面】
micro SD
カード・スロット

24
25

チップ・アンテナ（Wi-Fi＋Bluetooth）
MIPI-DSI
液晶パネル・
インターフェース

40ピン拡張ピン・ヘッダ
GPIO/UART/SPI/I2C/I2S/PWM

Ethernet
コネクタ
RJ-45

85mm
5V給電用
USB micro B
コネクタ
写真 1

HDMI
コネクタ

MIPI-CSI
カメラ・
インターフェース

RaspberryPi3ModelB の外形

Raspberry Pi 3 は，基板上に無線機能（Wi-Fi と Bluetooth）が搭載されて使い勝手が向上した

サウンド，コンピジット・ビデオ（NTSC/PAL）
出力用φ3.5，4極コネクタ

見本

MAX10-EB 基板の概要

433

22

章 Qt CreatorによるGUIアプリの作成

高速SPI通信によるインターフェースと，

16

MAX10とRaspberryPiの
連携方法

17

第

18

本書付属 DVD-ROM 関連データ
DVD-ROM 格納場所

CQ-MAX10¥Projects¥
PROJ_NIOSII_RASPI

内容

備考

Raspberry Pi と通信しながら連携動作する MAX 10 のプロジェクトのひMAX 10 側な形（Quartus Prime 用，Nios II EDS 用）① Raspberry Pi のホーム・ディレクトリ下に作業用ディレクトリ /home/pi/temp を作 成し，本ファイルをその下に置いて 解 凍（tar xvfz CQMAX10.tar.gz）する．その後，解凍してできたディレクトリのうち / Raspberry Pi 側（本章では，
CQ-MAX10¥RaspberryPi¥
home/pi/temp/CQ-MAX10/MAX10 を，/home/pi/CQ-MAX10/ の下に このプログラムを作成する
CQ-MAX10.tar.gz
コピー
具体的な手順を解説する．
② /home/pi/CQ-MAX10/MAX10 が，MAX 10 との SPI 通信テスト用 GUI 本データは参考用の完成版）
アプリケーションのプロジェクトのひな形（Raspberry Pi上のQt Creator
用）

●はじめに

Raspberry Pi と MAX 10（MAX10-FB 基板）
を組み合わせることができる MAX10-EB 基板のハードウェア
について，前章で解説しました．本章では，Raspberry
Pi と MAX 10 の間の具体的なインターフェース方法

ここではインターフェース信号として，図 1 に示
す 4 線式 SPI（Serial Peripheral Interface）
通信信号だ
けを使うことにします．
Raspberry Pi 側を SPI マスタ，MAX 10 側を SPIについて説明します．
さらに，Raspberry Pi 側のアプリケーション・プ
ログラムの作成方法と，MAX 10 側の FPGA ハード
ウェア，および MAX 10 内の Nios II 用プログラムのスレーブとします．
SPI1_CE2_N はスレーブ選択信号（負論理），SPI1_SCLK は SPI クロック，SPI1_MOSI はマスタ側送信
データおよびスレーブ側受信データ，SPI1_MISO は
スレーブ側送信データおよびマスタ側受信データで構成例についても説明します．本章の技術情報をマスタすれば，オリジナルのシステムを構築できるようになるでしょう．
本章で説明する Raspberry Pi としては，Raspberryす．
MAX10-EB 基板の上のはんだジャンパを使って，
図 1 に示す 4 本の信号が，Raspberry Pi と MAX 10の間で接続されるようにしてください．

Pi 3 Model B を使用することを前提としています．
その立ち上げと設定方法は Appendix 3 を参照してく
ださい．なお，基本的に本章の内容は Raspberry Pi 2
Model B にも適用可能です．

● Raspberry Pi 上の SPI 機能モジュールは
AUX SPI0 を使う

Raspberry Pi 3 と MAX 10 間のインターフェース方法● Raspberry Pi と MAX 10 のインターフェー
スは SPI 通信

Raspberry Pi と MAX 10 の間のインターフェース
信号としては，Raspberry Pi の拡張基板を組み合わせることも考えると，それら拡張基板類があまり使っていない信号を，なるべく少ない本数だけ使うべきと考えました．

19
20
21
22
23
24
25

図 1 に示す信号線を使用する場合，Raspberry Pi
側 の SPI 機 能 モ ジ ュ ー ル は， メ イ ン の SPI 機 能 モジュールではなく，補助（Auxiliary）周辺機能の中のSPI 機能になります．補助周辺機能の中には 1 組のMini UART と 2 組の SPI（AUX SPI0 と AUX SPI1）が入っていますが，ここでは AUX SPI0 だけを使います．
Raspberry Pi の GPIO 端 子 上 の 名 称 と し て は，
AUX SPI0 と AUX SPI1 は，それぞれ SPI1 と SPI2に対応付けられているので混同しないようにしてくだ
さい．ここで使用する Raspberry Pi 上の SPI モジュー
ルは，SPI1 すなわち AUX SPI0 になります．

見本

Raspberry Pi 3 と MAX 10 間のインターフェース方法459

第 6 部 マイコン黎明期の4004システムを設計し，歴史的電卓を再現する

23

インテルMCS−4アーキテクチャをじっくりと堪能して，

章 先人の知恵の深さを感じとろう

164004CPUアーキテクチャとMCS－4システム

17

第

18
19

本書付属 DVD-ROM 収録関連データ
DVD-ROM 格納場所

内

容

Raspberry Pi のホーム・ディレクトリ下に作業用ディレクトリ /home/pi/temp を作成し，本ファイルをその下に置いて解凍（tar xvfz CQ-MAX10.tar.gz）する．その後，解凍してできたディレクトリのうちCQ-MAX10¥RaspberryPi¥/home/pi/temp/CQ-MAX10/MCS4 を，/home/pi/CQ-MAX10/ の下にコピー
CQ-MAX10.tar.gz

20

●はじめに

21

/home/pi/CQ-MAX10/MCS4/ADS4004 が，4004 CPU の 2 パス・アセンブラ，逆アセンブラ，シミュ
レータ（標準 C で記述）

これまでいろいろなことを長々と解説してきましたが， そ の 集 大 成 と し て， 世 界 最 初 の マ イ ク ロ コ ン

22

ピュータであるインテル社 4 ビット・マイクロコン
（CPU）
および，そ
ピュータ・システム MCS−4 の 4004のチップ・セット一式を Verilog HDL で論理設計し，
MAX 10 に実装したいと思います．
そ の 前 に ま ず 本 章 で は，4004 を は じ め と す る

23

MCS−4 システムのアーキテクチャ全体を詳細に解説
します．さらに 4004 のプログラム開発用アセンブラ

24やシミュレータを自作したので，それについても説明します．これで今日からあなたも，4004 の名プログ
ラマになれます．

25● 4 ビットに慣れよう

4004 は 4 ビット CPU なので，扱うデータは基本的には 4 ビット単位です．よって，データのアドレスは4 ビット単位でアサインされます．今どきのマイコン
少年〜中年の皆さんは，8 ビット単位のデータとアド
レスには慣れていると思いますが，4 ビット単位になると少し違和感を感じるかもしれません．ぜひ，その違和感を快感として楽しんでみてください．なお，命令コードは 8 ビット単位なので，そのアドレス・アサ
インは 8 ビット単位になっています．

MCS−4 チップ・セット

写真 1

筆者所蔵のインテル社 MCS-4 チップ・セット

上から，
4001
（マスクROMおよび入出力ポート），
4002-1/4002-2（RAM● MCS−4 チップ・セット

4 ビット・マイクロコンピュータ・システムを組む
ためのチップとしては，4004
（CPU）
，4001
（ROM）
，

および出力ポート），4003（出力ポート拡張用シフトレジスタ），4004（4
ビット CPU）．4002 には 4002-1 と 4002-2 の 2 種類があるが，RAMのバンク内チップ番号の割り当て方法によって使い分けるために用意さ
れている

見本

MCS−4 チップ・セット

511

第

24

歴史的4004アーキテクチャをFPGAの中に実現し，章 ビンテージ電卓を再現する

MCS-4システムの論理設計と
電卓の製作

17
18

本書付属 DVD-ROM 関連データ
DVD-ROM 格納場所

CQ-MAX10¥Projects¥
PROJ_MCS4

内

容

備

考

・デ ィレクトリ FPGA：4004（CPU）を中心とした MCS-4 システム全体の RTL コードと，その MAX 10 用 FPGA プロジェクトと Nios II のファームウェア（Quartus Prime
MAX 10 側
用，Nios II EDS 用）・ディレクトリ verification：MCS-4 システムの論理検証環境（ModelSim 用）・Raspberry Pi のホーム・ディレクトリ下に作業用ディレクトリ /home/pi/temp を作成し，本ファイルをその下に置いて解凍（tar xvfz CQ-MAX10.tar.gz）する．その後，解凍してできたディレクトリのうち /home/pi/temp/CQ-MAX10/MCS4 を，/
home/pi/CQ-MAX10/ の下にコピー（第 22 章の操作と同じ）
CQ-MAX10¥RaspberryPi¥ ・/home/pi/CQ-MAX10/MCS4/MCS4_Panel_320×240 が，画面サイズ 320×240 のRaspberry Pi 側
CQ-MAX10.tar.gz
MCS-4 システム用デバッガと電卓 GUI インターフェース・/home/pi/CQ-MAX10/MCS4/MCS4_Panel_800×480 が，画面サイズ 800×480 のMCS-4 システム用デバッガと電卓 GUI インターフェース・/home/pi/CQ-MAX10/MCS4/tools が，インターネット上にある電卓用バイナリ・コードを MCS-4 システム用デバッガに組み込むための変換ツール●はじめに

前章では，4004（CPU）を中心とした MCS−4 システ
ムのアーキテクチャを詳細に解説しました．本章ではいよいよ，そのアーキテクチャを Verilog HDL で設計し，MAX 10 FPGA の中に実装してみたいと思います．
ここでは，4004（CPU）の他に，周辺チップとしての 4001（ROM），4002
（RAM）
，4003
（シフトレジスタ）と同等な機能も設計し，システムに組み込みます．さらに，CPU（4004）には独自のオン・チップ・デバッガを搭載して，Raspberry Pi からプログラムをダウンロードしたりデバッグしたりできるようにします．
MCS−4 システムのアプリケーションとしては，博物館に展示されている往年の歴史的電卓（ビジコン社141−PF）も再現し，今でも十分実用的に使える機能とその仕組みをじっくりと味わいたいと思います．

16

した MAX10−FB 基板（および FPGA コンフィグレー
ション用 MAX10−JB 基板）
を，拡張基板 MAX10−EB
基板に載せ，それをさらに Raspberry Pi に載せたシステムを使用します．

● Raspberry Pi はユーザ・インターフェース用

図 1 の一番左側には Raspberry Pi があります．これはユーザ・インターフェースを受け持ちます．MAX

19
20
21
22
23
24
25

10 FPGA 側と SPI 通信により連携します（第 22 章で解説した手法）．Raspberry Pi 上のアプリケーション
は，FPGA の中に実装する 4004
（CPU）のオン・チッ
プ・デバッガと，電卓の入出力部（キーボードとプリンタ）をエミュレーションするハードウェアの両方を制御します．Qt Creator で開発しました．

● Raspberry Pi と MAX 10 FPGA の接続

Raspberry Pi と MAX 10 を 接 続 す る た め に，

MCS−4 システム全体構成

MAX10−EB 基板を使用します．
Raspberry Pi のモニタとして，HDMI 接続モニタ● Raspberry Pi をユーザ・インターフェースとして使用したシステムを使用するか，または 7 インチ公式タッチ・ディスプ
レイを使用する場合は，編成 A−1 または編成 A−2（第21 章）
で互いに接続してください．

今回製作する MCS−4 システムの全体構成を図 1 に，全体仕様を表 1 に示します．MAX 10 FPGA を搭載

4D Systems 社のタッチ LCD パネル基板 4DPi シ
リーズなど，Raspberry Pi の上に重ねる LCD 基板

見本

MCS−4 システム全体構成

549

第7部

第

MARY 基板を活用する

25

各種周辺機能をもつ小型MARY基板を

16

章 MAX10から制御する

MARY基板とMAX10の連携方法
内容

CQ-MAX10¥Projects¥PROJ_MARY

Nios II システムに SDRAM を接続して，MARY 基板（MARY-OB，MARY-GB）を制御するプ
ロジェクト一式（Quartus Prime 用，Nios II EDS 用）

CQ-MAX10¥MARY

MARY 基板の回路図，部品表，基板パターン●はじめに

MARY-OB基板（カラーOLED表示器）

MARY 基板とは，Cortex−M0 をコアにもつ NXP社のマイコン LPC1114 を搭載した約 3 cm 角の超小型基板 MARY−MB（MCU Board）と，それに搭載できる各種周辺基板群から構成されるシリーズで，参考文

MARY-GB基板（GPS/RTC)

20
21
22

献
（1）で詳しく紹介されています．
MARY 基板は 2011 年に登場した年季ものですが，その周辺機能基板が汎用的に使えるので，今でも流通しています．MARY 基板の回路図，部品表，基板パ23

ターンについては，本書の付属 DVD−ROM にも収録

24

したので，参考にしてください．
MAX10−FB 基板を Raspberry Pi に接続するための MAX10−EB 基板を第 21 章で紹介しましたが，この基板には MARY 基板も搭載可能です．MAX10−
EB 基板に搭載できる MARY 基板を，表 1 に示します．
本章では，MAX10−EB 基板に，MARY−OB（カラー
OLED 表 示 モ ジ ュ ー ル ＋ 3 軸 加 速 度 セ ン サ ）と，

18
19

本書付属 DVD-ROM 関連データ
DVD-ROM 格納場所

17

MAX10-EB基板

MAX10-FB
基板
写真 1

25

MARY-OB と MARY-GB を MAX10-EB 基板に搭載

MAX 10 から MARY 基板を直接制御する．この写真は編成 D-2 の場合

MARY−GB（GPS モジュール＋リアルタイム・クロック）を搭載する例を紹介します．

表1

MARY 基板の種類

MAX10-EB 基板に搭載できるもの

MARY 基板の種類
MARY-OB
MARY-LB
MARY-XB
MARY-GB

搭載機能種類
カラー OLED
表示モジュール
3 軸加速度センサ
2 色 LED アレイ
XBee 無線モジュール
micro SD カード
GPS モジュールRTC（リアルタイム・クロック）

デバイス

メーカ

接続
インターフェース

UG-2828GDEDF-11

UNIVISION

SPI ＋ GPIO

LIS33DE
A3880EG
XB24-ACI-001−
UP501

STMicroLinkmanDigi−
Fastrax

I2C ＋ GPIO
SPI ＋ GPIOUARTSPI ＋ GPIOUART ＋ GPIO

RX-8564LCSEIKO Epson

I2C ＋ GPIO

見本

MARY 基板を MAX 10 FPGA に接続する

583

見本