1. 程式人生 > >三叔學FPGA系列之1:Cyclone V中的時鐘資源

三叔學FPGA系列之1:Cyclone V中的時鐘資源

之前的專案中更多的是有師兄提供經驗和幫助,追求的是快速上手,所以不管對於硬體電路設計,還是verilog電路程式設計,甚至是FPGA內部的資源,都沒來得及系統地學習,最近在做演算法到電路的實現,正好系統學習,將感悟記於此,如有錯誤,歡迎指出、討論。

一、關於時鐘引腳

FPGA晶片一般有好幾組時鐘引腳 CLK [0..N] [p,n],我的理解是:首先,時鐘必須由外部晶振通過CLK引腳輸入到FPGA的時鐘網路,至於選用哪一組CLK,主要看FPGA哪個bank對時鐘要求最為苛刻;其次,一般用p端,n端由quartus置位三態;再次,對於簡單的系統,只有一組CLK輸入作為系統主時鐘,其他時鐘引腳空置,或者作為某些高帶載能力的時鐘的輸出口(是否可作為輸出口,要看晶片手冊);然後

,複雜系統,可以有不同源的時鐘分別從不同CLK引腳輸入,只是猜想,沒實踐過,個人認為這樣不好,因為FPGA的核心就是同步;另外,不要把CLK引腳和全域性時鐘、區域時鐘什麼的混為一談,一個是時鐘輸入引腳,一個是內部時鐘走線;最後,CLK引腳進去的走線肯定進過優化的(H型銅皮,專用的、直達每個觸發器的佈線資源),所以能做到小的抖動和偏斜,帶載能力也強。

                      

圖1                                                                                                                    圖2

圖1所示:紅圈為時鐘輸入引腳,當然,從時鐘引腳輸入的時鐘必定首先進入全域性時鐘網路,再進一步驅動區域時鐘,或者由PLL進行分/倍頻==;三個黑色方框內PLL輸出引腳,我的理解是:這幾組引腳的佈線也經過了優化,可以使PLL分/倍頻後輸出的時鐘訊號質量較好。

圖2所示:CLK9p作為系統唯一的外部輸入時鐘源,需要注意,單端輸入時,只有p端是與內部PLL相連的;CLK1[p,n]作為差分時鐘輸出引腳,由內部PLL驅動,輸出作為AD時鐘。

二、內部時鐘資源

全域性時鐘(GCLK)網路、區域時鐘(RCLK)網路、外設時鐘(PCLK)(一般出現在集成了某些外設的FPGA中,個人理解)網路

  1. 全域性時鐘:FPGA內部的專用全域性時鐘佈線資源(圖4上),具有直達每一個觸發器的能力,且佈線資源經過優化,時鐘經過它傳輸後具有高扇出、最小的偏斜和抖動等。但也因為是全域性佈線相較於區域時鐘,會有較大的插入延時(手冊也這麼說),而且資源較少(且用且珍惜)。全域性時鐘網路:
    1)可由CLK引腳、內部PLL、高速串列埠(HSSI)、普通邏輯電路產生的時鐘(一般不這麼幹)驅動;2)可驅動所有輸出引腳(尤其是CLK引腳,輸出作為其他晶片的基礎時鐘)、內部PLL、區域時鐘。
  2. 區域時鐘:只在他們自己所在的區域有效(圖4下),相當於區域內的全域性時鐘,在區域內,具有全域性時鐘的優點,且插入延時比全域性時鐘小,佈線資源也比較多。區域時鐘網路:1)可由CLK引腳(注意區域)、內部PLL、高速串列埠(HSSI)、普通邏輯電路產生的時鐘(一般不這麼幹)驅動;2)可驅動所有輸出引腳(尤其是CLK引腳,輸出作為其他晶片的基礎時鐘)、內部PLL。
  3. 外設時鐘:沒用到,查手冊。

     

圖3                                                                                                            圖4

******注意******

  1. 常規操作:外部晶振—>時鐘引腳—>PLL—>區域時鐘、各個模組、輸出(待驗證和完善,我也迷)
  2. 關於CLK引腳選擇:不是所有的CLK引腳都可以連線到所有的全域性/區域時鐘網路,見圖5。
  3. 關於PLL:不是所有始終都可以驅動PLL,詳見手冊,如圖6所示。

      圖5

       圖6

三、時鐘資源的使用、分配

疑問:編寫邏輯電路,或者佈局佈線時,我怎麼知道某個時鐘具體使用了哪種、哪個網路?以及怎麼人為地控制使用具體某個網路?

未完待續.....

微信 Alasica,歡迎討論學習。