基於Cyclone IV的PLL重配置設計


----------------------------------------------

作者:CrazyBingo 

---------------------------------------------

基於Cyclone IV的PLL重配置設計

在實際項目應用中,由於系統的復雜,在某些需求中,需要實現動態時鍾輸入,或者輸出,以實現不同的時序電路,完成特定的功能。

對於多時鍾的輸入,當波動超過了一定范圍,與之對應的PLL將無法重新鎖定時鍾,其輸出時鍾頻率將變為不確定的值;同時過去FPGA內部PLL上電完成配置,只能輸出固定頻率的時鍾,無法在上電后在此改變(而是用多個PLL實現多個時鍾的輸出,也只能局限於幾個頻率)。如此的限制,讓我們在多時鍾設計中不免覺得尷尬。

盡管Stratix II早就有了動態PLL,能在上電后動態配置輸入時鍾、輸出時鍾、相位等,但是其價格的高昂,沒有受太大的關注。直到Cyclone III/IV面世以來,在成本敏感的領域實現高性價比的動態時鍾配置,完成不可能的設計,成為了一種可能。

1. PLL的原理與可重配置PLL

鎖相環(PLL,Phase Lock Loop)主要作用就是把內部/外部時鍾的相位和頻率同步於輸入參考時鍾。PLL一般由模擬電路所實現,其結構如下圖所示。

clip_image002

1.1. PLL可充配組件

PLL 使用幾個分頻計數器和不同的 VCO 相位抽頭來執行頻率合成及相移。在 Cyclone IV 器件的 PLL 中,您可以實時重配置計數器設置及相移 PLL 輸出時鍾。此外,您也可以修改電荷泵和環路濾波器組件,這會對 PLL 帶寬產生動態影響。 您可以使用這些PLL 組件,在幾微妙內來實時更新輸出時鍾頻率、PLL 帶寬和相移,而無需重配置整個 FPGA。

以下PLL可重配置組件:

clip_image004

當然,還有PLL還允許動態相移配置,不過這個配置模塊與PLL沖配置模塊不在一塊兒,因此此處沒有羅列出,這也不是本文主要的研究目標。Cyclone III/IV的可充沛組件參數,如下所示:

clip_image005

1.2. 可重配PLL

clip_image007

如上圖所示,PLL的重配置,是通過一條掃描鏈完成的。所謂掃描鏈,其實是一系列的寄存器,通過寄存器的更新,來完成PLL的重配置。因此,PLL的重配置,要嚴格遵循一定的時序,即不能違背掃描鏈的架構,否則必然導致重配置失敗,甚至失鎖。

有關掃描鏈時序的分析,如下官方手冊的截屏:

clip_image008

在Quartus LPM中定制PLL,並且使能PLL動態特性,允許用戶可以通過相關接口對PLL進行重配置,如下如所示:

clip_image010

用戶可以通過一個Mif文件,來初始化輸出時鍾,相移等參數(事實證明這個mif不存在也不會影響,因為后端用戶設定了參數)。最后生成了如下模塊:

clip_image011

其中包含了PLL的復位,輸入時鍾,輸出時鍾,以及動態配置的信號線。通過configuradta信號,讓PLL動態配置。

1.3. PLL重配模塊

縱然PLL的重配置時序不是那么復雜,但是Altera怕我們出意外,為了設計上的簡單,減少開發周期,Altera提供了PLL重配置模塊。用戶只要更新本模塊的寄存器(Mif)文件,通過configuradta,本模塊會自動完成對可重配PLL的配置。

clip_image012

如上圖所示,紅圈圈部分,即ALTPLL_RECONFIG的用戶接口。用戶可以通過更新ALTPLL_RECONFIG內部的Mif文件,通過其對可重配PLL的自動配置功能,完成PLL的動態配置。

具體電路如下所示。通過write_fraom_rom信號,通過選擇電路。直接讓ALTPLL_RECONFIG自動讀取選擇的外部ROM的數據,完成對ALTPLL_RECONFIG內部Mif文件的更新。在此之后,通過使能信號,在此自動完成PLL的重配置。

clip_image014

2. PLL重配置的實現

2.1. 相關參數的研究

clip_image015

在可重配PLL的定制過程中,可以生成以定制參數的Mif文件,如上圖所示。經過反復的研究,觀察了10M~80M,步進為5M的時鍾輸出的Mif文件,發現了如下規律。其中0-~36為默認,其他有一定的規律,如下圖所示:

clip_image017

序號

地址

位數

參數

1

36

1

M counter: Bypass,0表示打開,1表示旁路

2

37-44

8

M counter: High Count,縮放因子

3

45

1

M counter: Odd Division,1表示奇數分頻

4

46-53

8

M counter: Low Count,乘法因子

5

54

1

clk0 counter: Bypass,0表示打開,1表示旁路

6

55-62

8

clk0 counter: High Count,高脈沖計數

7

63

1

clk0 counter: Odd Division,1表示奇數分頻

8

64-71

8

clk0 counter: Low Count。低脈沖計數

反復的研究Altera 《Implementing PLL Reconfiguration in Cyclone III Devices》手冊,詳細的分析了ALTPLL_RECONFIG的更新時序,最終研究表明,有三種PLL重配置的方法:

(1)不用ALTPLL_RECONFIG,直接編寫時序,更新相關參數(難度較大,無用功太大,不考慮了)

(2)使用ALTPLL_RECONFIG,通過更新Mif文件,完成重配置(還行,Altera推介這樣干)

(3)直接在ALTPLL_RECONFIG中需要改變的參數,然后通過ALTPLL_RECONFIG,全自動更新PLL(前期需要一定的研究,要寫一些時序,不過一旦成功,一勞永逸)

2.2. Mif文件更新方案

clip_image019

如上圖,只要完成了ALTERA_RECONFIG的更新,對PLL的動態配置相當的簡單,具體電路見altera官方手冊截屏:

clip_image021

Altera貌似推介這種方法,因為不容易出錯,不過缺點是,每一個Mif文件,都在在配置PLL的時候,通過修改參數生成,而且需要多少個CLK輸出,就需要定制多少個ROM。當然,在完成任務的前提下,我們已經成功了。

2.3. Param更新方案

clip_image022

對於有完美強迫症的我,通過Mif更新的方法,實在是無法忍受。我們明明能做的更好一點,為什么不在努力一把,再花點功夫,研究的深入一些,直接對需要修改的參數進行更新。

在本節第一部分中的參數研究,得出了需要改變的參數,如下表所示:

N

CLK

LFC

LFR

VPS

CPU

NX

MH

ML

odd

CH

CL

odd

0

10

0

27

0

1

 

6

6

0

30

30

0

1

15

0

27

0

1

 

6

6

0

20

20

0

2

20

0

27

0

1

 

6

6

0

15

15

0

3

25

0

27

0

1

 

6

6

0

12

12

0

4

30

0

27

0

1

 

6

6

0

10

10

0

5

35

0

27

0

1

 

4

3

1

5

5

0

6

40

0

27

0

1

 

6

6

0

8

7

1

7

45

0

27

0

1

 

5

4

1

5

5

0

8

50

0

27

0

1

 

6

6

0

6

6

0

9

55

0

27

0

1

 

6

5

1

5

5

0

A

60

0

27

0

1

 

6

6

0

5

5

0

B

65

0

27

0

1

 

7

6

1

5

5

0

C

70

0

27

0

1

 

4

3

1

3

2

1

D

75

0

27

0

1

 

6

6

0

4

4

0

E

80

0

27

0

1

 

4

4

0

3

2

1

因此,只要通過一定的時序,將這些參數更新,便可。而且這些參數不是任意的,而是密切跟輸出輸出頻率相關聯的,因此,甚至可以用過其他控制邏輯,發送需要輸出CLK的參數,來完成動態PLL的配置。

clip_image024

配置的LPM如上如所示,唯一的區別就是舍棄了ROM讀取的接口,因為這已經是多余的了。通過上圖中的時序,對counter_type的counter_param進行更新,因此,對照着時序圖自行設計狀態機,對模式寄存器的參數進行更新。具體對應頻率的參數如下所示:

clip_image026

clip_image027

經過21個狀態,按照一定的時序,更新CLK的乘除因子,狀態機如下:

clip_image029

最后10M到35M的PLL動態配置,更新駛入如下所示:

clip_image031

clip_image033

3. PLL動態配置的結論與意義

clip_image034clip_image036

最后,整體設計如上RTL所示,當然目前實現的只是5M-80M,步進為5M的不同時鍾的選擇,而不是任意時鍾的輸出。目前實現的萬能顯示控制器,在5M-80M間運行正常,性能穩定,多虧了動態PLL的功勞。頂層主要包括了如下幾個模塊:

序號

模塊

功能

1

pll_reconfig_top

PLL重配置頂層模塊

2

u_pll_parameter

不同頻率的參數選擇模塊

3

u_user_reconfig_ctrl

PLL需要改變的參數更新模塊

4

u_pll_reconfig

ALTERA PLL更新模塊

5

u_ref_pll

可重配的PLL模塊

對於任意的輸出,由於某些頻率下,當分頻參數大了,還需要改變電容泵,環路濾波電容電阻等參數,(比如27M的時候,就需要),此處暫時沒有再深入,因為對本設計失去了意義。

要問意義何在?毋庸置疑!

(1)在數字信號處理領域,輸入CLK改變得時候……

(2)輸出時鍾需要動態改變,比如ULC的時候……

(3)……

自從有了動態PLL,很多蒼白無力的事情,變得更精彩了……

 

______________________________________

關於 《iBoard 電子學堂》……

image

《iBoard 電子學堂》是一個綜合型的電子研發開發平台,適合在校學生、一線工程師及電子愛好者等。

交流方式:

官方博客:XiaomaGee.cnblogs.com

官方論壇:www.oshcn.com

官方淘寶店鋪:i-Board.taobao.com

QQ群:

《iBoard 電子學堂 群【A】》:204255896(500人,滿)
《iBoard 電子學堂 群【B】》:165201798(500人超級群,滿)
《iBoard 電子學堂 群【C】》:215053598(200人高級群)
《iBoard 電子學堂 群【D】》:215054675(200人高級群)
《iBoard 電子學堂 群【E】》: 215055211(200人高級群)
《iBoard 電子學堂 群【F】》: 78538605 (200人高級群)

《iBoard 電子學堂 群【G】》: 158560047(500人高級群)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM