版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(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ì)進(jìn)階設(shè)計(jì)v面向硬件電路的設(shè)計(jì)方法面向硬件電路的設(shè)計(jì)方法v代碼風(fēng)格與可綜合設(shè)計(jì)代碼風(fēng)格與可綜合設(shè)計(jì) 通用代碼風(fēng)格通用代碼風(fēng)格 專(zhuān)用代碼風(fēng)格專(zhuān)用代碼風(fēng)格 企業(yè)代碼風(fēng)格企業(yè)代碼風(fēng)格v企業(yè)級(jí)大規(guī)模企業(yè)級(jí)大規(guī)模FPGA應(yīng)用設(shè)計(jì)方法應(yīng)用設(shè)計(jì)方法v原語(yǔ)的使用原語(yǔ)的使用面向硬件電路的設(shè)計(jì)方法面向硬件電路的設(shè)計(jì)方法v將具體功能形成硬件的將具體功能形成硬件的RTL級(jí)模型級(jí)模型 編寫(xiě)代碼始終要考慮硬件如何實(shí)現(xiàn)編寫(xiě)代碼始終要考慮硬件如何實(shí)現(xiàn)v基于基于FPGA實(shí)現(xiàn)的實(shí)現(xiàn)的Verilog設(shè)計(jì)特點(diǎn)設(shè)計(jì)特點(diǎn) 并行化并行化 同步控制同步控制 實(shí)現(xiàn)代價(jià)實(shí)現(xiàn)代價(jià)面向硬
2、件電路的設(shè)計(jì)方法面向硬件電路的設(shè)計(jì)方法v硬件實(shí)現(xiàn)的并行化硬件實(shí)現(xiàn)的并行化 從電路上來(lái)看:從電路上來(lái)看: 只要芯片上電,所有邏輯就開(kāi)始工作。只要芯片上電,所有邏輯就開(kāi)始工作。 從代碼上來(lái)看:從代碼上來(lái)看: 所有的描述語(yǔ)句之間是并行執(zhí)行的;所有的描述語(yǔ)句之間是并行執(zhí)行的; always語(yǔ)句在邊沿觸發(fā)條件下的行為描述均采用非阻塞語(yǔ)句在邊沿觸發(fā)條件下的行為描述均采用非阻塞賦值,并行執(zhí)行;賦值,并行執(zhí)行; 面向面向RTL級(jí)電路的電路設(shè)計(jì)易于實(shí)現(xiàn)流水操作;級(jí)電路的電路設(shè)計(jì)易于實(shí)現(xiàn)流水操作; 與一般高級(jí)語(yǔ)言的順序代碼為主的設(shè)計(jì)方法有本質(zhì)的區(qū)與一般高級(jí)語(yǔ)言的順序代碼為主的設(shè)計(jì)方法有本質(zhì)的區(qū)別。別。面向硬件電路
3、的設(shè)計(jì)方法面向硬件電路的設(shè)計(jì)方法時(shí)序延遲信號(hào)時(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è)計(jì)方法v基于全局時(shí)鐘的同步設(shè)計(jì)基于全局時(shí)鐘的同步設(shè)計(jì) 數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)存儲(chǔ)在FPGA的寄存器或存儲(chǔ)器中,時(shí)鐘可看作執(zhí)的寄存器或存儲(chǔ)器中,時(shí)鐘可看作執(zhí)行控制器;行控制器; 串行算法的執(zhí)行可以按照時(shí)鐘節(jié)拍的順序進(jìn)行控制
4、,串行算法的執(zhí)行可以按照時(shí)鐘節(jié)拍的順序進(jìn)行控制,寄存器輸出以及組合邏輯通常作為控制條件。寄存器輸出以及組合邏輯通常作為控制條件。例如:采用計(jì)數(shù)器控制狀態(tài)變化或數(shù)據(jù)處理過(guò)程。例如:采用計(jì)數(shù)器控制狀態(tài)變化或數(shù)據(jù)處理過(guò)程。面向硬件電路的設(shè)計(jì)方法面向硬件電路的設(shè)計(jì)方法v實(shí)現(xiàn)代價(jià)實(shí)現(xiàn)代價(jià) “面積面積”和和“速度速度”的綜合考慮:的綜合考慮: “面積面積”指所占用的指所占用的FPGA資源(資源(FF和和LUT);); “速度速度”指芯片穩(wěn)定運(yùn)行所達(dá)到的最高頻率。指芯片穩(wěn)定運(yùn)行所達(dá)到的最高頻率。 “面積面積”和和“速度速度”是一對(duì)矛盾,可相互轉(zhuǎn)化:是一對(duì)矛盾,可相互轉(zhuǎn)化: “面積面積”優(yōu)先:資源復(fù)用;優(yōu)先:
5、資源復(fù)用; “速度速度”優(yōu)先:冗余同構(gòu)部件。優(yōu)先:冗余同構(gòu)部件。 ISE 的的Map選項(xiàng):選項(xiàng):優(yōu)化策略可選擇優(yōu)化策略可選擇Area和和Speed的優(yōu)化策略的優(yōu)化策略代碼風(fēng)格與可綜合設(shè)計(jì)代碼風(fēng)格與可綜合設(shè)計(jì)vVerilog HDL語(yǔ)言本身的規(guī)范只面向仿真語(yǔ)言本身的規(guī)范只面向仿真 不使用綜合工具不支持的不使用綜合工具不支持的Verilog結(jié)構(gòu)結(jié)構(gòu) 除了除了wire、reg的多數(shù)數(shù)據(jù)類(lèi)型的多數(shù)數(shù)據(jù)類(lèi)型 開(kāi)關(guān)級(jí)原語(yǔ)開(kāi)關(guān)級(jí)原語(yǔ) deassign、wait等行為語(yǔ)句等行為語(yǔ)句 UDP和和specify模塊模塊v遵循可綜合設(shè)計(jì)原則遵循可綜合設(shè)計(jì)原則 代碼綜合出預(yù)想的邏輯代碼綜合出預(yù)想的邏輯 行為描述的完整
6、性行為描述的完整性代碼風(fēng)格與可綜合設(shè)計(jì)代碼風(fēng)格與可綜合設(shè)計(jì)v 同步電路設(shè)計(jì)同步電路設(shè)計(jì) 優(yōu)點(diǎn)優(yōu)點(diǎn) 容易使用寄存器的異步復(fù)位容易使用寄存器的異步復(fù)位/置位端,以使整個(gè)電路有一個(gè)確置位端,以使整個(gè)電路有一個(gè)確定的初始狀態(tài);定的初始狀態(tài); 有效避免毛刺,提高可靠性;有效避免毛刺,提高可靠性; 簡(jiǎn)化時(shí)序分析過(guò)程;簡(jiǎn)化時(shí)序分析過(guò)程; 減少對(duì)工作環(huán)境的依賴(lài)性,提高可移植性;減少對(duì)工作環(huán)境的依賴(lài)性,提高可移植性; 原則原則 盡可能使用單時(shí)鐘(全局時(shí)鐘)盡可能使用單時(shí)鐘(全局時(shí)鐘) 盡可能使用單時(shí)鐘沿觸發(fā)(盡可能使用單時(shí)鐘沿觸發(fā)(posedge clk) 避免使用門(mén)控時(shí)鐘(組合邏輯驅(qū)動(dòng)的時(shí)鐘)避免使用門(mén)控時(shí)鐘
7、(組合邏輯驅(qū)動(dòng)的時(shí)鐘) 若使用分頻時(shí)鐘應(yīng)當(dāng)統(tǒng)一管理若使用分頻時(shí)鐘應(yīng)當(dāng)統(tǒng)一管理代碼風(fēng)格與可綜合設(shè)計(jì)代碼風(fēng)格與可綜合設(shè)計(jì)v同步電路設(shè)計(jì)同步電路設(shè)計(jì)代碼風(fēng)格與可綜合設(shè)計(jì)代碼風(fēng)格與可綜合設(shè)計(jì)v 同步電路設(shè)計(jì)的模塊劃分同步電路設(shè)計(jì)的模塊劃分 信息隱蔽、抽象:信息隱蔽、抽象: 避免跨模塊控制,邊界清晰;避免跨模塊控制,邊界清晰; 端口明確:端口明確: 禁制多重功能和無(wú)用接口;禁制多重功能和無(wú)用接口; 時(shí)鐘域區(qū)分:時(shí)鐘域區(qū)分: 異步異步FIFO或雙端口或雙端口RAM實(shí)現(xiàn)多時(shí)鐘域隔離;實(shí)現(xiàn)多時(shí)鐘域隔離; 低頻時(shí)鐘域盡可能劃分到一個(gè)模塊中;低頻時(shí)鐘域盡可能劃分到一個(gè)模塊中; 資源優(yōu)化:資源優(yōu)化: 盡量使用廠商提
8、供的原語(yǔ)盡量使用廠商提供的原語(yǔ) 寄存器劃分:寄存器劃分: 模塊的輸出盡可能采用寄存器輸出(模塊的輸出盡可能采用寄存器輸出(reg型)型)代碼風(fēng)格與可綜合設(shè)計(jì)代碼風(fēng)格與可綜合設(shè)計(jì)v 代碼風(fēng)格(包括書(shū)寫(xiě)規(guī)范和描述方法)代碼風(fēng)格(包括書(shū)寫(xiě)規(guī)范和描述方法) 通用代碼風(fēng)格通用代碼風(fēng)格 Verilog HDL語(yǔ)言規(guī)范,硬件無(wú)關(guān),性能未必最優(yōu);語(yǔ)言規(guī)范,硬件無(wú)關(guān),性能未必最優(yōu); 專(zhuān)用代碼風(fēng)格專(zhuān)用代碼風(fēng)格 基于具體芯片的結(jié)構(gòu)和資源,性能優(yōu)化,移植性可能受影響?;诰唧w芯片的結(jié)構(gòu)和資源,性能優(yōu)化,移植性可能受影響。“華為華為Verilog HDL設(shè)計(jì)規(guī)范設(shè)計(jì)規(guī)范”Sun公司公司 “Verilog Style a
9、nd Coding Guidelines”“Actel HDL Coding Style Guider”注重代碼的硬件實(shí)現(xiàn)質(zhì)量。注重代碼的硬件實(shí)現(xiàn)質(zhì)量。 目標(biāo):功能正確,性能最優(yōu)目標(biāo):功能正確,性能最優(yōu)通用代碼風(fēng)格通用代碼風(fēng)格v邏輯復(fù)用邏輯復(fù)用 Synplify提供邏輯復(fù)用選項(xiàng),但若要獲得最佳的復(fù)用提供邏輯復(fù)用選項(xiàng),但若要獲得最佳的復(fù)用效果,在源代碼設(shè)計(jì)中應(yīng)采用顯式的復(fù)用控制邏輯;效果,在源代碼設(shè)計(jì)中應(yīng)采用顯式的復(fù)用控制邏輯; 節(jié)約面積。節(jié)約面積。v邏輯復(fù)制邏輯復(fù)制 Synplify提供最大扇出選項(xiàng),如果扇出過(guò)大(驅(qū)動(dòng)過(guò)提供最大扇出選項(xiàng),如果扇出過(guò)大(驅(qū)動(dòng)過(guò)多后續(xù)邏輯),需增加緩沖器提高驅(qū)動(dòng)能
10、力,但信號(hào)多后續(xù)邏輯),需增加緩沖器提高驅(qū)動(dòng)能力,但信號(hào)延遲增大;延遲增大; 增加面積。增加面積。通用代碼風(fēng)格通用代碼風(fēng)格v邏輯結(jié)構(gòu)邏輯結(jié)構(gòu) 樹(shù)狀結(jié)構(gòu)優(yōu)于鏈?zhǔn)浇Y(jié)構(gòu),縮短延遲級(jí)數(shù)。樹(shù)狀結(jié)構(gòu)優(yōu)于鏈?zhǔn)浇Y(jié)構(gòu),縮短延遲級(jí)數(shù)。vif語(yǔ)句和語(yǔ)句和case語(yǔ)句使用原則語(yǔ)句使用原則 if語(yǔ)句面積小,延遲大;語(yǔ)句面積小,延遲大;case語(yǔ)句面積大,速度快。語(yǔ)句面積大,速度快。 if適合對(duì)速度無(wú)特殊要求的場(chǎng)合;適合對(duì)速度無(wú)特殊要求的場(chǎng)合;case適合高速編解碼適合高速編解碼電路。電路。 if分支具有優(yōu)先級(jí),分支具有優(yōu)先級(jí),case分支無(wú)優(yōu)先級(jí)。分支無(wú)優(yōu)先級(jí)。 if不可嵌套技術(shù)過(guò)多,一般不超過(guò)不可嵌套技術(shù)過(guò)多,一般不
11、超過(guò)3-4層。層。 兼顧面積和速度,兼顧面積和速度,if和和case混合使用。混合使用。通用代碼風(fēng)格通用代碼風(fēng)格v關(guān)鍵路徑信號(hào)處理關(guān)鍵路徑信號(hào)處理 引起電路建立時(shí)間不足的信號(hào)路徑成為關(guān)鍵路徑引起電路建立時(shí)間不足的信號(hào)路徑成為關(guān)鍵路徑 組合電路關(guān)鍵路徑提取采用邏輯拆分方式,降低關(guān)鍵組合電路關(guān)鍵路徑提取采用邏輯拆分方式,降低關(guān)鍵信號(hào)的組合延遲級(jí)數(shù)。信號(hào)的組合延遲級(jí)數(shù)。 分析下面語(yǔ)句中分析下面語(yǔ)句中b所經(jīng)過(guò)的所經(jīng)過(guò)的LUT級(jí)數(shù)。級(jí)數(shù)。assign y = a & b & c | d & e & b;assign t = a & c | d & e;assign y = b & t;通用代碼風(fēng)格通用代
12、碼風(fēng)格vif和和case不完整分支造成的意外鎖存器不完整分支造成的意外鎖存器 當(dāng)當(dāng)always語(yǔ)句使用電平觸發(fā)時(shí)有可能產(chǎn)生鎖存器。語(yǔ)句使用電平觸發(fā)時(shí)有可能產(chǎn)生鎖存器。參見(jiàn)參見(jiàn)P106例例3-12和例和例3-13 當(dāng)當(dāng)always語(yǔ)句使用時(shí)鐘沿觸發(fā)時(shí)不會(huì)產(chǎn)生,此時(shí)只產(chǎn)語(yǔ)句使用時(shí)鐘沿觸發(fā)時(shí)不會(huì)產(chǎn)生,此時(shí)只產(chǎn)生寄存器。生寄存器。通用代碼風(fēng)格通用代碼風(fēng)格vreg型信號(hào)只能在一個(gè)型信號(hào)只能在一個(gè)always語(yǔ)句中賦值語(yǔ)句中賦值 最常見(jiàn)的最常見(jiàn)的HDL行為描述建模錯(cuò)誤之一行為描述建模錯(cuò)誤之一v避免避免assign不確定語(yǔ)句不確定語(yǔ)句 assign signal_a = #4 signal_a; #4被綜合
13、工具忽略掉被綜合工具忽略掉專(zhuān)用代碼風(fēng)格專(zhuān)用代碼風(fēng)格v時(shí)鐘信號(hào)分配原則時(shí)鐘信號(hào)分配原則 使用全局時(shí)鐘,通過(guò)使用全局時(shí)鐘,通過(guò)BUFG驅(qū)動(dòng),時(shí)鐘信號(hào)到達(dá)各個(gè)寄驅(qū)動(dòng),時(shí)鐘信號(hào)到達(dá)各個(gè)寄存器的延遲相同。存器的延遲相同。 減少時(shí)鐘信號(hào)種類(lèi)減少時(shí)鐘信號(hào)種類(lèi) 避免時(shí)鐘毛刺信號(hào)(不使用門(mén)控時(shí)鐘)避免時(shí)鐘毛刺信號(hào)(不使用門(mén)控時(shí)鐘)專(zhuān)用代碼風(fēng)格專(zhuān)用代碼風(fēng)格vSRL16的使用的使用 SRL16是一種基于是一種基于LUT的移位寄存器;的移位寄存器; 可生成任意位寬和深度的移位寄存器;可生成任意位寬和深度的移位寄存器;srl16_based_ram my_shift_ram(.clk ( ),.d ( ),.q ( )
14、;專(zhuān)用代碼風(fēng)格專(zhuān)用代碼風(fēng)格v觸發(fā)器資源分配觸發(fā)器資源分配 盡量使用庫(kù)中的觸發(fā)器資源;盡量使用庫(kù)中的觸發(fā)器資源; 狀態(tài)機(jī)編碼盡可能采用狀態(tài)機(jī)編碼盡可能采用“獨(dú)熱碼獨(dú)熱碼”(one-hot)。)。 (synplify綜合工具可提供相關(guān)功能綜合工具可提供相關(guān)功能)v反向信號(hào)反向信號(hào) 盡量使用符號(hào)盡量使用符號(hào),而不使用,而不使用not原語(yǔ);原語(yǔ); 不要嘗試用多個(gè)反向器級(jí)聯(lián)來(lái)增加需要的信號(hào)延遲;不要嘗試用多個(gè)反向器級(jí)聯(lián)來(lái)增加需要的信號(hào)延遲; 反向信號(hào)驅(qū)動(dòng)多個(gè)負(fù)載可采用分散反向。反向信號(hào)驅(qū)動(dòng)多個(gè)負(fù)載可采用分散反向。 (綜合工具可自動(dòng)優(yōu)化)(綜合工具可自動(dòng)優(yōu)化)企業(yè)代碼風(fēng)格企業(yè)代碼風(fēng)格v1.基本書(shū)寫(xiě)規(guī)則基本
15、書(shū)寫(xiě)規(guī)則 用有意義而有效的名字;用有意義而有效的名字; 用連貫的縮寫(xiě);用連貫的縮寫(xiě);Clk Rst 用最右邊(左邊)的字符下劃線表示低電平有效,高用最右邊(左邊)的字符下劃線表示低電平有效,高電平有效的信號(hào)不得以下劃線表示;電平有效的信號(hào)不得以下劃線表示;Rst_ Trdy_ 名字一般首字符大寫(xiě),其余小寫(xiě)(但名字一般首字符大寫(xiě),其余小寫(xiě)(但parameter, integer 定義的數(shù)值名可全部用大寫(xiě)),兩個(gè)詞之間要定義的數(shù)值名可全部用大寫(xiě)),兩個(gè)詞之間要用下劃線連接用下劃線連接Packet_addr Data_in企業(yè)代碼風(fēng)格企業(yè)代碼風(fēng)格v1.基本書(shū)寫(xiě)規(guī)則基本書(shū)寫(xiě)規(guī)則 全局信號(hào)名字中應(yīng)包含信
16、號(hào)來(lái)源的一些信息;全局信號(hào)名字中應(yīng)包含信號(hào)來(lái)源的一些信息; 同一信號(hào)在不同層次應(yīng)保持一致性;同一信號(hào)在不同層次應(yīng)保持一致性; 自己定義的常數(shù)類(lèi)型等用大寫(xiě)標(biāo)識(shí)自己定義的常數(shù)類(lèi)型等用大寫(xiě)標(biāo)識(shí)parameter CYCLE = 100; 避免使用保留字作為信號(hào)、模塊名稱(chēng);避免使用保留字作為信號(hào)、模塊名稱(chēng); 添加有意義的后綴使信號(hào)名更加明確。添加有意義的后綴使信號(hào)名更加明確。企業(yè)代碼風(fēng)格企業(yè)代碼風(fēng)格v2.Module 頂層模塊應(yīng)只是內(nèi)部模塊間的互連,除了內(nèi)部的互連頂層模塊應(yīng)只是內(nèi)部模塊間的互連,除了內(nèi)部的互連和模塊的調(diào)用外盡量避免再做邏輯(如不能再出現(xiàn)對(duì)和模塊的調(diào)用外盡量避免再做邏輯(如不能再出現(xiàn)對(duì)r
17、eg變量的變量的always賦值,不能再用賦值,不能再用assign語(yǔ)句完成復(fù)語(yǔ)句完成復(fù)雜邏輯);雜邏輯); 每一個(gè)模塊應(yīng)在開(kāi)始處注明文件名功能描述引用模塊每一個(gè)模塊應(yīng)在開(kāi)始處注明文件名功能描述引用模塊設(shè)計(jì)者設(shè)計(jì)時(shí)間及版權(quán)信息(設(shè)計(jì)者設(shè)計(jì)時(shí)間及版權(quán)信息(ISE生成模板);生成模板); 不要對(duì)不要對(duì)input進(jìn)行驅(qū)動(dòng)進(jìn)行驅(qū)動(dòng), 在在module 內(nèi)不要存在沒(méi)有驅(qū)動(dòng)內(nèi)不要存在沒(méi)有驅(qū)動(dòng)的信號(hào),更不能在模塊端口中出現(xiàn)沒(méi)有驅(qū)動(dòng)的輸出信的信號(hào),更不能在模塊端口中出現(xiàn)沒(méi)有驅(qū)動(dòng)的輸出信號(hào),避免在仿真或綜合時(shí)產(chǎn)生號(hào),避免在仿真或綜合時(shí)產(chǎn)生warning,干擾錯(cuò)誤定位;干擾錯(cuò)誤定位;(避免由于未驅(qū)動(dòng)產(chǎn)生的(避免由
18、于未驅(qū)動(dòng)產(chǎn)生的x,z)企業(yè)代碼風(fēng)格企業(yè)代碼風(fēng)格v2.Module 每行應(yīng)限制在每行應(yīng)限制在80個(gè)字符以內(nèi)以保持代碼的清晰美觀和個(gè)字符以內(nèi)以保持代碼的清晰美觀和層次感;層次感; 模塊實(shí)例名應(yīng)采用模塊實(shí)例名應(yīng)采用”U_xx”命名,端口采用顯式關(guān)聯(lián)命名,端口采用顯式關(guān)聯(lián)而非隱式關(guān)聯(lián);而非隱式關(guān)聯(lián); 用一個(gè)時(shí)鐘的上沿或下沿采樣信號(hào),不能混合使用;用一個(gè)時(shí)鐘的上沿或下沿采樣信號(hào),不能混合使用; 如果一定要使用時(shí)鐘雙沿,可使用如果一定要使用時(shí)鐘雙沿,可使用180度相位時(shí)鐘;度相位時(shí)鐘; 在模塊中增加注釋?zhuān)辉谀K中增加注釋?zhuān)?Module 名要用大寫(xiě)標(biāo)示,且應(yīng)與文件名保持一致;名要用大寫(xiě)標(biāo)示,且應(yīng)與文件名保
19、持一致;企業(yè)代碼風(fēng)格企業(yè)代碼風(fēng)格v2.Module 嚴(yán)格芯片級(jí)模塊的劃分,只有頂層包括嚴(yán)格芯片級(jí)模塊的劃分,只有頂層包括IO引腳;引腳; 模塊輸出寄存器化,對(duì)所有模塊的輸出加以寄存,輸模塊輸出寄存器化,對(duì)所有模塊的輸出加以寄存,輸出的驅(qū)動(dòng)強(qiáng)度和輸入的延遲可以預(yù)測(cè),從而使得模塊出的驅(qū)動(dòng)強(qiáng)度和輸入的延遲可以預(yù)測(cè),從而使得模塊的綜合過(guò)程更簡(jiǎn)單;的綜合過(guò)程更簡(jiǎn)單; 將關(guān)鍵路徑邏輯和非關(guān)鍵路徑邏輯放在不同模塊,實(shí)將關(guān)鍵路徑邏輯和非關(guān)鍵路徑邏輯放在不同模塊,實(shí)施不同的優(yōu)化策略。施不同的優(yōu)化策略。企業(yè)代碼風(fēng)格企業(yè)代碼風(fēng)格v3.線網(wǎng)與寄存器線網(wǎng)與寄存器 一個(gè)一個(gè)reg變量只能在一個(gè)變量只能在一個(gè)always語(yǔ)
20、句中賦值;語(yǔ)句中賦值; 向量有效位順序的定義一般是從大數(shù)到小數(shù);向量有效位順序的定義一般是從大數(shù)到小數(shù); 模塊輸出端口,對(duì)線網(wǎng)和寄存器類(lèi)型的要做聲明;模塊輸出端口,對(duì)線網(wǎng)和寄存器類(lèi)型的要做聲明; 使用克綜合的的線網(wǎng)和寄存器類(lèi)型。使用克綜合的的線網(wǎng)和寄存器類(lèi)型。企業(yè)代碼風(fēng)格企業(yè)代碼風(fēng)格v4.表達(dá)式表達(dá)式 用括號(hào)來(lái)表示執(zhí)行的優(yōu)先級(jí),使優(yōu)先級(jí)閱讀更清晰;用括號(hào)來(lái)表示執(zhí)行的優(yōu)先級(jí),使優(yōu)先級(jí)閱讀更清晰;(注意不要造成額外的延遲)(注意不要造成額外的延遲) 用一個(gè)函數(shù)用一個(gè)函數(shù)(function)來(lái)代替表達(dá)式的多次重復(fù),仿真來(lái)代替表達(dá)式的多次重復(fù),仿真中經(jīng)常使用的一組描述可以寫(xiě)到一個(gè)任務(wù)中經(jīng)常使用的一組描
21、述可以寫(xiě)到一個(gè)任務(wù)(task)中;中;企業(yè)代碼風(fēng)格企業(yè)代碼風(fēng)格v5. if語(yǔ)句語(yǔ)句 向量比較時(shí)比較的向量寬度要相等,不相等時(shí)建議采向量比較時(shí)比較的向量寬度要相等,不相等時(shí)建議采用顯示擴(kuò)展;用顯示擴(kuò)展; 每一個(gè)每一個(gè)if 都應(yīng)有一個(gè)都應(yīng)有一個(gè)else 和它相對(duì)應(yīng);和它相對(duì)應(yīng); 應(yīng)注意應(yīng)注意if .else if .else if .else 的優(yōu)先級(jí);的優(yōu)先級(jí); 如果變量在如果變量在if-else 或或case 語(yǔ)句中做非完全賦值則應(yīng)給語(yǔ)句中做非完全賦值則應(yīng)給變量一個(gè)缺省值。變量一個(gè)缺省值。(always語(yǔ)句的自身要求)語(yǔ)句的自身要求)企業(yè)代碼風(fēng)格企業(yè)代碼風(fēng)格v6. case語(yǔ)句語(yǔ)句 case語(yǔ)
22、句通常綜合成一級(jí)多路復(fù)用器,語(yǔ)句通常綜合成一級(jí)多路復(fù)用器,if-then-else則則綜合成優(yōu)先編碼的串接的多個(gè)多路復(fù)用器;綜合成優(yōu)先編碼的串接的多個(gè)多路復(fù)用器; 所有的所有的Case 應(yīng)該有一個(gè)應(yīng)該有一個(gè)default case 允許空語(yǔ)句允許空語(yǔ)句Default : ;企業(yè)代碼風(fēng)格企業(yè)代碼風(fēng)格v7.函數(shù)函數(shù) 在在function的最后給的最后給function賦值;賦值; 函數(shù)中避免使用全局變量,否則容易引起函數(shù)中避免使用全局變量,否則容易引起HDL行為級(jí)行為級(jí)仿真和門(mén)級(jí)仿真的差異。仿真和門(mén)級(jí)仿真的差異。注意:函數(shù)與任務(wù)的調(diào)用均為靜態(tài)調(diào)用注意:函數(shù)與任務(wù)的調(diào)用均為靜態(tài)調(diào)用企業(yè)代碼風(fēng)格企業(yè)代
23、碼風(fēng)格v8.賦值賦值 Verilog 支持兩種賦值:過(guò)程賦值支持兩種賦值:過(guò)程賦值(procedural) 和連續(xù)和連續(xù)賦值賦值(continuous) ,過(guò)程賦值用于過(guò)程代碼,過(guò)程賦值用于過(guò)程代碼(initial, always, task or function)中給中給reg和和integer變量變量timerealtime、real賦值,而連續(xù)賦值一般給賦值,而連續(xù)賦值一般給wire變變量賦值;量賦值;(reg型與型與wire型賦值問(wèn)題)型賦值問(wèn)題) always (敏感表敏感表要完整如果不完整將會(huì)引起仿敏感表敏感表要完整如果不完整將會(huì)引起仿真和綜合結(jié)果不一致;真和綜合結(jié)果不一致;(電
24、平觸發(fā)的意外鎖存器問(wèn)題)(電平觸發(fā)的意外鎖存器問(wèn)題)企業(yè)代碼風(fēng)格企業(yè)代碼風(fēng)格v8.賦值賦值 force/release 僅用于僅用于debug,對(duì)寄存器和線網(wǎng)均有用;,對(duì)寄存器和線網(wǎng)均有用; 避免使用避免使用Disable assign/deassign 僅用于仿真加速僅對(duì)寄存器有用;僅用于仿真加速僅對(duì)寄存器有用;(可綜合設(shè)計(jì)問(wèn)題)(可綜合設(shè)計(jì)問(wèn)題) 對(duì)任何對(duì)任何reg賦值用非阻塞賦值代替阻塞賦值,賦值用非阻塞賦值代替阻塞賦值, reg 的非的非阻塞賦值要加單位延遲,但異步復(fù)位可加可不加。阻塞賦值要加單位延遲,但異步復(fù)位可加可不加。(reg賦值問(wèn)題,仿真賦值延遲問(wèn)題)賦值問(wèn)題,仿真賦值延遲問(wèn)題
25、)企業(yè)代碼風(fēng)格企業(yè)代碼風(fēng)格v9.組合邏輯與時(shí)序邏輯組合邏輯與時(shí)序邏輯 如果一個(gè)事件持續(xù)幾個(gè)時(shí)鐘周期設(shè)計(jì)時(shí)就用時(shí)序邏輯如果一個(gè)事件持續(xù)幾個(gè)時(shí)鐘周期設(shè)計(jì)時(shí)就用時(shí)序邏輯代替組合邏輯;代替組合邏輯; 內(nèi)部總線不要懸空,在內(nèi)部總線不要懸空,在default狀態(tài)要把它上拉或下拉。狀態(tài)要把它上拉或下拉。企業(yè)代碼風(fēng)格企業(yè)代碼風(fēng)格v10.宏與參數(shù)宏與參數(shù) 為了保持代碼的可讀性常用為了保持代碼的可讀性常用 define做常數(shù)聲明;做常數(shù)聲明; 把把define放在一個(gè)獨(dú)立的文件中;放在一個(gè)獨(dú)立的文件中; 參數(shù)參數(shù)parameter 必須在一個(gè)模塊中定義,不要傳替參必須在一個(gè)模塊中定義,不要傳替參數(shù)到模塊;數(shù)到模塊
26、; 如果希望宏的作用域僅在一個(gè)模塊中就用參數(shù)來(lái)代替。如果希望宏的作用域僅在一個(gè)模塊中就用參數(shù)來(lái)代替。企業(yè)代碼風(fēng)格企業(yè)代碼風(fēng)格v11.注釋注釋 對(duì)更新的內(nèi)容更新要做注釋?zhuān)粚?duì)更新的內(nèi)容更新要做注釋?zhuān)?在語(yǔ)法塊的結(jié)尾做標(biāo)記;在語(yǔ)法塊的結(jié)尾做標(biāo)記; 每一個(gè)模塊都應(yīng)在模塊開(kāi)始處做模塊級(jí)的注釋?zhuān)幻恳粋€(gè)模塊都應(yīng)在模塊開(kāi)始處做模塊級(jí)的注釋?zhuān)?在模塊端口列表中出現(xiàn)的端口信號(hào)都應(yīng)做簡(jiǎn)要的功能在模塊端口列表中出現(xiàn)的端口信號(hào)都應(yīng)做簡(jiǎn)要的功能描述。描述。企業(yè)代碼風(fēng)格企業(yè)代碼風(fēng)格v12.有限狀態(tài)機(jī)(有限狀態(tài)機(jī)(FSM) VerilogHDL描述狀態(tài)機(jī)時(shí)由描述狀態(tài)機(jī)時(shí)由parameter分配好狀態(tài);分配好狀態(tài); 組合邏輯和
27、時(shí)序邏輯分開(kāi)用不同的進(jìn)程:組合邏輯和時(shí)序邏輯分開(kāi)用不同的進(jìn)程: 組合邏輯包括狀態(tài)譯碼和輸出;組合邏輯包括狀態(tài)譯碼和輸出; 時(shí)序邏輯則是狀態(tài)寄存器的切換;時(shí)序邏輯則是狀態(tài)寄存器的切換; 必須包括對(duì)所有狀態(tài)都處理不能出現(xiàn)無(wú)法處理的狀態(tài)必須包括對(duì)所有狀態(tài)都處理不能出現(xiàn)無(wú)法處理的狀態(tài)使?fàn)顟B(tài)機(jī)失控;使?fàn)顟B(tài)機(jī)失控; Mealy機(jī)的狀態(tài)和輸入有關(guān),而機(jī)的狀態(tài)和輸入有關(guān),而Moore機(jī)的狀態(tài)轉(zhuǎn)換和機(jī)的狀態(tài)轉(zhuǎn)換和輸入無(wú)關(guān)。輸入無(wú)關(guān)。企業(yè)代碼風(fēng)格企業(yè)代碼風(fēng)格v13.testbench 在在testbench中避免使用絕對(duì)的時(shí)間,如中避免使用絕對(duì)的時(shí)間,如#20,#15或或#(CYC+15)等,應(yīng)該在文件前面使用等
28、,應(yīng)該在文件前面使用parameter定義一定義一些常量,使得時(shí)間的定義象些常量,使得時(shí)間的定義象#(CYC+OFF0)的形式,便的形式,便于修改;于修改; 觀測(cè)結(jié)果可以輸出到波形文件或數(shù)據(jù)文件觀測(cè)結(jié)果可以輸出到波形文件或數(shù)據(jù)文件 ; 對(duì)大的設(shè)計(jì)的頂層仿真一般不要對(duì)所有信號(hào)跟蹤波形對(duì)大的設(shè)計(jì)的頂層仿真一般不要對(duì)所有信號(hào)跟蹤波形文件會(huì)很大仿真時(shí)間延長(zhǎng)可以有選擇的觀測(cè)一些信號(hào);文件會(huì)很大仿真時(shí)間延長(zhǎng)可以有選擇的觀測(cè)一些信號(hào);企業(yè)代碼風(fēng)格:常見(jiàn)代碼問(wèn)題企業(yè)代碼風(fēng)格:常見(jiàn)代碼問(wèn)題v在在for-loop中包括不變的表達(dá)式浪費(fèi)運(yùn)算時(shí)間中包括不變的表達(dá)式浪費(fèi)運(yùn)算時(shí)間for (i=0;i4;i=i+1)beg
29、inSig1 = Sig2;DataOuti = DataIni;endfor-loop中第一條語(yǔ)句始終不變,浪費(fèi)運(yùn)算時(shí)間。中第一條語(yǔ)句始終不變,浪費(fèi)運(yùn)算時(shí)間。(注意,這是仿真代碼)(注意,這是仿真代碼)企業(yè)代碼風(fēng)格:常見(jiàn)代碼問(wèn)題企業(yè)代碼風(fēng)格:常見(jiàn)代碼問(wèn)題v資源共享問(wèn)題資源共享問(wèn)題條件算子中不存在資源共享?xiàng)l件算子中不存在資源共享,如如z = (cond) ? (a + b) : (c + d);必須使用兩個(gè)加法器必須使用兩個(gè)加法器;而等效的條件而等效的條件if-then-else語(yǔ)句則可以資源共享如語(yǔ)句則可以資源共享如if (Cond)z = a + b;elsez = c + d;只要加法器
30、的輸入端復(fù)用只要加法器的輸入端復(fù)用,就可以實(shí)現(xiàn)加法器的共享就可以實(shí)現(xiàn)加法器的共享,使用使用一個(gè)加法器實(shí)現(xiàn)一個(gè)加法器實(shí)現(xiàn)企業(yè)代碼風(fēng)格:常見(jiàn)代碼問(wèn)題企業(yè)代碼風(fēng)格:常見(jiàn)代碼問(wèn)題v由于組合邏輯位置不同而引起過(guò)多的觸發(fā)器綜合由于組合邏輯位置不同而引起過(guò)多的觸發(fā)器綜合 組合邏輯單獨(dú)使用一個(gè)組合邏輯單獨(dú)使用一個(gè)電平觸發(fā)的電平觸發(fā)的always語(yǔ)句,語(yǔ)句,寄存器減少一個(gè)。寄存器減少一個(gè)。注注:(:(1)需根據(jù)具體需要)需根據(jù)具體需要 (2)少用)少用always描述描述組合邏輯組合邏輯企業(yè)代碼風(fēng)格:常見(jiàn)代碼問(wèn)題企業(yè)代碼風(fēng)格:常見(jiàn)代碼問(wèn)題v謹(jǐn)慎使用異步邏輯謹(jǐn)慎使用異步邏輯 避免門(mén)控時(shí)鐘避免門(mén)控時(shí)鐘always (posedge GATED_Clk or posedge Rst) begin if (Rst)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 園林景觀石材安裝合同
- 新學(xué)期自律保證書(shū)范文
- 九年級(jí)化學(xué)上冊(cè) 第五單元 定量研究化學(xué)反應(yīng) 第一節(jié) 化學(xué)反應(yīng)中的質(zhì)量守恒同步教案 (新版)魯教版
- 2024秋九年級(jí)語(yǔ)文上冊(cè) 第二單元 寫(xiě)作 觀點(diǎn)要明確教案 新人教版
- 2024-2025學(xué)年新教材高中政治 第三課 只有中國(guó)特色社會(huì)主義才能發(fā)展中國(guó) 2 中國(guó)特色社會(huì)主義的創(chuàng)立、發(fā)展和完善(2)教案 部編版必修1
- 2024八年級(jí)數(shù)學(xué)下冊(cè) 第22章 四邊形22.3三角形的中位線教案(新版)冀教版
- 2024-2025學(xué)年高中歷史 第二單元 凡爾賽-華盛頓體系下的世界 第1課 巴黎和會(huì)(4)教學(xué)教案 新人教版選修3
- 2023六年級(jí)語(yǔ)文下冊(cè) 第二單元 口語(yǔ)交際:同讀一本書(shū)配套教案 新人教版
- 2023三年級(jí)數(shù)學(xué)上冊(cè) 五 周長(zhǎng)第3課時(shí) 長(zhǎng)方形的周長(zhǎng)說(shuō)課稿 北師大版
- 2023七年級(jí)英語(yǔ)上冊(cè) Module 6 A trip to the zoo Unit 1 Does it eat meat教案 (新版)外研版
- 職業(yè)健康整改計(jì)劃
- 國(guó)家職業(yè)技術(shù)技能標(biāo)準(zhǔn) 3-02-03-01 消防員(2022年版)
- GB/T 36242-2018燃?xì)饬髁坑?jì)體積修正儀
- GB/T 2818-2014井用潛水異步電動(dòng)機(jī)
- 5 汪曾祺《跑警報(bào)》.電子教案教學(xué)課件
- 敘事療法課件
- 國(guó)家開(kāi)放大學(xué)電大《計(jì)算機(jī)應(yīng)用基礎(chǔ)(本)》終結(jié)性考試試題答案(格式已排好)任務(wù)一
- 店長(zhǎng)交接表模板(最新)
- 阿米巴經(jīng)營(yíng)管理課件
- 牙列缺損的固定義齒修復(fù)課件
- 小學(xué)質(zhì)量檢測(cè)匯報(bào)材料范文推薦11篇
評(píng)論
0/150
提交評(píng)論