玩轉Zynq連載25——[ex04] 基于Zynq PL的自定義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_ex03工程中led_controller.v模塊作為一個用戶自定義IP核,添加到Vivado的IP Catalog中,然后和標準IP核一樣,在Vivado工程中配置添加這個IP核。 參考文檔《玩轉Zynq-工具篇:用戶自定義IP核的創建與封裝.pdf》,創建一個閃爍頻率可設置的LED控制IP核。 參考文檔《玩轉Zynq-工具篇:用戶自定義IP核的移植.pdf》,將LED閃爍的IP核移植到應用工程中 如圖所示,雙擊IP Catalog下的led_controller_ip后,彈出IP配置對話框。可以修改設置輸入這個IP核的時鐘頻率(Clk Frequency)和LED閃爍頻率(Led Flash Frequency),完成配置直接點擊OK即可。 ![]() 如圖所示,在Project Manager à IP Source面板中,展開新創建的IP核,可以雙擊led_controller_0.veo打開例化模板,復制到我們的工程邏輯中,修改相應接口即可使用。 ![]() 本實例要實現的功能和zstar_ex03實例一樣,都是讓3個LED工作在不同的時鐘頻率下,但是控制它們產生相同的LED閃爍頻率,同步閃爍。和zstar_ex03實例的頂層源碼不同的是,這里例化的LED閃爍子模塊是我們自己創建的IP核,其輸入時鐘頻率和LED閃爍頻率的設定通過IP核的配置GUI即可完成,無需通過代碼傳遞這些參數。 如前面led_controller_0的IP添加,我們分別添加另外2個IP核led_controller_1和led_controller_2,設置它們的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內部的復位信號,低電平復位,高電平正常工作 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 參考文檔《玩轉Zynq-環境篇:XilinxPlatformCableUSB下載器使用指南.pdf》將“...\project\zstar_ex04\zstar_ex04\zstar.runs\impl_1”文件夾下的zstar.bit文件下載到STAR板上。可以看到3個LED指示燈同步閃爍起來,它們的頻率完全一致。 |