Xilinx Vivado的使用詳細介紹(5):調用用戶自定義封裝的IP核
Zedboard OLED Display Controller IP v1
介紹
Author:zhangxianhe
本文檔提供了快速添加,連接和使用ZedboardOLED v1.0 IP內核的說明。運行在ARM處理器系統上的測試應用程序用於通過其驅動程序的功能與IP進行通信。 Vivado設計套件被用作開發環境。硬件驗證是在Zedboard上完成的,然而,這個IP可以很容易地應用於其他主板或嵌入式系統。
平臺
硬件:Zedboard xc7z020clg484-1
軟件:Vivado 2016.3(適用於Vivado 2015.4及以上)
過程
A- Creating a project in Vivado to target the Zedboard
1. 雙擊Vivado2016.3 啟動Vivado;
2. 雙擊Create New Project來新建一個工程,點擊Next;
3. 在下一個窗口中輸入“test_oled”作為項目名稱,項目文件指定存儲在 “D:/oled_test”的目錄下,勾選Create project subdirectory,點擊Next;
4. 接下來,指定項目類型,使用默認選擇的RTL Project,並勾選Do not specify sources at this time。RTL代表寄存器傳送語言(Register Transfer Language),通過選擇這個選項,我們可以在以後靈活地添加/修改源文件,點擊Next;
5. 接下來,指定要測試項目的電路板,選擇Zedboard Zynq Evaluation and Development Kit,點擊Next然後Finish完成;
“新建項目”向導將關閉,剛剛創建的項目將在Vivado中打開。
B- Creating the ARM processor system using the IP Integrator.
1. 單擊Vivado左上方的Project Manager中的Create Block Design;
2. 輸入模塊的名稱,然後單擊OK,對於這個例子,使用名稱:system;
3. 點擊OK後,將會在Vivado中顯示一個空白框圖視圖圖形用戶界面。在圖中,我們將添加所需的硬件塊系統。
4. 現在,我們將添加包含ARM處理器的ZYNQ7 Processing System塊通過啟動Add IP向導來完成,或者可以在程序框圖空白處右擊選擇Add IP..,IP目錄窗口將會出現,顯示在這個設計中添加所有可能的IP;
向下滾動到底部或使用關鍵字zynq進行搜索,雙擊ZYNQ7 Processing System。 ZYNQ7處理系統塊已被放置在框圖視圖中。程序框圖中顯示的端口由目標開發板指定的該塊的默認設置定義。在綠色信息欄中單擊 Run Block Automation。確認processing_system7_0並確保選中Apply Board Preset,然後單擊OK。
這將為處理系統創建外部端口,並對這些端口應用物理約束,如下圖所示
C- Adding the ZedboardOLED IP to the IP repository
在進程導航窗格中,單擊Project Setting選項,選擇IP,然後單擊Add Repository 按鈕。瀏覽窗口打開,瀏覽到IP核的位置(D:\oled_test\tamu.edu_user_ZedboardOLED_1.0),然後單擊“Select”。
註意工具如何在目錄中檢測到新的IP,點擊Apply,然後OK。
這樣做後,就可以將ZedboardOLED_v1.0添加到當前項目的IP庫中,下一步是將其添加到塊設計中,並將其從一側連接到Zynq處理系統,並從另一側通過使用外部端口連接到OLED板塊。
D- Connecting the ZedboardOLED IP core
1.在程序框圖空白處右擊選擇Add IP..然後輸入“oled”,ZedboardOLED_V1.0將顯示出來,雙擊IP將其添加到塊設計中。
2.看到Designer Assistance現在可以在綠色的信息欄中找到,它將幫助把IP核連接到處理系統的AXI子系統,配置時鐘和復位,為IP分配基地址(0x43C00000),並為互連和同步添加必要的硬件;
點擊Run Connection Automation並選擇/ZedboardOLED_0/S00_AXI。保留Clock Connection設置為Auto,然後單擊OK。(默認選擇)。
單擊(Regenerate Layout)重新生成布局,程序框圖應該看起來類似於這個:
註意到Designer Assistance將AXI Interconnect和Processor System Reset自動添加進來了.將鼠標懸停在ZedboardOLED SDIN端口上,直到它變成鉛筆形狀,然後右擊並選擇Make External。(SCLK,DC,RES,VBAT,VDD)端口重復相同的過程。
3.右鍵單擊程序框圖上的任意位置,然後選擇Regenerate Layout(重新生成布局),這將整齊地組織設計中的塊。
最終的布局和如下所示的相似:
單擊Tools,選擇單擊Validate Design,檢查程序框圖是否有誤,結果直接點擊Ok。
4.在源窗格中,選擇系統框圖“system.bd”,右擊並選擇Generate Output Products,默認設置,直接點generate,運行結束後,點擊OK。
在源窗格中,選擇系統框圖“system.bd”,右擊並選擇Create HDL Wrapper,選擇第二項 Let Vivado manage Wrapper and auto-update,點擊OK,
現在我們通過AXI接口將IP連接到處理系統,下一步是將IP核的外部端口連接到OLED模塊的實際Zynq引腳。
5. 在Flow Navigator窗口中,從Project Manager部分選擇Add Sources。Add Sources對話框將打開。選擇 Add or Create Constraints。進行管腳約束。
點擊 Next,然後點擊 Create File, 選擇 XDC 作為文件類型然後輸入oled_constraints作為文件的名字。
點擊OK,點擊Finish創建文件並關閉對話框。
在Sources窗口中, 展開Constraints 文件夾並通過雙擊oled_constraints.xdc來打開新創建的XDC文件。
將下列行添加到約束文件中,或者可以從源文件復制它們文件包oled_constraints.xdc。
1 set_property PACKAGE_PIN U10 [get_ports DC] 2 set_property PACKAGE_PIN U9 [get_ports RES] 3 set_property PACKAGE_PIN AB12 [get_ports SCLK] 4 set_property PACKAGE_PIN AA12 [get_ports SDIN] 5 set_property PACKAGE_PIN U11 [get_ports VBAT] 6 set_property PACKAGE_PIN U12 [get_ports VDD] 7 set_property IOSTANDARD LVCMOS33 [get_ports DC] 8 set_property IOSTANDARD LVCMOS33 [get_ports RES] 9 set_property IOSTANDARD LVCMOS33 [get_ports SCLK] 10 set_property IOSTANDARD LVCMOS33 [get_ports SDIN] 11 set_property IOSTANDARD LVCMOS33 [get_ports VBAT] 12 set_property IOSTANDARD LVCMOS33 [get_ports VDD]
這將ZedboardOLED IP內核的外部端口連接到Zynq器件的特定引腳。特定引腳連接到Zedboard上的OLED模塊。按(Ctrl + S)保存約束文件。
E- Generating Bitstream
在 Flow Navigator窗口中的Program and Debug部分,單擊Generate Bitstream,將出現一個對話框,要求保存所做的修改,單擊Save保存;也可能會出現一個對話框,顯示“No Implementation Result Available”,單擊Yes運行綜合和實現。 生成比特流可能會在綜合後執行整個實現過程,單擊是以在出現提示時運行實現。 實現可能需要一段時間才能完成,具體取決於計算機的性能。
執行Generate Bitstream這個過程時首先會自動進行分析綜合和實現。(這裏也可以直接先點擊Run Synthesis進行綜合,然後點擊Run Implementation進行實現,然後再點擊Generate Bitstream生成比特流) 。完成後,可直接點Cancel.
F- Exporting hardware design to SDK
1.點擊 File > Export > Export Hardware, 確保勾選Include bitstream 選項
2.選擇File>Launch SDK,打開SDK,註意所有與設計相關的文件(包括IP)已經在上一步導出到SDK中,導出的資源中包括ZedboardOLED_v1_0 IP核的驅動。
G- Working with SDK
1.在SDK中, 選擇File > New > Application Project.
2. 在下一個窗口中, 輸入文件名以及默認如下參數:
點擊Next,在下一個窗口中,從可用模板中選擇Empty Application,然後單擊Finish。這將編譯BSD和相關的驅動程序。
3. 展開oled_test_bsp>ps7_cortexa9_v2_0>libsrc>zedboardoled_v1_0>src, 然後檢查ZedboardOLED.c和ZedboardOLED.h以實現與OLED屏幕一起使用的功能。
4.現在我們將編寫一個使用這些函數的簡單應用程序,擴展oled_test目錄,右擊src目錄,選擇New-> Source File,在下一個窗口中顯示出來,在源文件中輸入“mian.c”,然後點擊Finish。
復制並粘貼下面的C代碼到“main.c”中,點擊保存或點擊(Ctrl + S),這樣oled_test應用程序和它的BSP都會被自動編譯,生成可執行文件.elf文件。
1 int main(void){ 2 clear(); 3 print_message("OLED_Test_zhang",0); 4 print_message("NJUPT__xian_he_",1); 5 print_message("PS_And_ARM_PL_S",2); 6 print_message("Anniversary1229",3); 7 return (1); 8 }
Cick Project-> clean (in case you get any errors with the BSD).
H- Downloading the bitstream and running the application (Hardware verifications)
硬件準備:兩條USB線,一條連接 micro-usb cable between the PC and the PROG port of the board;另外一條 micro-usb cable between the PC and the UART port of the board,.打開Zedboard板的電源,打開電源之後POWER燈會亮;
1.選擇Xilinx Tools-> Program FPGA來下載Bitstream ( this will take few seconds ).
2.右擊oled_test 文件夾選擇Run As->Run Configurations, 按如下圖示配置,(註意STIDIO connection配置時端口號根據自己的電腦進行配置)。單擊Apply,然後點擊Run。即在ARM processor上運行oled_test application。
運行結果,在OLED屏幕上看到以下消息:
至此,此實驗完成。
嘗試不同的排版寫文檔。
如果有同學想要OLED IP核就評論我吧
Xilinx Vivado的使用詳細介紹(5):調用用戶自定義封裝的IP核