玩轉(zhuǎn)Zynq連載25——[ex04] 基于Zynq PL的自定義IP核集成 更多資料共享 騰訊微云鏈接:https://share.weiyun.com/5s6bA0s 百度網(wǎng)盤鏈接:https://pan.baidu.com/s/1XTQtP5LZAedkCwQtllAEyw 提取碼:ld9c 騰訊微云鏈接:https://share.weiyun.com/5s6bA0s 百度網(wǎng)盤鏈接:https://pan.baidu.com/s/1XTQtP5LZAedkCwQtllAEyw 提取碼:ld9c 本實例將zstar_ex03工程中led_controller.v模塊作為一個用戶自定義IP核,添加到Vivado的IP Catalog中,然后和標準IP核一樣,在Vivado工程中配置添加這個IP核。 參考文檔《玩轉(zhuǎn)Zynq-工具篇:用戶自定義IP核的創(chuàng)建與封裝.pdf》,創(chuàng)建一個閃爍頻率可設(shè)置的LED控制IP核。 參考文檔《玩轉(zhuǎn)Zynq-工具篇:用戶自定義IP核的移植.pdf》,將LED閃爍的IP核移植到應(yīng)用工程中 如圖所示,雙擊IP Catalog下的led_controller_ip后,彈出IP配置對話框。可以修改設(shè)置輸入這個IP核的時鐘頻率(Clk Frequency)和LED閃爍頻率(Led Flash Frequency),完成配置直接點擊OK即可。 如圖所示,在Project Manager à IP Source面板中,展開新創(chuàng)建的IP核,可以雙擊led_controller_0.veo打開例化模板,復(fù)制到我們的工程邏輯中,修改相應(yīng)接口即可使用。 本實例要實現(xiàn)的功能和zstar_ex03實例一樣,都是讓3個LED工作在不同的時鐘頻率下,但是控制它們產(chǎn)生相同的LED閃爍頻率,同步閃爍。和zstar_ex03實例的頂層源碼不同的是,這里例化的LED閃爍子模塊是我們自己創(chuàng)建的IP核,其輸入時鐘頻率和LED閃爍頻率的設(shè)定通過IP核的配置GUI即可完成,無需通過代碼傳遞這些參數(shù)。 如前面led_controller_0的IP添加,我們分別添加另外2個IP核led_controller_1和led_controller_2,設(shè)置它們的LED閃爍頻率(Led Flash Frequency)都是1(Hz),但輸入時鐘頻率分別為50000(50MHz)和100000(100MHz)。然后例化到工程頂層源碼中。 本實例工程源碼如下。 module zstar( input ext_clk_25m, //外部輸入25MHz時鐘信號 output[2:0] led //LED指示燈接口 ); //------------------------------------- wire clk_25m; //PLL輸出25MHz時鐘 wire clk_50m; //PLL輸出50MHz時鐘 wire clk_100m; //PLL輸出100MHz時鐘 wire sys_rst_n; //PLL輸出的locked信號,作為FPGA內(nèi)部的復(fù)位信號,低電平復(fù)位,高電平正常工作 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時鐘進行分頻閃爍 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時鐘進行分頻閃爍 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時鐘進行分頻閃爍 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 參考文檔《玩轉(zhuǎn)Zynq-環(huán)境篇:XilinxPlatformCableUSB下載器使用指南.pdf》將“...\project\zstar_ex04\zstar_ex04\zstar.runs\impl_1”文件夾下的zstar.bit文件下載到STAR板上。可以看到3個LED指示燈同步閃爍起來,它們的頻率完全一致。 |