片上系統(tǒng)技術(shù)_第1頁
片上系統(tǒng)技術(shù)_第2頁
片上系統(tǒng)技術(shù)_第3頁
片上系統(tǒng)技術(shù)_第4頁
片上系統(tǒng)技術(shù)_第5頁
已閱讀5頁,還剩232頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

片上系統(tǒng)(SOC)技術(shù)

秦華旺

南京理工大學(xué)自動(dòng)化學(xué)院主要內(nèi)容SOC概述硬件描述語言VerilogHDLQuartusII開發(fā)環(huán)境課程安排24學(xué)時(shí)的理論課8學(xué)時(shí)的實(shí)驗(yàn)課開卷考試考核內(nèi)容:PPT中的知識點(diǎn)暫無教材第一章:SOC概述SOC的定義SOC的歷史、現(xiàn)狀與發(fā)展趨勢SOC的基本概念SOC的定義SOC:片上系統(tǒng),或系統(tǒng)級芯片,即在一個(gè)芯片上集成一個(gè)計(jì)算機(jī)系統(tǒng)。SOC概述SOC的發(fā)展歷史電子管晶體管集成電路

工藝:0.25μm以下,進(jìn)入深亞微米階段規(guī)模:超大規(guī)模(VLSI)和特大規(guī)模(GSI)SOCSOC概述SOC的特性復(fù)雜系統(tǒng)功能超深亞微米工藝內(nèi)嵌一個(gè)或數(shù)個(gè)CPU或DSP功能可編輯復(fù)用IP核SOC概述SOC的國內(nèi)現(xiàn)狀地域分布長江三角洲京津珠江三角洲產(chǎn)業(yè)IC設(shè)計(jì)芯片加工后工序SOC概述SOC的應(yīng)用無線/有線通信多媒體工業(yè)控制交通運(yùn)輸SOC概述SOC的分類CSOC:CPU+可重構(gòu)處理構(gòu)件,研究機(jī)構(gòu)主導(dǎo)SOPC:基于FPGA,可編程SOC,小批量ASICSOC:專用集成電路,大批量,主流SOC概述ASIC(專用集成電路)的分類全定制:設(shè)計(jì)者完成所有電路的設(shè)計(jì)半定制:利用庫里的標(biāo)準(zhǔn)邏輯單元設(shè)計(jì)SOC概述著名ASIC廠商TIIBMSonySTToshibaNEC(日電)FujitsuRenesas(瑞薩)LSISamsungSOC概述SOPC著名廠商(基于FPGA)XilinxAlteraLatticeActelQuiklogicCypressSOC概述可編程器件PLD(PromrammableLogicDevice)CPLD(ComplexPromrammableLogicDevice)FPGA(FieldProgrammableGateArray)SOC概述CPLD與FPGA的區(qū)別FPGA的集成度比CPLD高,F(xiàn)PGA一般是幾萬~幾百萬邏輯單元,CPLD一般是幾千~幾萬邏輯單元;CPLD更適合完成各種算法和組合邏輯,F(xiàn)PGA更適合于完成時(shí)序邏輯;CPLD的時(shí)序延遲是均勻的和可預(yù)測的,而FPGA的延遲往往不可預(yù)測;在編程上FPGA比CPLD具有更大的靈活性;CPLD是粗粒結(jié)構(gòu)(邏輯塊),延遲小,軟件編譯快;CPLD比FPGA使用起來更方便,不需要EEPROM;CPLD的速度比FPGA快;CPLD保密性更好。SOC概述SOC的關(guān)鍵技術(shù)可重用IP核軟硬件協(xié)同設(shè)計(jì)時(shí)序分析可測試性設(shè)計(jì)與測試驗(yàn)證深亞微米技術(shù)低電壓、低功耗技術(shù)總線構(gòu)架技術(shù)可靠性設(shè)計(jì)技術(shù)特殊工藝技術(shù)SOC概述SOC的IP核IP核,即知識產(chǎn)權(quán)IP(IntellectualProperty),是指己驗(yàn)證的、可重利用的、具有某種確定功能的集成電路模塊。軟核硬核固核SOC概述軟核

軟核是用硬件描述語言描述的功能塊,但是并不涉及用什么具體電路元件實(shí)現(xiàn)這些功能。軟IP的設(shè)計(jì)周期短,設(shè)計(jì)投入少,應(yīng)用靈活。缺點(diǎn)是在性能上難以獲得全面優(yōu)化,且知識產(chǎn)權(quán)保護(hù)較難。SOC概述硬核在性能、功率和面積上經(jīng)過優(yōu)化,并映射到特定工藝技術(shù)的功能模塊。硬核具有可預(yù)見性,同時(shí)還可以針對特定工藝或購買商進(jìn)行功耗和尺寸上的優(yōu)化,且更易于實(shí)現(xiàn)版權(quán)保護(hù)。但應(yīng)用靈活性和可移植性較差。SOC概述固核固核是軟核和硬核的折衷,是指在結(jié)構(gòu)和拓?fù)浞矫驷槍π阅芎兔娣e進(jìn)行版圖規(guī)劃,甚至可能用某種工藝技術(shù)進(jìn)行過優(yōu)化的可復(fù)用模塊。SOC概述軟硬件協(xié)同設(shè)計(jì)與傳統(tǒng)的嵌入式系統(tǒng)設(shè)計(jì)方法不同,軟/硬件協(xié)同設(shè)計(jì)強(qiáng)調(diào)軟件和硬件設(shè)計(jì)開發(fā)的并行性和相互反饋,強(qiáng)調(diào)利用現(xiàn)有資源(IP核和軟件構(gòu)件),縮短系統(tǒng)開發(fā)周期,降低系統(tǒng)成本,提高系統(tǒng)性能。軟硬件任務(wù)劃分軟硬件接口定義軟硬件協(xié)同仿真和驗(yàn)證SOC概述時(shí)序分析時(shí)鐘同步時(shí)序預(yù)算的分級和分解關(guān)鍵路徑的特殊約束SOC概述可測試性設(shè)計(jì)與測試驗(yàn)證SOC驗(yàn)證工作約占整個(gè)設(shè)計(jì)工作的70%。測試架構(gòu)測試向量有效傳遞性測試平行化降低測試占用時(shí)間SOC概述深亞微米技術(shù)工藝加工線寬的不斷減少,給電路的設(shè)計(jì)、仿真帶來了新的挑戰(zhàn),線與線的相互影響將變得不可忽略,必須研究關(guān)鍵電路架構(gòu)、時(shí)序收斂性、信號完整性、天線效應(yīng)等問題。0.8~0.35μm稱為亞微米0.25μm及其以下稱為深亞微米0.05μm及其以下稱為納米SOC概述低電壓、低功耗技術(shù)

隨著線寬不斷縮小,電源電壓也相應(yīng)縮小。同時(shí)隨著集成度的提高,電路功耗也會相應(yīng)提高,所以必須采取相應(yīng)措施,以降低功耗。芯片的功耗主要由跳變功耗、短路功耗和泄漏功耗三部分組成。降低功耗的措施包括:電路實(shí)現(xiàn)工藝、輸入向量控制(IVC)技術(shù)、多電壓技術(shù)、功耗管理技術(shù)以及軟件(算法)低功耗利用技術(shù)等。SOC概述總線構(gòu)架技術(shù)IBM公司的CoreConnect總線ARM公司的AMBA總線Altera公司的Avalon總線Silicore公司的Wishbone總線SOC概述可靠性設(shè)計(jì)技術(shù)防死鎖和解鎖機(jī)制容錯(cuò)機(jī)制故障恢復(fù)機(jī)制SOC概述特殊工藝技術(shù)SOC概述對于要求較高的電路,PN結(jié)隔離和挖槽還不能達(dá)到要求,需要特殊的噪聲降低和隔離技術(shù)。一些特殊工藝的相互兼容性,如DRAM、Flash與Logic工藝的兼容、數(shù)字與模擬的相互兼容等。EDA(電子設(shè)計(jì)自動(dòng)化)EDA(ElectronicDesignAutomation)是以計(jì)算機(jī)為工作平臺,以EDA軟件工具為開發(fā)環(huán)境,以硬件描述語言為設(shè)計(jì)語言,以可編程器件為實(shí)驗(yàn)載體,以ASIC、SOC芯片為設(shè)計(jì)目標(biāo)器件,以電子系統(tǒng)設(shè)計(jì)為應(yīng)用方向的電子產(chǎn)品自動(dòng)化設(shè)計(jì)過程。SOC概述EDA的作用隨著芯片規(guī)模的不斷擴(kuò)大,芯片內(nèi)線路的復(fù)雜程度不斷增加,IC設(shè)計(jì)者必須在先進(jìn)的EDA工具的基礎(chǔ)上,采用自上至下、結(jié)構(gòu)化設(shè)計(jì)、軟硬件協(xié)同設(shè)計(jì)等方法來完成SOC的系統(tǒng)功能設(shè)計(jì)。SOC概述EDA工具的主要供應(yīng)商Cadence(美國)Synopsys(美國)Avant(美國,已被Synopsys收購)Magma(美國)SOC概述EDA工具的芯片開發(fā)步驟前端設(shè)計(jì)后端設(shè)計(jì)設(shè)計(jì)驗(yàn)證SOC概述前端設(shè)計(jì)完成從芯片邏輯的概念化設(shè)計(jì)到芯片邏輯門級表示的工作。系統(tǒng)級設(shè)計(jì)和分析寄存器傳輸級(RTL)設(shè)計(jì)和分析邏輯綜合和優(yōu)化SOC概述后端設(shè)計(jì)描述了如何使設(shè)計(jì)結(jié)構(gòu)在芯片上進(jìn)行物理實(shí)現(xiàn),尤其是芯片的硅內(nèi)核和庫單元的布局和布線。芯片布局布線SOC概述設(shè)計(jì)驗(yàn)證保證芯片滿足功能、時(shí)序、功率和其他指標(biāo)的要求。驗(yàn)證占用了整個(gè)設(shè)計(jì)時(shí)間的大約70%。系統(tǒng)級驗(yàn)證RTL級驗(yàn)證邏輯門級驗(yàn)證物理級驗(yàn)證SOC概述第二章:SOC設(shè)計(jì)SOC設(shè)計(jì)流程SOC設(shè)計(jì)原則設(shè)計(jì)流程SOC設(shè)計(jì)設(shè)計(jì)復(fù)用的一般原則同步設(shè)計(jì)存儲器和混合信號設(shè)計(jì)片上總線時(shí)鐘分配清零/置位/復(fù)位信號物理設(shè)計(jì)可交互模塊SOC設(shè)計(jì)同步設(shè)計(jì)數(shù)據(jù)只在時(shí)鐘沿變化,因此指令和數(shù)據(jù)的管理更容易,具體措施:隨機(jī)邏輯中使用寄存器,不用鎖存器避免使用內(nèi)部脈沖發(fā)生電路避免使用直接組合邏輯通道SOC設(shè)計(jì)存儲器設(shè)計(jì)

SOC中存儲器一般占芯片面積的60%以上,存儲器設(shè)計(jì)的注意事項(xiàng):存儲器周邊加虛擬單元,以減小其邊界和中心陣列的寄生參數(shù)詫異;大規(guī)模存儲器放在芯片的邊或角上;小存儲器分散放置;小存儲器用到的金屬層比工藝允許的布線層少1~2層,留下的金屬層用來進(jìn)行芯片級布線。SOC設(shè)計(jì)混合信號設(shè)計(jì)

SOC中混合信號一般不超過芯片面積的5%,如鎖相環(huán)、數(shù)/模轉(zhuǎn)換器、模/數(shù)轉(zhuǎn)換器、溫度傳感器等,混合信號一般對噪聲和工藝非常敏感,設(shè)計(jì)的注意事項(xiàng):盡量將混合信號模塊放在芯片角上周圍加上保護(hù)環(huán)和虛擬單元SOC設(shè)計(jì)片上總線片上總線在SOC設(shè)計(jì)中起著極其重要的作用,由于片上總線提供了各種核都可以連接的通用接口,因此基于總線的設(shè)計(jì)有利于管理。片上總線的設(shè)計(jì)和數(shù)據(jù)傳輸協(xié)議的制定應(yīng)該在選定核之前就予以考慮。若在核開發(fā)完成后再設(shè)計(jì)片上總線,則容易導(dǎo)致數(shù)據(jù)傳輸機(jī)制的混亂。SOC設(shè)計(jì)時(shí)鐘分配盡可能使用同步設(shè)計(jì)不同時(shí)鐘域的數(shù)量越少越好盡可能避免使用鎖存盡可能減小時(shí)鐘偏斜(在系統(tǒng)內(nèi)不同元件處檢測到有效的時(shí)鐘跳變沿所需的時(shí)間差異)SOC設(shè)計(jì)清零/置位/復(fù)位信號盡可能使用同步復(fù)位文檔中應(yīng)對這些信號作詳細(xì)說明SOC設(shè)計(jì)物理設(shè)計(jì)版圖規(guī)劃綜合時(shí)序輸入/輸出端口確認(rèn)與測試SOC設(shè)計(jì)版圖規(guī)劃芯片設(shè)計(jì)之初的版圖規(guī)劃有助于估算芯片的大小,以及確定是否能達(dá)到面積、時(shí)序、性能和成本的目標(biāo)。SOC設(shè)計(jì)綜合(synthesis

)綜合:將電路的高級語言描述編譯生成出細(xì)節(jié)更加豐富的低級描述。在設(shè)計(jì)之初,要對綜合后的面積、時(shí)序和功耗制定明確的目標(biāo)。SOC設(shè)計(jì)時(shí)序在版圖設(shè)計(jì)之前,應(yīng)對版圖規(guī)劃后的塊進(jìn)行時(shí)序分析,在版圖設(shè)計(jì)完成后,再進(jìn)行時(shí)序驗(yàn)證。SOC設(shè)計(jì)輸入/輸出端口要對I/O端口進(jìn)行詳細(xì)定義,并合理規(guī)劃其擺放位置,一些經(jīng)驗(yàn)法則有:所有的電源/地引腳應(yīng)該排列在同一邊信號I/O排列在兩個(gè)邊上SOC設(shè)計(jì)可交互模型設(shè)計(jì)的復(fù)用在很大程度上依賴于可交互模塊的質(zhì)量,這些模塊包括:行為模型、功能模型、仿真模型、時(shí)序模型、版圖規(guī)劃模型等。盡量提高可交互模型的質(zhì)量對模型進(jìn)行加密,防止逆向工程SOC設(shè)計(jì)第三章:IP核設(shè)計(jì)軟核/固核的設(shè)計(jì)硬核的設(shè)計(jì)軟核/固核特點(diǎn)軟核和固核是RTL形式的產(chǎn)品,易于復(fù)用且具有較高的靈活性;但是,由于沒有確定的版圖,它們的面積、功耗和性能沒有經(jīng)過優(yōu)化。

RTL:寄存器傳輸級,用硬件描述語言描述預(yù)期的功能。與之相對應(yīng)的門級則是用具體的邏輯單元來描述一定的功能。RTL和門級是設(shè)計(jì)上的不同階段,RTL經(jīng)過邏輯綜合后就得到門級。之所以有RTL,是因?yàn)榧呻娐房梢钥醋饔梢唤M寄存器以及寄存器之間的邏輯操作構(gòu)成。軟核/固核設(shè)計(jì)軟核/固核設(shè)計(jì)流程軟核/固核設(shè)計(jì)有陰影的框表示固核所需的附加步驟設(shè)計(jì)說明文檔功能要求:指定核的用途和操作物理要求:指定封裝、面積、功耗、工藝庫等設(shè)計(jì)要求:指定結(jié)構(gòu)和帶數(shù)據(jù)流的框圖接口要求:指定信號名稱和功能、時(shí)序圖和交直流參數(shù)測試與調(diào)試要求:指定生產(chǎn)測試、可測性設(shè)計(jì)方法、測試向量產(chǎn)生方法、故障分級等軟件要求:指定硬件模塊的軟件驅(qū)動(dòng)程序軟核/固核設(shè)計(jì)產(chǎn)品RTL代碼功能測試平臺測試向量文件綜合的腳本文件描述核功能的文檔工作特性仿真結(jié)果門級網(wǎng)表(固核)(網(wǎng)表:雛形的電路,描述器件的連接)工藝庫說明(固核)時(shí)序模型(固核)面積和功耗估計(jì)(固核)原型樣片(固核)軟核/固核設(shè)計(jì)硬核設(shè)計(jì)特點(diǎn)需要物理設(shè)計(jì)在面積和時(shí)序上要對特定的工藝進(jìn)行優(yōu)化用版圖數(shù)據(jù)(GDSII)交付硬核設(shè)計(jì)硬核設(shè)計(jì)中的特有問題時(shí)鐘和復(fù)位信號布線通道疏松度、引腳排列和寬長比全定制電路測試硬核設(shè)計(jì)時(shí)鐘和復(fù)位信號具有獨(dú)立于SOC系統(tǒng)的時(shí)鐘和復(fù)位信號硬核中的時(shí)鐘和復(fù)位信號要使用緩沖器和最小的連線負(fù)載硬核輸出端口也應(yīng)有經(jīng)過緩沖的時(shí)鐘,用于和其他時(shí)鐘的同步硬核設(shè)計(jì)布線通道疏松度SOC集成時(shí),通常布線從核的上方或內(nèi)部穿過,為此:硬核中的布線應(yīng)該有一定的疏松度限制核中使用的金屬線層數(shù),使之比工藝允許的少一層或兩層硬核設(shè)計(jì)引腳排列總線信號相鄰輸入的時(shí)鐘和復(fù)位信號要引出電源和地引腳盡量放在一邊基本的I/O引腳(USB、PCI)盡量放在一邊核內(nèi)部的公共電源和地線應(yīng)盡量短硬核設(shè)計(jì)寬長比盡量使硬核的寬長比接近1:1或1:2,以此盡量減小對SOC級布局的影響。硬核設(shè)計(jì)全定制電路有時(shí)因?yàn)樾阅芑蛎娣e的需要,硬核內(nèi)包含有全定制電路模塊,這種電路需要在晶體管級進(jìn)行仿真,這些電路的性能對工藝參數(shù)高度敏感,需要良好的文檔來描述這種電路的功能和實(shí)現(xiàn)。硬核設(shè)計(jì)測試硬核中必須有可測試性設(shè)計(jì)DFT(DesignForTest)

,硬核的DFT設(shè)計(jì)要求在SOC集成時(shí)產(chǎn)生最少的約束。硬核設(shè)計(jì)硬核設(shè)計(jì)流程硬核設(shè)計(jì)系統(tǒng)集成使用硬核設(shè)計(jì)使用軟核設(shè)計(jì)系統(tǒng)驗(yàn)證IP核設(shè)計(jì)使用硬核設(shè)計(jì)功能和時(shí)序等的驗(yàn)證工程,占整個(gè)設(shè)計(jì)工作量的60%~70%驗(yàn)證環(huán)境的魯棒性/完整性、設(shè)計(jì)環(huán)境的完整性/可維護(hù)性時(shí)鐘分配、電源/地以及信號的布線IP核設(shè)計(jì)使用軟核設(shè)計(jì)可以通過參數(shù)進(jìn)行配置需要在目標(biāo)工藝庫下驗(yàn)證IP核設(shè)計(jì)系統(tǒng)驗(yàn)證單獨(dú)測試葉級(leaf-level)模塊的正確性驗(yàn)證核之間的接口軟硬件協(xié)同仿真制造硬件原型(ASIC或FPGA)IP核設(shè)計(jì)第四章:硬件描述語言(HDL)硬件描述語言(HDL):用于設(shè)計(jì)硬件電路的語言??梢酝ㄟ^EDA工具的綜合,生成數(shù)字邏輯網(wǎng)表,然后在一定的工藝下實(shí)現(xiàn)具體的電路。常用的硬件描述語言VerilogHDL(Cadence)VHDL(美國國防部)AHDL(Altera)SystemC(Synopsys)硬件描述語言VerilogHDL在ASIC領(lǐng)域,主要用VerilogHDL;在FPGA/CPLD中,VerilogHDL和VHDL使用均很廣泛。本課程主要介紹VerilogHDL。硬件描述語言VerilogHDL基礎(chǔ)知識詞法數(shù)據(jù)類型運(yùn)算符系統(tǒng)任務(wù)與系統(tǒng)函數(shù)編譯指令硬件描述語言VerilogHDL詞法間隔符與注釋符數(shù)值字符串硬件描述語言間隔符與注釋符間隔符:空格Tab換行符換頁符注釋符:/*......*/為多行注釋//為單行注釋VerilogHDL詞法數(shù)值數(shù)值有四類狀態(tài)值:0:邏輯0或假狀態(tài)1:邏輯1或真狀態(tài)x:未知狀態(tài)z:高阻態(tài)VerilogHDL詞法數(shù)值兩種數(shù)值常量:整形數(shù)實(shí)型數(shù)VerilogHDL詞法整形數(shù)格式:<SIZE>’<base_format><number><SIZE>:位寬,可省略’:固有字符base_format:進(jìn)制格式,二進(jìn)制為b或B,十進(jìn)制為d或D,十六進(jìn)制為h或H,八進(jìn)制為o或ONumber:一串?dāng)?shù)字位寬小于實(shí)際位數(shù)則高位被忽略;位寬大于實(shí)際位數(shù),若最高位是0或1則高位補(bǔ)0,若最高位是x或z,則高位補(bǔ)x或z。659、’h837FF、’o7460、4’b1001、5’D3、12’hx、16’hz、16’b0001_1010_1111_10004af、b001、8’b_0001_1010(非法)VerilogHDL詞法實(shí)形數(shù)十進(jìn)制和科學(xué)計(jì)數(shù)法兩種表示形式:1.8、3.8e10、2.9E-9、3_2387.3398_30473.、.2e6(非法)VerilogHDL詞法字符串

字符串是用雙引號括起來的字符序列,必須在同一行中,當(dāng)作為操作數(shù)時(shí),看作ASCII值序列?!皌hisisastring”“printoutamessage\n”VerilogHDL詞法VerilogHDL數(shù)據(jù)類型物理數(shù)據(jù)類型:與具體的硬件電路對應(yīng)抽象數(shù)據(jù)類型:不與具體的硬件電路對應(yīng)硬件描述語言物理數(shù)據(jù)類型連線型寄存器型這兩種類型的變量定義時(shí)均需要設(shè)置位寬,缺省時(shí)默認(rèn)為1。變量的每一位可以取0、1、x或z。VerilogHDL數(shù)據(jù)類型連線型數(shù)據(jù)連線型數(shù)據(jù)對應(yīng)的是硬件電路中的物理信號連線,沒有電荷保持作用(trireg除外),必須有驅(qū)動(dòng)源驅(qū)動(dòng),有兩種驅(qū)動(dòng)方式:把它連接到一個(gè)門或模塊的輸出端用連續(xù)賦值語句assign對其進(jìn)行賦值VerilogHDL數(shù)據(jù)類型連線型數(shù)據(jù)列表VerilogHDL數(shù)據(jù)類型連線型數(shù)據(jù)功能描述wire,tri兩種常見類型(wire:連線;tri:三態(tài)線,有多個(gè)驅(qū)動(dòng)源驅(qū)動(dòng)時(shí)一般用tri,二者用法一致)wor,trior多重驅(qū)動(dòng)時(shí)具有線或特性wand,triand多重驅(qū)動(dòng)時(shí)具有線與特性trireg具有電荷保持特性tri1上拉電阻tri0下拉電阻supply1電源線,邏輯1supply0電源線,邏輯0寄存器型數(shù)據(jù)寄存器型數(shù)據(jù)對應(yīng)的是具有狀態(tài)保持作用的硬件電路元件,如觸發(fā)器、鎖存器等。關(guān)鍵字為reg未初始化時(shí)為未知狀態(tài)x缺省時(shí)為1位數(shù)VerilogHDL數(shù)據(jù)類型寄存器型數(shù)據(jù)與連線型數(shù)據(jù)的區(qū)別寄存器型數(shù)據(jù)保持最后一次的賦值,連線型數(shù)據(jù)需要有持續(xù)的驅(qū)動(dòng)寄存器型數(shù)據(jù)的驅(qū)動(dòng)可以通過過程賦值語句實(shí)現(xiàn)VerilogHDL數(shù)據(jù)類型物理數(shù)據(jù)類型示例rega;//寄存器變量reg[3:0]v;//4位的寄存器變量tri[15:0]bus;//16位的三態(tài)總線tri1[7:0]data_bus;//8位的數(shù)據(jù)線,處于三態(tài)時(shí)為上拉電阻tri0[31:0]add_bus;//32位的連線型,處于三態(tài)時(shí)為下拉電阻regscalared[1:4]b;//4位寄存器,可選擇部分位賦值regvectored[1:4]a;//不可部分賦值,缺省為scalaredreg[7:0]RAM[0:1023];//8位寬容量為1k的RAMwire#(2.4,1.8)carry;//具有升降延遲的連線型wire(strong1,pull0)sum=a+b;//指定驅(qū)動(dòng)強(qiáng)度且連續(xù)幅值的連線型,supply,strong,pull,weak(強(qiáng)到弱)trireg(small)storeit;//小強(qiáng)度電荷存儲線,medium,largeVerilogHDL數(shù)據(jù)類型存儲器用寄存器數(shù)組來表示存儲器parameter//實(shí)時(shí)參數(shù)

wordsize=16; memsize=256;//申明16位256字的存儲器與寄存器reg[wordsize-1:0] mem[memsize-1:0], writereg, readreg;VerilogHDL數(shù)據(jù)類型抽象數(shù)據(jù)類型integer整型time時(shí)間型real實(shí)型parameter參數(shù)型VerilogHDL數(shù)據(jù)類型integer整型常用于定義循環(huán)控制變量寄存器型數(shù)據(jù)被當(dāng)作無符號數(shù),整型數(shù)據(jù)為32位有符號數(shù)integercountintegerk[1:64];//數(shù)組VerilogHDL數(shù)據(jù)類型time時(shí)間型主要用于對模擬時(shí)間的存儲與計(jì)算處理為64位的無符號數(shù)timestart,stop;//兩個(gè)64位時(shí)間變量VerilogHDL數(shù)據(jù)類型real實(shí)型浮點(diǎn)型數(shù)值reals;VerilogHDL數(shù)據(jù)類型parameter參數(shù)型被命名的常量在仿真開始時(shí)對其賦值,仿真過程中保持不變數(shù)據(jù)的具體類型由所賦的值來決定增加描述的可讀性,為以后的修改帶來方便parametermsb=7;parametere=25,f=9;parameteraverage=(r+f)/2;parameterr=5.7;VerilogHDL數(shù)據(jù)類型VerilogHDL運(yùn)算符算術(shù)運(yùn)算符邏輯運(yùn)算符關(guān)系運(yùn)算符相等運(yùn)算符按位運(yùn)算符歸約運(yùn)算符移位運(yùn)算符條件運(yùn)算符連接運(yùn)算符硬件描述語言算術(shù)運(yùn)算符+加-減*乘/除%取模VerilogHDL運(yùn)算符邏輯運(yùn)算符!邏輯非&&邏輯與||邏輯或結(jié)果只能為0或1。VerilogHDL運(yùn)算符關(guān)系運(yùn)算符<小于>大于<=小于等于>=大于等于如果比較關(guān)系成立,則返回邏輯1,否則返回邏輯0。VerilogHDL運(yùn)算符相等關(guān)系運(yùn)算符==相等:返回1或0或x!=不等:返回1或0或x===全等:只返回1或0,不返回x!==非全等:只返回1或0,不返回xVerilogHDL運(yùn)算符按位運(yùn)算符~按位非&按位與|按位或^按位異或~^按位異或非^~按位異或非不能將邏輯運(yùn)算符與按位運(yùn)算符相混淆VerilogHDL運(yùn)算符歸約運(yùn)算符&歸約與|歸約或^歸約異或~&歸約與非~|歸約或非~^歸約異或非^~歸約異或非先將操作數(shù)的第1位與第2位進(jìn)行歸約運(yùn)算,然后將運(yùn)算結(jié)果與第3位進(jìn)行歸約運(yùn)算,依次類推,直至最后一位。VerilogHDL運(yùn)算符移位運(yùn)算符<<左移位>>右移位a=4’b1010a<<1//結(jié)果為4’b0100a>>2//結(jié)果為4’b0010VerilogHDL運(yùn)算符條件運(yùn)算符?:條件運(yùn)算符有三個(gè)操作然,若第一個(gè)操作數(shù)是邏輯1則返回第二個(gè)操作數(shù),若第一個(gè)操作數(shù)為邏輯0則返回第三個(gè)操作數(shù)。result=(c==d)?a+b:a-bVerilogHDL運(yùn)算符連接運(yùn)算符{}:連接運(yùn)算符{{}}:復(fù)制運(yùn)算符a=1’b1b=2’b00c={a,b}//c=3’b100d={4{a}}//d=4’b1111VerilogHDL運(yùn)算符運(yùn)算符的優(yōu)先級VerilogHDL運(yùn)算符運(yùn)算符描述[]位選擇或部分選擇()圓括號!~邏輯非和按位非&|~&~|^~^^~歸約運(yùn)算符+-單目算術(shù)運(yùn)算符{}連接運(yùn)算符*/%算術(shù)運(yùn)算符+-雙目算術(shù)運(yùn)算符<<>>移位運(yùn)算符>>=<<=關(guān)系運(yùn)算符==!=相等運(yùn)算符&按位與^^~~^按位異或和異或非|按位或&&邏輯與||邏輯或?:條件運(yùn)算符VerilogHDL系統(tǒng)任務(wù)與系統(tǒng)函數(shù)用于對仿真過程的控制和對仿真結(jié)果的分析以

“$”開頭系統(tǒng)任務(wù)可以沒有返回值,或有多個(gè)返回值,而系統(tǒng)函數(shù)只有一個(gè)返回值系統(tǒng)任務(wù)可以帶延遲,而系統(tǒng)函數(shù)不允許帶延遲,在0時(shí)刻執(zhí)行硬件描述語言VerilogHDL系統(tǒng)任務(wù)與系統(tǒng)函數(shù)標(biāo)準(zhǔn)輸出任務(wù)文件管理任務(wù)仿真控制任務(wù)時(shí)間函數(shù)其他硬件描述語言標(biāo)準(zhǔn)輸出任務(wù)$display:可以自動(dòng)換行$write:不會自動(dòng)換行$display(“Thecountis%b”,counter)%d:十進(jìn)制;%b:二進(jìn)制;%h:十六進(jìn)制;%o:八進(jìn)制;%t:時(shí)間格式;%f:浮點(diǎn)格式;%s:字符串;\n:換行。VerilogHDL系統(tǒng)任務(wù)與系統(tǒng)函數(shù)文件管理任務(wù)$fopen:打開文件integerhandleA;handleA=$fopen

“myfile.out”VerilogHDL系統(tǒng)任務(wù)與系統(tǒng)函數(shù)文件管理任務(wù)$fdisplay:可以自動(dòng)換行$fwrite:不會自動(dòng)換行輸出到文件integerhandleA;handleA=$fopen

“myfile.out”;$fdisplay(handleA,“Hello”);VerilogHDL系統(tǒng)任務(wù)與系統(tǒng)函數(shù)文件管理任務(wù)$freadmemb:二進(jìn)制讀取$freadmemh:十六進(jìn)制讀取從文件中讀取數(shù)據(jù)到存儲器reg[7:0]memory[9:0];$freadmemb(“myfile.dat”,memory);VerilogHDL系統(tǒng)任務(wù)與系統(tǒng)函數(shù)仿真控制任務(wù)$monitor:監(jiān)控,信號發(fā)生變化時(shí)輸出$monitoron:打開監(jiān)控任務(wù)$monitoroff:關(guān)閉監(jiān)控任務(wù)$monitor(“a=%d,b=%d”,a,b);VerilogHDL系統(tǒng)任務(wù)與系統(tǒng)函數(shù)仿真控制任務(wù)$finish:結(jié)束仿真,返回操作系統(tǒng)$stop:暫時(shí)掛起仿真,返回Verilog界面VerilogHDL系統(tǒng)任務(wù)與系統(tǒng)函數(shù)時(shí)間函數(shù)$timeformat:控制%t格式如何顯示時(shí)間信息$printtimescale:給出指定模塊的時(shí)間單位和精度$time:返回64位的整數(shù),指定當(dāng)前的仿真時(shí)間$stime:返回32位的仿真時(shí)間$realtime:以實(shí)數(shù)形式返回當(dāng)前的仿真時(shí)間VerilogHDL系統(tǒng)任務(wù)與系統(tǒng)函數(shù)其他函數(shù)$random:隨機(jī)函數(shù),產(chǎn)生一個(gè)隨機(jī)數(shù)$rtoi:通過截?cái)嘈?shù)值將實(shí)數(shù)變換成整數(shù)$itor:將整數(shù)變換成實(shí)數(shù)$realtobits:將實(shí)數(shù)變換成64位的實(shí)數(shù)向量$bitstoreal:將位模式變換為實(shí)數(shù)VerilogHDL系統(tǒng)任務(wù)與系統(tǒng)函數(shù)編譯指令編譯指令以字符“`”開頭編譯指令末尾不需要分號編譯指令不受模塊與文件的限制,已定義的編譯指令一直有效,直到其他編譯指令修改它或?qū)⒃摼幾g指令關(guān)閉硬件描述語言宏編譯指令`define:定義宏`undef:取消宏`definecycle20VerilogHDL編譯指令文件包含指令`include:包含需要用到的文件`includefile1.vVerilogHDL編譯指令條件編譯指令`ifdefTEST

modulecounter;......endmodule`elsemodulecounter_test;......endmodule`endif當(dāng)且僅當(dāng)宏TEST定義時(shí)編譯模塊counter,否則編譯模塊counter_testVerilogHDL編譯指令時(shí)間定標(biāo)指令`timescale:用于設(shè)定時(shí)延的時(shí)間單位`timescale1ns/10psVerilogHDL編譯指令工作庫定義指令`uselib:定義工作庫 file=庫文件名的路徑 dir=庫目錄名的路徑libext=.文件擴(kuò)展`uselibfile=/models/udp.lib`uselibdir=/models/gate_liblibext=.vVerilogHDL編譯指令用戶自定義元件(UDP)基本門級元件(BasicGate-levelPrimitives)基本開關(guān)級元件(BasicSwitch-levelPrimitives)用戶自定義元件(UDP)硬件描述語言UDP的定義primitive<元件名稱>(<輸出端口名>,<輸入端口名1>,<輸入端口名2>,...,<輸入端口名n>);

輸出端口類型說明(output); 輸入端口類型說明(input);

輸出端寄存器變量說明(reg);

元件初始狀態(tài)說明(initial); table <table表項(xiàng)1>;

<table表項(xiàng)2>;

... <table表項(xiàng)n>; endtable endprimitive用戶自定義元件(UDP)UDP的定義primitivemux4_1(out,in1,in2,in3,in4,ctrl1,ctrl2); outputout;

inputin1,in2,in3,in4,ctrl1,ctrl2; table //in1in2in3in4ctrl1ctrl2:out 0???00:0; 1???00:1; ?0??01:0; ?1??01:1; ??0?10:0; ??1?10:1; ???011:0; ???111:1;

endtable endprimitive用戶自定義元件(UDP)UDP的定義UDP定義模塊不能出現(xiàn)在其他模塊定義之內(nèi)只能有一個(gè)輸出端口,而且必須為第一項(xiàng)只有時(shí)序邏輯元件才能將輸出端口定義成寄存器類變量初始狀態(tài)為電路上電時(shí)刻的狀態(tài),只能為0、1、xtable表項(xiàng)中只能出現(xiàn)0、1、x三種邏輯值用戶自定義元件(UDP)組合邏輯電路UDP直接把電路的邏輯真值表搬到UDP的table表中完全由輸入決定輸出用戶自定義元件(UDP)時(shí)序邏輯電路UDP時(shí)序邏輯電路元件的輸出除了與當(dāng)前的輸入狀態(tài)有關(guān),還與時(shí)序元件本身的內(nèi)部狀態(tài)有關(guān)table表中多了一個(gè)內(nèi)部狀態(tài)必須將輸出端口定義為寄存器類型往往需要對元件的初始狀態(tài)值加以指定用戶自定義元件(UDP)時(shí)序邏輯電路UDP電平觸發(fā)時(shí)序電路UDP邊沿觸發(fā)時(shí)序電路UDP用戶自定義元件(UDP)電平觸發(fā)時(shí)序邏輯電路UDP內(nèi)部狀態(tài)改變由某一輸入信號電平觸發(fā)用戶自定義元件(UDP)電平觸發(fā)鎖存器真值表d_inclkcurrent_statenext_state(q)000或1或x0100或1或x10或1或x1110或1或x100電平觸發(fā)時(shí)序邏輯電路UDP用戶自定義元件(UDP)primitivelatch(q,clk,d_in); outputq; regq;

inputclk,d_in; initialq=1’b0;//初始狀態(tài) table //clkd_in:cunrent_state:next_state(q) 01:? :1; 00:?:0; 1?:?:-;//輸出不變

endtable endprimitive邊沿觸發(fā)時(shí)序邏輯電路UDP內(nèi)部狀態(tài)改變由某一輸入時(shí)鐘(只能有一個(gè))的邊沿觸發(fā)用戶自定義元件(UDP)上升沿T觸發(fā)器真值表clkt_incurrent_statenext_state(q)(01)000(01)011(01)101(01)110(10)000(10)011(10)100(10)1110或1或x(??)000或1或x(??)11邊沿觸發(fā)時(shí)序邏輯電路UDP用戶自定義元件(UDP)primitivet_trigger(q,clk,t_in); outputq; regq;

inputclk,t_in; table //clkt_in:cunrent_state:next_state(q) (01)0:?:-; (01)1:0:1; (01)1:1:0; (10)?:?:-; ?(??):?:-;

endtable endprimitiveVerilogHDL中的模塊及其描述方式VerilogHDL語言是模塊化的模塊(Module)是VerilogHDL中的基本單元硬件描述語言模塊的概念及結(jié)構(gòu)module<模塊名>(<端口列表>) 端口說明(input,output,inout)

參數(shù)定義(可選)(關(guān)鍵字parameter)

數(shù)據(jù)類型定義 連續(xù)賦值語句(assign)

過程塊(initial和always) -行為描述語句 底層模塊實(shí)例 任務(wù)(task)和函數(shù)(function) 延時(shí)說明塊endmoduleVerilogHDL中的模塊及其描述方式模塊的概念及結(jié)構(gòu)moduleMUX2_1(out,a,b,sel);

outputout; inputa,b,sel; not(sel_,sel);

and(a1,a,sel_); and(b1,b,sel); or(out,a1,b1);endmoduleVerilogHDL中的模塊及其描述方式模塊的描述方式數(shù)據(jù)流描述方式行為描述方式結(jié)構(gòu)描述方式VerilogHDL中的模塊及其描述方式數(shù)據(jù)流描述方式主要用來描述組合邏輯用assign連續(xù)賦值語句實(shí)現(xiàn)VerilogHDL中的模塊及其描述方式assign語句assign(賦值驅(qū)動(dòng)強(qiáng)度)[連線型變量的位寬]#(延時(shí)量)連線型變量名=賦值表達(dá)式當(dāng)賦值表達(dá)式中變量的值發(fā)生變化時(shí),重新計(jì)算賦值表達(dá)式的值,并在指定延時(shí)后將得到的結(jié)果賦給連線型變量inputin1,in2;outputout;assignout=~(in1&in2);VerilogHDL中的模塊及其描述方式行為描述方式通過行為語句實(shí)現(xiàn)initial語句:只執(zhí)行一次always語句:循環(huán)執(zhí)行只適用于寄存器類型數(shù)據(jù)VerilogHDL中的模塊及其描述方式initial和always語句inputA,B,Cin;outputSum,Count;regSum,Count;regT1,T2,T3;always@(AorBorCin) begin Sum=(A^B)^Cin; T1=A&Cin; T2=B&Cin; T3=A&B; Cout=(T1|T2)|T3; endVerilogHDL中的模塊及其描述方式initial和always語句initial begin inputs=‘b000000;//初始值 #10inputs=‘b011001;10個(gè)時(shí)間單位后的值 #20inputs=‘b011011;20個(gè)時(shí)間單位后的值 #50inputs=‘b001000;50個(gè)時(shí)間單位后的值 endVerilogHDL中的模塊及其描述方式語句組合begin-end語句組:順序執(zhí)行fork-join語句組:并行執(zhí)行VerilogHDL中的模塊及其描述方式結(jié)構(gòu)描述方式通過實(shí)例進(jìn)行描述,將預(yù)定義的基本元件實(shí)例嵌入到語言中,包括:用戶自定義的模塊用戶自定義元件UDP內(nèi)置門級元件內(nèi)置開關(guān)級元件not(a,a1);and(a,b,c);VerilogHDL中的模塊及其描述方式時(shí)間控制延時(shí)控制邊沿觸發(fā)事件控制電平敏感事件控制硬件描述語言延時(shí)控制#<延時(shí)時(shí)間>行為語句;或#<延時(shí)時(shí)間>;#10clk=1;#10;//處于等待狀態(tài)時(shí)間控制邊沿觸發(fā)事件控制@(<事件表達(dá)式>)行為語句;@(<事件表達(dá)式>);@(<事件表達(dá)式1>or...or<事件表達(dá)式n>)行為語句;@(<事件表達(dá)式1>or...or<事件表達(dá)式n>);一般用于時(shí)序邏輯,不要求所有信號都出現(xiàn)在敏感事件列表中時(shí)間控制事件表達(dá)式<信號名>;//信號發(fā)生變化posedge<信號名>;//信號發(fā)生正跳變negedge<信號名>;//信號發(fā)生負(fù)跳變時(shí)間控制正跳變posedge0-->x0-->z0-->1x-->1z-->1時(shí)間控制負(fù)跳變negedge1-->x1-->z1-->0x-->0z-->0時(shí)間控制邊沿觸發(fā)控制@(reg_a)reg_b=reg_a;@(posedgereg_a)reg_b=reg_a;@(negedgereg_a);//等待@(posedgeclk1ornegedgeclk2orb)a=b;@(posedgeclk1ornegedgeclk2);//等待時(shí)間控制電平觸發(fā)事件控制wait(條件表達(dá)式)語句塊;//條件為真執(zhí)行語句塊wait(條件表達(dá)式)行為語句;wait(條件表達(dá)式);時(shí)間控制電平觸發(fā)事件控制wait(enable==1)begin

d=a&b;

d=d|c;end時(shí)間控制電平觸發(fā)事件控制wait(enable==1)d=(a&b)|c;wait(enable==1);時(shí)間控制賦值語句過程賦值語句連續(xù)賦值語句硬件描述語言過程賦值語句過程賦值語句只能用于initial和always過程塊中在initial和always過程塊中只能使用過程賦值語句只能用于對寄存器類型的變量(reg、integer、real、time)進(jìn)行賦值賦值語句過程賦值語句rega;reg[0:7]b;integeri;reg[0:7]mem_1[0:1023];initialbegin a=0; i=356; b[2]=1’b1; b[0:3]=4’b1111; mem_1[200]=8’hfd; {a,b}=9’b101110110;end賦值語句過程賦值語句的兩種延時(shí)方式外部時(shí)間控制方式內(nèi)部時(shí)間控制方式賦值語句外部時(shí)間控制方式#5a=b;或#5;a=b;先等待指定的延時(shí)時(shí)間量,然后計(jì)算右端的表達(dá)式并將其賦給左邊的變量賦值語句內(nèi)部時(shí)間控制方式a=#5b;先計(jì)算右端的表達(dá)式,然后等待指定的延時(shí)時(shí)間量,最后將表達(dá)式的值賦給左邊的變量賦值語句過程賦值語句的兩種類型阻塞型過程賦值:=非阻塞型過程賦值:<=賦值語句阻塞型過程賦值在begin-end串行塊中,當(dāng)前語句的執(zhí)行會阻塞下一條語句的執(zhí)行initialbegin A=B; B=A;end賦值語句非阻塞型過程賦值在begin-end串行塊中,當(dāng)前語句的執(zhí)行不會阻塞下一條語句的執(zhí)行initialbegin A<=B; B<=A;end賦值語句連續(xù)賦值語句assign只能對連線型變量進(jìn)行賦值,分為兩種:顯式連續(xù)賦值語句隱式連續(xù)賦值語句賦值語句顯式連續(xù)賦值語句連線型變量類型[連線型變量位寬]連線型變量名;assign#(延時(shí)量)連線型變量名=賦值表達(dá)式;wire[3:0]x,y,z;assign#(1.5,1.0,2.0)z=x&y;賦值語句隱式連續(xù)賦值語句連線型變量類型(賦值驅(qū)動(dòng)強(qiáng)度)[連線型變量位寬]#(延時(shí)量)連線型變量名=賦值表達(dá)式;wire[3:0]x,y;wire[3:0]#(1.5,1.0,2.0)z=x&y;賦值語句隱式連續(xù)賦值語句連線型變量不能保存數(shù)據(jù)只有在被連續(xù)驅(qū)動(dòng)后才能取得確定值若沒有得到連續(xù)驅(qū)動(dòng)則取值為“x”賦值語句連續(xù)賦值語句和過程賦值語句的區(qū)別連續(xù)賦值語句由“assign”關(guān)鍵字識別,而過程賦值語句中不包含這個(gè)關(guān)鍵字連續(xù)賦值語句只能對連線型變量賦值,過程賦值語句只能對寄存器型變量賦值連續(xù)賦值語句不能出現(xiàn)在過程塊(initial過程塊或always過程塊)中,而過程賦值語句只能出現(xiàn)在過程塊中連續(xù)賦值語句主要用來描述組合邏輯電路以及連線型變量間的連接,而過程賦值語句主要用來描述時(shí)序邏輯電路連續(xù)賦值語句的賦值是連續(xù)的,而過程賦值語句只有被執(zhí)行時(shí)才能賦值賦值語句過程連續(xù)賦值語句與連續(xù)賦值語句的區(qū)別:過程連續(xù)賦值語句只能用在過程塊中,而連續(xù)賦值語句不能出現(xiàn)在過程塊中過程連續(xù)賦值語句可以對寄存器型變量進(jìn)行連續(xù)賦值,而連續(xù)賦值語句只能對連線型變量進(jìn)行賦值過程連續(xù)賦值語句不能對變量的某一位或某幾位賦值,而連續(xù)賦值語句可以對變量的某一位或某幾位賦值賦值語句過程連續(xù)賦值語句assign/deassignforce/release賦值語句assign/deassign只能對寄存器型變量進(jìn)行連續(xù)賦值,不能對連線型變量進(jìn)行連續(xù)賦值assign用來對寄存器型變量連續(xù)賦值deassign用來撤銷連續(xù)賦值regout[0:3];initialbegin assignout=a&b; deassignout;end賦值語句force/release既能對寄存器型變量進(jìn)行連續(xù)賦值,也能對連線型變量進(jìn)行連續(xù)賦值force用來對寄存器型或連線型變量進(jìn)行連續(xù)賦值release用來撤銷連續(xù)賦值regout[0:3];initialbegin forceout=a&b; releaseout;end賦值語句高級程序語句、函數(shù)和任務(wù)分支語句循環(huán)控制語句任務(wù)(task)和函數(shù)(function)只能出現(xiàn)在過程塊內(nèi)硬件描述語言分支語句if-else條件分支語句case分支控制語句高級程序語句、函數(shù)和任務(wù)if-else語句if(<條件表達(dá)式>) 語句或語句塊;if(<條件表達(dá)式>) 語句或語句塊1;else 語句或語句塊2;if(<條件表達(dá)式1>)語句或語句塊1;eseif(<條件表達(dá)式2>)語句或語句塊2;...elseif(<條件表達(dá)式n>)語句或語句塊n;else 語句或語句塊n+1;高級程序語句、函數(shù)和任務(wù)if-else語句always@(selaorselboraorborc)begin if(sela)

q=a; eseif(selb) q=b; else q=c;end高級程序語句、函數(shù)和任務(wù)if-else語句邏輯表達(dá)式或關(guān)系表達(dá)式為1,則條件成立;不為1(0、x、z),則條件不成立在有多條語句的情況下,要用begin和end將多條語句組成一個(gè)語句塊if-else還可以嵌套使用,但內(nèi)層的if-else需要用begin和end封裝高級程序語句、函數(shù)和任務(wù)case語句casecasezcasex高級程序語句、函數(shù)和任務(wù)case語句case(<控制表達(dá)式>)<分支項(xiàng)表達(dá)式1>:語句塊1;<分支項(xiàng)表達(dá)式2>:語句塊2;...<分支項(xiàng)表達(dá)式n>:語句塊n;default:語句塊n+1;endcase高級程序語句、函數(shù)和任務(wù)case語句case(op_code) 2’b00:out=a|b; 2’b01, 2’b10, 2’b11:out=a&b; default:out=0;endcase高級程序語句、函數(shù)和任務(wù)casez和casex語句casez:如果控制表達(dá)式或分支表達(dá)式的某位取值為z,則該位在比較時(shí)將被忽略casex:如果控制表達(dá)式或分支表達(dá)式的某位取值為x或z,則該位在比較時(shí)將被忽略高級程序語句、函數(shù)和任務(wù)循環(huán)控制語句forever循環(huán)語句repeat循環(huán)語句while循環(huán)語句for循環(huán)語句高級程序語句、函數(shù)和任務(wù)forever循環(huán)語句格式:forever語句或語句塊;常用于產(chǎn)生周期性的波形forever#25clk=~clk;可用disable語句終止高級程序語句、函數(shù)和任務(wù)repeat循環(huán)語句repeat(<循環(huán)次數(shù)表達(dá)式>)語句或語句塊;repeat(num)begin data1=data1<<1; data2=data2>>1;end高級程序語句、函數(shù)和任務(wù)repeat循環(huán)語句特殊用法out=0;pepeat(NUM)@(posedgeclk);out=1;高級程序語句、函數(shù)和任務(wù)while循環(huán)語句while(<條件表達(dá)式>)語句或語句塊;while(count<100)begin $display(“count=%d”count); #5count=count+1;end高級程序語句、函數(shù)和任務(wù)for循環(huán)語句for(<語句1>;<條件表達(dá)式>;<語句2>)循環(huán)體語句或語句塊;for(count=0;count<100;count=count+1)begin $display(“count=%d”count); #5;end高級程序語句、函數(shù)和任務(wù)任務(wù)task<任務(wù)名>; 端口與類型說明; 局部變量說明;

begin <行為語句1;> <行為語句2;> ... <行為語句n;> endendtask高級程序語句、函數(shù)和任務(wù)任務(wù)taskread_mem;

input[15:0]address;

output[31:0]data;

reg[3:0]counter; reg[7:0]temp[1:4];

begin for(counter=1;counter<=4;counter=counter+1) temp[counter]=mem[address+counter-1]; data={temp[1],temp[2],temp[3],temp[4]}; endendtask高級程序語句、函數(shù)和任務(wù)任務(wù)任務(wù)中不可以出現(xiàn)initial或always過程塊當(dāng)出現(xiàn)“disable語句時(shí)”,終止任務(wù)的執(zhí)行高級程序語句、函數(shù)和任務(wù)任務(wù)的調(diào)用reg[7:0]mem[128:0];reg[15:0]a;reg[31:0]b;a=0;read_mem(a,b);高級程序語句、函數(shù)和任務(wù)任務(wù)的調(diào)用任務(wù)定義只能出現(xiàn)在模塊中任務(wù)調(diào)用只能出現(xiàn)在過程塊中只有寄存器變量才能與任務(wù)的輸出端口相對應(yīng)高級程序語句、函數(shù)和任務(wù)函數(shù)function<返回值類型或返回值寬度><函數(shù)名>; 輸入端口說明; 局部變量說明;

begin <行為語句1;> <行為語句2;> ... <行為語句n;> endendfunction

<返回值類型或返回值寬度>為可選項(xiàng),可以為[msb:lsb]、integer、real高級程序語句、函數(shù)和任務(wù)函數(shù)function[7:0]getbyte;

input[63:0]word;

input[2:0]bytenum;

integerbit; reg[7:0]temp;

begin for(bit=0;bit<=7;bit=bit+1) temp[bit]=word[(bytenum-1)*8+bit]; getbyte=temp; endendfunction高級程序語句、函數(shù)和任務(wù)函數(shù)函數(shù)內(nèi)不可以出現(xiàn)initial或always過程塊函數(shù)中必須有一個(gè)輸入端口,不能出現(xiàn)輸出端口(output)或輸入/輸出端口(inout)函數(shù)內(nèi)不能出現(xiàn)任何類型的時(shí)間控制描述,也不允許使用disable終止語句高級程序語句、函數(shù)和任務(wù)函數(shù)的調(diào)用out=getbyte(input1,input2);assignnet1=getbyte(input1,3);函數(shù)的調(diào)用不能單獨(dú)作為一條語句出現(xiàn),只能作為一個(gè)操作數(shù)出現(xiàn)函數(shù)調(diào)用既能出現(xiàn)在過程塊中,也能出現(xiàn)在assign連續(xù)賦值語句中高級程序語句、函數(shù)和任務(wù)函數(shù)和任務(wù)的區(qū)別函數(shù)至少必須有一個(gè)輸入端口,而任務(wù)可以有0、1或多個(gè)輸入端口函數(shù)不能有輸出端口,而任務(wù)可以有0、1或多個(gè)輸出端口函數(shù)調(diào)用通過函數(shù)名傳遞一個(gè)返回值,而任務(wù)調(diào)用通過輸出端口傳遞返回值函數(shù)中不能調(diào)用其他任務(wù),而任務(wù)中可以調(diào)用其他任務(wù)或函數(shù)函數(shù)調(diào)用不能單獨(dú)作為一條語句,而任務(wù)調(diào)用為一條單獨(dú)語句函數(shù)調(diào)用可以出現(xiàn)在過程塊或連續(xù)賦值語句中,而任務(wù)調(diào)用只能出現(xiàn)在過程塊中函數(shù)中不能出現(xiàn)時(shí)間控制語句,而任務(wù)可以函數(shù)不能用disable語句中斷,而任務(wù)可以高級程序語句、函數(shù)和任務(wù)模塊級建模

調(diào)用由用戶設(shè)計(jì)生成的低級模塊來對硬件電路結(jié)構(gòu)進(jìn)行描述硬件描述語言模塊的定義module<模塊名>(<端口列表>) 申明語句

模塊組項(xiàng)

任務(wù)和函數(shù)定義

specify塊endmodule模塊級建模端口列表各個(gè)端口表達(dá)式按一定次序組成的一個(gè)列表模塊級建模申明語句parameter:參數(shù)申明語句input:輸入端口申明語句output:輸出端口申明語句inout:雙向端口申明語句連線型變量申明語句寄存器型變量申明語句時(shí)間型變量申明語句整型變量申明語句實(shí)型變量申明語句模塊級建模模塊組項(xiàng)模塊功能的描述,可以包含initial和always過程塊,也可以包括模塊或元件的實(shí)例模塊級建模specify塊用于對模塊輸入、輸出端口之間的路徑延時(shí)時(shí)間量進(jìn)行說明模塊級建模函數(shù)和任務(wù)定義用來對模塊內(nèi)使用到的函數(shù)和任務(wù)進(jìn)行定義模塊級建模模塊的端口隱式端口名形式顯式端口名形式模塊級建模隱式端口名形式(<端口表達(dá)式1>...<端口表達(dá)式n>)各個(gè)<端口表達(dá)式>指明了各個(gè)模塊端口與模塊內(nèi)變量的連接關(guān)系moduleex1(a,b,z) inputa,b; outputz; ...模塊級建模顯式端口名形式(.<端口名1>(<端口表達(dá)式1>)...(.<端口名2>(<端口表達(dá)式2>))列表中的每一項(xiàng)包含一個(gè)端口名和一個(gè)端口表達(dá)式moduleex2(.in_a(a),.in_b(b),.in_z(z)) inputa,b; outputz; ...模塊級建模模塊的調(diào)用一個(gè)復(fù)雜電路可以被描述成是由各級模塊像搭積木那樣一層層組成一個(gè)硬件系統(tǒng)中必須有一個(gè)“頂級模塊”,只有“頂級模塊”不被其他模塊調(diào)用,而其他各級模塊都將被上一級模塊調(diào)用模塊被調(diào)用后就在上一級模塊內(nèi)生成了一個(gè)“模塊實(shí)例”模塊級建模模塊的調(diào)用<模塊名><參數(shù)值列表><實(shí)例名>(<端口連接表>);moduleNAND(ina,inb,nand_out);

inputina,inb; outputnand_out; assignnand_out=~(ina&inb);endmodulemoduleAND(in1,in2,and_out); inputin1,in2; outputand_out; wirew1; NANDNAND1(in1,in2,w1); NANDNAND2(w1,w1,and_out);endmodule模塊級建模模塊調(diào)用時(shí)對參數(shù)值的更改使用帶有參數(shù)值的模塊實(shí)例語句使用參數(shù)重定義語句(defparam)模塊級建模使用帶有參數(shù)值的模塊實(shí)例語句modulemubtibits_multiplier(data1,data2,out);//4位×4位乘法器

parameterWIDE1=4;

parameterWIDE2=4; input[WIDE1:1]data1; input[WIDE2:1]data2; output[WIDE1+WIDE2:1]out; assignout=data1*data2;endmodulemoduleeight_bits_multiplier(a,b,result);//8位×8位乘法器 input[8:1]a,b; output[16:1]result; mubtibits_multiplier#(8,8)U1(a,b,result);endmodule模塊級建模使用參數(shù)重定義語句(defparam)modulemubtibits_multiplier(data1,data2,out);//4位×4位乘法器

parameterWIDE1=4;

parameterWIDE2=4; input[WIDE1:1]data1; input[WIDE2:1]data2; output[WIDE1+WIDE2:1]out; assignout=data1*data2;endmodulemoduleeight_bits_multiplier(a,b,result);//8位×8位乘法器 input[8:1]a,b; output[16:1]result; defparamU1.WIDE1=8; defparamU1.WIDE2=8; mubtibits_multiplierU1(a,b,result);endmodule模塊級建模門級建模

調(diào)用Verilog內(nèi)部定義的“基本門級元件(BasicGate-LevelPrimitives)”對硬件電路進(jìn)行描述硬件描述語言內(nèi)置基本門級元件多輸入門:and(與門),nand(與非門),or(或門),nor(或非門),xor(異或門),xnor(異或非門)多輸出門:buf(緩沖器),not(非門)三態(tài)門:bufif0(低電平使能緩沖器),bufif1(高電平使能緩沖器),notif0(低電平使能非門),notif1(高電平使能非門)上拉、下拉電阻:pullup(上拉電阻),pulldown(下拉電阻)門級建?;鹃T級元件的調(diào)用<門級元件名><驅(qū)動(dòng)強(qiáng)度說明>#(<門級延時(shí)量>)<實(shí)例名>(端口連接表);門級建模驅(qū)動(dòng)強(qiáng)度說明(<對高電平的驅(qū)動(dòng)強(qiáng)度>,<對低電平的驅(qū)動(dòng)強(qiáng)度>)驅(qū)動(dòng)強(qiáng)度分為:supply,strong,pull,weak,highz由強(qiáng)到弱and(strong0,weak1)AND_1(out,in1,in2);and(weak1,strong0)AND_2(out,in1,in2);門級建模門級延時(shí)量說明了信號從輸入端到輸出端的延時(shí)and#10AND_3(out,in1,in2);門級建模多輸入門and(與門)nand(與非門)or(或門)nor(或非門)xor(異或門)xnor(異或非門)<元件名><驅(qū)動(dòng)強(qiáng)度說明>#(<門級延時(shí)量>)<實(shí)例名>(<輸出端口>,<輸入端口1>,...,<輸入端口n>)orO2(a,b,c,d);門級建模多輸出門buf(緩沖器)not(非門)<元件名><驅(qū)動(dòng)強(qiáng)度說明>#(<門級延時(shí)量>)<實(shí)例名>(<輸出端口1>,...,<輸出端口n>,<輸入端口>)notNOT_1(out1,out2,in);門級建模三態(tài)門bufif0(低電平使能緩沖器)bufif1(高電平使能緩沖器)notif0(低電平使能非門)notif1(高電平使能非門)<元件名><驅(qū)動(dòng)強(qiáng)度說明>#(<門級延時(shí)量>)<實(shí)例名>(<輸出端口>,<輸入端口>,<控制端口>)bufif1BF1(data_bus,mem_data,enable);門級建模上拉、下拉電阻pullup(上拉電阻)pulldown(下拉電阻)<元件名><驅(qū)動(dòng)強(qiáng)度說明>#(<門級延時(shí)量>)<實(shí)例名>(<輸出端口>)上拉輸出1,下拉輸出0pullup(supply)U1(power);門級建模門級延時(shí)上升延時(shí):信號由0、x、z變?yōu)?的延時(shí)下降延時(shí):信號由1、x、z變?yōu)?的延時(shí)截止延時(shí):信號由0、1、x變?yōu)閦的延時(shí)到不定態(tài)的延時(shí):信號由0、1、z變?yōu)閤的延時(shí)多輸入門和多輸出門沒有截止延時(shí)三態(tài)門具有全部四種延時(shí)上拉和下拉電阻沒有門級延時(shí)門級建模門級延時(shí)的表示方法基本表示方式“最小延時(shí)”、“典型延時(shí)”和“最大延時(shí)”的表示方法門級建模門級延時(shí)的基本表示方法包含一個(gè)延時(shí)值(#d):d同時(shí)代表上升延時(shí)、下降延時(shí)、截止延時(shí)、到不定態(tài)的延時(shí)包含兩個(gè)延時(shí)值(#(d1,d2)):d1代表上升延時(shí),d2代表下降延時(shí),d1和d2中的較小者代表截止延時(shí)和到不定態(tài)的延時(shí)包含三個(gè)延時(shí)值(d1,d2,d3):d1代表上升延時(shí),d2代表下降延時(shí),d3代表截止延時(shí),d1、d2和d3中的最小者代表到不定態(tài)的延時(shí)notif1#(10,20,30)U3(out,in,ctrl);門級建?!白钚⊙訒r(shí)”、“典型延時(shí)”和“最大延時(shí)”門級延時(shí)量中的每一項(xiàng)將由“最小延時(shí)”、“典型延時(shí)”和“最大延時(shí)”三個(gè)值來表示#(d1_min:d1_typ:d1_max,d2_min:d2_typ:d2_max,d3_min:d3_typ:d3_max)notif1#(2:3:4,5:6:7,1:3:4)U4(out,in,ctrl);門級建模Specify說明塊基本門級元件:門級延時(shí)說明模塊:延時(shí)說明塊(SpecifyBlock)硬件描述語言示例`timescale1ns/1nsmodulespecify_example(out,a,b,c); outputout; inputa,b,c; wirew1; xor#2X1(w1,a,b); nand#3NA1(out,w1,c); specify specparama_out=6,b_out=5,c_out=1; (a=>out)=a_out; (b=>out)=b_out; (c=>out)=c_out; endspecifyendmo

溫馨提示

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

最新文檔

評論

0/150

提交評論