Linuxで動く
ビデオ再生システムを作る

FPGAキットで始める
ハード&ソフト
丸ごと設計

RTLと
Cソースを
全公開！

ラミング
CPUと周辺回路を作り込んでCプログラミング

栗元 憲一 著

CD-ROM
コンテンツ

CD-ROM
付属❶ビデオ再生シス❶ビデオ再生システム
ハードVHDLソースコード❷ビデオ再生システム
ソフトCソースコード❸Aeroﬂex Gaisler社製
IPコア群 GRLIB❹SnapGear Linux

本書の内容を試せるFPGAボード(別売)GR-XC3S -1500（Pender Electronic Design社）

Spartan-3 XC3S1500搭載

BLANCA（CQ出版社） NEEK（Altera社）

Spartan-3 XC3S1500搭載

Cyclone Ⅲ EP3C25F324搭載

第1部

第

1章

オープンソース ソフト&ハードによるFPGAへのSoCシステムの実装
SPARC V8 アーキテクチャ LEON システムの概要とサポート・ボードへのマッピング

ソフトウェアの世界では，Linux などのオープンソー
ス・モデルが大きな成果を収め，私達の身の回りの商と周 辺 IP コア（GRLIB）を用いて，FPGA 上に Linuxシステムを構築します．

品にも多数用いられるようになりました．ハードウェ
アにおいてもオープンソース・モデルの活用が行われ●LEON プロセッサと周辺 IP コア（GRLIB）についてており，成果を挙げつつあります．第 1 部では，オー

最初の LEON プロセッサは，ESA（European Space

プンソース・ハードウェア（RTL ソース・コード）を使Agency：欧州宇宙機関）で開発され，1999 年に発表

用して，読者の手元で FPGA 上に Linux システムを構されました．宇宙で使用される半導体は，アルファ粒

築する方法を解説します．

子放射線や宇宙放射線の影響でメモリやレジスタの値が変更されてしまう SEU（Single Event Upset）現象が1.1

オープンソース・ハードウェアとLEON システム●オープンソース・ハードウェア
ソフトウェアは，いったん開発されたものは，イン起きる可能性があります．LEON プロセッサは，宇宙でも使用できるように SEU 対策を行ったプロセッサとして開発され，GNU general public license で公開されました．アーキテクチャとして最もオープン化に積極的な SPARC を採用しています．

ターネットを用いて非常に安い金額で個人が配布する

その後，チーフ・デザイナであった Jiri Gaisler 氏はことができます．それに対してハードウェアは，実際

ESA を離れ Aeroflex Gaisler 社を設立し，LEON の開に製造するために大きなお金がかかるため，オープン

発を続けています． 第 2 世 代の LEON2 は，SEU 部を

ソース・モデルが簡単には適用されにくいとされてい取り除いたものが LGPL ライセンスでソース・コードました．

が公開されました．その際には，プロセッサだけでな

しかし FPGA の発展により，RTL ソース・コードで設計データを配布する形式のオープンソース・ハード
ウェアはソフトウェアと同等の配布コストとなり，個く，周辺 IP も接続された形で公開されています．
現在，第 3 世代の LEON3 プロセッサが GPL ライセ
ンスで公開されています．

人が利用し配布することが可能になりました．
最近の FPGA ボードは，個人が購入できる金額でシステム全体を構成できるような高性能なものになって●LEON3 プロセッサの特徴
LEON3 プロセッサの特徴として，次のようなことがおり，今後オープンソース・ハードウェア・モデルは挙げられます．

大きな成果を挙げる可能性があります．

（1）SPARC V8 アーキテクチャ準拠の ASIC として

現在，様々な RTL ソースコードのオープンソース・の動作実績

ハードウェアを展開する活動が行われています．例えLEON3 プロセッサは，FPGA のみならず，ASIC とば，OpenCores（ http ： //www.opencores.

し て も 動 作 実 績 が あ る プ ロ セ ッ サ で す．SPARC

org/） には， 多 数のオー プンソー ス IP コアの RTL

International より，公式に SPARC V8 アーキテクチャ

ソース・コードが公開されています．

準拠の承認を取っており，SPARC 向けのバイナリが用

また，OpenSPARC（http：//www.opensparc.

意された環 境なら問 題なく動 作します． 例えば，

net/）では，最先端の 64 ビット・マルチコア・プロ

Linux，uClinux，eCos，RTEMS，OS な し な ど， 多

セッサの RTL ソース・コードが公開されています．

数のソフトウェ ア開 発 環 境が揃 っ ています． ソフト

そこで本 書では，Aeroflex Gaisler 社（http：//

www.gaisler.com/）から GPL ライセンスで RTL

ウェア，ハードウェア共にオープン・ソースでありな
がら，高い信頼性があります．

ソース・コードが提供されている LEON3 プロセッサ
1.1 オープンソース・ハードウェアとLEONシステム

9

第1部

第

2章

オープンソース ソフト&ハードによるFPGAへのLinuxシステムの構築
LEON システムで動作する Linux のビルドと非サポート・ボードへの移植の基本
NFS を使 用する設 定の詳 細は，SnapGear Linux for

2.1

Linux イメージのビルド

LEON Manual を参考にしてください．
カーネル起動時に与えるコマンド・ラインについて●Linux コンフィグレーション
ハードウェアの準備が整ったので，次はソフトウェ
アを準備します．第 1 章で設計したハードウェア上では， 今 回は SVGA コントロー ラを通してフレー ム・
バッファにコンソールを出力するために，次のようなコマンドを指定しました．

実行する Linux イメージを生成します．ここでは，主console=tty0,38400 video=grvga:64

要な設定項目について説明します．

0x480@60,16,614400

まず， カレント・ ディ レクトリを $LEON_HOME/

snapgear-2.6-p42 へ移動します．
make xconfigとコマンドを打ち込むと，Linux コンフィグレーショ

画面は，VGA サイズで 16 ビット・カラーです．カー
ネル・コマンド・ラインの詳細をコントロールしたい
場 合は，SnapGear Linux for LEON manul を参 照してください .

ン GUI が 立 ち 上 が り ま す（図 2.1）．Vender/Product

Next ボ タ ン を ク リ ッ ク す る と，Kernel/Library/

Selection ボタンをクリッ クすると，Vendor/Product

Defaults 選 択 GUI が立ち上がります（ 図 2.3）．Kernel

選 択 GUI が立ち上がり，Vendor は gaisler，ProductVersion は，Linux-2.6.21.1 を選 択します． また，Libc

は leon3mmu が選択されています．ここはそのままに

Version は，glibc-from-compiler を選 択します． そし

して，Next ボタンをクリックします．

て，Customize Kernel Settings と Customize

次に，Gaisler/Leon2/3 MMU options GUI が立ち上

Vendor/User Settings を y にします．

がります（図 2.2）．最初の項目はシステムの MUL/DIV

これらを選択することにより，それぞれ Kernel コン

命令用ハードウェア実装の有無を入力します．今回

フィ グレー ショ ン GUI とアプリケー ショ ン・ ソフト

は，これらの機能を実装したので y を選択しています．
次の項目は，FPU のハードウェア実装の有無を入力
します．これらの項目によって，コンパイラに与えるオプションが変わります．ハードウェアを実装していない場合は，もっと小さな命令の複合に置き換えられます．
また，今回は SDRAM 上にファイル・システムを持
つので，Initial root filesystem には initramfs を選択します． ネッ トワー ク上の他のコンピュ ー タにファ イ
ル・システムを持つ NFS（Network File System）を使用することもでき， その際には None を選 択します．

図 2.1

Linux コンフィグレーション GUI

図 2.2

MMU options コンフィグレーション GUI

2.1

Linuxイメージのビルド

25

第2部

第

3章

motionJPEG再生システムを例に
FPGAによるSoCを開発する目的
オープンソース ソフト＆ハードにより SoC を開発するメリットと第 2 部の構成について第 2 部では，いよいよ本格的に FPGA を使って SoC

ソフトウェアを使用して実現することにより，それの開発を行います．本書で開発するシステムは，ネッらの使用方法を理解し，今後読者が自由に使いこな

トワーク経由で motionJPEG ファイルを読み込み，そして独自の SoC を開発できるようになる

れをデコードして画面に表示するという，motionJPEG

現在，多数の SoC が開発されていますが，その理由

動画ストリーム再生用 SoC です．まず，ソフトウェアにはさまざまなものがあります．例えば，複数のチッだけで JPEG ファイルをデコードし，その速度を体感

プで構成されるシステムをより微細化したプロセスをします（ 第 4 章 ）． 次に JPEG デコー ド処 理の一 部を使い 1 チップにまとめてローコスト化を進めたものや，

ハードウェア化してみます（第 5 章）．実際に，JPEG

低消費電力なシステムを作るためにソフトウェアではデコード処理全体をハードウェア化することにより，なくハードウェアで実現したものなどがあります．

どれだけシステムを高速化できるかを体験してくださ

また，新機能を実現するシステムを開発する際に，い（第 6 章）．最後に，システムをネットワーク対応にソフトウェ アでは処 理が間に合わない部 分をハー ドすることで，motionJPEG 動画ストリーム再生システ

ウェア化した SoC を開発することは，最もよくある理ムが完成します（第 7 章）．

由の一つです．

第 1 部では，オープンソース CPU である LEON3 を●ハードウェア化による高速化を体感できる！

FPGA にマッピングし，その上でオープンソース OS

最新の LSI は，微細化により性能が向上しているたである Linux を載せたシステムを動作させました．こめ motionJPEG をソフトウェアのみで容易に再生でき

こからは，オープンソース・ハードウェアが自由に改ますが，かつてコンピュータ上で動画を扱うことが可変できるという利点を用いて，SoC の開発を行います．

能になりはじめた時期には，ハードウェアでサポートすることにより実現していました．
時を経て，motionJPEG がソフトウェアで扱えるよ3.1

motionJPEG 再生システムを例にうになるとともに，FPGA がその当時のシステムすべてを実現できる規模になりました．当時の LSI のよう●FPGA で SoC を開発できる！

に，FPGA 上でソフトウェアによる JPEG 処理では厳

最近の LSI は，複数のプロセッサが搭載されて OS がしい部分をハードウェア化することを体験することに動作する非常に複雑で高度な SoC（System on Chip）

より，他の同様な問題にも通じるエッセンスを学ぶことなっています．したがって，SoC の開発は，とてもとができます．そして，ハードウェア化を行う部分を個人でできるものではありませんが，半導体技術の進追加していくごとに，動画のフレームレートが上昇す

歩は FPGA の低価格化，大容量化ももたらしてくれまることで，ハードウェア化による高速化を体感するこした．そのため個人で購入できる金額の FPGA ボードに，小さな SoC を搭載することが可能になりました．
ここでは，SoC 開発のエッセンスを体験するために，

motionJPEGファイル

再生

図 3.1 のようなネットワーク越しの motionJPEG 再生シ
ステムを FPGA 上で開発します．

イーサネット

第 2 部では，次の 2 点を目標としています．
（1）ソフトウェアで処理の間に合わない部分をハードウェア化するという SoC 開発のエッセンスを学習する（2）一つのシステムをオー プンソー スの SoC，OS，

ホスト・コンピュータ
図 3.1

FPGAボード

motionJPEG ストリーム再生システム

3.1

motionJPEG再生システムを例に

33

第2部

第

4章

JPEGアルゴリズムとソフトウェアによる
motionJPEG再生の実現
JPEG デコード・アルゴリズムを理解し，IJG ライブラリを使ったソフト
ウェアによるデコードを体感しよう

まず，JPEG のアルゴリズムの概要について説明しま

図 4.1

RGB-YCbCr変換

DCT変換

③

JPEG のアルゴリズム

量子化

4.1

②

とを目標とします．

①

リを使用して，motionJPEG を FPGA 上で再生するこランレングス・ハフマン圧縮 ④

本章では，JPEG のソフトウェアとして業界標準となっている Independent Jpeg Group（IJG）のライブラ

JPEG エンコードの概要

す．実際に開発するのはデコード・システムですが，
JPEG は画像データを効率よく圧縮するために開発されたアルゴリズムなので，ここではエンコードのアルゴ
リズムについて説明します．
デコードは，このアルゴリズムを逆方向に行えば実現できます．

圧縮されることになります．
この圧縮では，人間の目の特性により Cb，Cr 成分の 8 × 8 が 4 個の場合（4：4：4）の画像と差はあまり感じません．
1次元離散コサイン変換（1D Discrete Cosine Transform，●RGB 形式から YCbCr 形式へ
図 4.1 に，JPEG エンコードの概要を示します．最初に，入力された RGB 形式の画像を YCbCr 形式のフォー
マットに変換します．これは基本的に，

DCT）は，図 4.3 のような行列演算で表される
2 次元離散コサイン変換（2DDCT）は，この変換を繰り返して実現できる
これは，図 4.4 の右上のような 8 × 8 の 2 次元波形のY ＝ 0.29900R ＋ 0.58700G ＋ 0.11400B

重ね合わせで，元の絵を表現する正規直交変換です．

Cb ＝ − 0.16874R − 0.33126G ＋ 0.50000B ＋ 128

Y，Cb，Cr の成分それぞれを，8 × 8 の単位で変換しCr ＝ 0.50000R − 0.41869G − 0.08131B ＋ 128

ます．

という式で表せるもので，単に数値の表現方法を変更

変換後に，図中の基底波形それぞれを，どれぐらいするものです（JPEG ではレベル・シフトが同時に行わの割合で重ね合わせると元図形になるかを表す 8 × 8 のれる）．

係数行列が求まります．

ただし，人間の目には Y 成分にだけ敏感であるという基底波形のうち，左上の部分は単一の値となり，DC特徴があるため，データのサンプリング時に Cb と Cr 成

係数と呼ばれます．そのほかの 63 要素は，AC 係数と分に対して間引くことが可能になります．この間引いた呼ばれます．

Y：Cb：Cr の割 合によっ て，4：4：4 や 4：2：2，4：
1：1 と呼ばれる JPEG 画像が存在します．Y 成分に対しDCT の式は，実際に計算するときは図 4.5 のような小数の行列演算として求めます．

て，同じ割合でサンプリングする画像を 4：4：4 としています．図 4.2 に，4：2：2 の例を示します．

●DCT 変換と量子化

この図の例では，画面が MCU と呼ばれる 16 × 16 のDCT 変換そのものは正規直交変換なので，情報の圧画素に分けられています．そして，Y 成分は 8 × 8 が 4

縮は全く行われません．それでは，何故このような計個の細かさで変換されていますが，Cb，Cr 成分は横二算量の大きな変換を行っているのでしょうか？ その理

つ分を一つの値で代表させることによって 8 × 8 が 2 個

由は，最後に行われるランレングス・ハフマン圧縮にで変換されています．これにより，情報が間引かれておいて，人間の目ではあまり変化を認識できないが，
4.1

JPEGのアルゴリズム

39

第2部

第

5章

YCbCr-RGB変換モジュールを
ハードウェア化するシステムの開発方法
ソフトウェア処理の一部分を実際にハードウェア化することにより，SoC
開発のエッセンスを体験しよう

本章では，SoC 開発のための要素技術の習得を目的

理とは異なり，並列に処理を行うことができます．

として，YCbCr-RGB 変換部分をハードウェアで処理するシステムを開発します．
YCbCr-RGB 変換のみをハードウェア化しても，シ

5.1

AMBA バスの基礎知識

ステムの性能はそれほど上がりませんが，ソフトウェ
ア処理の一部をハードウェア化してシステムを動作さ

YcbCr-RGB 変換ハードウェアを設計する前に，接せることが体験できます．本章だけでも自分で開発を

続先のバスである AMBA について基本的なところを解行えば，自分専用の SoC を開発するための要素技術を説します．

習得することができます．
習得する要素技術は，RTL によるハードウェア設計，●YCbCr-RGB 変換回路の概要

AMBA バスの仕 様の理 解とインター フェ ー ス設 計，

ここでは，YCbCr-RGB 変換ハードウェアの設計を

ユーザランド・アプリケーションから AMBA 接続され行います． YCbCr-RGB 変換は，次のような式で表さたハードウェアにデータを送るためのデバイス・ドラ

れる演算です．

イバ設計などです．

R ＝ Y ＋ 1.40200（Cr − 128）
G ＝ Y − 0.34414（Cb − 128）− 0.71414（Cr − 128）

●本章で設計するハードウェア

B ＝ Y ＋ 1.77200（Cb − 128）

本 章で設 計するハー ドウェ アは， 図 5.1 のように，

ハードウェアは，上記の演算を行うデータ・パス部

YCbCr-RGB 変換モジュールを AMBA AHB バスに追分と，プロセッサからデータが書き込まれる AHB ス

加したものになります．図 5.1 では，ここで開発するシ

レーブ・インターフェース部，このハードウェアが自ステム内でのデー タ処 理を示しています． ハフマン

律的に DRAM に計算結果を書き込む AHB マスタ・イ（Huffman）デコードや 2DIDCT は，これまでと同じよ

ンターフェース部からなります．

うにソフトウェアで処理されます．

LEON プ ロ セ ッ サ・ シ ス テ ム は，32 ビ ッ ト の

YCbCr-RGB 変換部分は，2DIDCT が終わったデータ

AMBA バスを採用しているので，ソフトウェアからこをデバイス・ドライバによって追加したハードウェアのハードウェア IP コアに送るデータも 32 ビット単位にに送ります．データを受け取った YCbCr-RGB 変換ハー

なります．しかし，JPEG の YCbCr データは 3 × 8 ビッドウェアは，自律的に RGB データに変換してメイン・

ト＝ 24 ビットなので，今回は 32 ビット幅の 24 ビット

メモリ中のフレーム・バッファにデータを送ります．

のみを使用します．設計者が，バスのデータのどの位

また，VGA コントローラは，プロセッサ処理とは関置にどのデータが来るかを決めます．

係なく自 律してメイン・ メモリ内のフレー ム・ バッ

このハードウェア IP から出力する計算結果も，32

ファ領域のデータを読み取り，VGA ポートからディス

ビット幅のバスから出力されます．今回の Linux シス

プレイ表示に合わせたタイミングで画面データを出力

テムは，16 ビット / ピクセル（bps）のフレーム・バッ

し続けています．これら三つの動作は，同時に起きてファを使用しています（R 成分：5 ビット，G 成分：6いることに注意してください．

ビット，B 成分：5 ビット）．そこで，2 ピクセル分を

2DIDCT データを YCbCr-RGB 変換ハードウェアにまとめて 32 ビットとし，バスに送出するハードウェア

転送した後，ユーザランドのアプリケーションは次のIP を設計することにします．データ・パス演算を行っ

データのハフマン・デコードを始めており，それと同た後に，2 ピクセル分をハードウェアでまとめます．以時に YCbCr-RGB 変換がハードウェアで行われていま上のことからざっくりと，図 5.2 のような概要図を書く

す．ハードウェアによる処理はソフトウェアによる処ことができます．

56

第5章

YCbCr-RGB変換モジュールをハードウェア化するシステムの開発方法

第2部

第

6章

JPEG処理をハードウェア化したシステムの開発方法
DCT 処理やハフマン・デコードをハードウェア化することにより，さらに高性能な SoC を実現しよう

前章までの解説で，ソフトウェア処理の一部をハーシステムを高速化していきます．

ドウェ ア化し， システムの性 能を上げる SoC 開 発の前 章までのハー ドウェ ア IP コアでは， 前 後のモエッセンスと，必要となる要素技術をマスタできましジュールとのデータのやりとりには，FIFO の要素数た．そこで，この章では，さらにハフマン・デコーダを判定して信号を送っていました．この方法は，いわや 2DDCT などの処 理をハー ドウェ ア化し，motion

ゆるハンドシェークと呼ばれるやり方です．

JPEG ムービを再生できるシステムを開発します．

受信する側のモジュールが受信可能なときに ready
信号をアサートし，送信側に知らせます．送信側は，送るべきデー タが揃 っ ている場 合に受 信 側からの

6.1

データの流れready 信号を確認し，受信側の準備ができていればデー
タを送ります．

最初に，IJG のソフトウェア djpeg の中で，どのようデータを送るときに，有効なデータを送信しているにデータが流れているかを確認します．Structure.

という valid 信号も同時に送ります．受信側は，受信doc に全体構造が説明してあります．

可能なときに valid 信号がアサートされていれば，有効なデータだと判断して受信します．

●djpeg の構造
図 6.1 は，djpeg の大まかな全体構造を示しています．

●JPEG デコード・コアの全体構造

main 関数中で jpeg_read_scanline() を呼ぶこ

これから具体的に，DCT ハードウェア，ハフマン・と で JPEG 処 理 を 行 っ て い ま す が， そ の 実 態 は，

デコード・ハードウェアなどを開発して接続して行きprocess_data_simple_main() という API 関数

ます．それぞれのモジュールもハンドシェークを行い，データのやりとりを行います．図 6.2 に，これから開です．

Structure.doc に説明がありますが，IJG のライ
ブラリは一つの関数が前半処理と後半処理の二つの関数を呼び出すという構造をとっています．

process_data_simple_main() は，decompress_onepass というハフマン・デコード

発する JPEG デコー ド・ コア全 体の構 造を示します．
これは，参考文献（4）を参考にしています．
モジュール間には，データを一時的に記憶するメモ
リが接続されます．FIFO またはダブルバッファと呼ばれる方法で構成しています．

と DCT 処 理を行う関 数と，post_process_data

FIFO で前後のモジュールをつなぐ方法は，第 5 章でという upsample と YCbCr-RGB 変換を行う関数をコー

すでに説明しました．ダブルバッファは，図 6.3 に示ルしています．これらの処理を順次ハードウェア化し，すように，二つのメモリを置いて，それぞれを切り替

decompress̲onepass(jdcoefct.c)jpeg̲read̲scanline(djapistd.c)

process̲data̲simple̲main(jdmainct.c)

decode̲mcu(jdhuﬀ.c)
inverse̲DCT=jpeg̲idct̲islow

h2v1̲fancy̲upsample
post̲process̲data= sep̲upsample
color̲convert
図 6.1

djpeg の全体構造

6.1 データの流れ

83

第2部

第

7章

motionJPEG再生システムのネットワークへの対応開発した FPGA による SoC を実際に起動させて，ネットワーク経由でmotionJPEG 動画ストリームを再生しよう
LEON/ffserver/ に，gfdl-qvga.mjpeg を 配

7.1

ネットワークへの対応

置します．さらに，

ffserver -f ffserver.conf●動画サーバの準備と実行するとメッセージが出力され，動画サーバの実JPEG処理部分をハードウェア化するSoCの開発は，第行がはじまり，アクセス待ちの状態になります．

6章までの説明で完了しました．本章では，Linuxが動作

まずは，ffserver が立ち上がっていることを確認すするSoCであることを利用して，ネットワークに対応さるために，他のマシン（PC-Linux が VMware 上で実行せる方 法について解 説します（ ただし， 使 用している

されているなら，ホストの Windows マシンでもよい）

FPGA評価ボードがEthernetに対応している必要がある）．

から Web ブラウザでアクセスしてみます．

具体的には，PC-Linux 上で ffserver という動画サー

仮に，PC-Linux の IP アドレスが 192.168.24.51 の場

バ・ プログラムを実 行し，FPGA 側で再 生します．

合，Web ブラウザに以下のアドレスを打ち込みます．

ffserver は，ffmpeg に付属するプログラムです．

ffserver -f コンフィグレーション・
ファイル名

http://192.168.24.51:8090/
stat.html
すると，図 7.1 のような画面が表示されます．

でネットワーク動画サーバが立ち上がります．

また，gfdl-qvga.mjpeg というリンクがあるの

コンフィ グレー ショ ン・ ファ イルのサンプルは，で，これをクリックするとダウンロードされます．何ffmpeg の doc ディレクトリにあります（ffserver.

らかの motionJPEG ビューワ・ソフトをヘルパ・アプconf）．そこで，その一部をリスト 7.1 のように書きリとしていれば，ストリームで再生されます．これで，換えます．そして，PC-Linux上の/home/kurimoto/

動画サーバ側を立ち上げることができました．

リ ス ト 7.1 コ ン フ ィ グ レ ー シ ョン・ファイルの例<Stream file.rm>
File "/usr/local/httpd/
htdocs/tlive.rm"
NoAudio</Stream>（a）変更前<Stream video.mjpeg>
File "/home/kurimoto/LEON/
ffserver/gfdl-qvga.mjpeg
NoAudio</Stream>（b）変更後

図 7.1

Web ブラウザから ffserver へのアクセス

7.1 ネットワークへの対応

107

第3部

第

8章

AMBA AHBバスの仕組みとModelSim
によるシミュレーション
バスの基本概念と AMBA バスの基本仕様，AMBA マスタ / スレーブとシミュレータを使った AMBA バスの動作を理解しよう
社の Web サイトや Aeroflex Gaisler 社の Web サイトか

第 3 部では，第 2 部で開発したシステムの理解を深らダウンロードできます．しかし，この仕様書を一般めるために，AMBA AHB バスや IP コアの仕様につい的なバス・ システムを知らない人が読んだだけでは，て解説します．第 8 章では，AMBA バスの概要につい理解することは少し難しいと思います．そこで，本章て解説したあと，AMBA マスタと AMBA スレーブを組では，Grlib（Aeroflex Gaisler が公 開している IP コア

み合わせたシステムを想定し，シミュレータを使ってと開発環境）の AMBA バスに関連するソース・コード

AMBA バスの動 作を解 説しています． 第 9 章では，を使用して AMBA AHB の仕組みを理解します．

LEON システムを構成する主な IP コアについて，重要AMBA 準拠の設計を一度理解してしまえば，それほな部分にポイントをしぼって解説します．取り上げた

ど難しいものではないことが分かります．そこで本章

IP コアは LEON プロセッ サ，Ethernet コントロー ラ，の説明では，AHB 部分のみに注目して深く掘り下げてAMBA プラグ＆プレイ・コントローラ，SDRAM コン

います．他のバス・システムも本質的には似たようなトローラです．

ものです． LSI の内部で使用されているバス・システ
ムというものがどういうものかを知らない方が，なる

LEON プロセッサの特徴として，業界標準の AMBA
バスを採 用しているという点があります． さらに，
AMBA バスに接 続できる IP コアを開 発するための，べく具体的なイメージを簡単につかむことができることを目標に記述しています．
学習する項目は，次のようなものとなります．

AMBA マスタ・エミュレータなども開発環境と一緒に（1）AMBA バス仕様（AHB，APB）

公開されています．

（2）Grlib の中での AMBA 関連部分の実装（RTL）

AMBA バスは，産業界では非常によく採用されていLEON プロセッサとは関係なく，一般的な知識としるため，AMBA バスに接続できる IP コアの開発ニーて使えるので，若手エンジニアや学生にとっては様々

ズは非常に大きいと考えられます．

な場面で役に立つと思います．

本 章では， 主に LEON システムで用いられている

本章は第 1 部や第 2 部とは異なり，きれいにまとまっ

AMBA バスの一つとして定義されている AHB バスにた論理を記述するのではなく，部分的なイメージの説ついて説明します．

明を繰り返し，実際にソース・コードを見て動かすこ

最近は，AMBAの最新仕様であるAXIを使用する例が増えていますが，AHBを使用したシステムもまだまだとを繰り返した結果，いつの間にか全体像を把握しているという形を目指しています．

使われています．AHBは，使用しているSoCの実際の

git checkout -b my_amba origin/

ソース・コードを見ながら理解していくことができます．

work_amba

AMBA バスの仕様はオープンになっており，ARM

で，本章の設計データのあるブランチに切り替わります．

バスとは何か8.1

プロセッサと各種コントローラの接続例●プロセッサとメモリ
図 8.1 に，LEON システムのバス構 造を示します．

110

第8章

LEON システムは，AMBA バスのうち，AHB と APBバスを使用しています．
最初に，この構造のバスがどのように動作しているかを理解することによって，バスがどういうものかを理解します．

AMBA AHBバスの仕組みとModelSimによるシミュレーション

第3部

第

9章

LEON システムのGRLIBの
主なIPコアの詳細
LEON プロセッサ，Ethernet コントローラ，AMBA プラグ＆プレイ，
SDRAM コントローラの仕様を理解しよう

LEON システムには， 多 数の AMBA AHB および

浮 動 小 数 点ユニッ トとコプロセッ サは，Integer

APB 準拠のオープンソース IP コアがあります．また，Unit と並列動作可能で，データ・リソースの依存がな

詳細な英語の仕様書も添付されており，GPL ライセン

い限りオペレーションをブロックしません．

スに従う限り再利用が可能です．

Memory Management Unit（MMU）

本章では，本書で使用した主要な IP コアを，容易に

SPARC V8 Reference Memory Management Unit

使うことができるように，仕様書の中から必要と思わ（SRMMU）をオプションとして有効にすることができれる最低限の部分を説明します．

ます．SRMMU は，SPARC V8 MMU 仕様を完全に満たしています．32 ビットの仮想アドレス・スペースと，
36 ビットの物理メモリ間のマッピングを行います．3

9.1

LEON3 プロセッサ

レベルのテーブル・ウォーク・ハードウェアが実装されており，最大 64 のフル・アソシエイティブ TLB エ●プロセッサの概要
LEON3 は，32 ビット，SPARC V8 アーキテクチャに準拠したプロセッサで，次のような特徴を持っていントリをコンフィグレーションできます．
オンチップ・デバッグ機能をサポート
LEON3 パイプラインは，デバッグをサポートする機能を持っています．ソフトウェア・デバッグのために，ます．
Integer Unit

最大四つのウォッチポイント・レジスタを有効にでき

LEON3 の Integer Unit は，SPARC V8 完全準拠で，ます．

ハードウェア乗算，除算命令を含みます．レジスタ・それぞれのウォッチポイント・レジスタは，ブレーウィンドウの数は 2 〜 32 の間で，コンフィグレーショ

ク・ポイント割り込みを発生させます．オプションのン可能です（デフォルトは 8）．7 段のパイプラインで構

デバッグ・サポート・ユニットをつけた場合，ウォッ

成され，命令キャッシュとデータ・キャッシュが分離

チポイントはデバッグ・モードへ入るために使用できされたインターフェースを持ちます（ハーバード・アー

ます． デバッ グ・ サポー ト・ ユニッ トのインター

キテクチャ）．

フェースを通して，すべてのプロセッサ・レジスタや

キャッシュ

キャッシュにアクセスできます．デバッグ・インター

LEON3 は，非常に細かくコンフィグレーションでき

フェ ー スは， シングル・ ステッ プ実 行やハー ドウェ

る命令キャッシュとデータ・キャッシュを持ちます．

ア・ブレーク・ポイントやウォッチポイントのコント

それぞれのキャッシュは，1 〜 4 セット，1 〜 256K バ

ロールを可能にします．

イト / セット，16 または 32 バイト / ラインでコンフィ
グレーションできます．
データ・キャッシュはライト・スルーで，ダブル・
ワー ドのライト・ バッ ファ を持ちます． デー タ・キャッシュは，AHB バスのバス・スヌーピングを行う

また，内部のトレース・バッファにより，実行された命令を後で読み出すことが可能です．
割り込みインターフェース
LEON3 は，15 個 の 割 り 込 み を 持 つ，SPARC V8Interrupt Model をサポートします．

ことができます．
浮動小数点ユニットとコプロセッサ●Integer Unit

LEON3 の Integer Unit は， 浮 動 小 数 点ユニッ ト

Integer Unit は，次のような特徴を持っています．7（FPU）と，カスタムのコプロセッサのインターフェー

段パイプライン， 分 離された命 令キャ ッ シュ とデースを持ちます．また，二つの FPU コントローラがあり

タ・キャッシュのインターフェース，2 〜 32 のレジスます．一つは GRFPU，もう一つは Meiko FPU 用です．

タ・ウィンドウ，ハードウェア乗算器（オプションで

140

第9章

LEON システムのGRLIBの主なIPコアの詳細

このPDFは，CQ出版社発売の「FPGAキットで始めるハード&ソフト丸ごと設計」の
内容・購
内容
購
法

法などにつきましては以下のホームページをご覧下さい．
http://shop.cqpub.co.jp/hanbai/books/46/46101.htm
http://www.cqpub.co.jp/order.htm

FPGAキットで始める

ハード&ソフト丸ごと設計
CPUと周辺回路を作り込んでCプログラミング部

本です．