PYNQ-PRIO是一個介紹如何利用FPGA部分可重配置特性和PYNQ框架提供的方便的API,對FPGA分時復用,提高FPGA靈活性的項目。可重配置是指在一個FPGA工程中,劃分了靜態(tài)邏輯部分和動態(tài)邏輯部分,靜態(tài)邏輯部分是指在運行過程中邏輯不變的部分,動態(tài)邏輯部分是指在運行過程中可以根據(jù)需要下載特定比特流文件實現(xiàn)不同邏輯的部分,在工作時,修改某一動態(tài)邏輯部分不會對靜態(tài)邏輯部分和其他動態(tài)邏輯部分造成影響,實現(xiàn)了FPGA的功能上的分時復用。
上圖為工程項目示意圖。通過軟硬件劃分,在PS端中負責Linux和通信,PL端例化了6個PR(Partitial Reconfiguration)塊。每個塊中有GPIO、uart和IIC等幾種不同的RM(Reconfiguration Module),它們通過各自的partitial bitstream下載。動態(tài)邏輯部分和靜態(tài)邏輯部分使用分離器保證它們互不影響,并在動態(tài)邏輯部分下載完成后對下載好的部分進行復位。
此項目中在PYNQ框架下有兩種驅動這些IP的方式:一是直接使用PYNQ提供的API操作overlay里面的IP,二是將這些IP通過DTS(Device Tress Source)注冊到linux sysfs中,然后調用linux提供的驅動。
快速開始
運行下面這條命令即可快速安裝:
sudo -H pip3 install git+https://github.com/Siudya/PYNQ-PRIO.git
項目演示
1 、 使用pynq API的方法:
打開~/prio/uart.ipynb,前面一段代碼是UART的驅動程序和必要的功能代碼,不是本文重點請讀者自己研讀。
接下來就是下載bit文件。首先下載靜態(tài)邏輯bit文件,靜態(tài)bit文件中的PR部分是默認的RM。然后下載PR的bit文件。注意,下載一個PR的bit文件后要立刻例化一個驅動實例,這是因為每個PR的bit文件所對應的hwh文件中其他PR部分都使用默認RM,但是下載一個PR的bit文件并不會影響其他PR和靜態(tài)邏輯。
然后可以測試一下兩個UART的狀態(tài),在這里我們并沒有開啟中斷。
下一步我們測試兩個串口的收發(fā)。用杜邦線將uart1的TX(Arduino的Pin 9)和uart3的RX(Arduino的Pin 34),uart1的RX(Arduino的Pin 8)和uart3的TX(Arduino的Pin 35)連接起來,運行這段代碼,可以看到信息被正確地收發(fā)了。
接下來我們試試含中斷的收發(fā)。首先仍然是例化實例,不過在這里我們要從overlay.interrupts_pins中讀取每個uart的中斷引腳,然后初始化uart實例。
利用asyncio庫和中斷,我們可以實現(xiàn)異步收發(fā)。
2 、使用linux sysfs API的方法:
打開~/prio_linux/uart_linux.pynb
首先和上面使用pynq的API的方法一樣,首先下載靜態(tài)邏輯的bit文件,再下載PR的bit文件。但是不同的是同時注冊了對應的dtbo到linux系統(tǒng)中。dtbo由dtso編譯而來,dtso是描述設備樹的文件,關于它的編寫參閱以下鏈接:
https://www.raspberrypi.org/documentation/configuration/device-tree.md
注冊完成后可以直接在/dev下看到這兩個uart模塊。然后可以使用linux自帶的serial庫調用它們。
這個項目中我們利用了FPGA的部分可重構的特性,實現(xiàn)了運行中的部分邏輯的動態(tài)轉換。另外我們可以看到利用PYNQ提供的API,可以輕松注冊設備到Linux系統(tǒng),方便了其他程序對我們自定義IP的使用。
審核編輯 :李倩
-
FPGA
+關注
關注
1630文章
21796瀏覽量
605150 -
API
+關注
關注
2文章
1510瀏覽量
62278 -
PYNQ
+關注
關注
4文章
62瀏覽量
2920
原文標題:PYNQ經(jīng)典項目分享| 可重配置IO
文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論