女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一文解讀FPGA設(shè)計(jì)者的5項(xiàng)基本功及設(shè)計(jì)流程

姚小熊27 ? 來源:網(wǎng)絡(luò)整理 ? 2018-05-31 09:35 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

FPGA發(fā)展由來

數(shù)字集成電路的發(fā)展歷史,經(jīng)歷了從電子管晶體管、小規(guī)模集成電路到大規(guī)模以及超大規(guī)模集成電路等不同的階段。發(fā)展到現(xiàn)在,主要有3類電子器件:存儲器、處理器和邏輯器件。

存儲器保存隨機(jī)信息(電子數(shù)據(jù)表或數(shù)據(jù)庫的內(nèi)容);處理器執(zhí)行軟件指令,以便完成各種任務(wù)(運(yùn)行數(shù)據(jù)處理程序或視頻游戲);而邏輯器件可以提供特殊功能(器件之間的通信和系統(tǒng)必須執(zhí)行的其他所有功能)。

邏輯器件分成兩類:

1.固定的或定制的。

2.可編程的或可變的。

其中,固定的或定制的邏輯器件通常稱為專用芯片(ASIC)。ASIC是為了滿足特定的用途而設(shè)計(jì)的芯片,例如MP3解碼芯片等。其優(yōu)點(diǎn)是通過固化的邏輯功能和大規(guī)模的工業(yè)化生產(chǎn),降低了芯片的成本,同時(shí)提高了產(chǎn)品的可靠性。隨著集成度的提高,ASIC的物理尺寸也在不斷的縮小。

FPGA的硬件設(shè)計(jì)技巧

FPGA的硬件設(shè)計(jì)不同于DSPARM系統(tǒng),比較靈活和自由,只要設(shè)計(jì)好專用管腳的電路,通用I/O的連接可以自己定義,下面給大家介紹一些FPGA電路設(shè)計(jì)中會用到的特殊技巧做參考。

1、管腳兼容性設(shè)計(jì)

前面的內(nèi)容提到過,F(xiàn)PGA在芯片選項(xiàng)的時(shí)候要盡量選擇兼容性好的封裝。那么,在硬件電路設(shè)計(jì)時(shí),就要考慮如何兼容多種芯片的問題。

例如,紅色颶風(fēng)II代-Altera的開發(fā)板就是兼容了EP1C6Q240和EP1C12Q240兩個(gè)型號的FPGA。這兩個(gè)芯片有12個(gè)I/O管腳定義是不同的。在EP1C6Q240芯片上,這12個(gè)I/O是通用I/O管腳,而在EP1C12Q240芯片上,它們是電源和地信號

為了能保證兩個(gè)芯片在相同的電路板上都能工作,我們就必須按照EP1C12Q240的要求來把對應(yīng)管腳連接到電源和地平面。因?yàn)椋ㄓ玫腎/O可以連接到電源或者地信號,但是電源或者地信號卻不能作為通用I/O。

在相同封裝、兼容多個(gè)型號FPGA的設(shè)計(jì)中,一般的原則就是按照通用I/O數(shù)量少的芯片來設(shè)計(jì)電路。

2、根據(jù)電路布局來分配管腳功能

FPGA的通用I/O功能定義可以根據(jù)需要來指定。在電路圖設(shè)計(jì)的流程中,如果能夠根據(jù)PCB的布局來對應(yīng)的調(diào)整原理圖中FPGA的管腳定義,就可以讓后期的布線工作更順利。

例如,如圖2.1所示,SDRAM芯片在FPGA的左側(cè)。在FPGA的管腳分配的時(shí)候,應(yīng)該把與SDRAM相關(guān)的信號安排在FPGA的左側(cè)管腳上。這樣,可以保證SDRAM信號的布線距離最短,實(shí)現(xiàn)最佳的信號完整性。

3、預(yù)留測試點(diǎn)

目前FPGA提供的I/O數(shù)量越來越多,除了能夠滿足設(shè)計(jì)需要的I/O外,還有一些剩余I/O沒有定義。這些I/O可以作為預(yù)留的測試點(diǎn)來使用。

例如,在測試與FPGA相連的SDRAM工作時(shí)序狀態(tài)的時(shí)候,直接用示波器測量SDRAM相關(guān)管腳會很困難。而且SDRAM工作頻率較高,直接測量會引入額外的阻抗,影響SDRAM的正常工作。

如果FPGA有預(yù)留的測試點(diǎn),那么可以將要測試的信號從FPGA內(nèi)部指定到這些預(yù)留的測試點(diǎn)上。這樣既能測試到這些信號的波形,又不會影響SDRAM的工作。

如果電路測試過程中發(fā)現(xiàn)需要飛線才能解決問題,那么這些預(yù)留的測試點(diǎn)還可以作為飛線的過渡點(diǎn)。

FPGA設(shè)計(jì)者的5項(xiàng)基本功介紹

在小編看來,成為一名說得過去的FPGA設(shè)計(jì)者,需要練好5項(xiàng)基本功:仿真、綜合、時(shí)序分析、調(diào)試、驗(yàn)證。

需要強(qiáng)調(diào)的一點(diǎn)是,以上基本功是針對FPGA設(shè)計(jì)者來說的,不是針對IC設(shè)計(jì)者的。對于IC設(shè)計(jì),不太懂,所以不敢妄言。

對于FPGA設(shè)計(jì)者來說,練好這5項(xiàng)基本功,與用好相應(yīng)的EDA工具是同一過程,對應(yīng)關(guān)系如下:

1.、仿真:ModelsimQuartus II(Simulator Tool)

2.、綜合:Quartus II (Compiler Tool, RTL Viewer, Technology Map Viewer, Chip Planner)

3、 時(shí)序:Quartus II (TimeQuest Timing Analyzer, Technology Map Viewer, Chip Planner)

4、調(diào)試:Quartus II (SignalTap II Logic Analyzer, Virtual JTAG, Assignment Editor)

5、驗(yàn)證:Modelsim, Quartus II(Test Bench Template Writer)

掌握HDL語言雖然不是FPGA設(shè)計(jì)的全部,但是HDL語言對FPGA設(shè)計(jì)的影響貫穿于整個(gè)FPGA設(shè)計(jì)流程中,與FPGA設(shè)計(jì)的5項(xiàng)基本功是相輔相成的。

對于FPGA設(shè)計(jì)者來說,用好“HDL語言的可綜合子集”可以完成FPGA設(shè)計(jì)50%的工作——設(shè)計(jì)編碼。練好仿真、綜合、時(shí)序分析這3項(xiàng)基本功,對于學(xué)習(xí)“HDL語言的可綜合子集”有如下幫助:

1. 通過仿真,可以觀察HDL語言在FPGA中的邏輯行為。

2. 通過綜合,可以觀察HDL語言在FPGA中的物理實(shí)現(xiàn)形式。

3. 通過時(shí)序分析,可以分析HDL語言在FPGA中的物理實(shí)現(xiàn)特性。

對于FPGA設(shè)計(jì)者來說,用好“HDL語言的驗(yàn)證子集”,可以完成FPGA設(shè)計(jì)另外50%的工作——調(diào)試驗(yàn)證。

1. 搭建驗(yàn)證環(huán)境,通過仿真的手段可以檢驗(yàn)FPGA設(shè)計(jì)的正確性。

2. 全面的仿真驗(yàn)證可以減少FPGA硬件調(diào)試的工作量。

3.把硬件調(diào)試與仿真驗(yàn)證方法結(jié)合起來,用調(diào)試解決仿真未驗(yàn)證的問題,用仿真保證已經(jīng)解決的問題不在調(diào)試中再現(xiàn),可以建立一個(gè)回歸驗(yàn)證流程,有助于FPGA設(shè)計(jì)項(xiàng)目的維護(hù)。

FPGA設(shè)計(jì)者的這5項(xiàng)基本功不是孤立的,必須結(jié)合使用,才能完成一個(gè)完整的FPGA設(shè)計(jì)流程。反過來說,通過完成一個(gè)完整的設(shè)計(jì)流程,才能最有效地練習(xí)這5項(xiàng)基本功。對這5項(xiàng)基本功有了初步認(rèn)識,就可以逐個(gè)深入學(xué)習(xí)一些,然后把學(xué)到的知識再次用于完整的設(shè)計(jì)流程。如此反復(fù),就可以逐步提高設(shè)計(jì)水平。采用這樣的循序漸進(jìn)、螺旋式上升的方法,只要通過培訓(xùn)入了門,就可以自學(xué)自練,自我提高。

市面上出售的有關(guān)FPGA設(shè)計(jì)的書籍為了保證結(jié)構(gòu)的完整性,對FPGA設(shè)計(jì)的每一個(gè)方面分開介紹,每一方面雖然深入,但是由于缺少其他相關(guān)方面的支持,讀者很難付諸實(shí)踐,只有通讀完全書才能對FPGA設(shè)計(jì)獲得一個(gè)整體的認(rèn)識。這樣的書籍,作為工程培訓(xùn)指導(dǎo)書不行,可以作為某一個(gè)方面進(jìn)階的參考書。如何使用現(xiàn)有的書籍進(jìn)行自學(xué),這是后話。

對于新入職的員工來說,他們往往對FPGA的整體設(shè)計(jì)流程有了初步認(rèn)識,5項(xiàng)基本功的某幾個(gè)方面可能很扎實(shí)。但是由于某個(gè)或某幾個(gè)方面能力的欠缺,限制了他們獨(dú)自完成整個(gè)設(shè)計(jì)流程的能力。入職培訓(xùn)的目的就是幫助他們掌握整體設(shè)計(jì)流程,培養(yǎng)自我獲取信息的能力,通過幾個(gè)設(shè)計(jì)流程來回的訓(xùn)練,形成自我促進(jìn)、自我發(fā)展的良性循環(huán)。在這一過程中,隨著對工作涉及的知識的廣度和深度的認(rèn)識逐步清晰,新員工的自信心也會逐步增強(qiáng),對個(gè)人的發(fā)展方向也會逐步明確,才能積極主動地參與到工程項(xiàng)目中來。

FPGA的設(shè)計(jì)流程

FPGA的設(shè)計(jì)流程就是利用EDA開發(fā)軟件和編程工具對FPGA芯片進(jìn)行開發(fā)的過程。典型FPGA的開發(fā)流程一般如圖4.1.1所示,包括功能定義/器件選型、設(shè)計(jì)輸入、功能仿真、綜合優(yōu)化、綜合后仿真、實(shí)現(xiàn)、布線后仿真、板級仿真以及芯片編程與調(diào)試等主要步驟。

1、功能定義/器件選型

在FPGA設(shè)計(jì)項(xiàng)目開始之前,必須有系統(tǒng)功能的定義和模塊的劃分,另外就是要根據(jù)任務(wù)要求,如系統(tǒng)的功能和復(fù)雜度,對工作速度和器件本身的資源、成本、以及連線的可布性等方面進(jìn)行權(quán)衡,選擇合適的設(shè)計(jì)方案和合適的器件類型。 一般都采用自頂向下的設(shè)計(jì)方法,把系統(tǒng)分成若干個(gè)基本單元,然后再把每個(gè)基本單元劃分為下一層次的基本單元,一直這樣做下去,直到可以直接使用EDA元件庫為止。

2、 設(shè)計(jì)輸入

設(shè)計(jì)輸入是將所設(shè)計(jì)的系統(tǒng)或電路以開發(fā)軟件要求的某種形式表示出來,并輸入給EDA工具的過程。常用的方法有硬件描述語言(HDL)和原理圖輸入方法等。原理圖輸入方式是一種最直接的描述方式,在可編程芯片發(fā)展的早期應(yīng)用比較廣泛,它將所需的器件從元件庫中調(diào)出來,畫出原理圖。這種方法雖然直觀并易于仿真,但效率很低,且不易維護(hù),不利于模塊構(gòu)造和重用。更主要的缺點(diǎn)是可移植性差,當(dāng)芯片升級后,所有的原理圖都需要作一定的改動。目前,在實(shí)際開發(fā)中應(yīng)用最廣的就是HDL語言輸入法,利用文本描述設(shè)計(jì),可以分為普通HDL和行為HDL。普通HDL有ABEL、CUR等,支持邏輯方程、真值表和狀態(tài)機(jī)等表達(dá)方式,主要用于簡單的小型設(shè)計(jì)。而在中大型工程中,主要使用行為HDL,其主流語言是Verilog HDL和VHDL。這兩種語言都是美國電氣電子工程師協(xié)會(IEEE)的標(biāo)準(zhǔn),其共同的突出特點(diǎn)有:語言與芯片工藝無關(guān),利于自頂向下設(shè)計(jì),便于模塊的劃分與移植,可移植性好,具有很強(qiáng)的邏輯描述和仿真功能,而且輸入效率很高。 除了這IEEE標(biāo)準(zhǔn)語言外,還有廠商自己的語言。也可以用HDL為主,原理圖為輔的混合設(shè)計(jì)方式,以發(fā)揮兩者的各自特色。

3、 功能仿真

功能仿真也稱為前仿真是在編譯之前對用戶所設(shè)計(jì)的電路進(jìn)行邏輯功能驗(yàn)證,此時(shí)的仿真沒有延遲信息,僅對初步的功能進(jìn)行檢測。仿真前,要先利用波形編輯器和HDL等建立波形文件和測試向量(即將所關(guān)心的輸入信號組合成序列),仿真結(jié)果將會生成報(bào)告文件和輸出信號波形,從中便可以觀察各個(gè)節(jié)點(diǎn)信號的變化。如果發(fā)現(xiàn)錯(cuò)誤,則返回設(shè)計(jì)修改邏輯設(shè)計(jì)。常用的工具有Model Tech公司的ModelSim、Sysnopsys公司的VCS和Cadence公司的NC-Verilog以及NC-VHDL等軟件。

4、 綜合優(yōu)化

所謂綜合就是將較高級抽象層次的描述轉(zhuǎn)化成較低層次的描述。綜合優(yōu)化根據(jù)目標(biāo)與要求優(yōu)化所生成的邏輯連接,使層次設(shè)計(jì)平面化,供FPGA布局布線軟件進(jìn)行實(shí)現(xiàn)。就目前的層次來看,綜合優(yōu)化(Synthesis)是指將設(shè)計(jì)輸入編譯成由與門、或門、非門、RAM、觸發(fā)器等基本邏輯單元組成的邏輯連接網(wǎng)表,而并非真實(shí)的門級電路。真實(shí)具體的門級電路需要利用FPGA制造商的布局布線功能,根據(jù)綜合后生成的標(biāo)準(zhǔn)門級結(jié)構(gòu)網(wǎng)表來產(chǎn)生。為了能轉(zhuǎn)換成標(biāo)準(zhǔn)的門級結(jié)構(gòu)網(wǎng)表,HDL程序的編寫必須符合特定綜合器所要求的風(fēng)格。由于門級結(jié)構(gòu)、RTL級的HDL程序的綜合是很成熟的技術(shù),所有的綜合器都可以支持到這一級別的綜合。常用的綜合工具有Synplicity公司的Synplify/Synplify Pro軟件以及各個(gè)FPGA廠家自己推出的綜合開發(fā)工具。

5、 綜合后仿真

綜合后仿真檢查綜合結(jié)果是否和原設(shè)計(jì)一致。在仿真時(shí),把綜合生成的標(biāo)準(zhǔn)延時(shí)文件反標(biāo)注到綜合仿真模型中去,可估計(jì)門延時(shí)帶來的影響。但這一步驟不能估計(jì)線延時(shí),因此和布線后的實(shí)際情況還有一定的差距,并不十分準(zhǔn)確。目前的綜合工具較為成熟,對于一般的設(shè)計(jì)可以省略這一步,但如果在布局布線后發(fā)現(xiàn)電路結(jié)構(gòu)和設(shè)計(jì)意圖不符,則需要回溯到綜合后仿真來確認(rèn)問題之所在。在功能仿真中介紹的軟件工具一般都支持綜合后仿真。

一文解讀FPGA設(shè)計(jì)者的5項(xiàng)基本功及設(shè)計(jì)流程

圖4-1 FPGA典型設(shè)計(jì)流程

6、 實(shí)現(xiàn)與布局布線

布局布線可理解為利用實(shí)現(xiàn)工具把邏輯映射到目標(biāo)器件結(jié)構(gòu)的資源中,決定邏輯的最佳布局,選擇邏輯與輸入輸出功能鏈接的布線通道進(jìn)行連線,并產(chǎn)生相應(yīng)文件(如配置文件與相關(guān)報(bào)告),實(shí)現(xiàn)是將綜合生成的邏輯網(wǎng)表配置到具體的FPGA芯片上,布局布線是其中最重要的過程。布局將邏輯網(wǎng)表中的硬件原語和底層單元合理地配置到芯片內(nèi)部的固有硬件結(jié)構(gòu)上,并且往往需要在速度最優(yōu)和面積最優(yōu)之間作出選擇。布線根據(jù)布局的拓?fù)浣Y(jié)構(gòu),利用芯片內(nèi)部的各種連線資源,合理正確地連接各個(gè)元件。目前,F(xiàn)PGA的結(jié)構(gòu)非常復(fù)雜,特別是在有時(shí)序約束條件時(shí),需要利用時(shí)序驅(qū)動的引擎進(jìn)行布局布線。布線結(jié)束后,軟件工具會自動生成報(bào)告,提供有關(guān)設(shè)計(jì)中各部分資源的使用情況。由于只有FPGA芯片生產(chǎn)商對芯片結(jié)構(gòu)最為了解,所以布局布線必須選擇芯片開發(fā)商提供的工具。

7、 時(shí)序仿真

時(shí)序仿真,也稱為后仿真,是指將布局布線的延時(shí)信息反標(biāo)注到設(shè)計(jì)網(wǎng)表中來檢測有無時(shí)序違規(guī)(即不滿足時(shí)序約束條件或器件固有的時(shí)序規(guī)則,如建立時(shí)間、保持時(shí)間等)現(xiàn)象。時(shí)序仿真包含的延遲信息最全,也最精確,能較好地反映芯片的實(shí)際工作情況。由于不同芯片的內(nèi)部延時(shí)不一樣,不同的布局布線方案也給延時(shí)帶來不同的影響。因此在布局布線后,通過對系統(tǒng)和各個(gè)模塊進(jìn)行時(shí)序仿真,分析其時(shí)序關(guān)系,估計(jì)系統(tǒng)性能,以及檢查和消除競爭冒險(xiǎn)是非常有必要的。在功能仿真中介紹的軟件工具一般都支持綜合后仿真。

8、 板級仿真與驗(yàn)證

板級仿真主要應(yīng)用于高速電路設(shè)計(jì)中,對高速系統(tǒng)的信號完整性、電磁干擾等特征進(jìn)行分析,一般都以第三方工具進(jìn)行仿真和驗(yàn)證。

9、 芯片編程與調(diào)試

設(shè)計(jì)的最后一步就是芯片編程與調(diào)試。芯片編程是指產(chǎn)生使用的數(shù)據(jù)文件(位數(shù)據(jù)流文件,Bitstream Generation),然后將編程數(shù)據(jù)下載到FPGA芯片中。其中,芯片編程需要滿足一定的條件,如編程電壓、編程時(shí)序和編程算法等方面。邏輯分析儀(Logic Analyzer,LA)是FPGA設(shè)計(jì)的主要調(diào)試工具,但需要引出大量的測試管腳,且LA價(jià)格昂貴。目前,主流的FPGA芯片生產(chǎn)商都提供了內(nèi)嵌的在線邏輯分析儀(如Xilinx ISE中的ChipScope、Altera QuartusII中的SignalTapII以及SignalProb)來解決上述矛盾,它們只需要占用芯片少量的邏輯資源,具有很高的實(shí)用價(jià)值。

FPGA設(shè)計(jì)心得

工作過的朋友肯定知道,公司里是很強(qiáng)調(diào)規(guī)范的,特別是對于大的設(shè)計(jì)(無論軟件還是硬件),不按照規(guī)范走幾乎是不可實(shí)現(xiàn)的。邏輯設(shè)計(jì)也是這樣:如果不按規(guī)范做的話,過一個(gè)月后調(diào)試時(shí)發(fā)現(xiàn)有錯(cuò),回頭再看自己寫的代碼,估計(jì)很多信號功能都忘了,更不要說檢錯(cuò)了;如果一個(gè)項(xiàng)目做了一半一個(gè)人走了,接班的估計(jì)得從頭開始設(shè)計(jì);如果需要在原來的版本基礎(chǔ)上增加新功能,很可能也得從頭來過,很難做到設(shè)計(jì)的可重用性。在邏輯方面,我覺得比較重要的規(guī)范有這些:

1.設(shè)計(jì)必須文檔化。要將設(shè)計(jì)思路,詳細(xì)實(shí)現(xiàn)等寫入文檔,然后經(jīng)過嚴(yán)格評審?fù)ㄟ^后才能進(jìn)行下一步的工作。這樣做乍看起來很花時(shí)間,但是從整個(gè)項(xiàng)目過程來看,絕對要比一上來就寫代碼要節(jié)約時(shí)間,且這種做法可以使項(xiàng)目處于可控、可實(shí)現(xiàn)的狀態(tài)。

2.代碼規(guī)范。如果在另一個(gè)設(shè)計(jì)中的時(shí)鐘是40ns,復(fù)位周期不變,我們只需對CLK_PERIOD進(jìn)行重新例化就行了,從而使得代碼更加易于重用。

3.信號命名要規(guī)范化。

a.信號名一律小寫,參數(shù)用大寫。

b.對于低電平有效的信號結(jié)尾要用_n標(biāo)記,如rst_n。

c.端口信號排列要統(tǒng)一,一個(gè)信號只占一行,最好按輸入輸出及從哪個(gè)模塊來到哪個(gè)模塊去的關(guān)系排列,這樣在后期仿真驗(yàn)證找錯(cuò)時(shí)后方便很多。

d.一個(gè)模塊盡量只用一個(gè)時(shí)鐘,這里的一個(gè)模塊是指一個(gè)module或者是一個(gè)entity。在多時(shí)鐘域的設(shè)計(jì)中涉及到跨時(shí)鐘域的設(shè)計(jì)中最好有專門一個(gè)模塊做時(shí)鐘域的隔離。這樣做可以讓綜合器綜合出更優(yōu)的結(jié)果。

e.盡量在底層模塊上做邏輯,在高層盡量做例化,頂層模塊只能做例化,禁止出現(xiàn)任何膠連邏輯(gluelogic),哪怕僅僅是對某個(gè)信號取反。理由同上。

f.在FPGA的設(shè)計(jì)上禁止用純組合邏輯產(chǎn)生latch,帶D觸發(fā)器的latch的是允許的,比如配置寄存器就是這種類型。

g.一般來說,進(jìn)入FPGA的信號必須先同步,以提高系統(tǒng)工作頻率(板級)。

h.所有模塊的輸出都要寄存器化,以提高工作頻率,這對設(shè)計(jì)做到時(shí)序收斂也是極有好處的。

i.除非是低功耗設(shè)計(jì),不然不要用門控時(shí)鐘,這會增加設(shè)計(jì)的不穩(wěn)定性,在要用到門控時(shí)鐘的地方,也要將門控信號用時(shí)鐘的下降沿打一拍再輸出與時(shí)鐘相與。

j.禁止用計(jì)數(shù)器分頻后的信號做其它模塊的時(shí)鐘,而要用改成時(shí)鐘使能的方式,否則這種時(shí)鐘滿天飛的方式對設(shè)計(jì)的可靠性極為不利,也大大增加了靜態(tài)時(shí)序分析的復(fù)雜性。如FPGA的輸入時(shí)鐘是25M的,現(xiàn)在系統(tǒng)內(nèi)部要通過RS232與PC通信,要以rs232_1xclk的速率發(fā)送數(shù)據(jù)。

時(shí)序是設(shè)計(jì)出來的

我的boss有在華為及峻龍工作的背景,自然就給我們講了一些華為及altera做邏輯的一些東西,而我們的項(xiàng)目規(guī)范,也基本上是按華為的那一套去做。在工作這幾個(gè)月中,給我感觸最深的是華為的那句話:時(shí)序是設(shè)計(jì)出來的,不是仿出來的,更不是湊出來的。在我們公司,每一個(gè)項(xiàng)目都有很嚴(yán)格的評審,只有評審?fù)ㄟ^了,才能做下一步的工作。以做邏輯為例,并不是一上來就開始寫代碼,而是要先寫總體設(shè)計(jì)方案和邏輯詳細(xì)設(shè)計(jì)方案,要等這些方案評審?fù)ㄟ^,認(rèn)為可行了,才能進(jìn)行編碼,一般來說這部分工作所占的時(shí)間要遠(yuǎn)大于編碼的時(shí)間。

總體方案主要是涉及模塊劃分,一級模塊和二級模塊的接口信號和時(shí)序(我們要求把接口信號的時(shí)序波形描述出來)以及將來如何測試設(shè)計(jì)。在這一級方案中,要保證在今后的設(shè)計(jì)中時(shí)序要收斂到一級模塊(最后是在二級模塊中)。什么意思呢?我們在做詳細(xì)設(shè)計(jì)的時(shí)候,對于一些信號的時(shí)序肯定會做一些調(diào)整的,但是這種時(shí)序的調(diào)整最多只能波及到本一級模塊,而不能影響到整個(gè)設(shè)計(jì)。記得以前在學(xué)校做設(shè)計(jì)的時(shí)候,由于不懂得設(shè)計(jì)時(shí)序,經(jīng)常因?yàn)橛幸惶幮盘柕臅r(shí)序不滿足,結(jié)果不得不將其它模塊信號的時(shí)序也改一下,搞得人很郁悶。

在邏輯詳細(xì)設(shè)計(jì)方案這一級的時(shí)候,我們已經(jīng)將各級模塊的接口時(shí)序都設(shè)計(jì)出來了,各級模塊內(nèi)部是怎么實(shí)現(xiàn)的也基本上確定下來了。由于做到這一點(diǎn),在編碼的時(shí)候自然就很快了,最重要的是這樣做后可以讓設(shè)計(jì)會一直處于可控的狀態(tài),不會因?yàn)槟骋惶幍腻e(cuò)誤引起整個(gè)設(shè)計(jì)從頭進(jìn)行。

如何提高電路工作頻率

對于設(shè)計(jì)者來說,當(dāng)然希望我們設(shè)計(jì)的電路的工作頻率(在這里如無特別說明,工作頻率指FPGA片內(nèi)的工作頻率)盡量高。我們也經(jīng)常聽說用資源換速度,用流水的方式可以提高工作頻率,這確實(shí)是一個(gè)很重要的方法,今天我想進(jìn)一步去分析該如何提高電路的工作頻率。

先來分析下是什么影響了電路的工作頻率。

電路的工作頻率主要與寄存器到寄存器之間的信號傳播時(shí)延及clock skew有關(guān)。在FPGA內(nèi)部如果時(shí)鐘走長線的話,clockskew很小,基本上可以忽略, 在這里為了簡單起見,只考慮信號的傳播時(shí)延的因素。信號的傳播時(shí)延包括寄存器的開關(guān)時(shí)延、走線時(shí)延、經(jīng)過組合邏輯的時(shí)延(這樣劃分或許不是很準(zhǔn)確,不過對分析問題來說應(yīng)該是沒有可以的),要提高電路的工作頻率,就要在這三個(gè)時(shí)延中做文章,使其盡可能的小。先來看開關(guān)時(shí)延,這個(gè)時(shí)延是由器件物理特性決定的,沒有辦法去改變,所以只能通過改變走線方式和減少組合邏輯的方法來提高工作頻率。

1.通過改變走線的方式減少時(shí)延。

以 Altera的器件為例,在quartus里面的timing closure floorplan 可以看到有很多條條塊塊,我們可以將條條塊塊按行和按列分,每一個(gè)條塊代表1個(gè)LAB,每個(gè)LAB里有8個(gè)或者是10個(gè)LE。它們的走線時(shí)延的關(guān)系如下:同一個(gè)LAB中(最快) 同列或者同行 不同行且不同列。

通過給綜合器加適當(dāng)?shù)募s束(不可貪心,一般以加5%裕量較為合適,比如電路工作在100Mhz,則加約束加到105Mhz就可以了,貪心效果反而不好,且極大增加綜合時(shí)間)可以將相關(guān)的邏輯在布線時(shí)盡量布的靠近一點(diǎn),從而減少走線的時(shí)延。(注:約束的實(shí)現(xiàn)不完全是通過改進(jìn)布局布線方式去提高工作頻率,還有其它的改進(jìn)措施)

2.通過減少組合邏輯的減少時(shí)延。

上面講了可以通過加約束來提高工作頻率,但是在做設(shè)計(jì)之初可萬萬不可將提高工作頻率的美好愿望寄托在加約束上,我們要通過合理的設(shè)計(jì)去避免出現(xiàn)大的組合邏輯,從而提高電路的工作頻率,這才能增強(qiáng)設(shè)計(jì)的可移植性,才可以使得設(shè)計(jì)在移植到另一同等速度級別的芯片時(shí)還能使用。

我們知道,目前大部分FPGA都基于4輸入LUT的,如果一個(gè)輸出對應(yīng)的判斷條件大于四輸入的話就要由多個(gè)LUT級聯(lián)才能完成,這樣就引入一級組合邏輯時(shí)延,我們要減少組合邏輯,無非就是要輸入條件盡可能的少,,這樣就可以級聯(lián)的LUT更少,從而減少了組合邏輯引起的時(shí)延。

平時(shí)聽說的流水就是一種通過切割大的組合邏輯(在其中插入一級或多級D觸發(fā)器,從而使寄存器與寄存器之間的組合邏輯減少)來提高工作頻率的方法。比如一個(gè)32位的計(jì)數(shù)器,該計(jì)數(shù)器的進(jìn)位鏈很長,必然會降低工作頻率,我們可以將其分割成4位和8位的計(jì)數(shù),每當(dāng)4位的計(jì)數(shù)器計(jì)到15后觸發(fā)一次8位的計(jì)數(shù)器,這樣就實(shí)現(xiàn)了計(jì)數(shù)器的切割,也提高了工作頻率。

在狀態(tài)機(jī)中,一般也要將大的計(jì)數(shù)器移到狀態(tài)機(jī)外,因?yàn)橛?jì)數(shù)器這東西一般是經(jīng)常是大于4輸入的,如果再和其它條件一起做為狀態(tài)的跳變判據(jù)的話,必然會增加LUT的級聯(lián),從而增大組合邏輯。以一個(gè)6輸入的計(jì)數(shù)器為例,我們原希望當(dāng)計(jì)數(shù)器計(jì)到111100后狀態(tài)跳變,現(xiàn)在我們將計(jì)數(shù)器放到狀態(tài)機(jī)外,當(dāng)計(jì)數(shù)器計(jì)到111011后產(chǎn)生個(gè)enable信號去觸發(fā)狀態(tài)跳變,這樣就將組合邏輯減少了。

上面說的都是可以通過流水的方式切割組合邏輯的情況,但是有些情況下我們是很難去切割組合邏輯的,在這些情況下又該怎么做呢?

狀態(tài)機(jī)就是這么一個(gè)例子,我們不能通過往狀態(tài)譯碼組合邏輯中加入流水。如果我們的設(shè)計(jì)中有一個(gè)幾十個(gè)狀態(tài)的狀態(tài)機(jī),它的狀態(tài)譯碼邏輯將非常之巨大,毫無疑問,這極有可能是設(shè)計(jì)中的關(guān)鍵路徑。那該怎么做呢?還是老思路,減少組合邏輯。我們可以對狀態(tài)的輸出進(jìn)行分析,對它們進(jìn)行重新分類,并根據(jù)這個(gè)重新定義成一組組小狀態(tài)機(jī),通過對輸入進(jìn)行選擇(case語句)并去觸發(fā)相應(yīng)的小狀態(tài)機(jī),從而實(shí)現(xiàn)了將大的狀態(tài)機(jī)切割成小的狀態(tài)機(jī)。在ATA6的規(guī)范中(硬盤的標(biāo)準(zhǔn)),輸入的命令大概有20十種,每一個(gè)命令又對應(yīng)很多種狀態(tài),如果用一個(gè)大的狀態(tài)機(jī)(狀態(tài)套狀態(tài))去做那是不可想象的,可以通過case語句去對命令進(jìn)行譯碼,并觸發(fā)相應(yīng)的狀態(tài)機(jī),這樣做下來這一個(gè)模塊的頻率就可以跑得比較高了。

總結(jié):提高工作頻率的本質(zhì)就是要減少寄存器到寄存器的時(shí)延,最有效的方法就是避免出現(xiàn)大的組合邏輯,也就是要盡量去滿足四輸入的條件,減少LUT級聯(lián)的數(shù)量。我們可以通過加約束、流水、切割狀態(tài)的方法提高工作頻率。

做邏輯的難點(diǎn)在于系統(tǒng)結(jié)構(gòu)設(shè)計(jì)和仿真驗(yàn)證

剛?cè)ス镜臅r(shí)候boss就和我講,做邏輯的難點(diǎn)不在于RTL級代碼的設(shè)計(jì),而在于系統(tǒng)結(jié)構(gòu)設(shè)計(jì)和仿真驗(yàn)證方面。目前國內(nèi)對可綜合的設(shè)計(jì)強(qiáng)調(diào)的比較多,而對系統(tǒng)結(jié)構(gòu)設(shè)計(jì)和仿真驗(yàn)證方面似乎還沒有什么資料,這或許也從一個(gè)側(cè)面反映了國內(nèi)目前的設(shè)計(jì)水平還比較低下吧。以前在學(xué)校的時(shí)候,總是覺得將RTL級代碼做好就行了,仿真驗(yàn)證只是形式而已,所以對HDL的行為描述方面的語法不屑一顧,對testbench也一直不愿意去學(xué)--因?yàn)橛X得畫波形圖方便;對于系統(tǒng)結(jié)構(gòu)設(shè)計(jì)更是一點(diǎn)都不懂了。到了公司接觸了些東西才發(fā)現(xiàn)完全不是這樣。

其實(shí)在國外,花在仿真驗(yàn)證上的時(shí)間和人力大概是花在RTL級代碼上的兩倍,現(xiàn)在仿真驗(yàn)證才是百萬門級芯片設(shè)計(jì)的關(guān)鍵路徑。

仿真驗(yàn)證的難點(diǎn)主要在于怎么建模才能完全和準(zhǔn)確地去驗(yàn)證設(shè)計(jì)的正確性(主要是提高代碼覆蓋),在這過程中,驗(yàn)證速度也是很重要的。

驗(yàn)證說白了也就是怎么產(chǎn)生足夠覆蓋率的激勵(lì)源,然后怎么去檢測錯(cuò)誤。我個(gè)人認(rèn)為,在仿真驗(yàn)證中,最基本就是要做到驗(yàn)證的自動化。這也是為什么我們要寫testbench的原因。在我現(xiàn)在的一個(gè)設(shè)計(jì)中,每次跑仿真都要一個(gè)小時(shí)左右(這其實(shí)算小設(shè)計(jì))由于畫波形圖無法做到驗(yàn)證自動化,如果用通過畫波形圖來仿真的話,一是畫波形會畫死(特別是對于算法復(fù)雜的、輸入呈統(tǒng)計(jì)分布的設(shè)計(jì)),二是看波形圖要看死,三是檢錯(cuò)率幾乎為零。那么怎么做到自動化呢?我個(gè)人的水平還很有限,只能簡單地談下BFM(bus function model,總線功能模型)。

以做一個(gè)MAC的core為例(背板是PCI總線),那么我們需要一個(gè)MAC_BFM和PCI_BFM及PCI_BM(PCI behavior model)。MAC_BFM的主要功能是產(chǎn)生以太網(wǎng)幀(激勵(lì)源),隨機(jī)的長度和幀頭,內(nèi)容也是隨機(jī)的,在發(fā)送的同時(shí)也將其復(fù)制一份到PCI_BM中;PCI_BFM的功能則是仿PCI總線的行為,比如被測收到了一個(gè)正確幀后會向PCI總線發(fā)送一個(gè)請求,PCI_BFM則會去響應(yīng)它,并將數(shù)據(jù)收進(jìn)來;PCI_BM的主要功能是將MAC_BFM發(fā)送出來的東西與PCI_BFM接收到的東西做比較,由于它具有了MAC_BFM的發(fā)送信息和PCI_BFM的接收信息,只要設(shè)計(jì)合理,它總是可以自動地、完全地去測試被測是否工作正常,從而實(shí)現(xiàn)自動檢測。 華為在仿真驗(yàn)證方面估計(jì)在國內(nèi)來說是做的比較好的,他們已建立起了比較好的驗(yàn)證平臺,大部分與通信有關(guān)的BFM都做好了,聽我朋友說,現(xiàn)在他們只需要將被測放在測試平臺中,并配置好參數(shù),就可以自動地檢測被測功能的正確與否。

在功能仿真做完后,由于我們做在是FPGA的設(shè)計(jì),在設(shè)計(jì)時(shí)已經(jīng)基本保證RTL級代碼在綜合結(jié)果和功能仿真結(jié)果的一致性,只要綜合布局布線后的靜態(tài)時(shí)序報(bào)告沒有違反時(shí)序約束的警告,就可以下到板子上去調(diào)試了。事實(shí)上,在華為中興,他們做FPGA的設(shè)計(jì)時(shí)也是不做時(shí)序仿真的,因?yàn)樽鰰r(shí)序仿真很花時(shí)間,且效果也不見得比看靜態(tài)時(shí)序分析報(bào)告好。

當(dāng)然了,如果是ASIC的設(shè)計(jì)話,它們的仿真驗(yàn)證的工作量要大一些,在涉及到多時(shí)鐘域的設(shè)計(jì)時(shí),一般還是做后仿的。不過在做后仿之前,也一般會先用形式驗(yàn)證工具和通過靜態(tài)時(shí)序分序報(bào)告去查看有沒有違反設(shè)計(jì)要求的地方,這樣做了之后,后仿的工作量可以小很多。

在HDL語言方面,國內(nèi)語言很多人都在爭論VHDL和verilog哪個(gè)好,其實(shí)我個(gè)人認(rèn)為這并沒有多大的意義,外面的大公司基本上都是用verilog在做RTL級的代碼,所以還是建議大家盡量學(xué)verilog。在仿真方面,由于VHDL在行為級建模方面弱于verilog,用VHDL做仿真模型的很少,當(dāng)然也不是說verilog就好,其實(shí)verilog在復(fù)雜的行為級建模方面的能力也是有限的,比如目前它還不支持?jǐn)?shù)組。在一些復(fù)雜的算法設(shè)計(jì)中,需要高級語言做抽象才能描述出行為級模型。在國外,仿真建模很多都是用System C和E語言,用verilog的都算是很落后的了,國內(nèi)華為的驗(yàn)證平臺好像是用System C寫。

在系統(tǒng)結(jié)構(gòu)設(shè)計(jì)方面,由于我做的設(shè)計(jì)還不夠大,還談不上什么經(jīng)驗(yàn),只是覺得必須要具備一些計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)的知識才行。

劃分的首要依據(jù)是功能,之后是選擇合適的,總線結(jié)構(gòu)、存儲結(jié)構(gòu)和處理器架構(gòu),通過系統(tǒng)結(jié)構(gòu)劃分要使各部分功能模塊清晰,易于實(shí)現(xiàn)。這一部分我想過段時(shí)間有一點(diǎn)體會了再和大家分享,就先不誤導(dǎo)大家了。

最后簡單說一下體會吧,歸結(jié)起來就多實(shí)踐、多思考、多問。實(shí)踐出真知,看100遍別人的方案不如自己去實(shí)踐一下。實(shí)踐的動力一方面來自興趣,一方面來自壓力,我個(gè)人覺得后者更重要。有需求會容易形成壓力,也就是說最好能在實(shí)際的項(xiàng)目開發(fā)中鍛煉,而不是為了學(xué)習(xí)而學(xué)習(xí)。在實(shí)踐過程中要多思考,多想想問題出現(xiàn)的原因,問題解決后要多問幾個(gè)為什么,這也是經(jīng)驗(yàn)積累的過程,如果有寫項(xiàng)目日志的習(xí)慣更好,把問題及原因、解決的辦法都寫進(jìn)去。最后還要多問,遇到問題思索后還得不到解決就要問了,畢竟個(gè)人的力量是有限的,問同學(xué)同事,問搜索引擎,問網(wǎng)友,都可以,一篇文章、朋友們的點(diǎn)撥都可能幫助自己快速解決問題。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1644

    文章

    22009

    瀏覽量

    616591
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    FPGA入門:FPGA設(shè)計(jì)者入門必備!

    電子發(fā)燒友網(wǎng): 在我看來,想要成為名合格的 FPGA 設(shè)計(jì)者,需要掌握很多知識和技巧。本文就針對FPGA設(shè)計(jì)入門需要掌握的
    發(fā)表于 06-26 15:26 ?1.4w次閱讀
    <b class='flag-5'>FPGA</b>入門:<b class='flag-5'>FPGA</b><b class='flag-5'>設(shè)計(jì)者</b>入門必備!

    FPGA設(shè)計(jì)者的五項(xiàng)必知必會

    在我看來,成為名說得過去的FPGA設(shè)計(jì)者,需要練好5項(xiàng)基本功:仿真、綜合、時(shí)序分析、調(diào)試、驗(yàn)證
    發(fā)表于 12-10 16:47 ?727次閱讀

    學(xué)好FPGA要掌握的五項(xiàng)基本功

    。 3. 把硬件調(diào)試與仿真驗(yàn)證方法結(jié)合起來,用調(diào)試解決仿真未驗(yàn)證的問題,用仿真保證已經(jīng)解決的問題不在調(diào)試中再現(xiàn),可以建立個(gè)回歸驗(yàn)證流程,有助于FPGA設(shè)計(jì)項(xiàng)目的維護(hù)。 FPGA
    發(fā)表于 02-28 14:04

    FPGA設(shè)計(jì)者5項(xiàng)基本功

    FPGA設(shè)計(jì)者5項(xiàng)基本功
    發(fā)表于 08-20 15:24

    PGA設(shè)計(jì)者5項(xiàng)基本功

    Planner)4. 調(diào)試:[sub]Quartus II (SignalTap II Logic Analyzer, Virtual JTAG, Assignment Editor)[/sub]5
    發(fā)表于 10-10 10:10

    FPGA設(shè)計(jì)者5項(xiàng)基本功

    設(shè)計(jì)項(xiàng)目的維護(hù)。 FPGA設(shè)計(jì)者的這5項(xiàng)基本功不是孤立的,必須結(jié)合使用,才能完成個(gè)完整的
    發(fā)表于 05-16 18:58

    FPGA設(shè)計(jì)者5項(xiàng)基本功

    設(shè)計(jì)項(xiàng)目的維護(hù)。 FPGA設(shè)計(jì)者的這5項(xiàng)基本功不是孤立的,必須結(jié)合使用,才能完成個(gè)完整的
    發(fā)表于 08-26 09:43

    FPGA設(shè)計(jì)者5項(xiàng)基本功

    設(shè)計(jì)項(xiàng)目的維護(hù)。 FPGA設(shè)計(jì)者的這5項(xiàng)基本功不是孤立的,必須結(jié)合使用,才能完成個(gè)完整的
    發(fā)表于 09-14 11:02

    FPGA設(shè)計(jì)者的五項(xiàng)基本功

    回歸驗(yàn)證流程,有助于FPGA設(shè)計(jì)項(xiàng)目的維護(hù)。 FPGA設(shè)計(jì)者的這5項(xiàng)
    發(fā)表于 03-19 10:44

    FPGA設(shè)計(jì)者5項(xiàng)基本功

    回歸驗(yàn)證流程,有助于FPGA設(shè)計(jì)項(xiàng)目的維護(hù)。 FPGA設(shè)計(jì)者的這5項(xiàng)
    發(fā)表于 10-14 14:53

    FPGA基本開發(fā)流程概述

    的提上議程開始,設(shè)計(jì)者需要進(jìn)行FPGA/CPLD器件功能的需求分析,然后進(jìn)行模塊的劃分,比較復(fù)雜和龐大的設(shè)計(jì),則會通過模塊劃分把工作交給個(gè)團(tuán)隊(duì)的多人協(xié)作完成。各個(gè)模塊的具體任務(wù)和功能劃分完畢(通常
    發(fā)表于 01-28 02:29

    【微信精選】個(gè)死磕FPGA 9年的大齡工程師的肺腑之言

    調(diào)試解決仿真未驗(yàn)證的問題,用仿真保證已經(jīng)解決的問題不在調(diào)試中再現(xiàn),可以建立個(gè)回歸驗(yàn)證流程,有助于FPGA設(shè)計(jì)項(xiàng)目的維護(hù)。FPGA設(shè)計(jì)者的這
    發(fā)表于 08-07 07:00

    FPGA是ASIC設(shè)計(jì)者道普通難題?

    FPGA是ASIC設(shè)計(jì)者道普通難題摘要:隨著開發(fā) ASIC 與 SOC 的掩膜費(fèi)用、復(fù)雜度和工具成本的上升,今天很多設(shè)計(jì)小組正在選用 FPGA 實(shí)現(xiàn)自己的產(chǎn)品設(shè)計(jì)。但是,在
    發(fā)表于 06-18 16:21 ?10次下載

    解讀FPGA設(shè)計(jì)者5項(xiàng)基本功及設(shè)計(jì)流程資料下載

    電子發(fā)燒友網(wǎng)為你提供解讀FPGA設(shè)計(jì)者5項(xiàng)
    發(fā)表于 04-24 08:46 ?38次下載
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>解讀</b><b class='flag-5'>FPGA</b><b class='flag-5'>設(shè)計(jì)者</b>的<b class='flag-5'>5</b><b class='flag-5'>項(xiàng)</b><b class='flag-5'>基本功</b>及設(shè)計(jì)<b class='flag-5'>流程</b>資料下載

    做好FPGA設(shè)計(jì)需要掌握哪些知識

    成為名說得過去的FPGA設(shè)計(jì)者,需要練好5項(xiàng)基本功:仿真、綜合、時(shí)序分析、調(diào)試、驗(yàn)證。
    發(fā)表于 09-28 10:36 ?1088次閱讀