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
© Copyright 2024 Paperzz