基于Xilinx芯片Verilog進(jìn)階設(shè)計(jì)_第1頁(yè)
基于Xilinx芯片Verilog進(jìn)階設(shè)計(jì)_第2頁(yè)
基于Xilinx芯片Verilog進(jìn)階設(shè)計(jì)_第3頁(yè)
基于Xilinx芯片Verilog進(jìn)階設(shè)計(jì)_第4頁(yè)
基于Xilinx芯片Verilog進(jìn)階設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩59頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第四章 基于Xilinx芯片Verilog進(jìn)階設(shè)計(jì)面向硬件電路的設(shè)計(jì)方法代碼風(fēng)格與可綜合設(shè)計(jì)通用代碼風(fēng)格專(zhuān)用代碼風(fēng)格企業(yè)代碼風(fēng)格企業(yè)級(jí)大規(guī)模FPGA應(yīng)用設(shè)計(jì)方法原語(yǔ)的使用面向硬件電路的設(shè)計(jì)方法將具體功能形成硬件的RTL級(jí)模型編寫(xiě)代碼始終要考慮硬件如何實(shí)現(xiàn)基于FPGA實(shí)現(xiàn)的Verilog設(shè)計(jì)特點(diǎn)并行化同步控制實(shí)現(xiàn)代價(jià)面向硬件電路的設(shè)計(jì)方法硬件實(shí)現(xiàn)的并行化從電路上來(lái)看:只要芯片上電,所有邏輯就開(kāi)始工作。從代碼上來(lái)看:所有的描述語(yǔ)句之間是并行執(zhí)行的;always語(yǔ)句在邊沿觸發(fā)條件下的行為描述均采用非阻塞賦值,并行執(zhí)行;面向RTL級(jí)電路的電路設(shè)計(jì)易于實(shí)現(xiàn)流水操作;與一般高級(jí)語(yǔ)言的順序代碼為主的設(shè)計(jì)方法

2、有本質(zhì)的區(qū)別。面向硬件電路的設(shè)計(jì)方法時(shí)序延遲信號(hào)reg a, a_d1, a_d2;always (posedge clk or negedge rst)beginif (rst)begina_d1 = #TP 0; a_d2 = #TP 0;endelsebegina_d1 = #TP a; a_d2 = #TP a_d1; endend面向硬件電路的設(shè)計(jì)方法基于全局時(shí)鐘的同步設(shè)計(jì)數(shù)據(jù)存儲(chǔ)在FPGA的存放器或存儲(chǔ)器中,時(shí)鐘可看作執(zhí)行控制器;串行算法的執(zhí)行可以按照時(shí)鐘節(jié)拍的順序進(jìn)行控制,存放器輸出以及組合邏輯通常作為控制條件。例如:采用計(jì)數(shù)器控制狀態(tài)變化或數(shù)據(jù)處理過(guò)程。面向硬件電路的設(shè)計(jì)方法實(shí)

3、現(xiàn)代價(jià)“面積和“速度的綜合考慮:“面積指所占用的FPGA資源FF和LUT;“速度指芯片穩(wěn)定運(yùn)行所到達(dá)的最高頻率?!懊娣e和“速度是一對(duì)矛盾,可相互轉(zhuǎn)化:“面積優(yōu)先:資源復(fù)用;“速度優(yōu)先:冗余同構(gòu)部件。 ISE 的Map選項(xiàng):優(yōu)化策略可選擇Area和Speed的優(yōu)化策略代碼風(fēng)格與可綜合設(shè)計(jì)Verilog HDL語(yǔ)言本身的標(biāo)準(zhǔn)只面向仿真不使用綜合工具不支持的Verilog結(jié)構(gòu)除了wire、reg的多數(shù)數(shù)據(jù)類(lèi)型開(kāi)關(guān)級(jí)原語(yǔ)deassign、wait等行為語(yǔ)句UDP和specify模塊遵循可綜合設(shè)計(jì)原那么代碼綜合出預(yù)想的邏輯行為描述的完整性代碼風(fēng)格與可綜合設(shè)計(jì)同步電路設(shè)計(jì)優(yōu)點(diǎn)容易使用存放器的異步復(fù)位/置位

4、端,以使整個(gè)電路有一個(gè)確定的初始狀態(tài);有效防止毛刺,提高可靠性;簡(jiǎn)化時(shí)序分析過(guò)程;減少對(duì)工作環(huán)境的依賴(lài)性,提高可移植性;原那么盡可能使用單時(shí)鐘全局時(shí)鐘盡可能使用單時(shí)鐘沿觸發(fā)posedge clk防止使用門(mén)控時(shí)鐘組合邏輯驅(qū)動(dòng)的時(shí)鐘假設(shè)使用分頻時(shí)鐘應(yīng)當(dāng)統(tǒng)一管理代碼風(fēng)格與可綜合設(shè)計(jì)同步電路設(shè)計(jì)代碼風(fēng)格與可綜合設(shè)計(jì)同步電路設(shè)計(jì)的模塊劃分信息隱蔽、抽象:防止跨模塊控制,邊界清晰;端口明確:禁制多重功能和無(wú)用接口;時(shí)鐘域區(qū)分:異步FIFO或雙端口RAM實(shí)現(xiàn)多時(shí)鐘域隔離;低頻時(shí)鐘域盡可能劃分到一個(gè)模塊中;資源優(yōu)化:盡量使用廠商提供的原語(yǔ)存放器劃分:模塊的輸出盡可能采用存放器輸出reg型代碼風(fēng)格與可綜合設(shè)計(jì)代

5、碼風(fēng)格包括書(shū)寫(xiě)標(biāo)準(zhǔn)和描述方法通用代碼風(fēng)格Verilog HDL語(yǔ)言標(biāo)準(zhǔn),硬件無(wú)關(guān),性能未必最優(yōu);專(zhuān)用代碼風(fēng)格基于具體芯片的結(jié)構(gòu)和資源,性能優(yōu)化,移植性可能受影響。“華為Verilog HDL設(shè)計(jì)標(biāo)準(zhǔn)Sun公司 “Verilog Style and Coding Guidelines“Actel HDL Coding Style Guider注重代碼的硬件實(shí)現(xiàn)質(zhì)量。 目標(biāo):功能正確,性能最優(yōu)通用代碼風(fēng)格邏輯復(fù)用Synplify提供邏輯復(fù)用選項(xiàng),但假設(shè)要獲得最正確的復(fù)用效果,在源代碼設(shè)計(jì)中應(yīng)采用顯式的復(fù)用控制邏輯;節(jié)約面積。邏輯復(fù)制Synplify提供最大扇出選項(xiàng),如果扇出過(guò)大驅(qū)動(dòng)過(guò)多后續(xù)邏輯,需

6、增加緩沖器提高驅(qū)動(dòng)能力,但信號(hào)延遲增大;增加面積。通用代碼風(fēng)格邏輯結(jié)構(gòu)樹(shù)狀結(jié)構(gòu)優(yōu)于鏈?zhǔn)浇Y(jié)構(gòu),縮短延遲級(jí)數(shù)。if語(yǔ)句和case語(yǔ)句使用原那么if語(yǔ)句面積小,延遲大;case語(yǔ)句面積大,速度快。if適合對(duì)速度無(wú)特殊要求的場(chǎng)合;case適合高速編解碼電路。if分支具有優(yōu)先級(jí),case分支無(wú)優(yōu)先級(jí)。if不可嵌套技術(shù)過(guò)多,一般不超過(guò)3-4層。兼顧面積和速度,if和case混合使用。通用代碼風(fēng)格關(guān)鍵路徑信號(hào)處理引起電路建立時(shí)間缺乏的信號(hào)路徑成為關(guān)鍵路徑組合電路關(guān)鍵路徑提取采用邏輯拆分方式,降低關(guān)鍵信號(hào)的組合延遲級(jí)數(shù)。分析下面語(yǔ)句中b所經(jīng)過(guò)的LUT級(jí)數(shù)。assign y = a & b & c | d &

7、e & b;assign t = a & c | d & e;assign y = b & t;通用代碼風(fēng)格if和case不完整分支造成的意外鎖存器當(dāng)always語(yǔ)句使用電平觸發(fā)時(shí)有可能產(chǎn)生鎖存器。參見(jiàn)P106例3-12和例3-13當(dāng)always語(yǔ)句使用時(shí)鐘沿觸發(fā)時(shí)不會(huì)產(chǎn)生,此時(shí)只產(chǎn)生存放器。通用代碼風(fēng)格reg型信號(hào)只能在一個(gè)always語(yǔ)句中賦值最常見(jiàn)的HDL行為描述建模錯(cuò)誤之一防止assign不確定語(yǔ)句assign signal_a = #4 signal_a;#4被綜合工具忽略掉專(zhuān)用代碼風(fēng)格時(shí)鐘信號(hào)分配原那么使用全局時(shí)鐘,通過(guò)BUFG驅(qū)動(dòng),時(shí)鐘信號(hào)到達(dá)各個(gè)存放器的延遲相同。減少時(shí)鐘信號(hào)種

8、類(lèi)防止時(shí)鐘毛刺信號(hào)不使用門(mén)控時(shí)鐘專(zhuān)用代碼風(fēng)格SRL16的使用SRL16是一種基于LUT的移位存放器;可生成任意位寬和深度的移位存放器;srl16_based_ram my_shift_ram(.clk ( ),.d ( ),.q ( );專(zhuān)用代碼風(fēng)格觸發(fā)器資源分配盡量使用庫(kù)中的觸發(fā)器資源;狀態(tài)機(jī)編碼盡可能采用“獨(dú)熱碼one-hot。 (synplify綜合工具可提供相關(guān)功能)反向信號(hào)盡量使用符號(hào),而不使用not原語(yǔ);不要嘗試用多個(gè)反向器級(jí)聯(lián)來(lái)增加需要的信號(hào)延遲;反向信號(hào)驅(qū)動(dòng)多個(gè)負(fù)載可采用分散反向。 綜合工具可自動(dòng)優(yōu)化企業(yè)代碼風(fēng)格1.根本書(shū)寫(xiě)規(guī)那么用有意義而有效的名字;用連貫的縮寫(xiě);Clk Rs

9、t 用最右邊左邊的字符下劃線(xiàn)表示低電平有效,高電平有效的信號(hào)不得以下劃線(xiàn)表示;Rst_ Trdy_名字一般首字符大寫(xiě),其余小寫(xiě)但parameter, integer 定義的數(shù)值名可全部用大寫(xiě),兩個(gè)詞之間要用下劃線(xiàn)連接Packet_addr Data_in企業(yè)代碼風(fēng)格1.根本書(shū)寫(xiě)規(guī)那么全局信號(hào)名字中應(yīng)包含信號(hào)來(lái)源的一些信息;同一信號(hào)在不同層次應(yīng)保持一致性;自己定義的常數(shù)類(lèi)型等用大寫(xiě)標(biāo)識(shí)parameter CYCLE = 100;防止使用保存字作為信號(hào)、模塊名稱(chēng);添加有意義的后綴使信號(hào)名更加明確。企業(yè)代碼風(fēng)格2.Module頂層模塊應(yīng)只是內(nèi)部模塊間的互連,除了內(nèi)部的互連和模塊的調(diào)用外盡量防止再做邏

10、輯如不能再出現(xiàn)對(duì)reg變量的always賦值,不能再用assign語(yǔ)句完成復(fù)雜邏輯;每一個(gè)模塊應(yīng)在開(kāi)始處注明文件名功能描述引用模塊設(shè)計(jì)者設(shè)計(jì)時(shí)間及版權(quán)信息ISE生成模板;不要對(duì)input進(jìn)行驅(qū)動(dòng), 在module 內(nèi)不要存在沒(méi)有驅(qū)動(dòng)的信號(hào),更不能在模塊端口中出現(xiàn)沒(méi)有驅(qū)動(dòng)的輸出信號(hào),防止在仿真或綜合時(shí)產(chǎn)生warning,干擾錯(cuò)誤定位;防止由于未驅(qū)動(dòng)產(chǎn)生的x,z企業(yè)代碼風(fēng)格2.Module每行應(yīng)限制在80個(gè)字符以?xún)?nèi)以保持代碼的清晰美觀和層次感;模塊實(shí)例名應(yīng)采用U_xx命名,端口采用顯式關(guān)聯(lián)而非隱式關(guān)聯(lián);用一個(gè)時(shí)鐘的上沿或下沿采樣信號(hào),不能混合使用;如果一定要使用時(shí)鐘雙沿,可使用180度相位時(shí)鐘;在

11、模塊中增加注釋?zhuān)籑odule 名要用大寫(xiě)標(biāo)示,且應(yīng)與文件名保持一致;企業(yè)代碼風(fēng)格2.Module嚴(yán)格芯片級(jí)模塊的劃分,只有頂層包括IO引腳;模塊輸出存放器化,對(duì)所有模塊的輸出加以存放,輸出的驅(qū)動(dòng)強(qiáng)度和輸入的延遲可以預(yù)測(cè),從而使得模塊的綜合過(guò)程更簡(jiǎn)單;將關(guān)鍵路徑邏輯和非關(guān)鍵路徑邏輯放在不同模塊,實(shí)施不同的優(yōu)化策略。企業(yè)代碼風(fēng)格3.線(xiàn)網(wǎng)與存放器一個(gè)reg變量只能在一個(gè)always語(yǔ)句中賦值;向量有效位順序的定義一般是從大數(shù)到小數(shù);模塊輸出端口,對(duì)線(xiàn)網(wǎng)和存放器類(lèi)型的要做聲明;使用克綜合的的線(xiàn)網(wǎng)和存放器類(lèi)型。企業(yè)代碼風(fēng)格4.表達(dá)式用括號(hào)來(lái)表示執(zhí)行的優(yōu)先級(jí),使優(yōu)先級(jí)閱讀更清晰;注意不要造成額外的延遲用一

12、個(gè)函數(shù)(function)來(lái)代替表達(dá)式的屢次重復(fù),仿真中經(jīng)常使用的一組描述可以寫(xiě)到一個(gè)任務(wù)(task)中;企業(yè)代碼風(fēng)格5. if語(yǔ)句向量比較時(shí)比較的向量寬度要相等,不相等時(shí)建議采用顯示擴(kuò)展;每一個(gè)if 都應(yīng)有一個(gè)else 和它相對(duì)應(yīng);應(yīng)注意if .else if .else if .else 的優(yōu)先級(jí);如果變量在if-else 或case 語(yǔ)句中做非完全賦值那么應(yīng)給變量一個(gè)缺省值。always語(yǔ)句的自身要求企業(yè)代碼風(fēng)格6. case語(yǔ)句case語(yǔ)句通常綜合成一級(jí)多路復(fù)用器,if-then-else那么綜合成優(yōu)先編碼的串接的多個(gè)多路復(fù)用器;所有的Case 應(yīng)該有一個(gè)default case 允許

13、空語(yǔ)句Default : ;企業(yè)代碼風(fēng)格7.函數(shù)在function的最后給function賦值;函數(shù)中防止使用全局變量,否那么容易引起HDL行為級(jí)仿真和門(mén)級(jí)仿真的差異。注意:函數(shù)與任務(wù)的調(diào)用均為靜態(tài)調(diào)用企業(yè)代碼風(fēng)格8.賦值Verilog 支持兩種賦值:過(guò)程賦值(procedural) 和連續(xù)賦值(continuous) ,過(guò)程賦值用于過(guò)程代碼(initial, always, task or function)中給reg和integer變量timerealtime、real賦值,而連續(xù)賦值一般給wire變量賦值;reg型與wire型賦值問(wèn)題always (敏感表敏感表要完整如果不完整將會(huì)引起仿

14、真和綜合結(jié)果不一致;電平觸發(fā)的意外鎖存器問(wèn)題企業(yè)代碼風(fēng)格8.賦值force/release 僅用于debug,對(duì)存放器和線(xiàn)網(wǎng)均有用;防止使用Disableassign/deassign 僅用于仿真加速僅對(duì)存放器有用;可綜合設(shè)計(jì)問(wèn)題對(duì)任何reg賦值用非阻塞賦值代替阻塞賦值, reg 的非阻塞賦值要加單位延遲,但異步復(fù)位可加可不加。reg賦值問(wèn)題,仿真賦值延遲問(wèn)題企業(yè)代碼風(fēng)格9.組合邏輯與時(shí)序邏輯如果一個(gè)事件持續(xù)幾個(gè)時(shí)鐘周期設(shè)計(jì)時(shí)就用時(shí)序邏輯代替組合邏輯;內(nèi)部總線(xiàn)不要懸空,在default狀態(tài)要把它上拉或下拉。企業(yè)代碼風(fēng)格10.宏與參數(shù)為了保持代碼的可讀性常用 define做常數(shù)聲明;把defin

15、e放在一個(gè)獨(dú)立的文件中;參數(shù)parameter 必須在一個(gè)模塊中定義,不要傳替參數(shù)到模塊;如果希望宏的作用域僅在一個(gè)模塊中就用參數(shù)來(lái)代替。企業(yè)代碼風(fēng)格11.注釋對(duì)更新的內(nèi)容更新要做注釋?zhuān)辉谡Z(yǔ)法塊的結(jié)尾做標(biāo)記;每一個(gè)模塊都應(yīng)在模塊開(kāi)始處做模塊級(jí)的注釋?zhuān)辉谀K端口列表中出現(xiàn)的端口信號(hào)都應(yīng)做簡(jiǎn)要的功能描述。企業(yè)代碼風(fēng)格12.有限狀態(tài)機(jī)FSMVerilogHDL描述狀態(tài)機(jī)時(shí)由parameter分配好狀態(tài);組合邏輯和時(shí)序邏輯分開(kāi)用不同的進(jìn)程:組合邏輯包括狀態(tài)譯碼和輸出;時(shí)序邏輯那么是狀態(tài)存放器的切換;必須包括對(duì)所有狀態(tài)都處理不能出現(xiàn)無(wú)法處理的狀態(tài)使?fàn)顟B(tài)機(jī)失控;Mealy機(jī)的狀態(tài)和輸入有關(guān),而Moore機(jī)

16、的狀態(tài)轉(zhuǎn)換和輸入無(wú)關(guān)。Mealy機(jī)使用的較多企業(yè)代碼風(fēng)格13.testbench在testbench中防止使用絕對(duì)的時(shí)間,如#20,#15或#(CYC+15)等,應(yīng)該在文件前面使用parameter定義一些常量,使得時(shí)間的定義象#(CYC+OFF0)的形式,便于修改;觀測(cè)結(jié)果可以輸出到波形文件或數(shù)據(jù)文件 ;對(duì)大的設(shè)計(jì)的頂層仿真一般不要對(duì)所有信號(hào)跟蹤波形文件會(huì)很大仿真時(shí)間延長(zhǎng)可以有選擇的觀測(cè)一些信號(hào);企業(yè)代碼風(fēng)格:常見(jiàn)代碼問(wèn)題在for-loop中包括不變的表達(dá)式浪費(fèi)運(yùn)算時(shí)間for (i=0;i4;i=i+1)beginSig1 = Sig2;DataOuti = DataIni;endfor-l

17、oop中第一條語(yǔ)句始終不變,浪費(fèi)運(yùn)算時(shí)間。注意,這是仿真代碼企業(yè)代碼風(fēng)格:常見(jiàn)代碼問(wèn)題資源共享問(wèn)題條件算子中不存在資源共享,如z = (cond) ? (a + b) : (c + d);必須使用兩個(gè)加法器;而等效的條件if-then-else語(yǔ)句那么可以資源共享如if (Cond)z = a + b;elsez = c + d;只要加法器的輸入端復(fù)用,就可以實(shí)現(xiàn)加法器的共享,使用一個(gè)加法器實(shí)現(xiàn)企業(yè)代碼風(fēng)格:常見(jiàn)代碼問(wèn)題由于組合邏輯位置不同而引起過(guò)多的觸發(fā)器綜合組合邏輯單獨(dú)使用一個(gè)電平觸發(fā)的always語(yǔ)句,存放器減少一個(gè)。注:1需根據(jù)具體需要 2少用always描述組合邏輯企業(yè)代碼風(fēng)格:常見(jiàn)

18、代碼問(wèn)題謹(jǐn)慎使用異步邏輯防止門(mén)控時(shí)鐘always (posedge GATED_Clk or posedge Rst) begin if (Rst) Z Language TemplatesUCFVerilog原語(yǔ)的使用語(yǔ)言模板: UCF用戶(hù)約束文件時(shí)鐘管理單元約束初始化約束引腳約束布局布線(xiàn)約束時(shí)序約束使用UCF語(yǔ)句圖形界面原語(yǔ)的使用語(yǔ)言模板: Verilog根本構(gòu)件:根本的語(yǔ)言要素注釋條件編譯操作符函數(shù)和任務(wù)原語(yǔ)的使用語(yǔ)言模板: Verilog仿真構(gòu)件:根本的語(yǔ)句規(guī)那么時(shí)鐘模擬配置語(yǔ)句仿真延遲循環(huán)語(yǔ)句過(guò)程描述語(yǔ)句數(shù)據(jù)流描述語(yǔ)句數(shù)據(jù)類(lèi)型系統(tǒng)函數(shù)庫(kù)原語(yǔ)的使用語(yǔ)言模板: Verilog可綜合構(gòu)件always語(yǔ)句綜合屬性高級(jí)綜合代碼樣例建議使用條件語(yǔ)句assign語(yǔ)句generate語(yǔ)句端口

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論