FPGAプログラミング大全Xilinx編第2版 第６章1 #10

FPGAに再入門しようと思いたち[FPGAプログラミング大全Xilinx編第2版](https://www.amazon.co.jp/FPGA%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%A4%A7%E5%85%A8-Xilinx%E7%B7%A8-%E7%AC%AC2%E7%89%88-%E5%B0%8F%E6%9E%97-%E5%84%AA/dp/4798063266/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=1S5G3UKPB55O9&keywords=FPGA%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%A4%A7%E5%85%A8Xilinx%E7%B7%A8%E7%AC%AC2%E7%89%88&qid=1669893715&qu=eyJxc2MiOiIwLjc2IiwicXNhIjoiMC4wMCIsInFzcCI6IjAuMDAifQ%3D%3D&sprefix=fpga%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%A4%A7%E5%85%A8xilinx%E7%B7%A8%E7%AC%AC2%E7%89%88%2Caps%2C151&sr=8-1)を頭からやっていく7日目

時期的にも良いので一人Advent Calendarで25日続ける

最終的に作ったCPUを使えるようにFPGAプログラミング大全Xilinx編第2版第6章をやってCPU+FPGAシステムに慣れる

### 25日終了時の目標
4004等の実CPUの実装

### 目次
| # | タイトル |
|:-:|:-:|
|   01|  [ツール導入](https://qiita.com/Gazyu/items/8f3797abf4ddc88ecacd) |
|  02 |  [実機テスト下準備](https://qiita.com/Gazyu/items/b59e0a1e023005bc02d5) |
|  03 |  [実機テスト](https://qiita.com/Gazyu/items/23ec4da6c241d95bfa8e) |
|04|[クロック利用](https://qiita.com/Gazyu/items/a653fe87023323f308de)|
|05|[シミュレーション検証](https://qiita.com/Gazyu/items/508370018465c164120b)|
|06|[TD4](https://qiita.com/Gazyu/items/08377deaa0413dd111cb)|
|07|[TD4とりあえず実装](https://qiita.com/Gazyu/items/721967444237a72f04e9)|
|07|[TD4メモリ実装](https://qiita.com/Gazyu/items/f18e19b48becbead6dd8)|
|09|TD4完成|
|10|第６章1|
|12|未定|

### 環境
【実装ボード】 [Digilent Artix-7 35T Arty FPGA 評価キット](https://japan.xilinx.com/products/boards-and-kits/arty.html#resources)
【OS】 Windows10
【IDE】 Vivado 2022.2

### 今日のゴール
第6章1を終わらせる


### 前準備
新しいプロジェクトを作る
XDC(制約ファイル)までを取り込み終わったところ
![スクリーンショット 2022-12-10 205046.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45441/5a3255ed-886c-7fb3-2ef4-af69a06f6b0b.png)



### IPインテグレート
1. 画面左のIP INTEGRATOR -> Create Block Design
![スクリーンショット 2022-12-10 205231.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45441/ff1393c1-78ca-a2b9-6e28-514b7b9c76b8.png)

1. デフォルト設定で作成
1. ![スクリーンショット 2022-12-10 205206.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45441/ee5747c7-cea4-5eae-7ed1-c4846b7fb109.png)

1. MicroBrazeを配置
Designの上バーの+を押すと追加するIPを指定するダイアログが出るので MicroBlazeを検索して追加
![スクリーンショット 2022-12-10 205510.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45441/7026dace-4c1f-a3bb-7127-086bcb4507be.png)

1. 各種設定
4.で追加するとウィンドウ内が変わるので画面上の Run Block Automation をクリック
![スクリーンショット 2022-12-10 205612.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45441/d2dcd41f-5399-8520-e231-9cc102a74b52.png)
設定Windowが出るので
    - Preset:Microcontroller
    - LocalMemory:32k
    - Debug Module:Debug & UART
    - Interrupt Controller:falseに
![スクリーンショット 2022-12-10 205700.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45441/bcd4aeb5-4738-c30c-b478-88039d491b17.png)
に設定
設定が正しく行われるとなにか色々と自動で追加される
![スクリーンショット 2022-12-10 210443.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45441/15e87474-f9be-f67b-d734-78fa8e8f17e5.png)

1. Clocing Wizardの設定
画面左下のClocing Wizardをダブルクリック
![スクリーンショット 2022-12-10 211202.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45441/791a135d-5060-e6e5-98c3-a2f8c00e0cef.png)
ダイアログが立ち上がるのでClocking Optionsをタブで選ぶ
![スクリーンショット 2022-12-10 213921.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45441/11a04b2d-f598-8621-5d84-38d078c7b7a6.png)
下部のPrimaryのInput Frequencyをマニュアル:100MHzに
SourceをSingle ended clock capable pinに

1. 入力ポートの接続とリセット接続
![スクリーンショット 2022-12-10 211202.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45441/8851e0dd-d21d-2a2a-7156-d6ff3d302c93.png)
reset、clk_in1の上で右クリック->Make Externalを実行
すると外部に端子ができる
![スクリーンショット 2022-12-10 211749.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45441/1bd96b0e-9dba-1757-dadf-f918ae7d09a5.png)

1. リセット配線
リセット生成IPのext_reset_in端子とreset_0をつなげる
リセット生成IPのext_reset_in端子にマウスカーソルを近づけると鉛筆アイコンになるのでそれでドラッグアンドドロップでreset_0に
![スクリーンショット 2022-12-10 212012.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45441/8d466991-4fe9-3d5e-036f-ea5837c6eadf.png)

1. GPIO追加&設定
Add IPから AXI GPIOを追加
![スクリーンショット 2022-12-10 212326.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45441/becc8082-f0ea-9d1d-5ce6-e523d219efd8.png)
追加できたらAXI GPIOをダブルクリック->IP Configurationから
ALL OutputsをONに、GPIO Widthを3に
![スクリーンショット 2022-12-10 212435.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45441/0ba2055a-dee0-b9e0-07c5-e2fcf5e53e53.png)
画面上部にまたRun Block Automationが表示されるのでクリック
![スクリーンショット 2022-12-10 212957.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45441/c6d8f582-f669-62d9-214f-ff03500c1159.png)
S_AXIにチェックを付けてOK
画面上のAXI_GPIOの中のGPIOの右の+をクリック
するとgpio_io_o[2:0]ができるのでまた右クリック->Make Externalを実行
最後まで生成できると下記のような図になる
![スクリーンショット 2022-12-10 213429.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45441/9270739e-17d9-6b6c-3280-9428b56953df.png)

1. ポート名の修正
制約ファイルのポート名と合わせないとダメらしい
修正するのは
    - gpio_io_o[2:0]、-> led
    - clk_in1_0 -> CLK100MHZ
    - reset_0 -> ck_rst
それぞれのピンを右クリック->External Port PropertiesをクリックするとメインWindowの方で修正できるようになるのでNameを制約ファイルと合わせる
![スクリーンショット 2022-12-10 214401.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45441/111b1e20-793c-f854-6d6e-2f912f3ee2a7.png)

1. 配線チェック
ここまでできたら画面上のValidate Designをクリックし回路チェックをする
問題なければ下記ダイアログが出る
![スクリーンショット 2022-12-10 214950.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45441/6f7a507f-8e7d-25bf-e509-cf9f30298938.png)


今日はここまで