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