Verilog基礎之十七、鎖相環(huán)PLL
? 一、前言
1.1 背景
????若將一個FPGA工程看做一個人體,時鐘的重要性絲毫不亞于心臟對于人體的重要性,時鐘的每一個周期對于工程都是一次全面的狀態(tài)更新,因此,時鐘的有效使用重要性不言而喻。
????以賽靈思7系列的器件為例,在之前的文章Xilinx之7系列時鐘資源與時鐘架構(gòu)?中,第三節(jié)時鐘管理單元 提到了7系列時鐘管理單元CMT,CMT包含了MMCM和PLL,PLL的功能為MMCM功能的子集,可實現(xiàn)時鐘網(wǎng)絡去偏斜,頻率合成,去抖動。
1.2 PLL結(jié)構(gòu)
?????根據(jù)賽靈思官網(wǎng)用戶手冊,PLL的結(jié)構(gòu)如下圖

????PLL主要的組成部分有圖中3個紅色框:鑒相器PFD,電荷泵CP和低通濾波器LF,壓控振蕩器VCO。實現(xiàn)的流程為VCO自身輸出一個時鐘CLKFBOUT反饋到PFD,PFD對輸入時鐘和反饋時鐘的相位進行比較,將比較的相位差傳輸?shù)紺P和LF,LF主要用于濾除高頻干擾信號。CP和LF會將結(jié)果轉(zhuǎn)換成電壓信號,電壓信號控制VCO的輸出頻率。在PLL達到穩(wěn)定狀態(tài)后,輸出頻率FvcoH和輸入頻率Fclkin滿足如下關(guān)系。

?????對于例化PLL的原語有兩種:PLLE2_BASE,PLLE2_ADV,PLLE2_ADV的端口更多,功能更豐富。

在Vivado的Language Templates中搜索PLL可查找到7系列的4個型號Atrix,都具有PLLE2_BASE,PLLE2_ADV兩種類型,類似的MMCM也有兩種BASE和ADV兩種類型

以PLLE2_ADV為例,各端口說明如下,其中,CLKOUT0-CLKOUT3支持PLL/MMCM間的級聯(lián)連接。

二、工程設計
? ?下面展示使用原語例化和IP核兩種方式使用PLL,用CLKOUT0-CLKOUT3 4路輸出示例,其中PLL IP核的配置與例化的PLL相同。
2.1 PLL IP核配置

2.2 設計代碼
2.3 測試代碼
2.4 仿真結(jié)果
分別對比CLKOUT0-CLKOUT3與CLKOUT0_ip-CLKOUT3_ip,兩種情況下4個輸出端口的波形相同,符合預期

輸入?yún)⒖夹盘柷袚Q,下圖中CLKOUT1-CLKOUT3在左右兩側(cè)的頻率不同,即進行了輸入?yún)⒖夹盘柕那袚Q,左側(cè)波形松散,右側(cè)密實,即切換后參考信號頻率更高

2.5 常見問題
1)使用原語例化PLL時布線失敗,報錯如下圖,

DRC error內(nèi)容詳細如下
通過該信息知設計的VCO的為300MHZ,不在允許的【800-1600MHZ】范圍內(nèi),這是由于CLKIN1和CLKFBOUT_MULT設置不合理,CLKIN1為100MHZ,CLKFBOUT_MULT為3,因此VC0為300MHZ,將CLKFBOUT_MULT值改大即可

2)進行仿真,點擊運行,彈出“Finish Vsim”窗口

內(nèi)容如下,即仿真文件中在復位信號RST=1時進行了參考信號的切換,更改測試文件使CLKINSEL在RST為0時進行切換