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核就評論我吧