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