5.自作周辺回路の接続

1
CS実験第⼆
FPGAボードを⽤いた組込み回路の実装
- ⾃作周辺回路の接続 -
佐藤証 ⻄9-613
[email protected]
バスとは何か
 コンピュータシステム内で⼀つの信号線に複数の回路
が接続される構造
 バスの信号線
- アドレス
- データ
- ストローブ
 メモリや周辺回路にアドレスを割り付けて識別
- メモリマップ
- アドレス デコード
- チップセレクト
バス構造
回路1
回路2
回路3
回路4
2
標準的なバス構造
 アドレス、データ、ストローブは共通の信号線
 周辺回路はアドレスをデコードしてチップセレクトで選択
A[15:0]
ストローブ線で読み書き
チップセレクト:RAMを選択
00000000h〜0000FFFFh番地
A[31:0]
チップセレクト:パラレルI/Oを選択
C0000000h番地
信号は共通
3
MicroBlaze MCSのバス「I/Oバス」
 命令⽤とデータ⽤のバスが別々の構造
 I/Oモジュールは、データ⽤バスに接続
命令⽤バス
プログラムの書き込
み、読み出し時に使⽤
データ⽤バス
メモリデータや周辺回路の書き込み、読み出し時に使⽤
I/Oバス
ここに⾃作周辺回路を接
続する
4
MicroBlaze のI/Oバス信号
 アドレス、データ共に32ビット
 アドレスは、バイトごとに割り付ける
 データ配置は、LSB側が低いアドレスのリトルエンディアン
リトルエンディアン
MSB
LSB
バイト3
バイト2
バイト1
バイト0
3番地
2番地
1番地
0番地
ビックエンディアン
MSB
LSB
バイト0
バイト1
バイト2
バイト3
0番地
1番地
2番地
3番地
5
I/Oバスのタイミング
 クロックに同期して動作
 バイトイネーブルで書き込みバイトを選択
 IO_Ready信号でバスサイクルを終了
書き込みタイミング
バス・サイクル終了
読み出しタイミング
バス・サイクル終了
6
自作パラレルI/Oの接続
 パラレルI/Oを作成し7セグメントLEDとスイッチを接続
 8ビットの出⼒ポートに7セグメントLEDを接続
 4ビットの⼊⼒ポートに4個のスライドスイッチを接続
7
自作パラレルI/Oの詳細
 IO_Wtite_Data、IO_Read_Dataの下位8ビットのみ使⽤
 7セグLEDレジスタC0000000h番地を使⽤
 スイッチ⼊⼒は、C0000004h番地を使⽤
 バスサイクルは書き込み、読み出し共に2クロック
 7セグLEDレジスタは読み出しも可能
8
自作パラレルI/Oのプロジェクト
 作業フォルダ : C:/CS-Jikken/work/mcs_mypio
 プロジェクト名: mcs_mypio
 I/Oモジュール: UARTのみ使⽤
9
プロジェクトを作る
 今までと同様に新しいプロジェクトを作る
- Project name: stopwatch
- Project location: C:/CS-Jikken/work
- Create project Subdirectoryにチェック
10
プロジェクトの設定
 Add Source
- C:/CS-Jikken/Verilog-HDL/dai6sho
/mcs_mypio/HDL/mcs_mypio.v
- C:/CS-Jikken/Verilog-HDL/dai6sho/mcs_mypio/HDL/mypio.v
- Copy source into projectにチェック
 Add Existing IP (optional)
- 何も指定しない
 Add Constrains (optional)
- C:/CS-Jikken/Verilog-HDL/dai6sho
/mcs_mypio/HDL/mcs_mypio.ucf
- Copy Constraints files into projectにチェック
 Default Part
- xc6slx16csg324-3
 New Project Summary
- Finish
11
CORE Generator
 Project ManagerでIP Catalogを選択
 Embedded Processing→Processor→MicroBlaze MCS
12
MicroBlaze MCSの構成
 Component Name:mcs
 Instance Hierarchical Design Name:mcs_0
 「Enable IO Bus」にチェックを⼊れてI/Oバスを有効に
する
チェックを⼊れる
13
パラメータ設定
 UART
- Enable Transmitter: チェック
- Define Baud Rate: 115200
- Number of Data Bits: 8
チェックを⼊れる
14
mcs_mypioの論理合成
 「Run Synthesis」を実⾏
クリック
15
スクリプトの実行とbitファイルの生成
 Tcl Consoleからスクリプトを実⾏
- cd /CS-Jikken/work/mcs_mypio/mcs_pio.srcs
- Source sources_1/ip/microblaze1_4_0/microblaze_setup.tcl
 「Generate Bitstoream」をクリックしてbitファイルを⽣成
16
SDKの起動と実行
 ハードウェアプロジェクトの作成
- workspace “c:¥CS-Jikken¥work¥mcs_mypio¥SDK” → OK
- File → New → Project → Xilinx → Hardware Platform Specification → Next
- Target Hardware Specification
“C:¥CS-Jikken¥work¥mcs_mypio¥mcs_mypio.srcs
¥sources_1¥ip¥microblaze_mcs_v1_4_0¥mcs_sdk.xml” → Finish
 アプリケーションプロジェクトの作成
- File→New→Application Project
- Project name “mcs_mypio” → next
- Hello World → Finish
 プログラムの作成とコンパイル
- Project Exploler → mcs_mypio → src → “helloworld.c” を “mcs_mypio.c”に
rename
- “mcs_mypio.c”をダブルクリックしてソースを表⽰
- ”C:¥CS-Jikken¥dai6sho¥mcs_mypio¥SDK¥mcs_mypio¥src¥mcs_mypio.c”で
書き換えて保存
 プログラムの実⾏
- Xilinx Tools→Configure JTAG Setting→JTAG Cable Type: Digilent USB Cable
- Xilinx Tools→Program FPGA 次のファイルを指定してProgram
- Bitstream: “C:¥CS-Jikken¥work¥mcs_mypio¥mcs_mypio.runs¥impl_1
¥mcs_mypio.bit
- BMM file: “C:¥CS-Jikken¥work¥mcs_mypio¥mcs_mypio.srcs¥sources_1
¥ip¥microblaze_mcs_v1_4_0¥mcs_bd.bmm
17
バス・インターフェースの作成
 I/Oバスに⾃作周辺回路を複数組み合わせた時の問題点
- ⾃作周辺回路どうしの出⼒が競合
- アドレスが競合
 汎⽤アドレスデコーダを製作
- MicroBlaze MCSと⾃作周辺回路の中間に配置
- 以後「バス・インターフェース」と呼ぶ
18
バス・インターフェースの詳細
 バス・インターフェースは、各章で共通して使⽤できる
 I/Oバスで使⽤するアドレスは、C0000000h〜
C7FFFFFFh
 読み出しはデータセレクタを使⽤
 IO_Ready信号は、バス・インターフェス内で⽣成
19
バス・インターフェースの構造
 書き込み信号は、IO_AddressとIO_Write_Strobeか
ら⽣成
 読み出しデータは、IO_AddressによってRDATA0〜7
を切り替える
 IO_Ready信号は、Strobeを1クロック遅延して作成
IO_Write_Strobe または
IO_Read_Strobe信号を1クロック
遅延させてIO_Ready信号を作る
メモリからのReady信号と切り
替えて使⽤する
20
1/100秒ストップウォッチ
 00.00〜59.99秒まで計測
 BTN0ボタンでスタート/ストップ
 BTN1ボタンでリセット
21
ダイナミック点灯回路の組み込み
 3章で作成したダイナミック点灯回路をバス・インター
フェースに接続
 24ビットのダイナミック点灯回路レジスタを⽤意し、イ
ンターフェースを⾏う
22
ダイナミック点灯回路のレジスタ
 レジスタは、バイト単位での書き込みをサポート
 バイト0 -> DIG1, DIG0
 バイト1 -> DIG3, DIG2
 バイト3 -> EN, DP
23
ストップウォッチのプロジェクト
 作業フォルダ : C:/CS-Jikken/work/stopwatch
 プロジェクト名: stopwatch
 Microblaze MCS I/Oモジュール
- FIT1: タイマー割り込みに使⽤
- GPI1: スイッチ⼊⼒
24
プロジェクトの設定
 Add Source
- C:/CS-Jikken/Verilog-HDL/dai6sho
/stopwatch/HDL/stopwatch.v
- C:/CS-Jikken/Verilog-HDL/dai6sho/stopwatch/HDL/busif.v
- C:/CS-Jikken/Verilog-HDL/dai6sho/stopwatch/HDL/leddisp.v
- Copy source into projectにチェック
 Add Existing IP (optional)
- 何も指定しない
 Add Constrains (optional)
- C:/CS-Jikken/Verilog-HDL/dai6sho
/stopwatch/HDL/stopwatch.ucf
- Copy Constraints files into projectにチェック
 Default Part
- xc6slx16csg324-3
 New Project Summary
- Finish
25
プロジェクトを作る
 今までと同様に新しいプロジェクトを作る
- Project name: stopwatch
- Project location: C:/CS-Jikken/work
- Create project Subdirectoryにチェック
26
CORE Generator
 Project ManagerでIP Catalogを選択
 Embedded Processing→Processor→MicroBlaze MCS
27
MicroBlaze MCSの構成
 Component Name:mcs
 Instance Hierarchical Design Name:mcs_0
 「Enable IO Bus」にチェックを⼊れてI/Oバスを有効に
する
チェックを⼊れる
28
パラメータ設定(1)
 UART
- Enable Transmitter: チェック
- Define Baud Rate: 115200
- Number of Data Bits: 8
チェックを⼊れる
29
パラメータ設定(2)
 FIT
- Use Timer: チェック
- Number of Clock Between Strobes: 50000
- Generate Interrupt: チェック
チェックを⼊れる
0
チェックを⼊れる
30
パラメータ設定(3)
 GPI1
- Use GPI: チェック
- Number of Bits: 4
チェックを⼊れる
4ビット
31
stopwatchの論理合成
 「Run Synthesis」を実⾏
クリック
32
スクリプトの実行とbitファイルの生成
 Tcl Consoleからスクリプトを実⾏
- cd /CS-Jikken/work/stopwatch/stopwatch.srcs
- Source sources_1/ip/microblaze1_4_0/microblaze_setup.tcl
 「Generate Bitstream」をクリックしてbitファイルを⽣成
33
ソフトウェアによるチャタリング除去
 1msごとの割り込みで25msをカウント
 25msごとにスイッチ⼊⼒を読み込み、スイッチ変数を更新
 スイッチ変数の値でスイッチ⼊⼒を判断
34
ストップウォッチのプログラム
 1msごとのタイマー割り込み処理
-
1msごとの割り込みから10msをカウント
10msごとに1/100秒計の変数をカウントアップ(スタート時)
1msごとの割り込みから25msをカウント
25msごとにスイッチ⼊⼒ポートを読み込みスイッチ変数を更新
 1/100秒計変数の表⽰
 スイッチ変数値によるスタート/ストップ処理
35
SDKの起動と実行
 ハードウェアプロジェクトの作成
- workspace “c:¥CS-Jikken¥work¥stopwatch¥SDK” → OK
- File → New → Project → Xilinx → Hardware Platform Specification → Next
- Target Hardware Specification
“C:¥CS-Jikken¥work¥stopwatch¥stopwatch.srcs
¥sources_1¥ip¥microblaze_mcs_v1_4_0¥mcs_sdk.xml” → Finish
 アプリケーションプロジェクトの作成
- File→New→Application Project
- Project name “stopwatch” → next
- Hello World → Finish
 プログラムの作成とコンパイル
- ”C:¥CS-Jikken¥dai6sho¥stopwatch¥SDK¥stopwatch¥src¥IO_Mpdule.h”を
Project Explorer→stopwatch→srcにドラッグ&ドロップ
- File OperationウィンドウでCopy filesを選択してOK
- Project Exploler → stopwatch → src → “helloworld.c” を “stopwatch.c”に
rename
- “stopwatch.c”をダブルクリックしてソースを表⽰
- ”C:¥CS-Jikken¥dai6sho¥stopwatch¥SDK¥stopwatch¥src¥stopwatch.c”で書き
換えて保存
 プログラムの実⾏
-
Xilinx Tools→Configure JTAG Setting→JTAG Cable Type: Digilent USB Cable
Xilinx Tools→Program FPGA 次のファイルを指定してProgram
Bitstream: “C:¥CS-Jikken¥work¥stopwatch¥stopwatch.runs¥impl_1¥stopwatch.bit
BMM file: “C:¥C:¥CS-Jikken¥work¥stopwatch¥stopwatch.srcs¥sources_1
¥ip¥microblaze_mcs_v1_4_0¥mcs_bd.bmm
36
実験5
 P.236の第6章課題をやる
 スプリット機能付きストップウォッチの作成
37