# Tutorial: ILA with PYNQ
以下展示如何使用ILA並讀取PYNQ環境下產生的訊號。
## 環境
+ vivado 2019.1

+ PYNQ
## 實現
以下使用SPI module做示範。
### 1. 加入debug probe
在目標訊號右鍵並選擇debug。

點選"Run Connection Automation",以自動生成ILA probe。


詳細I【A設定可進入ILA probe設定。

接著生成bitstream並放入Jupyter。
### 2. Run IP
載入bitsream as overlay。 並完成IP初始化,注意需先將overlay載入,Hardware Manerger才看的到ILA。
```python=
from pynq import Overlay
import time
import numpy as np
from pynq.lib import AxiGPIO
ol = Overlay("0321.bit")
def PYNQ_SPIWrite(x, y):
# PYNQ_SPIWrite(‘007’, ‘08’)
ADI9361_Conf_comm = int(x + y, 16)+2**24+2**23 #int('123')=123
SPI_channel.write(0x0, mask)
SPI_channel.write(ADI9361_Conf_comm, mask) #SPIWrite
SPI_channel.write(0x0, mask)
print(hex(ADI9361_Conf_comm))
print(x)
def PYNQ_SPIRead(x):
# PYNQ_SPIRead(‘007’)
ADI9361_Conf_comm = int(x + '00', 16) + 2**24
SPI_channel.write(0x0, mask)
SPI_channel.write(ADI9361_Conf_comm, mask) #SPIWrite
SPI_DO = SPI_RD_Channel.read()
SPI_DO = hex(SPI_DO)
print(SPI_DO)
mask = 0xffffffff
SPI_ip = ol.ip_dict['axi_to_gpio']
SPI_channel = AxiGPIO(SPI_ip).channel1
```
```python=
i=0
while i<5:
PYNQ_SPIWrite('00'+str(i), 'AA')
i=i+1
```
本測試中傳送的封包如下圖

### 3. 使用ILA in Vivado
確保usb接上後並打開Hardware Manerger,並Open target,理論上jtag接上就能看到chip name。
改名後Hardware Device Properties中Programming file可能會跑掉,須手動指向為剛剛生成的bitstream file. 有時ILA報錯也是因為probes file檔案指向錯誤,重新選取正確的.itx file即可。

理想上這時就可以看到剛剛設定的ILA probe,若沒有可以先執行一次模組,如先對SPI發送一組資料。

如下圖可以設定trigger,但因這邊ila深度僅開1024bit,trigger位置10,因此只能擷取到第一筆SPI packge。

### 使用邏輯分析儀驗證
這邊將同一bitstream中的SPI訊號透過constrain file將腳位輸出到PMOD,並透過外接邏輯分析儀驗證ILA及PMOD輸出訊號結果。
詳細邏輯分析儀設定這邊不贅述。

因這邊邏輯分析儀深度為512KB,並有設置data filter,因此可正確抓取所有SPI package。
## Reference
+ NCU-CE, SDR LAB
+ http://www.pynq.io/
+ Vivado Design Suite Tutorial - Embedded Processor Hardware Design(UG940)
###### tags: `Zedboard`
>jessest94106@g.ncu.edu.tw
Department of Space Science & Engineering
Center for Astronautical Physics & Engineering
National Central University, Taiwan
[name=PieappleJ] [time=Sun, Mar 23, 2022]