首先我們做一個模塊,輸入信號T,代表輸出時鐘周期,輸出時鐘周期嚴格等于T,對于熟悉FPGA的小伙伴應該很容易。下面是小編的代碼。簡單的說就是建立一個狀態(tài)機,對輸入周期參數(shù)在產(chǎn)生時鐘的每個周期,第一時刻更新值,然后進入下一個狀態(tài)計數(shù),計數(shù)到和輸入周期一致的時候又回到初始狀態(tài)。

上面這個模塊就是我們的控制對象,也就是說,我們要想辦法讓他的時鐘頻率Fo = 系統(tǒng)給定時鐘頻率Fi*N,也就是說: 輸出時鐘周期To = 系統(tǒng)時鐘周期Ti/N。
小編采用如下環(huán)路實現(xiàn)。從中可以看出,小編的方法反饋控制的是周期,所以一切參數(shù)都轉(zhuǎn)化到周期上,輸入和反饋,輸出都是通過周期控制。從圖中可以得出結(jié)論輸出時鐘周期To=N/(M*N+1)

輸入時鐘要求穩(wěn)定,并且比系統(tǒng)時鐘慢的越多越好,因為這樣測量更準確。下面就是我們測量時鐘周期的代碼。反饋非常重要,因為他涉及到整個反饋環(huán)路的精度和運作效率。除以N的部分我們在另一個模塊實現(xiàn),因為測量時鐘周期的模塊是相對獨立的輸入和反饋都要用到,獨立出來可以加強代碼可重用性。這段代碼就是在每個輸入時鐘上升沿電腦時候更新周期值。以保證周期的準確性。

控制對象和輸入,反饋參數(shù)產(chǎn)生都已經(jīng)好了,剩下的就是按照控制框圖搭建反饋環(huán)路。代碼如下圖,代碼中的Ti是在頂層產(chǎn)生的,輸入時鐘被測量后才把Ti給到環(huán)路輸入。第34行是將反饋的時鐘周期乘以反饋增益1/N,35行是將反饋誤差乘以開環(huán)增益1/M。至此整個環(huán)路已經(jīng)搭建完成!

這里附上小編頂層代碼,這里從30行開始的模塊就是產(chǎn)生上文說的Ti用的,輸入時鐘直接測量后,變成是種病周期T輸入到feedback模塊。

那么實際效果咋樣呢,能工作嗎?工作起來是啥樣子?小編接下來就測試給大家看。測試代碼如下,輸出時鐘周期在反饋的代碼里面找,輸入時鐘周期是給定的,這兩個找出來對比看看與理論差多遠就知道了,這里M = 10,N=10。

仿真結(jié)果如下,看圖1可知輸出時鐘周期穩(wěn)定后為To = 102ns,輸入時鐘為Ti=1002ns,所以To/Ti = 0.1。而理論值為N/(MN+1)=10/(1010+1)=0.099。
誤差err = |0.1-0.099|/0.1=1% !


我們看看下圖的波形,輸出時鐘周期的震蕩是不是很像連續(xù)系統(tǒng)的二階震蕩環(huán)節(jié)的階躍響應?只不過超調(diào)不大,震蕩周期比較少。這是因為我們的開環(huán)其實是一階,加了反饋之后成了二階系統(tǒng)。和控制原理書上很近似(看看離散控制部分會更覺得近似)。
-
鎖相環(huán)
+關注
關注
36文章
635瀏覽量
91154 -
FPGA設計
+關注
關注
9文章
431瀏覽量
28151 -
負反饋電路
+關注
關注
1文章
35瀏覽量
9549 -
二階系統(tǒng)
+關注
關注
1文章
16瀏覽量
9822
發(fā)布評論請先 登錄
FPGA實現(xiàn)負反饋控制純數(shù)字鎖相環(huán)
如何實現(xiàn)基于VHDL語言的全數(shù)字鎖相環(huán)?
數(shù)字鎖相環(huán)(DPLL),數(shù)字鎖相環(huán)(DPLL)是什么?
模擬鎖相環(huán),模擬鎖相環(huán)原理解析
鎖相環(huán)
基于FPGA的數(shù)字鎖相環(huán)設計與實現(xiàn)
用FPGA實現(xiàn)數(shù)字鎖相環(huán)
詳解FPGA數(shù)字鎖相環(huán)平臺
基于數(shù)字鎖相環(huán)消除反饋滯后的方法
使用FPGA實現(xiàn)數(shù)字鎖相環(huán)的設計資料說明
鎖相環(huán)設計簡介
教你怎么用負反饋控制實現(xiàn)純數(shù)字鎖相環(huán)
評論