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

2021-08-29 04:51:54 字數 2876 閱讀 7907

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--fitter setting--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 的clock management 一章,其主要還是要介紹 cy...

全域性變數鏈結時的衝突

今天在寫程式時,發現了乙個全域性變數引用時的連線錯誤,大概意思是為重複定義。在.h檔案中,定義了乙個變數,而這個.h檔案被多個.c檔案引用,在鏈結時出現該變數被重複定義的錯誤。原因很簡單,在.c檔案中,均把這個變數看作是自身的全域性變數,故出現上述錯誤。若想引用別的.c檔案中定義的全域性變數,則需在...

使用AJAX時 設定ajax全域性變數

ajaxsetup jquery.ajaxsetup 函式用於設定ajax的全域性預設設定。該函式用於更改jquery中ajax請求的預設設定選項。之後執行的所有ajax請求,如果對應的選項引數沒有設定,將使用更改後的預設設定。該函式屬於全域性jquery物件。jquery 1.1 新增該靜態函式。...