賽靈思PLL的重配置_S6
PLL的重新配置就是可以隨時更改輸出時鍾的頻率,而不用重新在編譯,生成比特流文件,再下載到對應的器件中去,本文主要介紹PLL的重配置的一些背景,基礎知識,后續的文章來分析一下官方提供的相關文件怎么應用到我們的工程中。
撰寫本文的目的:由於項目中用到了這部分的知識,但是網上百度了很多,依然沒有自己想要的,故只能去官方網站尋求幫助,現將自己總結的東西貼出來,供大家下次參考,轉貼請注明出處,謝謝。首先提供歷程以及說明文檔的下載連接,引用官方。
PLL基礎知識介紹
----------參考Xilinx官方的文檔,在此表示感謝
/*******************************************************2017年5月8日 第一次撰寫 *****************************************/
一. 概述:Spatan-6 系列設備的時鍾管理單元(CMT)包括兩個DCM和一個PLL,它有一個很強大的功能是可以動態的配置相位、周期和可分頻時鍾的數值,該應用筆記詳細描述了重新配置PLL的必要點,而且提供相關的參考設計可用於用戶的工程中。在參考設計中,我們有意的使用CLKFBOUT作為反饋路徑,不支持CLKOUT作為反饋路徑。PLL的配置分為4個組,分別是分頻/倍頻組,相移組,鎖存組,過濾組。接下來就省略啦,這些都是翻譯官方的參考文檔的,最后自己取閱讀一遍。
二.
PLL的重新配置主要是通過PLL_DRP完成的,如下圖所示:

上圖是PLL的框圖,這里我簡單的介紹一下,輸入的時鍾經過D(可編程計數器實現倍頻或者分頻),PFD(相位偏移需要),CP(驅動電荷泵,我也不知道干嘛的。。。),LF(環路濾波器),VCO(電壓控制振盪器),和一個專用的計數器M(此計數器控制PLL的反饋時鍾,以實現大范圍頻率合成),最后生成6路時鍾,每一路需要單獨配置,圖中只畫了一個。
接下來是配置PLL的模塊划分圖,大概分成如下這幾部分:

上圖是PLL配置的系統框圖,實際應用中,user logic即是用戶邏輯,可認為是頂層文件,然后控制和PLL_DRP的這幾個接口既可以配置PLL了,PLL_ADV 和 PLL_DRP的另一側相連,以實現對PLL的配置,輸出的時鍾是一系列的時鍾信號,也就是我們的需要的時鍾了。官方提供的例程中,有兩組配置時鍾供我們測試。下面說明一下用戶側的幾個信號:SEN(狀態使能信號,一個clk),在時鍾檢測到SEN有效使,同時檢測SADDR的值,然后進行狀態1或者2的配置,SCLK和RST就不解釋了,不過官方提供的參考設計中,對時鍾信號采用了原語進行描述。
接下來看看PLL_DRP,對與我們用戶來說,可以不關注PLL_ADV這個端口,我們主要關注PLL_DRP這個端口怎么操作PLL_ADV即可,框圖如下所示:

上圖是官方的插圖,其實這這個模塊主要包含一個狀態機和ROM,狀態機用來配置PLL_ADV,而ROM中存放我們的計算好的數據以重新配置PLL,這是官方參考設計中的結構,要配置的話只要把rom對應的地址值取出來即可。
接下來我們對PLL_DRP中的狀態機進行分析,這里我直接貼出來自己畫的狀態轉移圖,僅供參考:

簡單說明:上電初始化時,會自動的等待一個locked,接着在wait_sen的狀態等待SEN,並在判斷SEN有效時,SADDR的值是多少,然后進行判斷,選擇讀取rom的地址是從多少開始,,然后配置相關的寄存器,總共有23個寄存器(見附錄),配置完23個寄存器之后,等待鎖存locked信號有效時(高有效),就代表配置已經ok了。
需要工程文件請向博主索要,如果有什么疑問,歡迎大家討論,轉貼請注明出處,謝謝。
---------cofin_add
