玩轉Zynq連載23——用戶自定義IP核的創建與封裝 更多資料共享 騰訊微云鏈接:https://share.weiyun.com/5s6bA0s 百度網盤鏈接:https://pan.baidu.com/s/1XTQtP5LZAedkCwQtllAEyw 提取碼:ld9c ![]() 騰訊微云鏈接:https://share.weiyun.com/5s6bA0s 百度網盤鏈接:https://pan.baidu.com/s/1XTQtP5LZAedkCwQtllAEyw 提取碼:ld9c 本節以zstar_ex04文件夾下的led_controller_ip工程為例,演示如何創建一個簡單的LED閃爍控制模塊的IP核。 創建一個用戶自定義IP核,只需要以下3個步驟即可。 首先我們在文件夾.../project/zstar_ex04/led_controller_ip文件夾下創建一個新的工程,增加一個名為led_controller.v的verilog源碼文件到這個工程中。源碼如下。 module led_controller( input clk, //時鐘信號 input rst_n, //復位信號,低電平有效 output sled //LED指示燈接口 ); parameter CLK_FREQUENCY = 25000; //clk的時鐘頻率,KHz parameter LED_FLASH_FREQUENCY = 1; //LED輸出的閃爍頻率,Hz `define MAX_CNT (((CLK_FREQUENCY/LED_FLASH_FREQUENCY)*1000)-1) //cnt分頻計數最大值 `define MAX_CNT_DIV2 (`MAX_CNT/2-1) //cnt分頻計數最大值的一半 //------------------------------------- reg[31:0] cnt; //計數器 //cnt計數器進行循環計數 always @ (posedgeclk or negedgerst_n) if(!rst_n) cnt<= 32'd0; else if(cnt< `MAX_CNT) cnt<= cnt+1'b1; else cnt<= 32'd0; assign sled = (cnt< `MAX_CNT_DIV2) ? 1'b1:1'b0; endmodule 注意這個源碼實現在時鐘和復位信號下,產生固定頻率的1個輸出LED指示燈閃爍。時鐘頻率CLK_FREQUENCY和LED閃爍頻率LED_FLASH_FREQUENCY都定義為參數(parameter),一會制作IP核的時候都可以配置為GUI供調用IP的用戶手動設定。注意,類似的希望讓用戶可以在GUI上設定的參數,在源碼中一定要定義為parameter。 如圖所示,該工程中只包含led_controller.v源碼文件。創建好工程并添加好工程源碼后,建議對工程進行必要的編譯,以避免任何的語法錯誤或者與所支持器件家族有任何不兼容的錯誤。 ![]() 如圖所示,點擊工程菜單Tools à Create and Package IP…。 ![]() 彈出Create and Package IP的第一個頁面,點擊Next。 彈出如圖所示的Package Options選擇對話框,勾選Package your current project選項,然后點擊Next。 ![]() 如圖所示,彈出IP路徑設置對話框,IP location路徑建議設置和源碼所在路徑完全一致(通常為工程所在目錄下的…/zstar.srcs/source_1/new文件夾)。設置好繼續點擊 Next。 ![]() 如圖所示,點擊Finish。 ![]() 此時,在工程主界面中,如圖所示,右側的Sources à Design Sources下增加了IP-XACT文件夾,展開后,可以看到新增了一個component.xml的文件,該文件就對應了圖右側的Package IP –led_controller頁面,它存儲當前新創建IP核的相關配置信息。
![]() 圖 工程主界面 如圖所示,Package IP –led_controller的第一個配置頁面名為Identification,即用戶定制IP核相關的配置信息,如IP核供應商(Vendor)、庫名稱(Library)、IP核名稱(Name)、版本號(Version)、IP核顯示名稱(Display name)、描述(Description)、供應商顯示名稱(Vendor display name)、公司網址(Company url)等。特別提醒大家別忽略了最下面的Categories項,默認是空白的,若點擊右側的小加號,可以增加一個名稱,例如本實例增加了一個名為UserIP的名稱選項,將來生成的用戶定制IP核在我們的IP核配置面板中將會歸類到名為UserIP類別的文件夾下。 ![]() 如圖所示,Compatibility頁面其實在我們剛剛創建這個工程選擇好器件家族時就已經確定了,即設定該IP核所支持的器件家族(Family)。
![]() 圖 Compatibility配置頁面 圖 File Groups配置頁面 如圖所示,Customization Parameters配置頁面羅列源碼中所有可配置的參數(parameter所定義的),大家可以雙擊這些參數進一步配置。
![]() 圖 Customization Parameters配置頁面 如我們雙擊CLK_FREQUENCY參數所在行,彈出如圖所示的配置頁面。該配置頁面中,我們可以配置該參數是否在GUI中可見(Visible in Customization GUI)、是否顯示名稱(Show Name)等信息,用戶可以根據不同參數的實際情況設定。 ![]() 如圖所示,Ports and Interfaces配置頁面顯示IP核的對外接口。 ![]() 如圖所示,Addressing and Memory配置頁面則是針對含有總線接口,并且具有多個寄存器需要尋址的IP核,我們的IP核則不需要,所以是空白的。 ![]() 如圖所示,Customization GUI配置頁面則顯示當前接口在GUI上的layout和preview信息。 ![]() 最后,如圖所示,這是Review and Package配置頁面,可以回顧上面的一些設置,并且回去做相應的修改。點擊Package IP可以生成IP。
![]() 圖 Review and Package配置頁面 至此,IP核已經配置并封裝完成。 如圖所示,在Project Manager面板中,若點擊Package IP則可以回到IP核的配置頁面做修改。若點擊IP Catalog則可以添加IP核。
![]() 圖 Project Manager面板 如圖所示,打開IP Catalog后,我們可以看到剛剛定義的用戶IP核led_controller_v1_0已經出現在了UserIP文件夾下面。 ![]() |