HDL/FPGA學習筆記二十五:Vivado PLL IP核的使用

萬能的小黑Alex發表於2020-10-22

一、PLL IP核配置

當我們需要用到分頻或者倍頻的時候,就需要使用Vivado中的 PLL IP核來獲得我們想要的時脈頻率。下面簡單說明一下如何配置PLL IP核。

1、查詢 PLL IP核

在這裡插入圖片描述
2、指定用於分頻的輸入頻率

在這裡插入圖片描述
3、設定輸出頻率、相位以及佔空比

在這裡插入圖片描述
4、設定locked訊號的名字

Locked訊號是用來觀察pll輸出時鐘是否和輸入時鐘鎖定。當鎖定時,這個Locked訊號就變為高電平。

在這裡插入圖片描述
5、如果需要,可以在此對之前的設定進行修改並覆蓋

在這裡插入圖片描述
詳細還可以參考這篇文章:

https://blog.csdn.net/weixin_42151221/article/details/103351855

二、例項

1、RTL程式碼

module pll_test(
 	input       sys_clk,            //system clock 50Mhz on board
 	input       rst_n,             //reset ,low active
 	output      clk_out           //pll clock output J8_Pin3
    );
    
 wire        locked;


/PLL IP call
clk_wiz_0 clk_wiz_0_inst
   (
    .clk_in1(sys_clk),            // IN 50Mhz
    // Clock out ports
    .clk_out1(),                // OUT 200Mhz
    .clk_out2(),               // OUT 100Mhz
    .clk_out3(),              // OUT 50Mhz
    .clk_out4(clk_out),    // OUT 25Mhz	 
    // Status and control signals	 
    .reset(~rst_n),        // pll reset, high-active
    .locked(locked));     // OUT

 endmodule

2、模擬程式

`timescale 1ns / 1ps

module vtf_pll_test;
	// Inputs
	reg sys_clk;
	reg rst_n;

	// Outputs
    wire clk_out;

	// Instantiate the Unit Under Test (UUT)
	pll_test uut (
		.sys_clk(sys_clk), 		
		.rst_n(rst_n), 
		.clk_out(clk_out)
	);

	initial begin
		// Initialize Inputs
		sys_clk = 0;
		rst_n = 0;

		// Wait 100 ns for global reset to finish
		#100;
          rst_n = 1;        
		// Add stimulus here
	 end
   
    always #10 sys_clk = ~ sys_clk;   //5ns一個週期,產生50MHz時鐘源
   
endmodule

3、模擬結果

在這裡插入圖片描述

可以看到,當輸出頻率穩定之後,locked訊號會拉高。一般在使用的時候,都會把locked訊號作為使用該輸出時鐘的模組的復位訊號,因為此時PLL輸出給該模組的時鐘才算穩定,才預示著真正可以開始正常工作了。

相關文章