Triquinne 發表於 2012-11-19 17:07:02
現今的FPGA設計大多採用時序邏輯,需要時鐘網絡才能工作,通常情況下,時鐘通過外部晶體振蕩器產生。雖然大多數情況下使用外部晶振是最好的選擇。然而,石英晶振對溫度漂移敏感、且易碎,對於一些惡劣場合,如導引頭制導電路、溫度驟變和高速振蕩使得應儘量避免使用晶體振蕩器。本文主要研究如何通過FPGA內部延遲單元構建閉合組合邏輯鏈產生自激振蕩,從而產生時鐘信號,並通過內部PLL鎖相環獲得倍分頻時鐘的方法。該方法可用於應避免使用時鐘的場合下代替外部晶體振蕩器使用。
實現方法
構建一個帶有長延遲的閉合反相器可以獲得一個自激振蕩的輸出信號。如圖1所示。
產生自激振蕩需要滿足兩個條件,一個是要有足夠長的延遲鏈,另一個是要有反相器邏輯。足夠長的延遲鏈可以通過FPGA的內建延遲邏輯或者非門鏈條組成,對於Altera公司的FPGA而言,內部延遲單元為LCELL,將若干LCELL串聯即可組成延遲鏈。其Verilog HDL描述為;
wire [WIDTH:0] gcBufChain /*synthesis syn_keep=1*/;
assign gcBufChain[0] = ~gcBufChain[WIDTH];
assign dout = gcBufChain[0];
genvar j;
generate
for (j = 0; j < WIDTH; j = j + 1)
begin: dc_loop
LCELL AlteraBuf (.in(gcBufChain[j]), .out(gcBufChain[j+1]));
end
endgenerate
注意,為了防止編譯器對延遲鏈的優化,必須在定義處註明synthesis syn_keep=1, 否則編譯器會按照邏輯將其優化為直連線,無法起到延遲的效果。鏈的長度WIDTH需要指明,WIDTH設置過大,會導致延遲鏈過長,輸出信號可能不穩定(Skew大),過小則會導致無法起振,根據經驗,可以先取一較大值,保證起振。之後減小,獲得相應的時鐘頻率。
實驗採用Altera DE4平臺,器件為Stratix IV EP4SGX530KH40C2,WIDTH與自激振蕩頻率對應值如下:
表 WIDTH與自激振蕩頻率對應值
通過調節延遲鏈的LCELL個數可以對輸出頻率進行調節。雖然可以通過時序邏輯分析軟體對延遲進行預估計,但準確度並不高,因此,建議採用實測調整。
上述時鐘產生的方法可以獲得較低頻率的時鐘信號,然而大多數FPGA設計需要更高的時鐘,為了獲得高頻穩定的時鐘源,需要藉助FPGA內部的PLL對時鐘信號進行瑣相跟蹤。通過MegaCore嚮導可以訂製一個ALTPLL鎖相環,在輸入時鐘信號頻率上填寫實測的自激振蕩頻率,在輸出頻率上可以自行計算。本實驗對128LCELLs產生的6.84Mhz信號進行倍分頻,獲得512Mhz的時鐘。由於高頻時鐘不容易測量,因此將此時鐘用來更新計數器,計數器實現64分頻。由於PLL需要從外部時鐘輸入PIN直接引入,因此需要將原先的輸出dout與時鐘輸入端dclk在硬體上連接。從而將其作為輸入時鐘。
// Quartus II Verilog Template
// Unsigned Adder
module delay
#(parameter WIDTH = 128)
(
output dout,
input dclk,
output dpllout,
output dplldiv,
output lock
);
wire [WIDTH:0] gcBufChain /*synthesis syn_keep=1*/;
reg [5:0] counter;
assign gcBufChain[0] = ~gcBufChain[WIDTH];
assign dout = gcBufChain[0];
genvar j;
generate
for (j = 0; j < WIDTH; j = j + 1)
begin: dc_loop
LCELL AlteraBuf (.in(gcBufChain[j]), .out(gcBufChain[j+1]));
end
endgenerate
always @(posedge dpllout)
begin
counter<= counter + 1;
end
PLL pllclk(.inclk0(dclk), .c0(dpllout), .locked(lock));
assign dplldiv = counter[5];
endmodule
可以從示波器上觀測到穩定的8Mhz的方波信號,同時也可觀察到PLL鎖定指示高電平(有效)。
總結:當外部晶振無法正常工作時,可以嘗試採用通過組合邏輯延遲產生的自激振蕩作為時鐘。然而要注意的是,某些低端器件,如Cyclone II,輸出的信號可能穩定性不高,Skew較大,高端器件性能較為穩定。
打開APP閱讀更多精彩內容聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容圖片侵權或者其他問題,請聯繫本站作侵刪。 侵權投訴