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 2025 Paperzz