FPGAプログラミング大全Xilinx編第2版 シミュレーション検証 #5

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)を頭からやっていく5日目

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

実際にはFPGAプログラミング大全Xilinx編第2版は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|シミュレーション検証|
|06|未定|


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

### 今日のゴール
シミュレーション検証機能を試す



### Vavidoのシミュレーションを利用
単純回路だと波形表示でいけるがちゃんとしたCPUクラスでは現実的ではないため実機動作の前にシミュレーションを利用する
シミュレーションにテストデータを入力して出力を観測するのを「テストベンチ」と呼ぶらしい

### テストベンチの作成
昨日作ったLチカ回路のテストベンチを作ってみる

1. テストベンチのソースファイルの追加
画面左のAdd Sourcesから
![スクリーンショット 2022-12-05 220851.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45441/004a9855-a34f-2b05-be95-35677f7163cf.png)
Add or create simulation sourcesを選択
![スクリーンショット 2022-12-05 221051.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45441/7f7ae872-9dd7-393a-7cd7-11a0668db91b.png)
Create Fileから適当な名前で作る
![スクリーンショット 2022-12-05 221124.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45441/8d2c5e57-b94c-481d-656d-4173fd59e23c.png)

1. テストファイルを書く
とりあえずクロックを発生させて上がったり下がったりしているだけ
```
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 2022/12/05 22:16:14
// Design Name: 
// Module Name: test1
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////


module test1;
localparam STEP = 8;
reg CLK;
wire    [3:0]   led;

LED_Test LED_Test(
    .CLK100MHZ (CLK),
    .led    (led)
);

always begin
    CLK = 0;    #(STEP/2);
    CLK = 1;    #(STEP/2);
end
initial begin

end
endmodule

```

3\. 実際に動かす
画面左側のRun Simuration ->Run Behavioral Simurationから実行する
本によるとこのシミュレーションは一番検証精度は低いがスピードが早いやつらしい
![スクリーンショット 2022-12-05 222644.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45441/c4c2f053-8c9f-8958-a57a-31f402f2db46.png)

### 結果
とりあえずクロックが発生してそう
ただ入力先の信号の出力が正しくなさそうなのでそこは要調査
ただ単にクロック数が足りてないだけな気もしている
![スクリーンショット 2022-12-05 223201.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45441/394ee12c-87da-e28f-753b-fb433160b47f.png)


今日はここまで