版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
緒論什么是FPGA?
現(xiàn)場可編程門陣列
FieldProgrammableGateArray一種可編程邏輯器件Xilinx創(chuàng)始人RossFreeman在20世紀(jì)80年代初發(fā)明斯坦福大學(xué)NetFPGA可編程邏輯器件可編程邏輯器件ProgrammableLogicDevice,PLD20世紀(jì)70年代,專用集成電路(ASIC)發(fā)展而來軟件編程配置,可擦寫發(fā)展歷程70年代初期,PROM,RPROM,EEPROM70年代中期,PAL,GAL80年代中期,CPLD,F(xiàn)PGA90年代末期,SOPC,SOCCPLD與FPGACPLD(ComplexProgrammableLogicDevice)采連續(xù)式布線結(jié)構(gòu),較適合用來實(shí)現(xiàn)各種運(yùn)算和組合邏輯。FPGA采用分段式布線結(jié)構(gòu),適用于實(shí)現(xiàn)循序邏輯,寄存器資源豐富。FPGA與ASICASIC(專用集成電路)-定制
FPGA(現(xiàn)場可編程門陣列)-半定制采用FPGA,用戶不需要投片生產(chǎn),就能得到合用的芯片F(xiàn)PGA可作為其他全定制或半定制ASIC電路的中試樣片F(xiàn)PGA由存放在片內(nèi)RAM中的程序來設(shè)置工作狀態(tài),可以反復(fù)使用FPGA結(jié)構(gòu)簡介邏輯單元陣列可配置邏輯模塊CLB(ConfigurableLogicBlock)輸出輸入模塊IOB(InputOutputBlock)內(nèi)部連線(Interconnect)Virtex-II的架構(gòu)Virtex?-IIarchitecture’scorevoltage
operatesat1.5VI/OBlocks(IOBs)ConfigurableLogicBlocks(CLBs)ClockManagement(DCMs,BUFGMUXes)BlockSelectRAM?resourceDedicatedmultipliersProgrammableinterconnectIOBIOB分成若干個(gè)組(Bank),每個(gè)Bank接口電壓相同??膳渲眠壿媺K(CLBTile)SLICELUT4或6輸入DCM
時(shí)鐘資源管理器BlockRAM以Virtex-II為例BlockRAM其他資源布線資源移位寄存器分布式RAM嵌入式IP核軟核:寄存器傳輸級(RTL)模型固核:帶有平面規(guī)劃信息的網(wǎng)表硬核:經(jīng)驗(yàn)證的設(shè)計(jì)版圖FPGA引腳主要廠商Xilinx 軍品級、宇航級Altera
ActelLattice市場比較Xilinx$481MinQ206LatticeActelQuickLogicSource:CompanyReports(LSCC,ALTR,ACTL,XLNX,QUIK)RevenuebycalendarquarterXilinxRevenue$1.73Bin2005AlteraXilinx可編程器件市場份額(2007)Source:CompanyreportsLatestinformationavailable;computedona4-quarterrollingbasisAlteraAll
OthersFPGASegmentXilinxrevenuesaregreaterthanallotherpure-playPLDcompaniescombined.XilinxXilinxFPGA發(fā)展歷史1985年,Xilinx當(dāng)全球首款FPGA產(chǎn)品XC2064,2μm工藝,包含64個(gè)邏輯模塊和85000個(gè)晶體管,門數(shù)量不超過1000個(gè)。2007年,65nm工藝的Virtex5產(chǎn)品,門數(shù)量已經(jīng)達(dá)到千萬級,晶體管個(gè)數(shù)超過10億個(gè)。2009年,45nm工藝的Virtex6系列,76萬個(gè)邏輯單元,功耗降低50%。最新面世XilinxVirtex7系列,28nm工藝,200萬個(gè)邏輯單元,功耗再降低50%。Virtex系列工藝/核心電壓時(shí)鐘特色Virtex-2150nm1.5V420MHz40萬-800萬門Virtex-2Pro130nm1.5V420MHz2個(gè)400MHz的PowerPC3.125GbpsRocketIO?Virtex-490ns1.2V500MHz20萬個(gè)邏輯單元LX、SX、FXVirtex-565ns1V550MHz33萬個(gè)邏輯單元LX、LXT、SXTXilinxFPGA家族200220062008201070060020002004CoolRunner-IISpartan-3E100MHz,92DMIPSNextGeneration
SpartanSpartan-3100MHz,92DMIPSVirtex-IIPro150MHz,120DMIPS100200Virtex-4200MHz,160DMIPSVirtex-5MontBlancMHzVirtex-4,450MHz400500300Virtex-IIProVirtex-5MontBlancTrilogySpartan系列工藝/架構(gòu)時(shí)鐘特色Spartan-22E180nm/150nm200MHz20萬門Spartan-390nmVirtex-II340MHz5萬-500萬低端代表Spartan-3A90ns500MHz5萬-340萬DNAID技術(shù)Spartan-3E90ns500MHz10萬-160萬Spartan-3系列Spartan-3ADSPFPGADSP應(yīng)用Spartan-3ANFPGA
非易失性應(yīng)用Spartan-3AFPGAI/O優(yōu)化應(yīng)用Spartan-3EFPGA
邏輯優(yōu)化應(yīng)用Spartan-3FPGA
最高密度和引腳數(shù)的應(yīng)用Xilinx和Altera產(chǎn)品比較Xilinx Spartan3E 50萬門
VirtexIIPro:XC2VP30 300萬門,2個(gè)PowerPC Virtex-4:XC4VSX25FF668 800萬門Altera Cyclone:EP1C6Q240
約12萬門
CycloneII:EP2C35F672
等效150萬門,沒有硬核
StratixII開發(fā)技術(shù)基礎(chǔ)電路設(shè)計(jì):電路板設(shè)計(jì)、焊接、調(diào)試(電路、模電、數(shù)電、集成電路)硬件設(shè)計(jì):芯片設(shè)計(jì)、結(jié)構(gòu)設(shè)計(jì)、總線接口設(shè)計(jì)、存儲器控制(計(jì)算機(jī)組成原理、接口技術(shù))系統(tǒng)開發(fā):編程技術(shù)、調(diào)試技術(shù)、嵌入式開發(fā)(硬件描述語言基礎(chǔ)、嵌入式系統(tǒng))應(yīng)用開發(fā):通信網(wǎng)絡(luò)、圖像處理、音視頻處理、并行計(jì)算(通信原理、Matlab建模等)人才需求硬件工程師缺口巨大,08年統(tǒng)計(jì)缺口1.2萬。從業(yè)要求熟悉電路設(shè)計(jì)、PCB布板、電路調(diào)試,能熟練使用PROTEL等電路設(shè)計(jì)軟件;熟練應(yīng)用常用電子元器件,熟練檢索各種元器件材料;掌握常用的硬件設(shè)計(jì)工具,調(diào)試儀器儀表的使用方法;2年以上硬件產(chǎn)品的開發(fā)工作經(jīng)驗(yàn),熟悉嵌入式系統(tǒng)的硬件及軟件開發(fā);工作態(tài)度積極,責(zé)任心強(qiáng),良好的溝通與團(tuán)隊(duì)配合;獨(dú)立設(shè)計(jì)過完整的電子產(chǎn)品,能讀懂英文產(chǎn)品規(guī)格書。人才需求硬件工程師必備知識基本設(shè)計(jì)規(guī)范CPU基本知識、架構(gòu)、性能及選型指導(dǎo)MOTOROLA公司的PowerPC系列基本知識、性能詳解及選型指導(dǎo)網(wǎng)絡(luò)處理器(INTEL、MOTOROLA、IBM)的基本知識、架構(gòu)、性能及選型常用總線的基本知識、性能詳解各種存儲器的詳細(xì)性能介紹、設(shè)計(jì)要點(diǎn)及選型
人才需求Datacom、Telecom領(lǐng)域常用物理層接口芯片基本知識,性能、設(shè)計(jì)要點(diǎn)及選型常用器件選型要點(diǎn)與精華FPGA、CPLD、EPLD的詳細(xì)性能介紹、設(shè)計(jì)要點(diǎn)及選型指導(dǎo)VHDL和Verilog網(wǎng)絡(luò)基礎(chǔ)國內(nèi)大型通信設(shè)備公司硬件研究開發(fā)流程人才需求
熟練掌握并使用業(yè)界最新、最流行的專業(yè)設(shè)計(jì)工具Innoveda公司的ViewDraw,PowerPCB,Cam350CADENCE公司的OrCad;Allegro,SpectraAltera公司的MAX+PLUSXILINX公司的FOUNDATION、ISE應(yīng)用領(lǐng)域CIC設(shè)計(jì)與驗(yàn)證CPU、嵌入式系統(tǒng)通信領(lǐng)域網(wǎng)絡(luò)通信設(shè)備安全設(shè)備數(shù)據(jù)采集與信息處理生物信息金融領(lǐng)域應(yīng)用領(lǐng)域應(yīng)用領(lǐng)域應(yīng)用領(lǐng)域應(yīng)用領(lǐng)域應(yīng)用領(lǐng)域應(yīng)用領(lǐng)域應(yīng)用領(lǐng)域應(yīng)用領(lǐng)域應(yīng)用領(lǐng)域參考書目參考書目開放資源開放資源Xilinx官方網(wǎng)站SEED-XDTKMboard實(shí)驗(yàn)箱主板支持XUPV2Pro或者FEM025并行高速A/D和D/A,8位,1M串行高速A/D和D/A,12位,30MLCD顯示模塊(122*32)數(shù)碼管顯示模塊(8段)LED點(diǎn)陣顯示模塊(16*16)USB2.0模塊RTC+EEPROM模塊蜂鳴器鍵盤模塊7寸640x480VGA液晶顯示器CCD攝像頭核心板用一套硬件實(shí)現(xiàn)包括“邏輯與計(jì)算機(jī)設(shè)計(jì)基礎(chǔ)”、“計(jì)算機(jī)組成”、“匯編與接口”、“嵌入式系統(tǒng)”等課程IPCore的使用ISE提供的IPCore面向復(fù)雜設(shè)計(jì)的軟核ISE版本的適用性XilinxFPGA芯片的適用性系統(tǒng)IPCore的生成在ISE的Project中直接生成ISE->Accessories->CoreGeneratorISE->Accessories->ArchitectureWizardIP參數(shù)化設(shè)計(jì)IPCore的使用方法1:定制ISE中一個(gè)已有的IPCore小寫IPCore的使用IPCore的使用定制同步FIFO Core為例IPCore使用說明IPCore的使用生成點(diǎn)擊GenerateISE的ModuleView窗口中出現(xiàn)所生成的IPCoreIPCore的使用例化生成IPCore后,工程所在文件夾下產(chǎn)生下列文件.xco是IPCore配置文件 例化的時(shí)候識別.xco.edn是網(wǎng)表文件.v和.vhd是模塊的封裝源代碼IPCore的使用方法2:CoreGeneratorIPCore的使用IPCore的使用配置生成配置IPCore的使用配置高級配置IPCore的使用方法2:ArchitectureWizardIP復(fù)雜的IPCore生成,如DCMIPCore的使用例化產(chǎn)生的關(guān)鍵文件.ucf是約束文件.xaw是二進(jìn)制的Core文件 (例化時(shí)和.xco的使用類似).v是模塊的封裝源代碼.ngc
二進(jìn)制網(wǎng)表文件(根據(jù)綜合選項(xiàng)不同而生成)IPCore的使用IPCore端口聲明ViewHDLFunctionalModelIPCore的使用IPCore的說明IPCore生成后,添加到工程中被認(rèn)為是黑盒子,不會被重新綜合;IPCore的可移植性與ISE的版本和芯片類型有關(guān);部分IPCore是付費(fèi)使用的。用戶IPCore的生成如何將自己的代碼封裝成一個(gè)IPCore?可以提供給他人使用,但不想被篡改或者開源方法:提供verilogwrapper文件(.v文件),只提供端口描述和參數(shù);提供.edn文件或者.ngc文件等同名的網(wǎng)表文件。用戶約束文件(UCF)UCF是項(xiàng)目實(shí)現(xiàn)不可缺少的部分UCF生成方法1NewSouce->ImplementationConstraintsFile模塊關(guān)聯(lián)非常重要用戶約束文件(UCF)UCF生成方法2UserConstraints用戶約束文件(UCF)UCF主要三個(gè)組成部分引腳約束:引腳位置和類型配置;面積約束:模塊的布局布線區(qū)域配置;時(shí)序約束:時(shí)鐘約束、關(guān)鍵路徑約束等。UCF語法:類似于一種腳本語言
{NET|INST|PIN}“Signal_name”Attribute圖形工具:PACE編輯器,約束編輯器參見教材4.4節(jié)自行學(xué)習(xí)用戶約束文件(UCF)引腳約束用戶約束文件(UCF)引腳約束引腳的參數(shù)可以進(jìn)一步配置用戶約束文件(UCF)引腳約束配置成功后,打開.ucf文件用戶約束文件(UCF)面積約束將Logic的模塊指定到芯片的某個(gè)區(qū)域編輯一般不需要用戶約束文件(UCF)時(shí)鐘約束全局約束 必選,主要針對全局時(shí)鐘引腳時(shí)序約束 padtopad,clocktopad高級約束 分組約束,高級時(shí)序約束特定約束 特定約束(較少使用)語法規(guī)則較為復(fù)雜用戶約束文件(UCF)重新查看.ucf文件用戶約束文件(UCF)關(guān)于UCF文件的幾點(diǎn)說明UCF語法較為復(fù)雜,需要確切知道含義;圖形界面的選項(xiàng)可以自動(dòng)轉(zhuǎn)換為UCF語句;如果要在FPGA上實(shí)現(xiàn),時(shí)鐘約束、引腳約束必填;UCF通常關(guān)聯(lián)頂層模塊,綜合選項(xiàng)中默認(rèn)包含;UCF引腳配置要非常小心,嚴(yán)格遵照PCB圖和芯片手冊的要求,否則可能燒毀昂貴的FPGA芯片;某些特殊引腳約束或者復(fù)雜約束,只能通過UCF語句來生成;UCF編寫不正確,無法進(jìn)行綜合以后的后續(xù)步驟。ISEimplementdesign配置Implement在綜合之后執(zhí)行,需要有.ucf文件包括Translate、Map、Place&Route屬性卡可以集中修改,也可以分項(xiàng)修改每個(gè)步驟都會生成分析報(bào)告詳細(xì)屬性配置參考教材4.3.3節(jié)ISEimplementdesign配置Translate屬性通常使用默認(rèn)屬性生成.ngd文件所包含的三個(gè)工具 較少使用ISEimplementdesign配置Translate報(bào)告ISEimplementdesign配置Map屬性通常使用默認(rèn)屬性主要需要調(diào)整的屬性:LUT輸入面積與速度IOB所包含的四個(gè)工具 較少使用ISEimplementdesign配置Map報(bào)告(很長,關(guān)注以下幾個(gè)部分)ISEimplementdesign配置Place&Route屬性主要需要調(diào)整的屬性:布線努力程度運(yùn)行開銷表部分工具比較重要ISEimplementdesign配置Place&Route報(bào)告(也很長)靜態(tài)時(shí)序分析與布局布線后仿真靜態(tài)時(shí)序分析當(dāng)布局布線效果不理想時(shí)使用產(chǎn)生布局布線靜態(tài)時(shí)序使用TimingAnalyzer進(jìn)行分析靜態(tài)時(shí)序分析與布局布線后仿真錯(cuò)誤時(shí)序會被標(biāo)紅靜態(tài)時(shí)序分析與布局布線后仿真三種后仿真生成文件GeneratePost-TranslateSimulationModelxxx_translate.vGeneratePost-MapSimulationModel
xxx_map.v,xxx_map.sdfGeneratePost-Place&RouteSimulationModel主要使用布局布線后仿真xxx_timsim.v,xxx_timsim.sdf靜態(tài)時(shí)序分析與布局布線后仿真布局布線后仿真方法新建一個(gè)目錄,將編寫的仿真測試文件、xxx_timsim.v、xxx_timsim.sdf、glbl.v文件復(fù)制到此目錄下;(注意:一定不要編寫的源代碼,glbl.v在ISE根目錄/verilog/src下)如果使用了宏定義文件(.v)、其他仿真模型文件(.v)也添加進(jìn)來;打開ModelSim,新建一個(gè)Project,添加上述文件;編譯所有文件;vsim-LXilinxCoreLib_ver-Lunisims_ver-Lsimprims_ver-t1ps+maxdelayssimulate_moduleglbl靜態(tài)時(shí)序分析與布局布線后仿真將uut(例化的源代碼頂層)添加到波形中靜態(tài)時(shí)序分析與布局布線后仿真后仿真也可以采用非命令行方法,請自行查閱相關(guān)資料;后仿真時(shí)間較長,與功能仿真可能相差幾個(gè)數(shù)量級的時(shí)間;如果源代碼較為龐大,生成后仿真模型的過程也會比較耗時(shí)。功耗分析XPower功耗分析在仿真文件中某個(gè)initial語句中需要增加
$dumpfile("design.VCD"); $dumpvars(1,test_v.uut);運(yùn)行GeneratePowerData運(yùn)行AnalyzePower功耗分析分析報(bào)告功耗分析XPower使用(后續(xù)部分參考教材4.3.5節(jié))FPGA的配置FPGA配置模式主模式 PROM配置(最終產(chǎn)品)從模式JTAG模式 主機(jī)配置(調(diào)試)JTAGJointTestActionGroup一種國際標(biāo)準(zhǔn)測試協(xié)議JTAG邊界掃描TDI、TDO、TMS、TCKVCC、GNDFPGA的配置JTAG下載電纜并口電纜ParallelIII 電路公開,可自行制作ParallelIVUSB電纜價(jià)格較為昂貴,速度和穩(wěn)定性遠(yuǎn)優(yōu)于并口電纜JTAG配置電路參見教材5.3節(jié)自行學(xué)習(xí)菊花鏈FPGA的配置配置文件的生成PC調(diào)試的配置選項(xiàng)CCLK用于主模式PROM配置,內(nèi)部產(chǎn)生JTAGCLOCK用于JTAG調(diào)試FPGA的配置配置文件的生成執(zhí)行生成.bit文件FPGA的配置啟動(dòng)iMPACT選擇邊界掃描也可以取消 然后點(diǎn)擊 進(jìn)行自動(dòng)檢測FPGA的配置下載配置右鍵Program,選中生成的.bit文件下載成功后,提示“Success”FPGA的配置采用PROM配置FPGA生成的.bit文件需要轉(zhuǎn)換成.mcs文件下載到PROM中,PROM自動(dòng)配置FPGA執(zhí)行FPGA的配置選擇所使用PROM芯片F(xiàn)PGA的配置選擇.bit文件轉(zhuǎn)換(注意:此時(shí)要用CCLK時(shí)鐘生成.bit)FPGA的配置JTAG菊花鏈FPGA的配置多片PROM配置SoC基本概念SoC(SystemonChip)片上系統(tǒng)狹義:信息系統(tǒng)核心的芯片集成,將系統(tǒng)關(guān)鍵部件集成在一塊芯片上廣義:微小型系統(tǒng)SoC在集成電路(IC)向集成系統(tǒng)(IS)轉(zhuǎn)變大方向下產(chǎn)生
1994年Motorola的FlexCore系統(tǒng)1995年LSILogic公司為Sony公司設(shè)計(jì)的SoCSoC技術(shù)特點(diǎn)半導(dǎo)體工藝技術(shù)的系統(tǒng)集成軟件系統(tǒng)和硬件系統(tǒng)的集成SoC具有以下幾方面的優(yōu)勢,因而創(chuàng)造其產(chǎn)品價(jià)值與市場需求:降低耗電量減少體積增加系統(tǒng)功能提高速度節(jié)省成本
SoC設(shè)計(jì)的關(guān)鍵技術(shù)總線架構(gòu)IP核復(fù)用軟硬件協(xié)同設(shè)計(jì)SoC驗(yàn)證可測性設(shè)計(jì)低功耗設(shè)計(jì)超深亞微米電路實(shí)現(xiàn)嵌入式軟件移植與開發(fā)SoC發(fā)展趨勢SoC芯片的規(guī)模一般遠(yuǎn)大于普通的ASIC;SoC仿真與驗(yàn)證最復(fù)雜、最耗時(shí),先進(jìn)的設(shè)計(jì)與仿真驗(yàn)證方法成為SoC設(shè)計(jì)成功的關(guān)鍵;
除了那些無法集成的外部電路或機(jī)械部分以外,其他所有的系統(tǒng)電路全部集成在一起;
高度集成化、固件化;基于SoC開發(fā)平臺,最大程度系統(tǒng)重用。
基于FPGA的SoC應(yīng)用技術(shù)系統(tǒng)功能集成是SoC的核心技術(shù)
固件集成是SoC的基礎(chǔ)設(shè)計(jì)思想
嵌入式系統(tǒng)是SoC的基本結(jié)構(gòu)
IP是SoC的設(shè)計(jì)基礎(chǔ)片上總線IP核互連一般采用總線的方式,這種總線稱為片上總線(On-ChipBus,OCB)ARM公司的AMBA總線Altera公司Avalon總線IBM公司的CoreConnect總線OpenCore組織的Wishbone總線OpenCore組織的OPC總線片上總線AMBA總線AdvancedMicrocontrollerBusArchitectureARM公司設(shè)計(jì)的用于高性能嵌入式系統(tǒng)的總線標(biāo)準(zhǔn),獨(dú)立于處理器和制造工藝技術(shù)片上總線AMBA總線AHB(AdvancedHighPerformanceBus)ASB(AdvancedSystemBus)APB(AdvancedPerpheralBus)片上總線AVALON總線Altera在推出業(yè)內(nèi)第一個(gè)軟核Nios時(shí)開發(fā)的片上總線一種簡單的總線協(xié)議,規(guī)定了主部件和從部件之間進(jìn)行連接的端口和通信的時(shí)序
片上總線CoreConnect總線IBM公司設(shè)計(jì)的一種SoC總線協(xié)議,能夠使處理器、內(nèi)存控制器和外設(shè)在基于標(biāo)準(zhǔn)產(chǎn)品平臺設(shè)計(jì)中的集成和復(fù)用更加靈活,從而提高系統(tǒng)性能。片上總線CoreConnect總線處理器局部總線PLB(ProeessorLocalBus):高速的CPU核、高速存儲器控制器、仲裁器、高速的DMA控制器等高性能、寬帶寬的設(shè)備都連接在PLB上。片內(nèi)外設(shè)總線OPB(On-ChipPeripheralBus):低性能的設(shè)備都連接在OPB總線上。器件控制寄存器總線DCR(DeviceControlRegister):配置PLB和OPB主/從設(shè)備中的狀態(tài)寄存器和控制寄存器。片上總線Wishbone總線Silicore公司提出,現(xiàn)在已被移交給OpenCores組織維護(hù)結(jié)構(gòu)十分簡單,它僅僅定義了一條高速總線用戶可以按需要自定義Wishbone標(biāo)準(zhǔn),如字節(jié)對齊方式、標(biāo)志位等片上總線Wishbone總線互連方式點(diǎn)到點(diǎn)(point-to-point):用于兩IP核直接互連;數(shù)據(jù)流(dataflow):用于多個(gè)串行IP核之間的數(shù)據(jù)并發(fā)傳輸;共享總線(sharedbus):多個(gè)IP核共享一條總線;交叉開關(guān)(crossbarswitch):同時(shí)連接多個(gè)主從部件,提高系統(tǒng)吞吐量。片上總線Wishbone總線WISHBONESystem-on-Chip(SoC)InterconnectionArchitectureforPortableIPCores片上總線典型主從設(shè)備連接單個(gè)讀周期單個(gè)寫周期片上總線BIGENDIAN片上總線LITTLEENDIAN嵌入式RISCCPUAlteraNois系列XilinxPowerPC(硬核)PicoBlaze(8位微處理器軟核)MicroBlaze(32位微處理器軟核,支持CoreConnect總線的標(biāo)準(zhǔn)外設(shè)集合)基于EDK開發(fā):EDK中提供的IP核均有相應(yīng)的設(shè)備驅(qū)動(dòng)和應(yīng)用接口,只需利用相應(yīng)函數(shù)庫,就可以編寫自己的應(yīng)用軟件和算法程序;對于用戶自己開發(fā)的IP核,需要自己編寫相應(yīng)的驅(qū)動(dòng)和接口函數(shù)。嵌入式RISCCPUGaislerLeon系列(SparcV8架構(gòu),開源,完整的工具鏈)SunOpenSparc(SparcV9架構(gòu),開源)OpencoresOpenRiscZPU(最小的32位RISC軟核)幾十種CPU軟核軟件無線電軟件無線電(SoftwareRadio)在開放公共硬件平臺上利用可編程的軟件方法實(shí)現(xiàn)所需要的無線電系統(tǒng)?;舅枷耄簩拵?shù)變換器(A/D)及數(shù)模變換器(D/A)盡可能地靠近射頻天線(模擬信號的數(shù)字化過程盡可能地接近天線
)通過軟件編程來完成傳送信息抽樣、量化、編碼/解碼、運(yùn)算處理和變換。通過軟件編程實(shí)現(xiàn)不同的信道調(diào)制方式的選擇,如調(diào)幅、調(diào)頻、單邊帶、數(shù)據(jù)、跳頻和擴(kuò)頻。通過軟件編程實(shí)現(xiàn)不同的保密結(jié)構(gòu)、網(wǎng)絡(luò)協(xié)議和控制終端功能。軟件無線電軟件無線電AD->DSP->DAAD->DSP+FPGA->DAAD->FPGA->DA編程最終將向FPGA邏輯設(shè)計(jì)過渡,以嵌入式SoC系統(tǒng)為核心。芯片級應(yīng)用系統(tǒng)FPGA的兩個(gè)走向高度并行專用電路設(shè)計(jì)追求高速度高度的電路優(yōu)化靈活的SoC系統(tǒng)設(shè)計(jì)追求靈活性、高性價(jià)比嵌入式CPU為核心的軟硬件協(xié)同設(shè)計(jì)SoC驗(yàn)證VerilogHDL歷史1983年,GatewayDesignAutomation公司推出Verilog語言,開發(fā)了仿真與驗(yàn)證工具;1985年,GDA推出Verilog仿真器Verilog-XL:仿真速度快,處理能力強(qiáng),具有交互式調(diào)試手段;1987年,Synopsys公司的綜合軟件開始接受Verilog輸入;1989年,Cadence公司收購GDA,進(jìn)一步擴(kuò)大Verilog的影響;1990年,OpenVerilogInternational(OVI)成立,推廣VerilogHDL和Veriog-XL被廣泛推廣;1993年,OVI推出Verilog2.0,作為IEEE提案提出申請;1995年,IEEE(InstituteofElectricalandElectronicsEngineers)通過VerilogHDL標(biāo)準(zhǔn)IEEEStd.1364-1995;2001年,IEEE發(fā)布了VerilogIEEE1364-2001標(biāo)準(zhǔn)。本課程以IEEEStd.1364-1995為主VerilogHDL現(xiàn)狀VerilogHDL是最廣泛使用的、具有國際標(biāo)準(zhǔn)支持的硬件描述語言,絕大多數(shù)的EDA廠商都支持;在工業(yè)界和ASIC設(shè)計(jì)領(lǐng)域,VerilogHDL應(yīng)用更加廣泛。VerilogHDL與VHDLVHDLVery-High-SpeedIntegratedCircuitHardwareDescriptionLanguage誕生于1982年;1987年底被IEEE和美國國防部確認(rèn)為標(biāo)準(zhǔn)硬件描述語言。IEEE1076(1983)IEEE1076-1995……VerilogHDL與VHDL建模層次系統(tǒng)級(system):
用高級語言結(jié)構(gòu)實(shí)現(xiàn)設(shè)計(jì)模塊的外部性能的模型。算法級(algorithmic):
用高級語言結(jié)構(gòu)實(shí)現(xiàn)設(shè)計(jì)算法的模型。
RTL級(RegisterTransferLevel):
描述數(shù)據(jù)在寄存器之間流動(dòng)和如何處理這些數(shù)據(jù)的模型。
門級(gate-level):
描述邏輯門以及邏輯門之間的連接的模型。開關(guān)級(switch-level):
描述器件中三極管和儲存節(jié)點(diǎn)以及它們之間連接的模型。VerilogHDL與VHDL相同點(diǎn):都能形式化抽象表示電路行為和結(jié)構(gòu);支持邏輯設(shè)計(jì)中層次與范圍的描述;具有電路仿真和驗(yàn)證機(jī)制;與工藝無關(guān)。不專門面向FPGA設(shè)計(jì)不同點(diǎn):Verilog與C語言相似,語法靈活;VHDL源于Ada語言,語法嚴(yán)格;Verilog更適合ASIC設(shè)計(jì)。SystemVerilog與SystemCSystemVerilog:IEEE1364Verilog-2001標(biāo)準(zhǔn)的擴(kuò)展增強(qiáng),兼容Verilog2001,將硬件描述語言(HDL)與現(xiàn)代的高層級驗(yàn)證語言(HVL)結(jié)合。SystemC:一種軟/硬件協(xié)同設(shè)計(jì)語言,既是系統(tǒng)級語言,也是硬件描述語言。系統(tǒng)建模設(shè)計(jì)方法學(xué)自頂向下自底向上混合式描述方式數(shù)據(jù)流描述:描述電路數(shù)據(jù)流行為:assign行為描述:描述功能:initial,always結(jié)構(gòu)化描述:描述元器件間連接關(guān)系:例化混合描述:Verilog允許多描述方式共存于同一模塊。簡單的Verilog程序moduletrist1(out,in,enable);
outputout; /*輸出信號*/
inputin,enable;//輸入信號
mytritri_inst(out,in,enable);endmodulemodulemytri(out,in,enable);
outputout;
inputin,enable;
assignout=enable?in:'bz;endmodule三態(tài)門模塊trist1調(diào)用模塊mytri的實(shí)例元件tri_inst;通過這種結(jié)構(gòu)性模塊構(gòu)造可構(gòu)成特大型模塊。簡單的Verilog程序三態(tài)門(綜合)簡單的Verilog程序VerilogHDL程序是由模塊構(gòu)成的;每個(gè)模塊要進(jìn)行端口定義,并說明輸入輸出口,然后對模塊的功能進(jìn)行邏輯描述;VerilogHDL程序的書寫格式自由,一行可以寫幾個(gè)語句,一個(gè)語句也可以分寫多行;除了endmodule語句外,每個(gè)語句和數(shù)據(jù)定義的最后必須有分號。同一電路的多種描述方法二選一的選擇器門級(結(jié)構(gòu)化)描述modulemuxtwo(out,a,b,sl);
inputa,b,sl;
outputout;
wirensl,sela,selb;
not#1u1(nsl,sl); //#1是仿真延遲
and#1u2(sela,a,nsl);
and#1u3(selb,b,sl);
or#1u4(out,sela,selb);endmodule
RTL級行為描述modulemuxtwo(out,a,b,sl);
inputa,b,sl;
outputout;
regout;
always@(sloraorb)
if(!sl)out=a;
elseout=b;endmodule
布爾代數(shù)級行為描述modulemuxtwo(out,a,b,sl);
inputa,b,sl;
outputout; assignout=sel?b:a;endmodule
同一電路的多種描述方法二選一的選擇器(綜合)混合描述混合設(shè)計(jì)方式的1位全加器實(shí)例moduleFA_Mix(A,B,Cin,Sum,Cout);
inputA,B,Cin;
outputSum,Cout;
regCout;
regT1,T2,T3;
wireS1;
xorX1(S1,A,B); //門實(shí)例語句。
always@(AorBorCin) //always語句。
begin T1=A&Cin; T2=B&Cin; T3=A&B; Cout=(T1|T2)|T3;
end
assignSum=S1^Cin; //連續(xù)賦值語句。endmodule混合描述混合設(shè)計(jì)方式的1位全加器實(shí)例(綜合)模塊基本結(jié)構(gòu)module模塊名(端口列表);端口I/O說明 內(nèi)部信號聲明 功能定義endmodule時(shí)延VerilogHDL模型中的所有時(shí)延都根據(jù)時(shí)間單位定義。下面是帶時(shí)延的連續(xù)賦值語句實(shí)例。
assign
#2Sum=A^B;#2指2個(gè)時(shí)間單位。使用編譯指令將時(shí)間單位與物理時(shí)間相關(guān)聯(lián)。這樣的編譯器指令需在模塊描述前定義,如下所示:
`timescale
1ns/100ps此語句說明時(shí),延時(shí)間單位為1ns并且時(shí)間精度為100ps(時(shí)間精度是指所有的時(shí)延必須被限定在0.1ns內(nèi))。如果此編譯器指令所在的模塊包含上面的連續(xù)賦值語句,#2代表2ns。如果沒有這樣的編譯器指令,VerilogHDL模擬器會指定一個(gè)缺省時(shí)間單位。IEEEVerilogHDL標(biāo)準(zhǔn)中沒有規(guī)定缺省時(shí)間單位。語言要素:標(biāo)識符所謂標(biāo)識別符就是用戶為程序描述中的Verilog對象所起的名字。模塊名、變量名、常量名、函數(shù)名、任務(wù)名標(biāo)識符必須以英語字母(a-z,A-Z)起頭,或者用下橫線符(_)起頭。其中可以包含數(shù)字、$符和下劃線符。標(biāo)識符最長可以達(dá)到1023個(gè)字符。模塊名、端口名和實(shí)例名都是標(biāo)識符。Verilog語言大小寫敏感,sel和SEL是兩個(gè)不同的標(biāo)識符。所有的關(guān)鍵詞都是小寫的。語言要素:系統(tǒng)任務(wù)和函數(shù)以$字符開始的標(biāo)識符表示系統(tǒng)任務(wù)或系統(tǒng)函數(shù)。任務(wù)可以返回0個(gè)或多個(gè)值,函數(shù)除只能返回一個(gè)值以外與任務(wù)相同。函數(shù)在0時(shí)刻執(zhí)行,即不允許延遲,而任務(wù)可以帶有延遲。常用于測試模擬,一般不用于源代碼設(shè)計(jì)。$display
("Hi,youhavereachedLTtoday"); /*$display系統(tǒng)任務(wù)在新的一行中顯示。*/$time //該系統(tǒng)任務(wù)返回當(dāng)前的模擬時(shí)間。語言要素:編譯指令以`(反引號)開始的某些標(biāo)識符是編譯器指令。`define和`undef,很像C語言中的宏定義指令`ifdef、`else和`endif,用于條件編譯`include文件既可以用相對路徑名定義,也可以絕對路徑`timescale編譯器指令將時(shí)間單位與實(shí)際時(shí)間相關(guān)聯(lián)。該指令用于定義時(shí)延的單位和時(shí)延精度。語言要素:值集合VerilogHDL有下列四種基本的值:0:邏輯0或“假”1:邏輯1或“真”x:未知z:高阻(x,z不區(qū)分大小寫)VerilogHDL中有三類常量:整型實(shí)數(shù)型字符串型語言要素:常量1.整數(shù)表達(dá)方式:<位寬>’<進(jìn)制><數(shù)字>:標(biāo)準(zhǔn)方式’<進(jìn)制><數(shù)字>:默認(rèn)位寬,與機(jī)器類型有關(guān)<數(shù)字>:不指明進(jìn)制默認(rèn)為十進(jìn)制進(jìn)制二進(jìn)制(b或B):8’b10101100,’b1010十進(jìn)制(d或D):4’d1543,512十六進(jìn)制(h或H):8’ha2八進(jìn)制(o或O):6’O41x和z值x:不確定:4’b100xz:高阻:16’hzzzz,沒有驅(qū)動(dòng)元件連接到線網(wǎng),線網(wǎng)的缺省值為z。語言要素:常量負(fù)數(shù):在位寬表達(dá)式前加一個(gè)減號,如-8’d5減號不可以放在位寬和進(jìn)制之間,也不可以放在進(jìn)制和具體的數(shù)之間,如8’d-5下劃線:只能用在具體的數(shù)字之間,如16’b1010_1111_1010位數(shù)指的是二進(jìn)制位數(shù)。數(shù)位擴(kuò)展:(定義的長度比為常量指定的長度長)最高位是0、1,高位用0擴(kuò)展:8’b1111等于8’b00001111最高位是z、x,高位自動(dòng)擴(kuò)展:4’bz等于4’bzzzz數(shù)位截?cái)啵喝绻L度定義得更小,最左邊的位被截?cái)?,如?‘b1001_0011等于3’b011,5'H0FFF等于5'H1F語言要素:常量2.實(shí)數(shù)十進(jìn)制計(jì)數(shù)法;例如
2.0 5.68科學(xué)計(jì)數(shù)法;23_5.1e2其值為23510.0,忽略下劃線3.6E2其值為360.0(e與E相同)
實(shí)數(shù)通常不用于FPGA源代碼的常量語言要素:常量3.字符串字符串是雙引號內(nèi)的字符序列。字符串不能分成多行書寫。例如:
"INTERNALERROR"
"REACHED->HERE“用8位ASCII值表示的字符可看作是無符號整數(shù)。為存儲字符串“INTERNALERROR”,變量需要8*14位。reg
[1:8*14]Message;(Message=“INTERNALERROR“)字符串較少用于FPGA源代碼的常量語言要素:數(shù)據(jù)類型兩大類數(shù)據(jù)類型線網(wǎng)型寄存器型線網(wǎng)型包含下述不同種類的線網(wǎng)子類型wire //FPGA設(shè)計(jì)中,通常只用wire型triwortriorwandtriandtriregtri1tri0supply0supply1msb和lsb定義了范圍,并且均為常數(shù)值表達(dá)式。范圍定義是可選的;如果沒有定義范圍,缺省值為1位線網(wǎng)wireReset;wire[3:0]data_in;wire[3:2]select;wire[0:2]point;wire
[msb:lsb]reg1,reg2,...regN;語言要素:數(shù)據(jù)類型寄存器型5種不同的寄存器類型。reg
//FPGA設(shè)計(jì)中,通常只用reg型,默認(rèn)初始值x。integer//其他類型用于仿真timerealrealtimemsb和lsb定義了范圍,并且均為常數(shù)值表達(dá)式。范圍定義是可選的;如果沒有定義范圍,缺省值為1位寄存器reg
Reset;reg[3:0]data_in;reg[3:2]select;reg[0:2]point;reg
[msb:lsb]reg1,reg2,...regN;語言要素:數(shù)據(jù)類型存儲器存儲器是一個(gè)寄存器數(shù)組。存儲器使用如下方式說明reg[msb:lsb]memory1[upper1:lower1], memory2[upper2:lower2],...;reg[3:0]MyMem[63:0]//MyMem為64個(gè)4位寄存器的數(shù)組。regBog[1:5]//Bog為5個(gè)1位寄存器的數(shù)組。存儲器賦值不能在一條賦值語句中完成,寄存器可以。存儲器常用于FPGA外圍器件的仿真建模語言要素:數(shù)據(jù)類型存儲器賦值2)系統(tǒng)任務(wù)賦值reg
[3:0]RomB[7:0];$readmemb
("ram.patt",RomB);
Romb是存儲器。文件“ram.patt”必須包含二進(jìn)制值。文件也可以包含空白空間和注釋。下面是文件中可能內(nèi)容的實(shí)例。11011110100001110000100100110001語言要素:數(shù)據(jù)類型存儲器賦值1)對每個(gè)單元逐一賦值reg[0:3]Xrom[0:2];...Xrom[0]=4'hA;Xrom[1]=4'h8;Xrom[2]=4‘hF;語言要素:參數(shù)參數(shù)是一個(gè)常量,常用于定義時(shí)延和變量的寬度。parameterLINELENGTH=132;parameterALL_X_S=16'bx;parameterBIT=1,BYTE=8,PI=3.14;parameterSTROBE_DELAY=(BYTE+BIT)/2;參數(shù)值也可以在編譯時(shí)被改變。改變參數(shù)值可以使用參數(shù)定義語句或通過在模塊初始化語句中定義參數(shù)值語言要素:空白符、注釋除了字符串中的空白符,其他空白符編譯被忽略注釋多行注釋/**/(不允許嵌套)單行注釋//`1使用`timescale編譯器指令的目的是什么?2寫出產(chǎn)生下圖所示波形的變量BullsEye的初始化語句。3使用數(shù)據(jù)流描述方式編寫下圖所示的異或邏輯的VerilogHDL描述,并使用規(guī)定的時(shí)延。4下列表達(dá)式的位模式是什么?
7'o44,'Bx0,5'bx110,'hA0,10'd2,'hzF
表達(dá)式表達(dá)式由操作數(shù)和操作符組成;表達(dá)式可以在出現(xiàn)數(shù)值的任何地方使用;表達(dá)式是數(shù)據(jù)流描述的基礎(chǔ)。A&BAddr1[3:0]+Addr2[3:0]Count+1(a[0]^b[0])|(a[1]&~b[1])表達(dá)式:操作數(shù)操作數(shù)可以是以下類型中的一種:常數(shù)參數(shù)線網(wǎng)寄存器位選擇部分選擇存儲器單元函數(shù)調(diào)用表達(dá)式:操作數(shù)常數(shù)表達(dá)式中的整數(shù)值可被解釋為有符號數(shù)或無符號數(shù);如果整數(shù)是基數(shù)型整數(shù),作為無符號數(shù)對待。12 01100的5位向量形式 (有符號)-12 10100的5位向量形式 (有符號)5‘b01100 十進(jìn)制數(shù)12 (無符號)參數(shù)參數(shù)類似于常量,并且使用參數(shù)聲明進(jìn)行說明。例如parameter
LOAD=4'd12,STORE=4'd10;LOAD和STORE為參數(shù),值分別被聲明為12和10。表達(dá)式:操作數(shù)線網(wǎng)
線網(wǎng)中的值被解釋為無符號數(shù),表達(dá)式中可使用:標(biāo)量線網(wǎng)(1位)和向量線網(wǎng)(多位)。wire[3:0]led; //4位向量線網(wǎng)。wireline; //標(biāo)量線網(wǎng)。assignled=4‘ha;//被賦于位向量1010,為十進(jìn)制10。表達(dá)式:操作數(shù)寄存器
integer型的值被解釋為有符號的二進(jìn)制補(bǔ)碼數(shù),
reg型或time型的值被解釋為無符號數(shù),
real型和realtime的值被解釋為有符號浮點(diǎn)數(shù)。
reg[4:0]state;State=5‘b01011;//值為位向量01011,十進(jìn)制值11。State=9; //值為位向量01001,十進(jìn)制值9。為何沒有用assign語句賦值?表達(dá)式:操作數(shù)位選擇 位選擇從向量中抽取特定的位。形式如下:
net_or_reg_vector[bit_select_expr]State[1]&&State[4] //寄存器位選擇。led[0]|line //線網(wǎng)位選擇。如果選擇表達(dá)式的值為x、z或越界,則位選擇的值為State[x]值為x。(FPGA設(shè)計(jì)中禁用)表達(dá)式:操作數(shù)部分選擇net_or_reg_vector[msb_const_expr:lsb_const_expr]State[4:1] //寄存器部分選擇。 reg[4:0]state;led[2:0] //線網(wǎng)部分選擇。 wire[3:0]led;選擇范圍越界或?yàn)閤、z時(shí),部分選擇的值為x。(FPGA設(shè)計(jì)中禁用越界)表達(dá)式:操作數(shù)存儲器單元存儲器單元從存儲器中選擇一個(gè)memory[word_address] reg[7:0]Dram[63:0]; Dram[60]; //存儲器的第61個(gè)單元。不允許對存儲器變量值部分選擇或位選擇。
(思考:在存儲器中讀取一個(gè)位或部分選擇一個(gè)字?)函數(shù)調(diào)用
表達(dá)式中可使用函數(shù)調(diào)用。
$time+SumOfEvents(A,B) /*$time是系統(tǒng)函數(shù),并且SumOfEvents是在別處定義的用戶自定義函數(shù)。*/表達(dá)式:操作符VerilogHDL中的操作符可以分為下述類型:算術(shù)操作符關(guān)系操作符相等操作符邏輯操作符按位操作符歸約操作符移位操作符條件操作符連接和復(fù)制操作符表達(dá)式:操作符表達(dá)式:操作符除條件操作符從右向左關(guān)聯(lián)外,其余所有操作符自左向右關(guān)聯(lián)。A+B-C 等價(jià)于:(A+B)-C //自左向右A?B:C?D:F 等價(jià)于:A?B:(C?D:F) //從右向左圓擴(kuò)號能夠用于改變優(yōu)先級(A?B:C)?D:F表達(dá)式:操作符算術(shù)運(yùn)算符+(加)-(減)*(乘)
/(除)
%(取模)1)后三種不常用,是具體設(shè)計(jì)結(jié)構(gòu)而定;2)任意操作數(shù)是X或Z,那么整個(gè)結(jié)果為X;3)結(jié)果的長度由最長的操作數(shù)決定;4)reg和wire保存無符號數(shù)。表達(dá)式:操作符關(guān)系操作符有:>(大于)<(小于)>=(不小于)<=(不大于)1)關(guān)系操作符的結(jié)果為真(1)或假(0);2)如果操作數(shù)中有一位為X或Z,那么結(jié)果為X。習(xí)題:求下列表達(dá)式真值23>4552<8'hxFF'b1000>='b01110表達(dá)式:操作符等式運(yùn)算符(相等關(guān)系運(yùn)算符)==(邏輯相等)!=(邏輯不等)===(全等)!==(非全等)1)如果比較結(jié)果為假則結(jié)果為0,為真結(jié)果為1;2)在全等比較中,值x和z嚴(yán)格按位比較。===01xz==01xz01000010xx10100101xxx0010xxxxxz0001zxxxx習(xí)題:求下列表達(dá)式真值假定 Data=‘b11x0; Addr=‘b11x0;求 Data==Addr
Data===Addr表達(dá)式:操作符邏輯操作符有:&&(邏輯與)||(邏輯或)!(邏輯非)1)只對邏輯值運(yùn)算,結(jié)果一位,邏輯值1、0或x;2)對于向量操作,非0向量作為1處理;3)如果任意一個(gè)操作數(shù)包含x,結(jié)果也為x。習(xí)題:求下列表達(dá)式真值假定: C='b0;//0為假 D=‘b1;//1為真
A_Bus='b0110; B_Bus='b0110;求 C&&D C||D !D A_Bus&&B_Bus A_Bus||B_Bus !A_Bus表達(dá)式:操作符按位操作符有:?~(一元非)?&(二元與)?|(二元或)?^(二元異或)?~^或^~(二元異或非)操作數(shù)對應(yīng)位上按位操作,并產(chǎn)生向量結(jié)果。習(xí)題:求下列表達(dá)式真值假定 A='b0110; B='b0100;求 A|B A&B表達(dá)式:操作符歸約操作符有:&(歸約與)~&(歸約與非)| (歸約或)~|(歸約或非)^(歸約異或)~^(歸約異或非)在單一操作數(shù)的所有位上操作,并產(chǎn)生1位結(jié)果。習(xí)題:求下列表達(dá)式真值假定: A=‘b0110; B=‘b0100;
MyReg=4‘b01x0;求 ~&A ^A |B &B |MyReg ^MyReg
表達(dá)式:操作符移位操作符有:?<<(左移)>>(右移)1)左側(cè)操作數(shù)移動(dòng)右側(cè)操作數(shù)表示的次數(shù),邏輯移位,空閑位添0補(bǔ)位;2)如果右側(cè)操作數(shù)的值為x或z,移位操作的結(jié)果為x。應(yīng)用實(shí)例:使用移位操作為2-4解碼器建模wire[3:0]DecodeOut;assignDecodeOut=4'b1<<Address[1:0];習(xí)題:求Qreg的值假定: reg[7:0]Qreg;
Qreg=4'b0111;移位 Qreg>>2
表達(dá)式:操作符條件操作符根據(jù)條件表達(dá)式的值選擇表達(dá)式,形式: cond_expr?expr1:expr2三目運(yùn)算符wire[2:0]Student;assignStudent=Marks>18?Grade_A:Grade_C;表達(dá)式:操作符位拼接運(yùn)算符(連接和復(fù)制操作)連接操作:將小表達(dá)式合并形成大表達(dá)式的操作。形式:
{expr1,expr2,...,exprN}復(fù)制操作:指定重復(fù)次數(shù)來執(zhí)行操作。如下:
{repetition_number{expr1,expr2,...,exprN}實(shí)例:wire[7:0]Dbus,[11:0]Abus;assignDbus[7:4]={
Dbus[0],Dbus[1],Dbus[2],Dbus[3]
};assign
Abus={3{4'b1011}}; //位向量12'b1011_1011_1011)assign
Abus={{4{Dbus[7]}},Dbus}; /*符號擴(kuò)展*/習(xí)題2模塊與端口模塊:基本單元定義成模塊形式modulemodule_name(port_list); Declarations_and_Statementsendmodule端口隊(duì)列port_list列出了該模塊通過哪些端口與外部模塊通信。模塊與端口端口模塊的端口可以是
input(輸入端口)、output
(輸出端口)或者inout
(雙向端口);缺省的端口類型為wire型;output或inout能夠被重新聲明為reg型,但是input不可以;線網(wǎng)或寄存器必須與端口說明中指定的長度相同。模塊與端口例:moduleMicro(PC,Instr,NextAddr);//端口說明input[3:1]PC;output[1:8]Instr;inout[16:1]NextAddr;//重新說明端口類型:wire[16:1]NextAddr;//該說明是可選的,但如果指定了,就必須與它的端口說明保持相同長度。reg[1:8]Instr;//Instr已被重新說明為reg型,因此能在always語句或在initial語句中賦值。...endmodule模塊與端口模塊實(shí)語句一個(gè)模塊能夠在另外一個(gè)模塊中被引用,這樣就建立了描述的層次。模塊實(shí)例語句形式
module_nameinstance_name(port_associations);信號端口可以通過位置或名稱關(guān)聯(lián);但是關(guān)聯(lián)方式不能夠混合使用。端口官廉形式
port_expr //通過位置,隱式關(guān)聯(lián)
.PortName(port_expr) //通過名稱,顯示關(guān)聯(lián),強(qiáng)烈推薦!
port_expr可以是以下的任何類型:1)標(biāo)識符(reg型或wire型)2)位選擇3)部分選擇4)上述類型的合并5)表達(dá)式(只適用于input型信號)MicroM1
(
UdIn[3:0],{WrN,RdN},Status[0],Status[1],
&UdOut[0:7],TxData);模塊與端口使用兩個(gè)半加器模塊構(gòu)造全加器moduleHA(A,B,S,C);inputA,B;outputS,C;assignS=A^B;assignC=A&B;endmodulemoduleFA(P,Q,Cin,Sum,Cout);inputP,Q,Cin;outputSum,Cout;wireS1,C1,C2;HAh1(P,Q,S1,C1); //通過位置關(guān)聯(lián)。HAh2(.A(Cin),.S(Sum),.B(S1),.C(C2));//通過端口與信號的名字關(guān)聯(lián)。orO1(Cout,C1,C2); //或門實(shí)例語句endmodule考慮如何模塊參數(shù)化?模塊與端口使用兩個(gè)半加器模塊構(gòu)造全加器(模塊參數(shù)化)moduleHA(A,B,S,C);inputA,B;outputS,C;parameterAND_DELAY=1,XOR_DELAY=2;assign
#XOR_DELAYS=A^B;assign
#AND_DELAYC=A&B;endmodulemoduleFA(P,Q,Cin,Sum,Cout);inputP,Q,Cin;outputSum,Cout;parameterOR_DELAY=1;wireS1,C1,C2;HAh1(P,Q,S1,C1); //通過位置關(guān)聯(lián)。HAh2(.A(Cin),.S(Sum),.B(S1),.C(C2));//通過端口與信號的名字關(guān)聯(lián)。or
#OR_DELAYO1(Cout,C1,C2); //或門實(shí)例語句endmodule模塊與端口懸空端口通過將端口表達(dá)式表示為空白來指定為懸空端口DFFd1(.Q(QS),.Qbar(),.Data(D),.Preset(),.Clock(CK));端口長度不同通過無符號數(shù)的右對齊或截?cái)喾绞竭M(jìn)行匹配moduleChild(Pba,Ppy);input[5:0]Pba;output[2:0]Ppy;...endmodulemoduleTop;wire[1:2]Bdl;wire[2:6]Mpr;ChildC1(.Pba(Bdl),.Ppy(Mpr));endmodule模塊與端口模塊參數(shù)值改變1)參數(shù)定義語句(defparam)moduleTOP(NewA,NewB,NewS,NewC);inputNewA,NewB;outputNewS,NewC;defparamHa1.XOR_DELAY=5,//實(shí)例Ha1中的參數(shù)XOR_DELAY。Ha1.AND_DELAY=2;//實(shí)例Ha1中參數(shù)的AND_DELAY。HAHa1(NewA,NewB,NewS,NewC);endmodule模塊與端口模塊參數(shù)值改變2)帶參數(shù)值的模塊引用moduleTOP(NewA,NewB,NewS,NewC);inputNewA,NewB;outputNewS,NewC; HA#(5,2)Ha1(NewA,NewB,NewS,NewC);//第1個(gè)值5賦給參數(shù)AND_DELAY,該參數(shù)在模塊HA中說明。//第2個(gè)值2賦給參數(shù)XOR_DELAY,該參數(shù)在模塊HA中說明。endmodule模塊與端口外部端口顯式地指定外部端口。(較少使用)moduleScram_B(.Data(Arb),.Control(Ctrl),.Mem_Word(Mem_Blk),.Addr(Byte));input[0:3]Arb;inputCtrl;input[8:0]Mem_Blk;output[0:3]Byte;...endmodule習(xí)題31.模塊實(shí)例語句與門實(shí)例語句的區(qū)別是什么?2.當(dāng)端口懸空時(shí),即端口沒有被連接時(shí),端口的值是什么?3.用本章講述的模塊FA編寫執(zhí)行加法和減法的4位ALU的結(jié)構(gòu)模型。門級建模FPGA設(shè)計(jì)中較少使用VerilogHDL中提供下列內(nèi)置基本門:1)多輸入門:
and,nand,or,nor,xor,xnor2)多輸出門:
buf,not3)三態(tài)門:
bufif0,bufif1,notif0,notif14)上拉、下拉電阻:
pullup,pulldown5)MOS開關(guān):
cmos,nmos,pmos,rcmos,rnmos,rpmos6)雙向開關(guān):
tran,tranif0,tranif1,rtran,rtranif0,rtranif1用于定義原語(UDP)FPGA設(shè)計(jì)中通常不使用;UDP實(shí)例語句的語法與基本門的實(shí)例語句語法一致;UDP中可以描述組合電路和時(shí)序電路。PrimitiveD_Edge_FF(Q,Clk,Data);outputQ;regQ;inputData,Clk;initialQ=0;table //ClkDataQ(State)Q(next) (01)0:?:0;(01)1:?:1;(0x)1:1:1;(0x)0:0:0; //忽略時(shí)鐘負(fù)邊沿:
(?0)?:?:-; //忽略在穩(wěn)定時(shí)鐘上的數(shù)據(jù)變化
(??)?:?:-;endtableendprimitive數(shù)據(jù)流建模連續(xù)賦值用于數(shù)據(jù)流建模(描述),生成組合邏輯電路。連續(xù)賦值使用連續(xù)賦值語句assign語句,格式為:assignLHS_target=RHS_expression;例如wireZ1,Preset,Clear;//線網(wǎng)說明assign
Z1=Preset&Clear;//連續(xù)賦值語句wire[15:0]data_in;wire[15:0]data_tmp;wiredata_tmp={data_in[7:0],data_in[15:8]};數(shù)據(jù)流建模連續(xù)賦值語句在什么時(shí)候執(zhí)行呢?
只要在右端表達(dá)式的操作數(shù)上有事件發(fā)生(值變化),表達(dá)式立即被計(jì)算,新結(jié)果就賦給左邊的線網(wǎng)。連續(xù)賦值的目標(biāo)類型(左側(cè)操作數(shù)類型)1)標(biāo)量線網(wǎng) assignZ1=…;2)向量線網(wǎng) assigndata_tmp=…;3)向量的常數(shù)型位選擇assigndata_tmp[2]=…;4)向量的常數(shù)型部分選擇assigndata_tmp[7:0]=…;5)上述類型的任意的拼接運(yùn)算結(jié)果
assign{Z1,data_tmp[15]}=2’b10;數(shù)據(jù)流建模例:數(shù)據(jù)流描述的一位全加器moduleFA_Df(A,B,Cin,Sum,Cout);inputA,B,Cin;outputSum,Cout;assignSum=A^B^Cin;assignCout=(A&Cin)|(B&Cin)|(A&B);endmodule1)assign語句之間是并發(fā)的,與其書寫的順序無關(guān);2)線網(wǎng)的賦值可以在聲明時(shí)賦值,例如wireSum=A^B^Cin;數(shù)據(jù)流建模數(shù)據(jù)流建模的時(shí)延
assign
#2Sum=A^B^Cin;#2表示右側(cè)表達(dá)式的值延遲兩個(gè)時(shí)間單位賦給Sum;時(shí)間單位是多少?由誰來決定?`timescale1ns/100psFPGA設(shè)計(jì)中的時(shí)延僅在功能仿真時(shí)有效,不影響實(shí)際電路生成。數(shù)據(jù)流建模數(shù)據(jù)流建模注意事項(xiàng):1)wire型變量如果不賦值,默認(rèn)值為z;2)數(shù)據(jù)流建模沒有存儲功能,不能保存數(shù)據(jù);3)wire型變量只能在聲明時(shí)賦值或者assing語句賦值;4)assign語句并發(fā)執(zhí)行,實(shí)際的延遲又物理芯片的布線結(jié)果決定。5)最基本的FPGA設(shè)計(jì)源代碼描述語句之一,用于生成組合邏輯,定制LUT的邏輯功能。常作為中間信號的描述用于控制寄存器的輸入輸出。習(xí)題41.使用assign語句描述一個(gè)時(shí)鐘信號clk,頻率為100MHz。
assign#5clk=~clk;2.請指出下列語句是否合法?描述了怎樣的功能?assignMux=(S==0)?A:'bz;assignMux=(S==1)?B:'bz;assignMux=(S==2)?C:'bz;assignMux=(S==3)?D:'bz;行為建模過程賦值用于行為建模(描述)行為建模的主要機(jī)制:1)initial語句 主要用于仿真文件(模擬)2)always語句 用于源文件和仿真文件所有initial語句和always語句之間都是并發(fā)執(zhí)行;執(zhí)行順序與其在模塊中書寫順序無關(guān)。行為建模:initial語句initial語句只執(zhí)行一
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度餐飲泔水回收與環(huán)保設(shè)施投資合同3篇
- 二零二五年礦山土地及資源使用權(quán)轉(zhuǎn)讓合同3篇
- 二零二五版白糖進(jìn)口許可證申請代理服務(wù)合同下載2篇
- 二零二五年度駕駛員押運(yùn)員安全責(zé)任及培訓(xùn)合同3篇
- 二零二五版企事業(yè)單位節(jié)能環(huán)保辦公電腦采購合同2篇
- 二零二五版電子商務(wù)平臺借款及庫存商品質(zhì)押合同3篇
- 二零二五年紡織原料市場調(diào)研與分析合同2篇
- 小區(qū)下水管網(wǎng)清理疏通承包合同(2篇)
- 二零二五版房產(chǎn)買賣合同含抵押權(quán)轉(zhuǎn)移及貸款利率協(xié)商協(xié)議0183篇
- 2025年度農(nóng)業(yè)科技推廣財(cái)產(chǎn)贈與合同3篇
- 高中英語名詞性從句講解
- 計(jì)算機(jī)二級wps題庫及答案
- 整套課件:工業(yè)催化
- 爆破安全管理知識培訓(xùn)
- 旅游地理學(xué)教案
- 煤矸石綜合利用途徑課件
- 企業(yè)信息公示聯(lián)絡(luò)員備案申請表
- 衛(wèi)生部關(guān)于發(fā)布《綜合醫(yī)院組織編制原則試行草案》的通知((78)衛(wèi)醫(yī)字第1689號)
- 挑戰(zhàn)杯生命科學(xué)獲獎(jiǎng)作品范例
- 醫(yī)院崗位設(shè)置與人員編制標(biāo)準(zhǔn)
- 部編版八上語文古代詩歌鑒賞對比閱讀(含答案)
評論
0/150
提交評論