玩轉Zynq連載25——[ex04] 基于Zynq PL的自定義IP核集成 更多資料共享 騰訊微云鏈接: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 本實(shí)例將zstar_ex03工程中led_controller.v模塊作為一個(gè)用戶(hù)自定義IP核,添加到Vivado的IP Catalog中,然后和標準IP核一樣,在Vivado工程中配置添加這個(gè)IP核。 參考文檔《玩轉Zynq-工具篇:用戶(hù)自定義IP核的創(chuàng )建與封裝.pdf》,創(chuàng )建一個(gè)閃爍頻率可設置的LED控制IP核。 參考文檔《玩轉Zynq-工具篇:用戶(hù)自定義IP核的移植.pdf》,將LED閃爍的IP核移植到應用工程中 如圖所示,雙擊IP Catalog下的led_controller_ip后,彈出IP配置對話(huà)框?梢孕薷脑O置輸入這個(gè)IP核的時(shí)鐘頻率(Clk Frequency)和LED閃爍頻率(Led Flash Frequency),完成配置直接點(diǎn)擊OK即可。 ![]() 如圖所示,在Project Manager à IP Source面板中,展開(kāi)新創(chuàng )建的IP核,可以雙擊led_controller_0.veo打開(kāi)例化模板,復制到我們的工程邏輯中,修改相應接口即可使用。 ![]() 本實(shí)例要實(shí)現的功能和zstar_ex03實(shí)例一樣,都是讓3個(gè)LED工作在不同的時(shí)鐘頻率下,但是控制它們產(chǎn)生相同的LED閃爍頻率,同步閃爍。和zstar_ex03實(shí)例的頂層源碼不同的是,這里例化的LED閃爍子模塊是我們自己創(chuàng )建的IP核,其輸入時(shí)鐘頻率和LED閃爍頻率的設定通過(guò)IP核的配置GUI即可完成,無(wú)需通過(guò)代碼傳遞這些參數。 如前面led_controller_0的IP添加,我們分別添加另外2個(gè)IP核led_controller_1和led_controller_2,設置它們的LED閃爍頻率(Led Flash Frequency)都是1(Hz),但輸入時(shí)鐘頻率分別為50000(50MHz)和100000(100MHz)。然后例化到工程頂層源碼中。 本實(shí)例工程源碼如下。 module zstar( input ext_clk_25m, //外部輸入25MHz時(shí)鐘信號 output[2:0] led //LED指示燈接口 ); //------------------------------------- wire clk_25m; //PLL輸出25MHz時(shí)鐘 wire clk_50m; //PLL輸出50MHz時(shí)鐘 wire clk_100m; //PLL輸出100MHz時(shí)鐘 wire sys_rst_n; //PLL輸出的locked信號,作為FPGA內部的復位信號,低電平復位,高電平正常工作 clk_wiz_0 uut_clk_wiz_0 ( // Clock in ports .clk_in1(ext_clk_25m), // input clk_in1 // Clock out ports .clk_out1(clk_25m), // output clk_out1 .clk_out2(clk_50m), // output clk_out2 .clk_out3(clk_100m), // output clk_out3 // Status and control signals .reset(1'b0), // input reset .locked(sys_rst_n)); // output locked //------------------------------------- //25MHz時(shí)鐘進(jìn)行分頻閃爍 led_controller_0 uut_led_controller_clk25m ( .clk(clk_25m), // input wire clk .rst_n(sys_rst_n), // input wire rst_n .sled(led[2]) // output wire sled ); //------------------------------------- //50MHz時(shí)鐘進(jìn)行分頻閃爍 led_controller_1 uut_led_controller_clk50m ( .clk(clk_50m), // input wire clk .rst_n(sys_rst_n), // input wire rst_n .sled(led[1]) // output wire sled ); //------------------------------------- //100MHz時(shí)鐘進(jìn)行分頻閃爍 led_controller_2 uut_led_controller_clk100m ( .clk(clk_100m), // input wire clk .rst_n(sys_rst_n), // input wire rst_n .sled(led[0]) // output wire sled ); endmodule 參考文檔《玩轉Zynq-環(huán)境篇:XilinxPlatformCableUSB下載器使用指南.pdf》將“...\project\zstar_ex04\zstar_ex04\zstar.runs\impl_1”文件夾下的zstar.bit文件下載到STAR板上?梢钥吹3個(gè)LED指示燈同步閃爍起來(lái),它們的頻率完全一致。 |