如何提高電路工作頻率
對于設(shè)計者來說,我們當(dāng)然希望我們設(shè)計的電路的工作頻率(在這里如無特別說明,工作頻率指FPGA片內(nèi)的工作頻率)盡量高。我們也經(jīng)常聽說用資源換速度,用流水的方式可以提高工作頻率,這確實是一個很重要的方法,今天我想進(jìn)一步去分析該如何提高電路的工作頻率。
我們先來分析下是什么影響了電路的工作頻率。
我們電路的工作頻率主要與寄存器到寄存器之間的信號傳播時延及clock skew有關(guān)。在FPGA內(nèi)部如果時鐘走長線的話,clock skew很小,基本上可以忽略, 在這里為了簡單起見,我們只考慮信號的傳播時延的因素。
信號的傳播時延包括寄存器的開關(guān)時延、走線時延、經(jīng)過組合邏輯的時延(這樣劃分或許不是很準(zhǔn)確,不過對分析問題來說應(yīng)該是沒有可以的),要提高電路的工作頻率,我們就要在這三個時延中做文章,使其盡可能的小。
我們先來看開關(guān)時延,這個時延是由器件物理特性決定的,我們沒有辦法去改變,所以我們只能通過改變走線方式和減少組合邏輯的方法來提高工作頻率。
1.通過改變走線的方式減少時延。
以altera的器件為例,我們在quartus里面的timing closure floorplan可以看到有很多條條塊塊,我們可以將條條塊塊按行和按列分,每一個條塊代表1個LAB,每個LAB里有8個或者是10個LE。它們的走線時延的關(guān)系如下:同一個LAB中(最快) < 同列或者同行< 不同行且不同列。
我們通過給綜合器加適當(dāng)?shù)募s束(不可貪心,一般以加5%裕量較為合適,比如電路工作在100Mhz,則加約束加到105Mhz就可以了,貪心效果反而不好,且極大增加綜合時間)可以將相關(guān)的邏輯在布線時盡量布的靠近一點,從而減少走線的時延。(注:約束的實現(xiàn)不完全是通過改進(jìn)布局布線方式去提高工作頻率,還有其它的改進(jìn)措施)
2.通過減少組合邏輯的減少時延。
上面我們講了可以通過加約束來提高工作頻率,但是我們在做設(shè)計之初可萬萬不可將提高工作頻率的美好愿望寄托在加約束上,我們要通過合理的設(shè)計去避免出現(xiàn)大的組合邏輯,從而提高電路的工作頻率,這才能增強設(shè)計的可移植性,才可以使得我們的設(shè)計在移植到另一同等速度級別的芯片時還能使用。
我們知道,目前大部分FPGA都基于4輸入LUT的,如果一個輸出對應(yīng)的判斷條件大于四輸入的話就要由多個LUT級聯(lián)才能完成,這樣就引入一級組合邏輯時延,我們要減少組合邏輯,無非就是要輸入條件盡可能的少,,這樣就可以級聯(lián)的LUT更少,從而減少了組合邏輯引起的時延。
我們平時聽說的流水就是一種通過切割大的組合邏輯(在其中插入一級或多級D觸發(fā)器,從而使寄存器與寄存器之間的組合邏輯減少)來提高工作頻率的方法。比如一個32位的計數(shù)器,該計數(shù)器的進(jìn)位鏈很長,必然會降低工作頻率,我們可以將其分割成4位和8位的計數(shù),每當(dāng)4位的計數(shù)器計到15后觸發(fā)一次8位的計數(shù)器,這樣就實現(xiàn)了計數(shù)器的切
割,也提高了工作頻率。
在狀態(tài)機中,一般也要將大的計數(shù)器移到狀態(tài)機外,因為計數(shù)器這東西一般是經(jīng)常是大于4輸入的,如果再和其它條件一起做為狀態(tài)的跳變判據(jù)的話,必然會增加LUT的級聯(lián),從而增大組合邏輯。以一個6輸入的計數(shù)器為例,我們原希望當(dāng)計數(shù)器計到111100后狀態(tài)跳變,現(xiàn)在我們將計數(shù)器放到狀態(tài)機外,當(dāng)計數(shù)器計到111011后產(chǎn)生個enable信號
去觸發(fā)狀態(tài)跳變,這樣就將組合邏輯減少了。
上面說的都是可以通過流水的方式切割組合邏輯的情況,但是有些情況下我們是很難去切割組合邏輯的,在這些情況下我們又該怎么做呢?
狀態(tài)機就是這么一個例子,我們不能通過往狀態(tài)譯碼組合邏輯中加入流水。如果我們的設(shè)計中有一個幾十個狀態(tài)的狀態(tài)機,它的狀態(tài)譯碼邏輯將非常之巨大,毫無疑問,這極有可能是設(shè)計中的關(guān)鍵路徑。那我們該怎么做呢?還是老思路,減少組合邏輯。我們可以對狀態(tài)的輸出進(jìn)行分析,對它們進(jìn)行重新分類,并根據(jù)這個重新定義成一組組小狀態(tài)機,通過對輸入進(jìn)行選擇(case語句)并去觸發(fā)相應(yīng)的小狀態(tài)機,從而實現(xiàn)了將大的狀態(tài)機切割成小的狀態(tài)機。在ATA6的規(guī)范中(硬盤的標(biāo)準(zhǔn)),輸入的命令大概有20十種,每一個命令又對應(yīng)很多種狀態(tài),如果用一個大的狀態(tài)機(狀態(tài)套狀態(tài))去做那是不可想象的,我們可以通過case語句去對命令進(jìn)行譯碼,并觸發(fā)相應(yīng)的狀態(tài)機,這樣做下來這一個模塊的頻率就可以跑得比較高了。
總結(jié):提高工作頻率的本質(zhì)就是要減少寄存器到寄存器的時延,最有效的方法就是避免出現(xiàn)大的組合邏輯,也就是要盡量去滿足四輸入的條件,減少LUT級聯(lián)的數(shù)量。我們可以通過加約束、流水、切割狀態(tài)的方法提高工作頻率。
歡迎關(guān)注至芯科技
至芯官網(wǎng):www.zxopen.com
至芯科技技術(shù)論壇:www.fpgaw.com
至芯科技淘寶網(wǎng)址:
https://zxopen.taobao.com
至芯科技FPGA初級課程(B站):
https://space.bilibili.com/521850676
至芯科技FPGA在線課程(騰訊課堂):
https://zxopenbj.ke.qq.com/
至芯科技-FPGA 交流群(QQ):282124839
至芯科技12年不忘初心、再度起航11月12日北京中心FPGA工程師就業(yè)班開課、線上線下多維教學(xué)、歡迎咨詢!
如何在FPGA設(shè)計中充分利用NoC資源?一招Get
掃碼加微信邀請您加入FPGA學(xué)習(xí)交流群
歡迎加入至芯科技FPGA微信學(xué)習(xí)交流群,這里有一群優(yōu)秀的FPGA工程師、學(xué)生、老師、這里FPGA技術(shù)交流學(xué)習(xí)氛圍濃厚、相互分享、相互幫助、叫上小伙伴一起加入吧!
原文標(biāo)題:如何提高FPGA的工作頻率
文章出處:【微信公眾號:FPGA設(shè)計論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
評論