數(shù)字系統(tǒng)設(shè)計(jì)與VerilogHDL-第9版- 課件全套 第1-11章 EDA技術(shù)概述-Verilog設(shè)計(jì)實(shí)例_第1頁(yè)
數(shù)字系統(tǒng)設(shè)計(jì)與VerilogHDL-第9版- 課件全套 第1-11章 EDA技術(shù)概述-Verilog設(shè)計(jì)實(shí)例_第2頁(yè)
數(shù)字系統(tǒng)設(shè)計(jì)與VerilogHDL-第9版- 課件全套 第1-11章 EDA技術(shù)概述-Verilog設(shè)計(jì)實(shí)例_第3頁(yè)
數(shù)字系統(tǒng)設(shè)計(jì)與VerilogHDL-第9版- 課件全套 第1-11章 EDA技術(shù)概述-Verilog設(shè)計(jì)實(shí)例_第4頁(yè)
數(shù)字系統(tǒng)設(shè)計(jì)與VerilogHDL-第9版- 課件全套 第1-11章 EDA技術(shù)概述-Verilog設(shè)計(jì)實(shí)例_第5頁(yè)
已閱讀5頁(yè),還剩482頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

數(shù)字系統(tǒng)設(shè)計(jì)與VerilogHDL(第9版)數(shù)字系統(tǒng)設(shè)計(jì)與VerilogHDL(第9版)第1章EDA技術(shù)概述1.1EDA技術(shù)及其發(fā)展歷程1.2Top-down設(shè)計(jì)思路1.3IP核復(fù)用1.4EDA設(shè)計(jì)的流程1.5常用的EDA工具軟件EDA(ElectronicDesignAutomation)就是以計(jì)算機(jī)為工作平臺(tái),以EDA軟件工具為開發(fā)環(huán)境,以PLD器件或者ASIC專用集成電路為目標(biāo)器件設(shè)計(jì)實(shí)現(xiàn)電路系統(tǒng)的一種技術(shù)。1.電子CAD(ComputerAidedDesign)2.電子CAE(ComputerAidedEngineering)3.EDA(ElectronicDesignAutomation)1.1EDA技術(shù)及其發(fā)展歷程EDA技術(shù)的應(yīng)用范疇EDA技術(shù)的新發(fā)展(1)電子技術(shù)各個(gè)領(lǐng)域全方位融入EDA技術(shù)。(2)IP(IntellectualProperty)核在電子設(shè)計(jì)領(lǐng)域得到了廣泛的應(yīng)用。(3)嵌入式微處理器軟核的出現(xiàn),更大規(guī)模的FPGA/CPLD器件的不斷推出,使得SoPC(SystemonProgrammableChip,可編程芯片系統(tǒng))步入實(shí)用化階段。(4)用FPGA實(shí)現(xiàn)完全硬件的DSP(數(shù)字信號(hào)處理)處理成為可能。(5)在設(shè)計(jì)和仿真兩方面支持標(biāo)準(zhǔn)硬件描述語(yǔ)言的EDA軟件不斷推出,系統(tǒng)級(jí)、行為驗(yàn)證級(jí)硬件描述語(yǔ)言的出現(xiàn)使得復(fù)雜電子系統(tǒng)的設(shè)計(jì)和驗(yàn)證更加高效?,F(xiàn)代EDA技術(shù)(1)采用硬件描述語(yǔ)言進(jìn)行設(shè)計(jì)(2)邏輯綜合與優(yōu)化(3)開放性和標(biāo)準(zhǔn)化(4)更完備的庫(kù)1.2Top-down設(shè)計(jì)思路1.2.1Top-down設(shè)計(jì)1.2.2Bottom-up設(shè)計(jì)1.2.1Top-down設(shè)計(jì)Top-down的設(shè)計(jì)須經(jīng)過“設(shè)計(jì)—驗(yàn)證—修改設(shè)計(jì)—再驗(yàn)證”的過程,不斷反復(fù),直到結(jié)果能夠?qū)崿F(xiàn)所要求的功能,并在速度、功耗、價(jià)格和可靠性方面實(shí)現(xiàn)較為合理的平衡。Bottom-up設(shè)計(jì),即自底向上的設(shè)計(jì),由設(shè)計(jì)者調(diào)用設(shè)計(jì)庫(kù)中的元件(如各種門電路、加法器、計(jì)數(shù)器等),設(shè)計(jì)組合出滿足自己需要的系統(tǒng)缺點(diǎn):效率低、易出錯(cuò)1.2.2Bottom-up設(shè)計(jì)IP(IntellectualProperty):原來的含義是指知識(shí)產(chǎn)權(quán)、著作權(quán),在IC設(shè)計(jì)領(lǐng)域指實(shí)現(xiàn)某種功能的設(shè)計(jì)。IP核(IP模塊):指功能完整,性能指標(biāo)可靠,已驗(yàn)證的、可重用的電路功能模塊。IP復(fù)用(IPreuse)1.3IP核復(fù)用軟IP--用VHDL等硬件描述語(yǔ)言描述的功能塊,但是并不涉及用什么具體電路元件實(shí)現(xiàn)這些功能。固IP--完成了綜合的功能塊。硬IP--供設(shè)計(jì)的最終階段產(chǎn)品:掩膜。IP核與SoC設(shè)計(jì)SoC:SYSTEMonaCHIP1.4EDA設(shè)計(jì)的流程基于FPGA/CPLD的數(shù)字系統(tǒng)設(shè)計(jì)流程1.原理圖輸入(Schematicdiagrams)2.硬件描述語(yǔ)言(HDL文本輸入)設(shè)計(jì)輸入(1)ABEL-HDL(2)AHDL(3)VHDL(4)VerilogHDLIEEE標(biāo)準(zhǔn)硬件描述語(yǔ)言與軟件編程語(yǔ)言有本質(zhì)的區(qū)別綜合(Synthesis)將較高層次的設(shè)計(jì)描述自動(dòng)轉(zhuǎn)化為較低層次描述的過程◆

行為綜合:從算法表示、行為描述轉(zhuǎn)換到寄存器傳輸級(jí)(RTL)◆

邏輯綜合:RTL級(jí)描述轉(zhuǎn)換到邏輯門級(jí)(包括觸發(fā)器)◆版圖綜合或結(jié)構(gòu)綜合:從邏輯門表示轉(zhuǎn)換到版圖表示,或轉(zhuǎn)換到PLD器件的配置網(wǎng)表表示綜合器是能自動(dòng)實(shí)現(xiàn)上述轉(zhuǎn)換的軟件工具,是能將原理圖或HDL語(yǔ)言描述的電路功能轉(zhuǎn)化為具體電路網(wǎng)表的工具C、ASM...程序CPU指令/數(shù)據(jù)代碼:0100101000101100軟件程序編譯器COMPILER軟件編譯器和硬件綜合器區(qū)別VHDL/VERILOG.程序

硬件描述語(yǔ)言綜合器SYNTHESIZER為ASIC設(shè)計(jì)提供的電路網(wǎng)表文件(a)軟件語(yǔ)言設(shè)計(jì)目標(biāo)流程(b)硬件語(yǔ)言設(shè)計(jì)目標(biāo)流程布局布線布局布線可理解為將綜合生成的電路邏輯網(wǎng)表映射到具體的目標(biāo)器件中實(shí)現(xiàn),并產(chǎn)生最終的可下載文件的過程。布局布線將綜合后的網(wǎng)表文件針對(duì)某一具體的目標(biāo)器件進(jìn)行邏輯映射,把整個(gè)設(shè)計(jì)分為多個(gè)適合器件內(nèi)部邏輯資源實(shí)現(xiàn)的邏輯小塊,并根據(jù)用戶的設(shè)定在速度和面積之間做出選擇或折中;布局是將已分割的邏輯小塊放到器件內(nèi)部邏輯資源的具體位置,并使它們易于連線;布線則是利用器件的布線資源完成各功能塊之間和反饋信號(hào)之間的連接。時(shí)序分析與時(shí)序約束時(shí)序分析,或者稱為靜態(tài)時(shí)序分析(STA),是指分析設(shè)計(jì)中所有的時(shí)序路徑(TimingPath),計(jì)算每條時(shí)序路徑的延時(shí),檢查每一條時(shí)序路徑尤其是關(guān)鍵路徑是否滿足時(shí)序要求,并給出時(shí)序分析和報(bào)告結(jié)果,只要該路徑的時(shí)序裕量(Slack)為正,就表示該路徑能滿足時(shí)序要求。仿真(Simulation)功能仿真(FunctionSimulation)時(shí)序仿真(TimingSimulation)仿真是對(duì)所設(shè)計(jì)電路的功能的驗(yàn)證編程與配置把適配后生成的編程文件裝入到PLD器件中的過程稱為下載。通常將對(duì)基于EEPROM工藝的非易失結(jié)構(gòu)PLD器件的下載稱為編程(Program),將基于SRAM工藝結(jié)構(gòu)的PLD器件的下載稱為配置(Configure)。1.5常用的EDA工具軟件集成的FPGA/CPLD開發(fā)工具邏輯綜合器仿真器其他EDA工具FPGA/CPLD開發(fā)工具邏輯綜合器(Synthesizer)仿真工具(simulationtools)1-1EDA技術(shù)的應(yīng)用領(lǐng)域有哪些?1-2什么是Top-down設(shè)計(jì)方式?1-3數(shù)字系統(tǒng)的實(shí)現(xiàn)方式有哪些?各有什么優(yōu)缺點(diǎn)?1-4什么是IP復(fù)用技術(shù)?IP核對(duì)EDA技術(shù)的應(yīng)用和發(fā)展有什么意義?1-5以自己熟悉的一款FPGA芯片為例,說明其內(nèi)部集成了哪些硬核邏輯,其支持的軟核有哪些?1-6基于FPGA/CPLD的數(shù)字系統(tǒng)設(shè)計(jì)流程包括哪些步驟?1-7什么是綜合?常用的綜合工具有哪些?1-8FPGA與ASIC在概念上有什么區(qū)別?1-9功能仿真與時(shí)序仿真有何區(qū)別?習(xí)題1END數(shù)字系統(tǒng)設(shè)計(jì)與VerilogHDL(第9版)數(shù)字系統(tǒng)設(shè)計(jì)與VerilogHDL(第9版)第2章FPGA/CPLD器件2.1PLD器件概述2.2PLD的基本原理與結(jié)構(gòu)2.3低密度PLD的原理與結(jié)構(gòu)2.4CPLD的原理與結(jié)構(gòu)2.5FPGA的原理與結(jié)構(gòu)2.6FPGA/CPLD的編程工藝2.7邊界掃描測(cè)試技術(shù)2.8FPGA/CPLD的編程與配置2.9典型的FPGA/CPLD系列2.1PLD器件概述PLD的發(fā)展歷程熔絲編程的PROM和PLA器件AMD公司推出PAL器件GAL器件FPGA器件EPLD器件CPLD器件內(nèi)嵌復(fù)雜功能模塊的SoPC◆

1985年,美國(guó)Xilinx公司推出了現(xiàn)場(chǎng)可編程門陣列(FPGA,F(xiàn)ieldProgrammableGateArray)◆CPLD(ComplexProgrammableLogicDevice),即復(fù)雜可編程邏輯器件,是從EPLD改進(jìn)而來的。PLD的發(fā)展PLD按集成度分類一般將GAL22V10(500門~750門)作為簡(jiǎn)單PLD和高密度PLD的分水嶺四種SPLD器件的區(qū)別器件與陣列或陣列輸出電路PROM固定可編程固定PLA可編程可編程固定PAL可編程固定固定GAL可編程固定可組態(tài)PLD器件按照可以編程的次數(shù)可以分為兩類:(1)一次性編程器件(OTP,OneTimeProgrammable)(2)可多次編程器件OTP類器件的特點(diǎn)是:只允許對(duì)器件編程一次,不能修改,而可多次編程器件則允許對(duì)器件多次編程,適合于在科研開發(fā)中使用。按編程特點(diǎn)分類(1)熔絲(Fuse)(2)反熔絲(Antifuse)編程元件(3)紫外線擦除、電可編程,如EPROM。(4)電擦除、電可編程方式,(EEPROM、快閃存儲(chǔ)器(FlashMemory)),如多數(shù)CPLD(5)靜態(tài)存儲(chǔ)器(SRAM)結(jié)構(gòu),如多數(shù)FPGA按編程元件和編程工藝分類非易失性器件易失性器件PLD器件的原理結(jié)構(gòu)圖2.2PLD的基本原理與結(jié)構(gòu)數(shù)字電路符號(hào)表示數(shù)字邏輯電路的兩種國(guó)標(biāo)符號(hào)對(duì)照PLD電路符號(hào)表示PLD的輸入緩沖電路PLD與陣列表示PLD或陣列表示PLD連接表示法2.3低密度PLD的原理與結(jié)構(gòu)PROM的邏輯陣列結(jié)構(gòu)PROMPROM表達(dá)的PLD陣列圖PROM用PROM實(shí)現(xiàn)半加器PLAPLA邏輯陣列示意圖PALPAL結(jié)構(gòu)PAL的常用表示PALPAL22V10部分結(jié)構(gòu)圖GALGAL22V10的結(jié)構(gòu)(局部)GAL22V10的OLMC結(jié)構(gòu)CPLD器件的結(jié)構(gòu)2.4CPLD的原理與結(jié)構(gòu)典型CPLD器件的結(jié)構(gòu)MAX7000S器件的內(nèi)部結(jié)構(gòu)MAX7000S器件的宏單元結(jié)構(gòu)MispLSI1032器件的GLB的結(jié)構(gòu)XC9500器件的宏單元結(jié)構(gòu)2.5FPGA的原理與結(jié)構(gòu)2輸入或門真值表ABF000011101111用2輸入查找表實(shí)現(xiàn)或門功能查找表原理ABCF000000100100011110001011110111113人表決電路的真值表用3輸入的查找表實(shí)現(xiàn)3人表決電路查找表結(jié)構(gòu)

4輸入LUT及結(jié)構(gòu)FPGA器件的內(nèi)部結(jié)構(gòu)典型FPGA的結(jié)構(gòu)XC4000器件的CLB結(jié)構(gòu)CycloneIV器件的LE結(jié)構(gòu)CycloneIV器件結(jié)構(gòu)1.熔絲(Fuse)型器件2.反熔絲(Anti-fuse)型器件3.EPROM型,紫外線擦除電可編程4.EEPROM型6.SRAM型5.Flash型2.6FPGA/CPLD的編程工藝1.熔絲(Fuse)型器件熔絲型開關(guān)2.反熔絲結(jié)構(gòu)反熔絲結(jié)構(gòu)3.浮柵編程元件EPROM存儲(chǔ)器EEPROM的存儲(chǔ)單元3.浮柵編程元件4.SRAM編程元件SRAM基本單元結(jié)構(gòu)邊界掃描電路結(jié)構(gòu)為了解決超大規(guī)模集成電路(VLSI)的測(cè)試問題,自1986年開始,IC領(lǐng)域的專家成立了“聯(lián)合測(cè)試行動(dòng)組”(JTAG,JointTestActionGroup),并制定出了IEEE1149.1邊界掃描測(cè)試(BST,BoundaryScanTest)技術(shù)規(guī)范2.7邊界掃描測(cè)試技術(shù)邊界掃描IO引腳功能引腳名

稱功

能TDI測(cè)試數(shù)據(jù)輸入指令和測(cè)試數(shù)據(jù)的串行輸入引腳,數(shù)據(jù)在TCK的上升沿時(shí)刻移入TDO測(cè)試數(shù)據(jù)輸出指令和測(cè)試數(shù)據(jù)的串行輸出引腳,數(shù)據(jù)在TCK的下降沿時(shí)刻移出;如果沒有數(shù)據(jù)移出器件,此引腳處于高阻態(tài)TMS測(cè)試模式選擇選擇JTAG指令模式的串行輸入引腳,在正常工作狀態(tài)下TMS應(yīng)是高電平TCK測(cè)試時(shí)鐘輸入時(shí)鐘引腳TRST測(cè)試電路復(fù)位低電平有效,用于初始化或異步復(fù)位邊界掃描電路邊界掃描數(shù)據(jù)移位方式2.8FPGA/CPLD的編程與配置未編程前先焊接安裝減少對(duì)器件的觸摸和損傷不計(jì)較器件的封裝形式樣機(jī)制造方便支持生產(chǎn)和測(cè)試流程中的修改在系統(tǒng)現(xiàn)場(chǎng)重編程修改允許現(xiàn)場(chǎng)硬件升級(jí)迅速方便地提升功能ISP功能提高設(shè)計(jì)和應(yīng)用的靈活性Altera的FPGA器件配置方式方式說

明PS模式被動(dòng)串行,由外部主機(jī)(MAXII芯片或微處理器)控制配置過程AS主動(dòng)串行,用串行配置器件(如EPCS1,EPCS4,EPCS16)配置FPP快速被動(dòng)并行,使用增強(qiáng)型配置器件或并行同步微處理器接口進(jìn)行配置AP主動(dòng)并行PPS被動(dòng)并行同步,使用并行同步微處理器接口進(jìn)行配置PPA(被動(dòng)并行異步,使用并行異步微處理器接口進(jìn)行配置JTAG模式使用下載電纜通過JTAG接口進(jìn)行配置1.AS配置模式EPCS對(duì)單個(gè)CycloneIV器件的AS配置電路2.PS配置模式外部主機(jī)PS模式配置單個(gè)CycloneIV器件的電路3.JTAG配置方式CycloneIV器件的JTAG模式配置電路2.9典型的FPGA/CPLD系列1.Stratix高端FPGA芯片系列器件系列StratixStratixIIStratixIIIStratixⅣStratixVStratix10推出年份20042006200820102013工藝技術(shù)(nm)13090654028142.Arria中端FPGA芯片系列器件系列ArriaGXArriaIIGXArriaIIGZArriaVGX,GT,SXArriaVGZArria10GX,GT,SX推出年份20092010201120122013工藝技術(shù)(nm)9040402828203.Cyclone低成本FPGA芯片系列器件系列CycloneCycloneIICycloneIIICycloneIVCycloneV推出年份20022004200720092011工藝技術(shù)(nm)130906560284.Altera的CPLD芯片系列器件系列早期的CPLDMAXIIMAXIIZMAXVMAX10推出年份1995~20022004200720102014工藝技術(shù)0.50~0.30微米180nm180nm180nm55nm習(xí)題22-1PLA和PAL在結(jié)構(gòu)上有何區(qū)別?2-2簡(jiǎn)述基于乘積項(xiàng)的可編程邏輯器件的結(jié)構(gòu)特點(diǎn)。2-3基于查找表的可編程邏輯結(jié)構(gòu)的原理是什么?2-4基于乘積項(xiàng)和基于查找表的結(jié)構(gòu)各有什么優(yōu)點(diǎn)?2-5某與或陣列如圖所示,寫出F1、F0的函數(shù)表達(dá)式。END數(shù)字系統(tǒng)設(shè)計(jì)與VerilogHDL(第9版)數(shù)字系統(tǒng)設(shè)計(jì)與VerilogHDL(第9版)第3章

原理圖與基于IP核的設(shè)計(jì)

3.1設(shè)計(jì)流程3.2原理圖設(shè)計(jì)方式3.3基于IP核的設(shè)計(jì)3.4鎖相環(huán)IP核3.5SignalTapII的使用方法3.1設(shè)計(jì)流程基于QuartusPrime的設(shè)計(jì)流程3.2原理圖設(shè)計(jì)方式QuartusPrime的主界面輸入元件3.2.1半加器設(shè)計(jì)半加器電路圖3.2.1半加器設(shè)計(jì)使用NewProjectWizard創(chuàng)建工程3.2.1半加器設(shè)計(jì)設(shè)置Directory,Name,Top-LevelEntity對(duì)話框3.2.1半加器設(shè)計(jì)將設(shè)計(jì)文件加入當(dāng)前工程中3.2.1半加器設(shè)計(jì)選擇目標(biāo)器件3.2.1半加器設(shè)計(jì)選擇綜合器、仿真器3.2.1半加器設(shè)計(jì)工程信息匯總顯示3.2.1半加器設(shè)計(jì)創(chuàng)建元件符號(hào)對(duì)話框3.2.1半加器設(shè)計(jì)3.2.21位全加器設(shè)計(jì)1位全加器原理圖選擇菜單Processing→StartCompilation,或者單擊按鈕,即啟動(dòng)了完全編譯,完全編譯包括如下5個(gè)過程:

分析與綜合(Analysis&Synthesis);適配(Fitter);裝配(Assembler);定時(shí)分析(TimeQuestTimingAnalysis);網(wǎng)表文件提取(EDANetlistWriter)。3.2.3編譯編譯信息匯總3.2.3編譯建立QuartusPrime和Modelsim的鏈接3.2.4仿真設(shè)置仿真文件的格式和目錄3.2.4仿真自動(dòng)生成的TestBench模板文件3.2.4仿真對(duì)TestBench進(jìn)一步設(shè)置3.2.4仿真1位全加器時(shí)序仿真波形圖3.2.4仿真目標(biāo)板為DE10-Lite,目標(biāo)器件為10M50DAF484C7G。選擇菜單AssignmentsPinPlanner,在PinPlanner對(duì)話框中進(jìn)行引腳的鎖定。本例5個(gè)引腳的鎖定如下:A →PIN_C10 SW0(撥動(dòng)開關(guān))B →PIN_C11 SW1(撥動(dòng)開關(guān))CIN →PIN_D12 SW2(撥動(dòng)開關(guān))SUM →PIN_A8 LEDR0(LED燈)COUT →PIN_A9 LEDR1(LED燈)3.2.5下載編程下載窗口3.2.5下載定制ROM核SaveIPVariation對(duì)話框3.3基于IP核的設(shè)計(jì)基于lpm_rom實(shí)現(xiàn)的4×4無符號(hào)數(shù)乘法器原理圖3.3基于IP核的設(shè)計(jì)ROM存儲(chǔ)器的內(nèi)容存儲(chǔ)在*.mif文件中3.3基于IP核的設(shè)計(jì)WIDTH=8;DEPTH=256;ADDRESS_RADIX=UNS;DATA_RADIX=UNS;CONTENTBEGIN[0..16]:0;17:1;18:2;19:3;20:4;...mult_rom.mif文件內(nèi)容如下250:150;251:165;252:180;253:195;254:210;255:225;END;4×4無符號(hào)數(shù)乘法器波形仿真結(jié)果3.3基于IP核的設(shè)計(jì)用altpll鎖相環(huán)IP核實(shí)現(xiàn)倍頻和分頻,將輸入的50MHz時(shí)鐘信號(hào)產(chǎn)生兩路輸出,一路輸出9MHz(占空比為50%)分頻信號(hào),一路輸出有5ns相移的100MHz(占空比為40%)倍頻信號(hào),并進(jìn)行仿真驗(yàn)證。3.4鎖相環(huán)IP核用altpll鎖相環(huán)宏模塊實(shí)現(xiàn)倍頻和分頻選擇芯片和設(shè)置參考時(shí)鐘用altpll鎖相環(huán)宏模塊實(shí)現(xiàn)倍頻和分頻鎖相環(huán)端口設(shè)置用altpll鎖相環(huán)宏模塊實(shí)現(xiàn)倍頻和分頻輸出時(shí)鐘c0設(shè)置用altpll鎖相環(huán)宏模塊實(shí)現(xiàn)倍頻和分頻輸出時(shí)鐘c1設(shè)置用altpll鎖相環(huán)宏模塊實(shí)現(xiàn)倍頻和分頻選擇需要的輸出文件格式用altpll鎖相環(huán)宏模塊實(shí)現(xiàn)倍頻和分頻鎖相環(huán)電路仿真波形(Modelsim)用altpll鎖相環(huán)宏模塊實(shí)現(xiàn)倍頻和分頻3.5SignalTapII的使用方法嵌入式邏輯分析儀SignalTapII為設(shè)計(jì)者提供了一種方便高效的硬件測(cè)試手段,它可以隨設(shè)計(jì)文件一起下載到目標(biāo)芯片中,捕捉目標(biāo)芯片內(nèi)信號(hào)節(jié)點(diǎn)或總線上的數(shù)據(jù),將這些數(shù)據(jù)暫存于目標(biāo)芯片的嵌入式RAM中,然后通過器件的JTAG端口,將采集到的信息和數(shù)據(jù)送到計(jì)算機(jī)進(jìn)行顯示,供調(diào)試者分析。調(diào)入待測(cè)信號(hào)SignalTapII參數(shù)設(shè)置窗口SignalTapII數(shù)據(jù)窗口顯示的實(shí)時(shí)采樣的信號(hào)波形3-1基于Quartus軟件,采用原理圖設(shè)計(jì)方式,使用D觸發(fā)器設(shè)計(jì)一個(gè)2分頻電路;并在此基礎(chǔ)上,設(shè)計(jì)一個(gè)4分頻和8分頻電路并進(jìn)行仿真。3-2基于Quartus軟件,采用原理圖設(shè)計(jì)方式,用74161設(shè)計(jì)一個(gè)模10計(jì)數(shù)器,并進(jìn)行編譯和仿真。3-3基于QuartusPrime軟件,用74161設(shè)計(jì)一個(gè)模99的計(jì)數(shù)器,個(gè)位和十位都采用8421BCD碼的編碼方式設(shè)計(jì),分別用置0和置1兩種方法實(shí)現(xiàn),完成原理圖設(shè)計(jì)輸入、編譯、仿真和下載整個(gè)過程。3-5基于QuartusPrime軟件,用74283(4位二進(jìn)制全加器)設(shè)計(jì)實(shí)現(xiàn)一個(gè)8位全加器,并進(jìn)行綜合和仿真,查看綜合結(jié)果和仿真結(jié)果。習(xí)題3END數(shù)字系統(tǒng)設(shè)計(jì)與VerilogHDL(第9版)數(shù)字系統(tǒng)設(shè)計(jì)與VerilogHDL(第9版)第4章

Verilog設(shè)計(jì)初步

4.1VerilogHDL簡(jiǎn)史4.2Verilog模塊初識(shí)4.3Verilog設(shè)計(jì)示例

4.4Verilog文字規(guī)則

4.5數(shù)字4.6數(shù)據(jù)類型4.7向量

4.8數(shù)組4.9參數(shù)4.10操作符4.1VerilogHDL簡(jiǎn)史VerilogHDL是1983年由GDA公司的PhilMoorby首創(chuàng),后來Moorby設(shè)計(jì)了Verilog-XL仿真器并獲成功,從而使Verilog語(yǔ)言得到推廣使用。1989年,Cadence收購(gòu)GDA,并在1990年公開發(fā)布VerilogHDL,并成立OVI(OpenVerilogInternational)組織負(fù)責(zé)Verilog語(yǔ)言的推廣,Verilog語(yǔ)言的發(fā)展開始進(jìn)入快車道,到1993年,幾乎所有的ASIC廠商都開始支持Verilog。1995年,VerilogHDL成為IEEE標(biāo)準(zhǔn),稱為IEEEStandard1364-1995(Verilog-1995)。2001年,IEEE1364-2001標(biāo)準(zhǔn)(Verilog-2001)發(fā)布,Verilog-2001對(duì)Verilog-1995標(biāo)準(zhǔn)做了擴(kuò)充和增強(qiáng),提高了行為級(jí)和RTL級(jí)建模的能力。目前,多數(shù)綜合器、仿真器支持的仍然是Verilog-2001標(biāo)準(zhǔn)。2005年,IEEE1364-2005標(biāo)準(zhǔn)(Verilog-2005)發(fā)布,該版本是對(duì)Verilog-2001版本的修正。Verilog語(yǔ)言的特點(diǎn)支持多個(gè)層級(jí)的設(shè)計(jì)建模,從開關(guān)級(jí)、門級(jí)、寄存器傳輸級(jí)到行為級(jí),都可以勝任,可在不同設(shè)計(jì)層次上對(duì)數(shù)字系統(tǒng)建模,也支持混合建模。支持三種硬件描述方式:行為級(jí)描述——使用過程化結(jié)構(gòu)建模;數(shù)據(jù)流描述——使用連續(xù)賦值語(yǔ)句建模;結(jié)構(gòu)描述——使用門元件和模塊例化語(yǔ)句建模。可指定設(shè)計(jì)延時(shí),路徑延時(shí),生成激勵(lì)和指定測(cè)試的約束條件,支持動(dòng)態(tài)時(shí)序仿真和靜態(tài)時(shí)序檢查。內(nèi)置各種門元件,可進(jìn)行門級(jí)結(jié)構(gòu)建模;內(nèi)置開關(guān)級(jí)元件,可進(jìn)行開關(guān)級(jí)的建模。4.2Verilog模塊初識(shí)moduleaoi(a,b,c,d,f);/*模塊名為aoi,端口列表a,b,c,d,f*/inputa,b,c,d; //模塊的輸入端口為a,b,c,doutputf; //模塊的輸出端口為fwirea,b,c,d,f;//定義信號(hào)的數(shù)據(jù)類型assignf=~((a&b)|(~(c&d))); //邏輯功能描述endmodule“與-或-非”電路Verilog程序由模塊構(gòu)成,每個(gè)模塊的內(nèi)容都嵌在module和endmodule兩個(gè)關(guān)鍵字之間;每個(gè)模塊首先要進(jìn)行端口定義,分為輸入端口input和輸出端口output等,然后對(duì)模塊的功能進(jìn)行定義;Verilog程序書寫格式自由,一行可以寫幾個(gè)語(yǔ)句,一個(gè)語(yǔ)句也可以分多行寫;除endmodule等少數(shù)語(yǔ)句外,每個(gè)語(yǔ)句的最后必須有分號(hào);可以用/*……*/和//……對(duì)Verilog程序進(jìn)行注釋。

1.模塊聲明模塊聲明包括模塊名字,模塊輸入、輸出端口列表。模塊定義格式如下:module模塊名(端口1,端口2,端口3,……);2.端口(Port)定義對(duì)模塊的輸入輸出端口要明確說明,其格式為:input端口名1,端口名2,……

端口名n; //輸入端口output端口名1,端口名2,……

端口名n; //輸出端口inout端口名1,端口名2,……

端口名n; //輸入輸出端口3.信號(hào)類型聲明對(duì)模塊中所用到的所有信號(hào)(包括端口、信號(hào)等)都必須進(jìn)行數(shù)據(jù)類型的定義。數(shù)據(jù)類型聲明示例:regcout; //定義信號(hào)cout的數(shù)據(jù)類型為reg型reg[3:0]out; //定義信號(hào)out的數(shù)據(jù)類型為4位reg型wirea,b,c,d,f; //定義信號(hào)a,b,c,d,f為wire型如果沒有聲明信號(hào)的數(shù)據(jù)類型,則綜合器將其默認(rèn)為是wire型。4.邏輯功能定義(1)用assign連續(xù)賦值語(yǔ)句定義。例如:assignf=~((a&b)|(~(c&d)));(2)用always過程語(yǔ)句定義。Verilog模塊的模板module<頂層模塊名>#(參數(shù)列表parameter...)(<輸入輸出端口列表>);

端口、信號(hào)數(shù)據(jù)類型聲明;/*任務(wù)、函數(shù)聲明,用關(guān)鍵字task,funtion定義*///邏輯功能定義assign<結(jié)果信號(hào)名>=<表達(dá)式>; //使用assign語(yǔ)句定義邏輯功能always@(<敏感信號(hào)表達(dá)式>) //用always塊描述邏輯功能begin//過程賦值//if-else,case語(yǔ)句;for循環(huán)語(yǔ)句//task,function調(diào)用end//門元件例化

門元件名<例化名>(<端口列表>);//子模塊例化<子模塊名><例化名>#(參數(shù)傳遞)(<端口列表>);endmodule例4.4三人表決電路的Verilog描述。modulevote( //模塊名與端口列表inputa,b,c, //模塊的輸入端口outputf); //模塊的輸出端口wirea,b,c,f; //定義信號(hào)的數(shù)據(jù)類型assignf=(a&b)|(a&c)|(b&c); //邏輯功能描述endmodule4.3Verilog設(shè)計(jì)示例例4.5BCD碼加法器。moduleadd4_bcd(inputcin,input[3:0]ina,inb,outputwire[3:0]sum,outputcout);wire[4:0]temp=ina+inb+cin;assign{cout,sum}=(temp>9)?(temp+6):temp;endmoduleBCD碼加法器的RTL綜合視圖例4.7異步清零/異步置1(低電平有效)的D觸發(fā)器moduledff_asyn(inputd,clk,set,reset,outputregq,qn);always@(posedgeclk,negedgeset,negedgereset)beginif(~reset)beginq<=1'b0;qn<=1'b1;end //異步清零,低電平有效elseif(~set)beginq<=1'b1;qn<=1'b0;end //異步置1,低電平有效elsebeginq<=d;qn<=~d;endendendmodule例4.8帶同步復(fù)位的4位模10BCD碼計(jì)數(shù)器modulecount10(inputreset,clk,outputreg[3:0]qout,outputcout);always@(posedgeclk)beginif(~reset)qout<=0; //同步復(fù)位elseif(qout<9)qout<=qout+1;elseqout<=0;end //大于9,計(jì)數(shù)值清零assigncout=(qout==9)?1:0; //產(chǎn)生進(jìn)位輸出信號(hào)endmodule4位模10BCD碼計(jì)數(shù)器的RTL級(jí)綜合原理圖4.4Verilog文字規(guī)則Verilog源代碼由各種符號(hào)流構(gòu)成,這些符號(hào)包括:空白符(Whitespace)注釋(Comments)操作符(Operators)數(shù)字(Numbers)字符串(Strings)標(biāo)識(shí)符(Identifiers)關(guān)鍵字(Keywords)等空白符和注釋空白符(Whitespace)空白符包括:空格、tab、換行和換頁(yè)。空白符使代碼錯(cuò)落有致,閱讀起來更方便。在綜合時(shí)空白符被忽略。注釋(Comment)單行注釋:以“//”開始到本行結(jié)束多行注釋:多行注釋以“/*”開始,到“*/”結(jié)束關(guān)鍵字(Keywords)Verilog語(yǔ)言內(nèi)部已經(jīng)使用的詞稱為關(guān)鍵字或保留字,用戶不能隨便使用這些保留字。關(guān)鍵字都是小寫的,例如,ALWAYS(標(biāo)識(shí)符)不是關(guān)鍵字,它與always(關(guān)鍵字)是不同的4.4.2字符串字符串是由雙引號(hào)標(biāo)識(shí)的字符序列,字符串只能寫在一行內(nèi),不能分成多行書寫。字符串變量應(yīng)定義為reg類型,其大小等于字符串的字符數(shù)乘以8。reg[8*12:1]stringvar;initialbeginstringvar="Helloworld!";end存儲(chǔ)12個(gè)字符的字符串“Helloworld!”需要定義一個(gè)尺寸為8×12(96位)的reg型變量。字符串中的特殊字符\n、\t、\\和\"等常用的轉(zhuǎn)義字符,VerilogHDL也同樣支持,這些特殊的轉(zhuǎn)義字符用符號(hào)“\”開頭,其對(duì)應(yīng)的按鍵和符號(hào)如表所示。例4.11轉(zhuǎn)義字符測(cè)試代碼modulestring_tb();reg[7:0]a;reg[8*4-1:0]b,str; //聲明2個(gè)可容納4個(gè)字符的字符串變量initialbegina="\123";b="AaCc";str={"\\","\0","\"","\n"}; //用拼接操作符實(shí)現(xiàn)字符的拼接$display("%sisstoredas%h",a,a);$display("%sisstoredas%h",b,b);$display("%sisstoredas%h",str,str);endendmodule4.4.3標(biāo)識(shí)符

標(biāo)識(shí)符是用戶在編程時(shí)給Verilog對(duì)象起的名字,模塊、端口和實(shí)例的名字都是標(biāo)識(shí)符。標(biāo)識(shí)符可以是任意一組字母、數(shù)字以及符號(hào)“$”和“_”(下劃線)的組合,但標(biāo)識(shí)符的第一個(gè)字符不能是數(shù)字或$,只能是字母(a~z、A~Z)或者是下劃線“_”;標(biāo)識(shí)符是區(qū)分大小寫的。標(biāo)識(shí)符最長(zhǎng)可以包含1024個(gè)字符。示例:shiftreg_amerge_ab_bus3 //以下劃線開頭n$657整數(shù)實(shí)數(shù)4.5數(shù)字?jǐn)?shù)字分為整數(shù)(integer)和實(shí)數(shù)(real)。

整數(shù)書寫方式1:簡(jiǎn)單的十進(jìn)制數(shù)格式,可以帶負(fù)號(hào),比如:659//十進(jìn)制數(shù)659-59//十進(jìn)制數(shù)-59整數(shù)(integer)整數(shù)書寫方式2:按基數(shù)格式書寫,其格式為:<+/-><size>'<s>basevalue<+/-><位寬>'<s>基數(shù)

數(shù)字(1)size為對(duì)應(yīng)的二進(jìn)制數(shù)的寬度,可省;(2)base為基數(shù),或者稱進(jìn)制,可在前面加上s(或S),以表示有符號(hào)數(shù)。

進(jìn)制可指定為如下4種:

二進(jìn)制(b或B);

十進(jìn)制(d或D,或缺省);

十六進(jìn)制(h或H);

八進(jìn)制(o或O)。(3)value是基于進(jìn)制的數(shù)字序列,整數(shù)(integer)整數(shù)書寫示例:8'b11000101//位寬為八位的二進(jìn)制數(shù)110001018'hd5//位寬為八位的十六進(jìn)制數(shù)d5;5'O27//5位八進(jìn)制數(shù)4'D2//4位十進(jìn)制數(shù)24'B1x_01//4位二進(jìn)制數(shù)1x015'Hx//5位x(擴(kuò)展的x),即xxxxx4'hZ//4位z,即zzzz8□'h□2A/*在位寬和'之間,以及進(jìn)制和數(shù)值之間允許出現(xiàn)空格但'和進(jìn)制之間,數(shù)值間不允許出現(xiàn)空格*/整數(shù)(integer)實(shí)數(shù)有兩種表示方法。(1)十進(jìn)制表示法(decimalnotation),例如:14.72。(2)科學(xué)記數(shù)法(scientificnotation),例如:39e8(等同于39108)。實(shí)數(shù)表示的例子:24.2631.2E12 //指數(shù)符號(hào)可以是e或E1.30e-2

//其值為0.01300.1e-0

//0.129E-2

//0.29236.123_763_e-12 //帶下劃線實(shí)數(shù)(Real)4.6數(shù)據(jù)類型Verilog有下面四種基本的邏輯狀態(tài)。0:低電平、邏輯0或邏輯非1:高電平、邏輯1或“真”x或X:不確定或未知的邏輯狀態(tài)z或Z:高阻態(tài)Verilog中的所有數(shù)據(jù)類型都在上述4類邏輯狀態(tài)中取值。VerilogHDL的數(shù)據(jù)類型(DataType)主要用于表示數(shù)字電路中的物理連線、數(shù)據(jù)存儲(chǔ)和傳輸線等物理量。Verilog共有19種數(shù)據(jù)類型,可分為兩類:物理數(shù)據(jù)類型(包括wire型、reg型等)和抽象數(shù)據(jù)類型(包括time、integer、real型等)。數(shù)據(jù)類型Verilog中的變量分為如下兩種數(shù)據(jù)類型:net型variable型net型中常用的有wire、tri;variable型包括reg、integer等。

4.6.2net數(shù)據(jù)類型net型數(shù)據(jù)多表示硬件電路中的物理連接,net型數(shù)據(jù)的值取決于驅(qū)動(dòng)器的值。net型變量?jī)煞N驅(qū)動(dòng)方式:一是用連續(xù)賦值語(yǔ)句assign對(duì)其進(jìn)行賦值,另一種方式是將其連接至門元件。如果net型變量沒有連接到驅(qū)動(dòng)源,則其值為高阻態(tài)z(trireg除外,在此情況下,它應(yīng)該保持以前的值)。4.6.2net數(shù)據(jù)類型wire型是最常用的net數(shù)據(jù)類型,輸入/輸出信號(hào)在沒有明確指定數(shù)據(jù)類型時(shí)均被默認(rèn)為wire型。wire型變量的驅(qū)動(dòng)方式包括連續(xù)賦值或者門元件驅(qū)動(dòng)。tri型和wire型在功能及使用方法上是完全一樣的,對(duì)綜合器來說,對(duì)tri型數(shù)據(jù)和wire型數(shù)據(jù)的處理是完全相同的。wire型和tri型變量示例:wirew1,w2; //聲明2個(gè)wire型變量w1,w2wire[7:0]databus; //databus的寬度是8位tri[15:0]busa; //三態(tài)16位總線busa4.6.3variable數(shù)據(jù)類型variable型變量必須放在過程語(yǔ)句(initial、always)中,通過過程賦值語(yǔ)句賦值;在always、initial過程塊內(nèi)賦值的信號(hào)也必須定義成variable型。reg型變量通過過程賦值語(yǔ)句賦值,用于建模寄存器,也可用來建模邊沿敏感(觸發(fā)器)和電平敏感(鎖存器)的存儲(chǔ)單元,同時(shí),它也可以用來表示組合邏輯。reg型變量按無符號(hào)數(shù)處理,可使用關(guān)鍵字signed將其變?yōu)橛蟹?hào)數(shù),并被EDA綜合器和仿真器以2的補(bǔ)碼的形式進(jìn)行解釋。示例:rega,b; //聲明reg型變量a,breg[7:0]qout; //聲明8位寬的reg型變量,無符號(hào)regsigned[8:1]opd1; //8位寬有符號(hào)reg型變量,以2的補(bǔ)碼形式存在4.6.3variable數(shù)據(jù)類型4.7向量寬度為1位的變量(net型或reg型)稱為標(biāo)量(scalar),如果在變量聲明中沒有指定位寬,則默認(rèn)為標(biāo)量(1位)。寬度大于1位的變量(net型或reg型)稱為向量(vector)。示例:wire[3:0]bus; //4位的總線reg[7:0]ra; //8位寄存器,其中ra[7]為最高有效位reg[0:7]rb; //rb[0]為最高有效位,rb[7]為最低有效位rega; //reg標(biāo)量reg[4:0]x,y,z; //3個(gè)5位reg向量reg[-1:4]b; //6位reg向量,reg[-1]為最高有效位向量中的任意位都可以被單獨(dú)選擇,并且可對(duì)其單獨(dú)賦值。如:reg[7:0]addr; //reg型變量,8位[7,6,5,4,3,2,1,0]addr[0]=1; //最低位賦1addr[3]=0; //第3位賦04.7.1

位選可選擇單個(gè)比特位,也可以選擇相鄰的多位進(jìn)行賦值或其他操作,稱為段選。例如:wire[15:0]busa; //wire型向量assignbusa[7:0]=8'h23; //常數(shù)段選上面的多位選擇,用常數(shù)作為地址范圍,稱為常數(shù)段選。4.7.2常數(shù)段選Verilog-2001中新增了一種段選方式:索引段選),其形式如下:[base_expr+:width_expr]//起始表達(dá)式

正偏移

位寬[base_expr-:width_expr]//起始表達(dá)式

負(fù)偏移

位寬例如:reg[63:0]word;reg[3:0]byte_num; //取值范圍:0到7wire[7:0]byteN=word[byte_num*8+:8];4.7.3索引段選數(shù)組(Arrays)由元素(element)構(gòu)成,元素可以是標(biāo)量,也可以是向量。例如:regx[11:0]; //x是數(shù)組,其元素為reg標(biāo)量,共12個(gè)元素wire[0:7]y[5:0]; //y是數(shù)組,其元素為8位寬wire型向量reg[31:0]v[127:0]; //v是數(shù)組,其元素為32位寬reg型向量4.8數(shù)組(Arrays)元素為reg類型的一維數(shù)組也稱為存儲(chǔ)器(Memory)。存儲(chǔ)器可用于建模只讀存儲(chǔ)器(ROM)、隨機(jī)存取存儲(chǔ)器(RAM)。例如:reg[7:0]mema[0:255]; //256×8位的存儲(chǔ)器,地址索引從0到2554.8.2存儲(chǔ)器數(shù)組不能整體賦值,每次只能對(duì)數(shù)組的一個(gè)元素(element)進(jìn)行賦值,每個(gè)元素都用一個(gè)索引號(hào)尋址,對(duì)元素進(jìn)行位選和段選及賦值操作也是允許的。數(shù)組賦值的例子:mema[1]=0; //合法,mema的第2個(gè)元素賦值為0arrayb[1][0]=0; //合法,元素arrayb[1][0]賦值為0inta[4]=33559; //合法賦值mema=0; //非法,數(shù)組不能整體賦值4.8.3數(shù)組的賦值參數(shù)屬于常量,它只能被聲明(賦值)一次。通過使用參數(shù),可以提高Verilog代碼的可讀性、可復(fù)用性和可維護(hù)性。4.9參

數(shù)parameter參數(shù)聲明的格式如下。parameter[signed][range]參數(shù)名1=表達(dá)式1,參數(shù)名2=表達(dá)式2,...;參數(shù)可以有符號(hào),可指定范圍(位寬),還可指定其數(shù)據(jù)類型。parameter參數(shù)聲明示例。parametermsb=7;parametere=25,f=9; //定義2個(gè)參數(shù)parameterr=5.7; //r為實(shí)數(shù)型參數(shù)parameterbyte_size=8,byte_mask=byte_size-1;parametersigned[3:0]mux_sel=0; //有符號(hào)參數(shù)4.9.1parameter參數(shù)例4.15采用參數(shù)定義的加法器操作數(shù)的位寬moduleadd_w//模塊聲明采用Verilog-2001格式#(parameterMSB=15,LSB=0) //參數(shù)聲明,句末沒有分號(hào)(input[MSB:LSB]a,b,output[MSB+1:LSB]sum);assignsum=a+b;endmodule例4.16采用參數(shù)聲明的Johnson計(jì)數(shù)器modulejohnson_w#(parameterWIDTH=8) //參數(shù)聲明(inputclk,clr,outputreg[WIDTH-1:0]qout);always@(posedgeclk,posedgeclr)beginif(clr)qout<=0;elsebeginqout<=qout<<1;qout[0]<=~qout[WIDTH-1];endendendmodule例4.174位格雷碼計(jì)數(shù)器modulegraycnt#(parameterWIDTH=4)(outputreg[WIDTH-1:0]graycount, //格雷碼輸出信號(hào)inputwireenable,clear,clk); //使能、清零、時(shí)鐘信號(hào)reg[WIDTH-1:0]bincount;always@(posedgeclk)if(clear)beginbincount<={WIDTH{1'b0}}+1;graycount<={WIDTH{1'b0}};endelseif(enable)beginbincount<=bincount+1;graycount<={bincount[WIDTH-1],bincount[WIDTH-2:0]^bincount[WIDTH-1:1]};endendmodule例4.18采用局部參數(shù)localparam的加法器moduleadd_local#(parameterMSB=15,LSB=0) //parameter參數(shù)定義(input[MSB:LSB]a,b,output[HSB:LSB]sum);localparamHSB=MSB+1; //localparam參數(shù)定義assignsum=a+b;endmodule4.9.2localparam局部參數(shù)按功能劃分,包括:

算術(shù)操作符(ArithmeticOperators)

邏輯操作符(LogicalOperators)

關(guān)系操作符(RelationalOperators)

等式操作符(EqualityOperators)

縮減操作符(ReductionOperators)

條件操作符(ConditionalOperators)

位操作符(BitwiseOperators)

移位操作符(ShiftOperators)

指數(shù)操作符(PowerOperators)

拼接操作符(Concatenations)4.10操作符算術(shù)操作符屬于雙目操作符(有時(shí)也可用作單目操作符),包括:a+b //a加ba-b //a減ba*b //a乘ba/b //a除ba%b //取模(求余)a**b //a的b次冪4.10.1算術(shù)操作符關(guān)系操作符包含如下4種:a<b //a小于ba>b //a大于ba<=b //a小于等于ba>=b //a大于等于b4.10.2關(guān)系操作符a===b //全等操作符,a與b全等(需各位相同,包括為x和z的位)a!==b //a與b不全等a==b //相等操作符,a等于b(結(jié)果可以是x)a!=b //a不等于b(結(jié)果可以是x)屬于雙目操作符,得到的結(jié)果是1位的邏輯值聲明的關(guān)系為真,結(jié)果為1;聲明的關(guān)系為假,結(jié)果為04.10.3等式操作符算術(shù)操作符屬于雙目操作符(有時(shí)也可用作單目操作符),包括:a+b //a加ba-b //a減ba*b //a乘ba/b //a除ba%b //取模(求余)a**b //a的b次冪4.10.4邏輯操作符

~ 按位取反

& 按位與

| 按位或

^ 按位異或

^~,~^ 按位同或(符號(hào)^~與~^是等價(jià)的)4.10.5位操作符& 與

~& 與非

| 或

~| 或非

^ 異或

^~,~^ 同或縮減操作符與位操作符的邏輯運(yùn)算法則一樣,但縮減運(yùn)算是對(duì)單個(gè)操作數(shù)進(jìn)行與、或、非遞推運(yùn)算的,放在操作數(shù)的前面??s減操作符可將一個(gè)矢量縮減為一個(gè)標(biāo)量。例如:reg[3:0]a;b=&a; //等效于b=((a[0]&a[1])&a[2])&a[3];4.10.6縮減操作符

>> 邏輯右移

<< 邏輯左移

>>> 算術(shù)右移

<<< 算術(shù)左移用法為:A>>n或A<<n4.10.7移位操作符

>> 邏輯右移

<< 邏輯左移

>>> 算術(shù)右移

<<< 算術(shù)左移用法為:A>>n或A<<n4.10.7移位操作符

**執(zhí)行指數(shù)運(yùn)算,一般使用較多的是底數(shù)為2的指數(shù)運(yùn)算,如

。例如:parameterWIDTH=16;parameterDEPTH=8;reg[WIDTH-1:0]mem[0:(2**DEPTH)-1];//存儲(chǔ)器的深度用指數(shù)運(yùn)算定義,該存儲(chǔ)器容量(深度)為28(256)個(gè)單元4.10.8指數(shù)操作符

?:三目操作符,對(duì)三個(gè)操作數(shù)進(jìn)行判斷和處理,其用法如下:信號(hào)=條件?表達(dá)式1:表達(dá)式2;當(dāng)條件成立(為1)時(shí),信號(hào)取表達(dá)式1的值,條件不成立(為0)時(shí)取表達(dá)式2的值。4.10.9條件操作符

{}該操作符將兩個(gè)或多個(gè)信號(hào)的某些位拼接起來。比如:{a,b[3:0],w,3'b101}{4{w}} //等同于{w,w,w,w}{b,{3{a,b}}} //等同于{b,a,b,a,b,a,b}res={b,b[2:0],2'b01,b[3],2{a}};4.10.10拼接操作符操作符的優(yōu)先級(jí)在書寫代碼時(shí),建議用括號(hào)()來控制運(yùn)算的優(yōu)先級(jí)

習(xí)題44-1用Verilog設(shè)計(jì)一個(gè)8位二進(jìn)制加法計(jì)數(shù)器,帶異步復(fù)位端口,進(jìn)行綜合和仿真。4-2用Verilog描述帶同步置0/同步置1(低電平有效)端口的D觸發(fā)器,進(jìn)行綜合和仿真。4-3用Verilog設(shè)計(jì)模60的8421BCD碼計(jì)數(shù)器,進(jìn)行綜合和仿真。4-4下列標(biāo)識(shí)符哪些是合法的、哪些是錯(cuò)誤的?Cout,8sum,\a*b,_data,\wait,initial,$latch4-5下列數(shù)字的表示是否正確?6'd18,'Bx0,5'b0x110,'da30,10'd2,'hzF習(xí)題44-8能否對(duì)reg型變量用assign語(yǔ)句進(jìn)行連續(xù)賦值操作?4-9用Verilog定義如下變量和常量:(a)定義一個(gè)名為count的整數(shù);(b)定義一個(gè)名為ABUS的8位wire總線;(c)定義一個(gè)名為address的16位reg型變量,并將該變量的值賦為十進(jìn)制數(shù)128;(d)定義一個(gè)名為sign_reg8的8位帶符號(hào)reg型向量;(e)定義參數(shù)DELAY,參數(shù)值為8;(f)定義一個(gè)名為delay_time的時(shí)間變量;(g)定義一個(gè)容量為128位、字長(zhǎng)為32位的存儲(chǔ)器MYMEM。(h)定義一個(gè)2維(8×16)數(shù)組,其元素為8位wire型向量。4-10能否對(duì)存儲(chǔ)器進(jìn)行位選擇和域選擇?END數(shù)字系統(tǒng)設(shè)計(jì)與VerilogHDL(第9版)數(shù)字系統(tǒng)設(shè)計(jì)與VerilogHDL(第9版)第5章

Verilog行為描述5.1行為級(jí)建模5.2過程時(shí)序控制5.3過程賦值5.4過程連續(xù)賦值

5.5塊語(yǔ)句5.6條件語(yǔ)句

5.7循環(huán)語(yǔ)句5.8任務(wù)5.9函數(shù)5.10automatic任務(wù)和函數(shù)5.11編譯指令5.1行為級(jí)建模所謂行為級(jí)建模,或稱為行為描述,是對(duì)設(shè)計(jì)實(shí)體的數(shù)學(xué)模型的描述,其抽象程度高于結(jié)構(gòu)描述。行為描述類似于高級(jí)編程語(yǔ)言,當(dāng)描述一個(gè)設(shè)計(jì)實(shí)體的行為時(shí),無須知道其內(nèi)部電路構(gòu)成,只要描述清楚輸入與輸出信號(hào)的行為。VerilogHDL行為級(jí)建模是基于過程實(shí)現(xiàn)的,過程(procedure)包含以下4種:

initial;

always;

task;

function。5.1.1always過程語(yǔ)句always過程模板:always@(<敏感信號(hào)列表sensitivitylist>)begin//過程賦值//if-else,case選擇語(yǔ)句//while,repeat,for循環(huán)語(yǔ)句//task,function調(diào)用end`defineadd 3'd0`defineminus 3'd1`defineband 3'd2`definebor 3'd3`definebnot 3'd4modulealu(input[2:0]opcode, //操作碼input[7:0]a,b, //操作數(shù)outputreg[7:0]out);always@* //或?qū)憺閍lways@(*)begincase(opcode)`add: out=a+b; //加操作`minus: out=a-b;//減操作`band: out=a&b; //按位與`bor: out=a|b; //按位或`bnot: out=~a; //按位取反default:out=8'hx;endcaseendendmoduleb)|(~(c&d)));endmodule例5.2指令譯碼電路示例5.1.2initial過程initial過程的使用格式:initialbegin

語(yǔ)句1;

語(yǔ)句2;…endinitial語(yǔ)句不帶觸發(fā)條件,過程中的塊語(yǔ)句沿時(shí)間軸只執(zhí)行一次。5.2過程時(shí)序控制VerilogHDL提供了兩種時(shí)序控制方法,用于激活過程語(yǔ)句的執(zhí)行:延時(shí)控制(用#表示)事件控制(用@表示)。5.2.1延時(shí)控制表示延時(shí)的方式:#10rega=regb; //一般延時(shí)rega=#10regb; //內(nèi)嵌延時(shí)#drega=regb; //用參數(shù)表示延時(shí)#((d+e)/2)rega=regb; //用參數(shù)表示延時(shí)例5.3延時(shí)控制示例`timescale1ns/1nsmoduletest;rega;parameterDELY=10;//定義參數(shù)initialbegin a=0; //0ns,a=0#5a=1; //5ns,a=1,一般延時(shí)表示#DELY a=0;//15ns,a=0,用參數(shù)表示延時(shí)#(DELY/2) a=1;//20ns,a=1a=#10 0;//30ns,a=0,內(nèi)嵌延時(shí)表示a=#5 1;//35ns,a=1#10$finish;endendmodule延時(shí)控制示例輸出波形圖5.2.2事件控制在VerilogHDL中,事件(event)是指某個(gè)reg型或wire型變量的值發(fā)生了變化。事件控制格式:@(event_expression)//event_expression可以是邊沿、電平和命名事件1.一般事件控制對(duì)于時(shí)序電路,事件通常是由時(shí)鐘邊沿觸發(fā)的。為表達(dá)邊沿這個(gè)概念,VerilogHDL提供posedge和negedge兩個(gè)關(guān)鍵字來描述。posedge是指從0到X、Z、1,以及從X、Z到1的正跳變(上升沿)negedge是指從1到X、Z、0,以及從X、Z到0的負(fù)跳變(下降沿)邊沿觸發(fā)示例。@(posedgeclock)//當(dāng)clock的上升沿到來時(shí)@(negedgeclock)//當(dāng)clock的下降沿到來時(shí)@(posedgeclkornegedgereset)對(duì)于組合電路,事件通常是輸入變量的值發(fā)生了變化@(a) //當(dāng)信號(hào)a的值發(fā)生改變@(aorb) //當(dāng)信號(hào)a或信號(hào)b的值發(fā)生改變3.敏感信號(hào)列表當(dāng)多個(gè)信號(hào)或事件中任意一個(gè)發(fā)生變化都能夠觸發(fā)語(yǔ)句的執(zhí)行時(shí),用關(guān)鍵字or連接多個(gè)事件或信號(hào),這些事件或信號(hào)組成的列表稱為“敏感列表”,也可以用逗號(hào)“,”代替or。示例:always@(a,b,c,d,e)//用逗號(hào)分隔敏感信號(hào)always@(posedgeclk,negedgerstn)//用逗號(hào)分隔敏感信號(hào)always@(aorb,c,dore)在RTL級(jí)的設(shè)計(jì)中,經(jīng)常需要在敏感信號(hào)列表中列出所有的輸入信號(hào),采用隱式事件表達(dá)式來解決此一問題。示例:always@* //形式1always@(*) //形式25.3過程賦值過程賦值(proceduralassignment)必須置于always、initial、task和function過程內(nèi),屬于“激活”類型的賦值,用于為reg、integer、time、real、realtime和存儲(chǔ)器等數(shù)據(jù)類型的對(duì)象賦值。5.3.1variable型變量聲明時(shí)賦值在variable型變量聲明時(shí)可以為其賦初值,這可看作是過程賦值的一種特殊情況,variable型變量將會(huì)保持該值,直到遇到對(duì)該變量的下一條賦值語(yǔ)句。示例reg[3:0]a=4'h4;上面的語(yǔ)句等同于:reg[3:0]a;initiala=4'h4;5.3.2阻塞過程賦值VerilogHDL包含兩種類型的過程賦值語(yǔ)句:阻塞(blocking)過程賦值語(yǔ)句;非阻塞(nonblocking)過程賦值語(yǔ)句。阻塞過程賦值符號(hào)為“=”示例b=a;5.3.3非阻塞過程賦值非阻塞過程賦值的符號(hào)為“<=”。b<=a;非阻塞過程賦值可以在同一時(shí)間為多個(gè)變量賦值,而不需考慮語(yǔ)句順序或相互依賴性,非阻塞過程賦值語(yǔ)句是并發(fā)執(zhí)行的(相互間無依賴關(guān)系),故其書寫順序?qū)?zhí)行結(jié)果無影響。例5.5非阻塞過程賦值的示例`timescale1ns/1nsmoduleevaluate;rega,b,c;initialbegina=0;b=1;c=0;endalwaysc=#5~c;always@(posedgec)begina<=b;b<=a;#100$finish;endendmodule非阻塞過程賦值的執(zhí)行結(jié)果5.4過程連續(xù)賦值過程連續(xù)賦值主要有兩種:assign、deassignforce、release5.4.1assign和deassignassign(過程連續(xù)賦值操作)與deassign(取消過程連續(xù)賦值操作)的賦值對(duì)象只能是variable型變量,而不能是net型變量。賦值過程中對(duì)variable型變量連續(xù)賦值,該值將保持直到被重新賦值。例5.9用assign與deassign描述帶異步復(fù)位和置位端的D觸發(fā)器moduledff_assign(inputd,clock,inputclear,preset,outputregq);always@(clearorpreset)if(!clear)assignq=0;//assign語(yǔ)句賦值0elseif(!preset)assignq=1;//assign語(yǔ)句賦值1elsedeassignq;//q被deassign語(yǔ)句取消賦值always@(posedgeclock)q=d;endmodule5.4.2force和releaseforce(強(qiáng)制賦值)與release(取消強(qiáng)制賦值)也是過程連續(xù)賦值語(yǔ)句,其使用方法和效果與assign、deassign類似,但賦值對(duì)象可以是variable型變量,也可以是net型變量。因?yàn)槭菬o條件強(qiáng)制賦值,一般多用于交互式調(diào)試過程,應(yīng)避免在設(shè)計(jì)模塊中使用。例5.10用force與release賦值`timescale1ns/1nsmoduletest_force;rega,b,c,d;wiree;andg1(e,a,b,c);initialbegin$monitor("%dd=%b,e=%b",$stime,d,e);assignd=a&b&c;a=1;b=0;c=1;#10;forced=(a|b|c); //force強(qiáng)制賦值forcee=(a|b|c);#10;released;//release取消強(qiáng)制賦值releasee;#10$finish;endendmodule

5.5塊

語(yǔ)

句begin-end串行塊中的語(yǔ)句按串行方式順序執(zhí)行。比如:beginregb=rega;regc=regb;end5.5.1串行塊begin-end例5.11用begin-end串行塊產(chǎn)生信號(hào)波形`timescale10ns/1nsmodulewave1;parameterCYCLE=10;regwave;initialbegin wave=0;#(CYCLE/2) wave=1;#(CYCLE/2) wave=0;#(CYCLE/2) wave=1;#(CYCLE/2) wave=0;#(CYCLE/2) wave=1;#(CYCLE/2) $stop;endinitial$monitor($time,,,"wave=%b",wave);endmodule例5.11描述的波形

5.5塊

語(yǔ)

句并行塊fork-join中的所有語(yǔ)句都是并發(fā)執(zhí)行的。示例forkregb=rega;regc=regb;join5.5.2并行塊fork-join例5.12用fork-join并行塊產(chǎn)生信號(hào)波形。`timescale10ns/1ns

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論