《深入浅出玩转FPGA》笔记
關(guān)于這本書,算是囫圇吞棗地讀完了。網(wǎng)上很多人推薦這本書,評(píng)價(jià)很不錯(cuò)。以我的觀點(diǎn)來看,確實(shí)是本不錯(cuò)的關(guān)于FPGA方面的書,作者確實(shí)經(jīng)驗(yàn)豐富,書中有很多值得學(xué)習(xí)的東西,但是可能不是很適合初學(xué)者看,比較適合有一定項(xiàng)目經(jīng)驗(yàn)的人讀。因?yàn)檫@本書本身就是將作者許多自己的親身經(jīng)歷總結(jié)出來的經(jīng)驗(yàn)編纂出來的,可能作者也是看煩了市面上一眾讀物都秉持著介紹某類知識(shí)一定要事無巨細(xì)地從頭說到尾的風(fēng)格,所以作者對(duì)基礎(chǔ)的介紹非常少。初學(xué)者學(xué)習(xí)FPGA的開發(fā)和調(diào)試去看作者另一本《FPGA/CPLD邊練邊學(xué)--快速入門Verilog/VHDL》比較好。
說到底,我作為菜鳥,這本書很多內(nèi)容我也還是一知半懂,可能還需要更多的積累。在這里記錄一下這本書給我的新收獲。
一、關(guān)于時(shí)鐘的設(shè)計(jì)要點(diǎn):
(1)避免使用門控時(shí)鐘或系統(tǒng)內(nèi)部邏輯產(chǎn)生的時(shí)鐘,多用使能時(shí)鐘去替代。
門控時(shí)鐘指的是在數(shù)據(jù)無效時(shí),將寄存器時(shí)鐘關(guān)閉的技術(shù),能夠有效降低功耗,是低功耗設(shè)計(jì)的重要方法之一。組合邏輯中多用門控時(shí)鐘,一般驅(qū)動(dòng)門控時(shí)鐘的邏輯都是只包含一個(gè)與門(或門)。如果有其它的附加邏輯,容易因競(jìng)爭(zhēng)產(chǎn)生不希望的毛刺。
(2)對(duì)于需要分頻或倍頻的時(shí)鐘,用器件內(nèi)部的專用時(shí)鐘管理(如PLL或DLL)單元去生成。
我的理解是FPGA內(nèi)部邏輯資源寶貴,用來做時(shí)鐘管理太浪費(fèi),而且有專用的干嘛不用呢。
(3)盡量對(duì)輸入的異步信號(hào)用時(shí)鐘進(jìn)行鎖存。
所謂異步信號(hào),是指兩個(gè)處于不同時(shí)鐘頻率或相位控制下的信號(hào)。這樣的信號(hào)在相互接口的時(shí)候如果沒有可靠的同步機(jī)制,則存在很大的隱患,甚至極有可能導(dǎo)致數(shù)據(jù)的誤采集。所以需要學(xué)習(xí)一些異步信號(hào)的同步機(jī)制。
(4)避免使用異步信號(hào)進(jìn)行復(fù)位或置位控制。
這一點(diǎn)很顯然,異步信號(hào)會(huì)增加毛刺出現(xiàn)的可能性。
?
二、提升系統(tǒng)性能的代碼風(fēng)格
(1)減少關(guān)鍵路徑的邏輯等級(jí)
很多時(shí)候時(shí)序不達(dá)要求是因?yàn)橛袔讞l關(guān)鍵路徑內(nèi)部邏輯門延時(shí)太長(zhǎng),可以通過修改代碼減少某些路徑的層級(jí),但通常會(huì)導(dǎo)致其他路徑多出一個(gè)或幾個(gè)邏輯門,“面積換速度”。
(2)邏輯復(fù)制(減少重載信號(hào)的散出)與資源共享
如果某個(gè)信號(hào)扇出比較大,插入buffer可以解決,但是會(huì)增加延時(shí)。通過邏輯復(fù)制,即復(fù)制產(chǎn)生這個(gè)信號(hào)的邏輯來驅(qū)動(dòng)后續(xù)電路,既使平均扇出降低又不增加延時(shí),但面積會(huì)增大。
資源共享是邏輯復(fù)制的逆過程,可以節(jié)省面積,但以犧牲速度為代價(jià)。
(3)消除組合邏輯的毛刺
引入時(shí)序邏輯,即添加寄存器來鎖存輸出結(jié)果,在時(shí)鐘有效沿再輸出。
?
三、異步復(fù)位、同步釋放
異步復(fù)位不穩(wěn)定,同步復(fù)位消耗額外資源。這種異步復(fù)位、同步釋放的雙緩沖電路根本思想是將異步信號(hào)同步化。
綜合后的電路:
四、乒乓操作及串并轉(zhuǎn)換設(shè)計(jì)
FPGA設(shè)計(jì)的重要思想有:面積換速度、乒乓操作及串并轉(zhuǎn)換設(shè)計(jì)、流水線設(shè)計(jì)、邏輯復(fù)制和模塊復(fù)用、模塊化設(shè)計(jì)等。
乒乓操作:一種數(shù)據(jù)流控制的處理技巧。
第一個(gè)周期,數(shù)據(jù)進(jìn)入緩沖區(qū)1;第二個(gè)周期,數(shù)據(jù)進(jìn)入緩沖區(qū)2,同時(shí)輸出數(shù)據(jù)選擇控制將緩沖區(qū)1內(nèi)的數(shù)據(jù)送出去;第三個(gè)周期,數(shù)據(jù)進(jìn)入緩沖區(qū)1,緩沖區(qū)2內(nèi)的數(shù)據(jù)被送出。如此循環(huán),可以實(shí)現(xiàn)數(shù)據(jù)的無縫緩沖和處理。
串并轉(zhuǎn)換:高速數(shù)據(jù)流處理的重要技巧之一。
串行輸入的數(shù)據(jù)通過FPGA內(nèi)部的n個(gè)移位寄存器后,最后并行輸出的是一個(gè)n位寬的并行總線數(shù)據(jù)。
?
五、同步設(shè)計(jì)的好處:
目前經(jīng)驗(yàn)尚淺,很多體會(huì)不是很深。
?
六、專用握手信號(hào)
握手通信原理,即通信雙方使用了專用控制信號(hào)進(jìn)行狀態(tài)指示,是一種常用的跨時(shí)鐘域信號(hào)處理方式。
使用握手協(xié)議方式處理跨時(shí)鐘域數(shù)據(jù)傳輸時(shí),只需要雙方的握手信號(hào)(req和ack)分別使用脈沖檢測(cè)法進(jìn)行同步。具體實(shí)現(xiàn):發(fā)送域先將數(shù)據(jù)放入總線,然后發(fā)送req有效信號(hào)給接收域;接收域收到req有效信號(hào)后鎖存數(shù)據(jù)總線,然后回送ack有效信號(hào)給發(fā)送域;發(fā)送域接收到ack有效信號(hào)后撤銷當(dāng)前req信號(hào),接受域再檢測(cè)到req信號(hào)撤銷后也撤銷ack信號(hào),此時(shí)完成一次正常握手通信。
?
七、關(guān)于變量的定義
在編寫testbench時(shí),關(guān)于變量的定義一個(gè)常犯的錯(cuò)誤就是將一個(gè)定義好的全局變量應(yīng)用到了兩個(gè)不同的always塊中(如EX1C),由于兩個(gè)always獨(dú)立并行工作,會(huì)產(chǎn)生意想不到的后果。
解決方法是可以在begin...end之間定義always的塊名,這樣兩個(gè)always塊中的變量i就互不相關(guān)了。
八、HDL的三個(gè)最基本思想
連通性(Connectivity)、時(shí)間性(Time)和并行性(Concurrency)。
?
九、Testbench書寫技巧
十、建立時(shí)間、保持時(shí)間
建立時(shí)間滿足:
?即?
保持時(shí)間滿足:
時(shí)鐘滿足:??由此可以計(jì)算FPGA的最大頻率,系統(tǒng)時(shí)序優(yōu)化主要是對(duì)傳輸路徑延時(shí)??做文章。
?
十一、邏輯仲裁設(shè)計(jì)要點(diǎn)
十二、FPGA+CPU
- 潛在優(yōu)勢(shì):
- 更易于滿足大多數(shù)系統(tǒng)的功能性要求;
- 潛在的改善了系統(tǒng)的性能;
- 在某些應(yīng)用中的靈活性和可升級(jí)性大大提高;
- 處理器連接到外設(shè)的接口能夠得到優(yōu)化;
- 軟硬件互聯(lián)的接口性能獲得極大的提升;
- 有利于設(shè)計(jì)的重用和新設(shè)計(jì)的快速成型;
- 簡(jiǎn)單化芯片甚至整板的PCB布局布線。
?
其實(shí)這本書我還有很多地方?jīng)]看明白,應(yīng)該需要多看幾遍。
參考文獻(xiàn):
《深入淺出玩轉(zhuǎn)FPGA》第三版,吳厚航編著
總結(jié)
以上是生活随笔為你收集整理的《深入浅出玩转FPGA》笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: FPGA边沿检测Verilog实现(包含
- 下一篇: 生成设备树Blob