cyclone全域性時鐘

2021-06-23 08:34:59 字數 3053 閱讀 4056

cyclone

器件全域性時鐘盡在掌控

首先感謝

wind330

兄的《掌控全域性時鐘網路資源》一文對於我的幫助。本文結合

cyclone

器件(因為特權最近正在使用這個系列的器件)對

fpga 翻開

cyclone-handbook

的clock management

一章,其主要還是要介紹

cyclone

器件的pll

資源相關的內容。但是對於我們了解

fpga

的全域性時鐘網路還是很有參考價值的。

cyclone

系列的器件基本都有2個

pll,

ep1c3

例外只有乙個

pll。

上面這個圖最說明問題,

clk0/clk1

作為pll1

的輸入,

clk2/clk3

作為pll2

(ep1c3

沒有)的輸入。當然了,如果你嘗試用上面所規定的時鐘管腳以外的管腳作為

pll的輸入,那麼只會換來

quartus ii

的報錯資訊。

而從上圖我們可以看到

pll的輸出最多可以有三個,

c0,c1,e0,c0

和c1一般作為內部時鐘使用,而

e0是只能作為外部輸出時鐘使用的,就是說這個

pll輸出時鐘必須直接連線到器件外部的

pin上,如果你嘗試在

fpga

內部邏輯使用

e0作為時鐘,那麼你同樣只能換來

quartus ii

的報錯資訊。

另外有一點必須提一下,先看下面的圖。

綠色的方波是作為

pll輸入的

clk,而往下紅色的分別是

c0,c1,e0

,最後面乙個是所謂的

lock

訊號(拉高作為

pll輸出有效訊號)。也就是當

pll復位完成或者使能(到底要復位還是使能是可以在配置

pll時選擇的)後若干個時鐘週期後

pll的輸出才會有效,那麼在

lock

拉高以後的

pll才是我們想要的。上面這個圖里輸入的

clk和輸出的時鐘之間似乎沒有相位差,是很理想的乙個狀態。但是實際上

pll出來的時鐘和輸入的

clk之間總是存在相位差的,**後如下面的圖。

所以,個人感覺在

pll時鐘資源充裕的情況下,統一使用

pll輸出時鐘作為內部邏輯的時鐘使用,而不使用

pll的輸入作為內部時鐘,這樣是為了防止內部的各個時鐘之間保持一定相位的對齊,同時我也發現

pll的輸入時鐘驅動內部邏輯的

clock network latency

相對要比

pll輸出的時鐘驅動內部邏輯的

clock network lacency

大得多。

如果非得用

pll的輸入時鐘同時作為內部邏輯的時鐘,最好是根據它們的相位關係進行一下時鐘的對齊。如下面的兩個圖所示。

下面再看看

cyclone

器件的內部全域性時鐘網路的分配,

8個全域性時鐘網路,左右各

4個。而

pll1

的輸出c0,c1

和clk0/1

以及dpclk0-3

(復用的時鐘管腳)或者內部的邏輯可以使用左邊的

4個全域性時鐘網路;

pll2

的輸出c0,c1

和clk2/3

以及dpclk4-7

(復用的時鐘管腳)或者內部的邏輯可以使用右邊的

4個全域性時鐘網路。

pll輸出作為外部時鐘的

e0是不會(也沒有必要)分配到全域性時鐘網路的。

就拿左邊的來說,可以使用

4個全域性時鐘網路的訊號其實不少,它們之中到底誰使用有限的全域性時鐘網路呢?說白了,都是可以由你掌控的,當然了,在你不管它們的時鐘會有乙個預設的狀態。

如果setting--fittersetting--more setting…裡的aoto global clock開啟時,quartus ii在實現時會根據內部邏輯的實際情況自動分配全域性時鐘,就是說誰占用全域性時鐘網路軟體說了算(一般系統的時鐘和復位訊號會占用全域性時鐘網路)。當然了,你也可以關閉它,然後自己來分配,這時你可以到assignment edit裡global signals進行分配。然後你可以到編譯報告裡檢視fitter—>rescource section—>global…裡的資訊。

另外還有乙個值得注意的地方,下面兩個圖示出了可以占用全域性時鐘網路的訊號它們實際可以占用的全域性時鐘網路資源。比如

pll1

的輸出c0

只能使用

gclk1

或者gclk2,c2

只能使用

gclk0

或者gclk3。

拿乙個例項來看看,我們有乙個

clk1

輸入的時鐘訊號

clk,這個時鐘訊號

clk同時是

pll1

的輸入,產生兩個

pll輸出c0和

c1。系統本身有乙個復位訊號

rst_n

。此外,我們內部邏輯產生乙個時鐘

clk_divown

,在aoto global clock開啟的情況下,我們得到了下面的全域性時鐘網路的分配結果。

pll的

c0分配到了

gclk2,c1

分配到了

gclk3

,pll

的輸入時鐘即

clk1

的輸入clk

分配到了

gclk1

,它們都分配到了規定的全域性時鐘網路內了。其次,

clk_div_own

和rst_n

隨機分配。

這個例子中的全域性時鐘網路對於我們的使用還是綽綽有餘的,但是乙個大的系統,時鐘交錯,高扇出的訊號層出不窮,那麼對於全域性時鐘訊號的掌控就需要格外小心了。

說白了,對於設計者來說,最重要的是要做到一切盡在掌握。

Cyclone器件全域性時鐘盡在掌控

cyclone器件全域性時鐘盡在掌控 首先感謝wind330兄的 掌控全域性時鐘網路資源 一文對於我的幫助。本文結合cyclone器件 因為特權最近正在使用這個系列的器件 對fpga的時鐘資源進行一些 或者說是特權同學的一點認識和大家分享一下,有不對的歡迎指正。翻開cyclone handbook的...

轉 FPGA全域性時鐘系統的設計

在使用quartusii設計altera的fpga時,對於時鐘的考慮一般很少。我們想得到乙個固定頻率的時鐘,無非就是將晶振從某個時鐘管腳輸入 若晶振頻率即為期望頻率,則可以直接使用 若與期望頻率不符,則調動ip核生成pll,配置pll的輸出為期望頻率即可。可是若將fpga換為xilinx系列,在is...

跨平台網路庫Cyclone

非常好用,原始碼 posted on 2017年5月11日 by jinchao 這個工程我放在了github上,cyclone的設計從一開始就是比較清晰的,主要是以下幾個特性 這應該是使用最為廣泛的一種網路模型,適合大多數應用場景,multiplexing支援select epoll kqueue...