在以往的項目中,要控制FPGA內部某個信號的值,往往是通過配置寄存器來實現的。其實Xilinx還提供了一個叫VIO的core,可以動態改變FPGA內部某個信號的值,但是一直沒有用過,一來對于以前的項目來說,沒有應用場景,通過寄存器就可以配置了;二來感覺這個東西不是很“實用”。
背景
在項目中,本來是通過PCIe來配置寄存器的,但是由于某些原因PCIe接口一直有問題,無法配置。FPGA內實現了一個功能,可以根據寄存器的值來執行不同的操作,這個時候就發現無法上板測試,因為沒有辦法配置寄存器。這個時候突然想到了VIO這個core。
VIO介紹
VIO 這個core其實非常的簡單,沒有什么太多需要介紹的,可以參考 PG159 ,這里做一個簡單的說明??驁D如下圖所示:
該模塊就是定義了一些輸入和輸出,其中可以定義的輸入和輸出信號的個數最多為256個,每個信號的位寬最大為256bit。在例化的時候只需要確定需要監控的信號個數,以及每個信號的位寬;或者需要控制的信號個數和每個信號的位寬即可。
場景應用
比如我們有如下一個場景,A模塊輸出一個控制信號a2b_en給B模塊,從而控制B模塊的工作方式。但是A模塊目前還不能產生該信號,筆者的項目中,A模塊就是PCIe模塊,由于沒有調通,還無法通過配置來控制a2b_en信號。
這個時候,我們例化了一個VIO模塊,只用它的輸出,并將這個輸出連接到B模塊的輸入信號a2b_en上即可。
在加載后,vivado會彈出調試窗口,通過該窗口,我們可以看到控制信號a2b_en,這個時候就可以設置它的值為0還是為1.
當然上述例子中我們只是用了它的output,其input的使用就和ila有點類似了。
總結
當我們需要動態的修改FPGA內某些寄存器的值時,除了通過軟件寄存器配置的方式,還可以通過例化VIO的方式來實現修改。另外VIO和ila一樣也可以監控內部信號的值,當我們只是簡單的觀測下某個信號時,可以采用VIO,因為相比ila,它不需要緩存,當然對于復雜的問題分析,ila還是更勝一籌。
-
FPGA
+關注
關注
1604文章
21339瀏覽量
594026 -
寄存器
+關注
關注
30文章
5092瀏覽量
117911 -
Xilinx
+關注
關注
70文章
2121瀏覽量
119511 -
PCIe
+關注
關注
13文章
1095瀏覽量
81066 -
VIO
+關注
關注
0文章
10瀏覽量
9952
發布評論請先 登錄
相關推薦
評論