基于Verilog實(shí)現(xiàn)的DDS任意波形發(fā)生器_第1頁
基于Verilog實(shí)現(xiàn)的DDS任意波形發(fā)生器_第2頁
基于Verilog實(shí)現(xiàn)的DDS任意波形發(fā)生器_第3頁
基于Verilog實(shí)現(xiàn)的DDS任意波形發(fā)生器_第4頁
基于Verilog實(shí)現(xiàn)的DDS任意波形發(fā)生器_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

簡易直接數(shù)字頻率合成器前端設(shè)計(jì)課程設(shè)計(jì)〔報(bào)告〕任務(wù)書〔理工科類〕Ⅰ、課程設(shè)計(jì)〔報(bào)告〕題目:簡易直接數(shù)字頻率合成器〔DDS〕前端設(shè)計(jì)Ⅱ、課程設(shè)計(jì)〔論文〕工作內(nèi)容一、課程設(shè)計(jì)目標(biāo)1、培養(yǎng)綜合運(yùn)用知識和獨(dú)立開展實(shí)踐創(chuàng)新的能力以及同組之間合作的能力;2、學(xué)習(xí)直接數(shù)字頻率合成器〔DDS〕相關(guān)知識,進(jìn)行系統(tǒng)構(gòu)架設(shè)計(jì)、模塊劃分和算法分析,并使用VerilogHDL設(shè)計(jì)一簡易直接數(shù)字頻率合成器,要求具有根據(jù)輸入的控制字的不同輸出不同頻率的正弦信號的功能;3、能夠?qū)Ψ治?、測試、解決實(shí)際的數(shù)字電路問題加深理解,學(xué)以致用,增強(qiáng)動手能力,為今后能夠獨(dú)立進(jìn)行設(shè)計(jì)工作打下一定的根底;二、研究方法及手段應(yīng)用1、學(xué)習(xí)直接數(shù)字頻率合成器〔DDS〕相關(guān)知識,確定電路需要實(shí)現(xiàn)的功能,分別編寫各個(gè)功能模塊,主要有相位累加器模塊、正弦查詢表模塊和主模塊;2、利用仿真軟件測試各個(gè)模塊功能的正確性;3、將各模塊綜合起來,實(shí)現(xiàn)整體功能并采用軟件驗(yàn)證;三、課程設(shè)計(jì)預(yù)期效果1、完成實(shí)驗(yàn)環(huán)境搭建;2、完成DDS的功能設(shè)計(jì)與綜合;3、完成modelsim軟件仿真,確定程序代碼正確性;4、在理論學(xué)習(xí)和具體實(shí)踐中到達(dá)對DDS的正確理解。學(xué)生姓名:毛石磊專業(yè)年級:電子科學(xué)與技術(shù)2023級摘要直接數(shù)字頻率合成技術(shù)(DirectDigitalSynthesize,DDS)是繼直接頻率合成技術(shù)和鎖相式頻率合成技術(shù)之后的第三代頻率合成技術(shù)。它采用全數(shù)字技術(shù),并從相位角度出發(fā)進(jìn)行頻率合成。目前,DDS的設(shè)計(jì)大多是應(yīng)用HDL(HardwareDescriptionLanguage)對其進(jìn)行邏輯描述,整個(gè)設(shè)計(jì)可以很容易地實(shí)現(xiàn)參數(shù)改變和設(shè)計(jì)移植,給設(shè)計(jì)者帶來很大的方便。VerilogHDL就是其中一種標(biāo)準(zhǔn)化的硬件描述語言,它不僅可以進(jìn)行功能描述,還可以對仿真測試矢量進(jìn)行設(shè)計(jì)。此次課程設(shè)計(jì)只做軟件局部,不做硬件實(shí)現(xiàn),而DDS最重要的軟件組成模塊是相位累加模塊和相位幅值轉(zhuǎn)化模塊〔ROM〕。本設(shè)計(jì)最重要的任務(wù)就是就是用verilogHDL編寫相位累加模塊和ROM表,然后利用modelsim實(shí)現(xiàn)模塊的綜合與仿真,最終實(shí)現(xiàn)功能。【關(guān)鍵詞】DDS相位累加ROM表ABSTRACTDirectDigitalfrequencysynthesistechnology(DirectDigitalSynthesize,DDS)isthethirdgenerationfrequencysynthesistechnologyafterDirectfrequencysynthesistechnologyandphaselocktypesynthesistechnology.Itusesthedigitaltechnologytoachievefrequencysynthesisfromthephase’perspective.Atpresent,thedesignofDDSmostlyapplicatesHDL(HardwareDescriptionLanguage)tomaketheDescriptionlogic,andthewholedesigncaneasilyachieveparameterschangeanddesigntransplantation,whichgivesthedesigneralotofconvenience.VerilogHDLisoneofthestandardizationofthehardwaredescriptionlanguage,itnotonlycandescribefunction,italsocandescribethesimulationtestvector.Thecoursedesignonlyhasthepartofsoftware,andthemostimportantpartofsoftwarecomponentsoftheDDSisthephaseaccumulativemoduleandPhase/amplitudetransformationmodule(ROM).ThemostimportanttaskofthisdesignistousetheverilogHDLtowritephaseaccumulatemoduleandROMtable,thenusemodelsimtocompletesynthesizeandsimulation,andfinallyachievethefunction.【Keywords】DDSPhaseaccumulateROMtable第一章系統(tǒng)設(shè)計(jì)第一節(jié)課題目標(biāo)及總體方案DDS技術(shù)具有頻率切換時(shí)間短,頻率分辨率高,頻率穩(wěn)定度高,輸出信號的頻率和相位可以快速切換,輸出相位可連續(xù),并且在改變時(shí)能夠保持相位的連續(xù),很容易實(shí)現(xiàn)頻率、相位和幅度的數(shù)字控制。它在相對帶寬、頻率轉(zhuǎn)換時(shí)間、相位連續(xù)性、高分辨率以及集成化等一系列性能指標(biāo)方面遠(yuǎn)遠(yuǎn)超過了傳統(tǒng)頻率合成技術(shù)。因此在現(xiàn)代電子系統(tǒng)及設(shè)備的頻率源設(shè)計(jì)中,尤其在通信領(lǐng)域,直接數(shù)字頻率合成器的應(yīng)用越來越廣泛。本組根據(jù)查閱了相關(guān)的資料后,總結(jié)出了要實(shí)現(xiàn)DDS需要的幾點(diǎn)關(guān)鍵技術(shù):rom查找表:通過實(shí)現(xiàn)使用matlab或者C語言等數(shù)學(xué)工具將所需的波形采樣成為一個(gè)個(gè)離散的點(diǎn),存儲到rom查找表中,以便于通過相位累加的過程得到的地址取得這些采樣點(diǎn)。相位累加器:通過送入一個(gè)頻率控制字〔控制相位變化的步長值〕,在參考時(shí)鐘的驅(qū)動下進(jìn)行累加,得到地址信號,傳遞給rom查找表以得到相對應(yīng)的采樣點(diǎn);還可以通過輸入一個(gè)相位控制字來調(diào)整波形的初始相位,但本組的作品不涉及相位控制。數(shù)模轉(zhuǎn)換:由于通過rom查找表得到的信號是離散的采樣點(diǎn),必須通過DA轉(zhuǎn)換器才能變成連續(xù)變化的模擬量,同時(shí),由于產(chǎn)生的波形中含有很多高階的雜波,導(dǎo)致產(chǎn)生的波形會有很多毛刺,通過在DA后加一級低通濾波電路可以濾掉雜波,得到一個(gè)比擬理想的正弦波。第二節(jié)直接數(shù)字頻率合成技術(shù)簡介頻率控制是現(xiàn)代通信技術(shù)中很重要的一環(huán),能夠獲得寬帶(頻率控制范圍寬)、快速(轉(zhuǎn)換時(shí)間快)、精細(xì)(分辨率高)、雜散小(頻譜純)的頻率控制信號一直是通信領(lǐng)域中的一個(gè)重要研究內(nèi)容,。直接數(shù)字頻率合成(DDS)技術(shù)是從相位概念出發(fā)直接合成所需波形的一種新的頻率合成技術(shù),具有頻率分辨率高、頻率變換速度快、相位可連續(xù)線性變化等優(yōu)點(diǎn),在基于數(shù)字信號處理的現(xiàn)代通信頻率控制中已被廣泛采用??傮w方案實(shí)現(xiàn)及系統(tǒng)框圖根據(jù)以上分析,可以得出本組的系統(tǒng)框圖如下所示:在該DDS電路組成上,包括基準(zhǔn)時(shí)鐘、頻率累加器、相位累加器、幅度/相位轉(zhuǎn)換電路。頻率累加器對輸入信號進(jìn)行累加運(yùn)算,產(chǎn)生頻率控制數(shù)據(jù),相位累加器對代表頻率的M位二進(jìn)制碼進(jìn)行累加運(yùn)算,產(chǎn)生后面波形存儲器所需的查表地址,幅度/相位轉(zhuǎn)換電路實(shí)際上就是一個(gè)波形存儲器,供查表使用,讀出數(shù)據(jù)送人D/A轉(zhuǎn)換器和低通濾波器。但是本次課程設(shè)計(jì)中我們只做前端設(shè)計(jì),最后經(jīng)D/A轉(zhuǎn)換器和低通濾波器將波形數(shù)據(jù)轉(zhuǎn)換成所需要的模擬波形不實(shí)現(xiàn)。系統(tǒng)設(shè)計(jì)原理框圖如下:頻率頻率控制字M相位存放器正弦查詢表相位累加器+時(shí)鐘fcfout相位地址圖1.1系統(tǒng)設(shè)計(jì)原理框圖二、直接數(shù)字頻率合成技術(shù)原理相位累加器由N位全加器和N位累加存放器級聯(lián)而成,可對頻率控制字的二進(jìn)制碼進(jìn)行累加運(yùn)算,是典型的反應(yīng)電路。正弦查找表的數(shù)據(jù)存放在ROM中,內(nèi)部存有一個(gè)時(shí)鐘脈沖,相位存放器以步長M遞增。相位存放器的輸出結(jié)果的高位局部作為正(余)弦查找表的一個(gè)周期的正弦波信號的數(shù)字幅度信息,每個(gè)查找表的地址對應(yīng)于正弦波中0°~360°范圍內(nèi)的一個(gè)相位點(diǎn)。查找表把輸入的址信息映射成正(余)弦波的數(shù)字幅度信號,輸出周期性離散正弦信號。DDS具體工作過程如下:每來一個(gè)時(shí)鐘脈沖clk,N位全加器將頻率控制數(shù)據(jù)M與累加存放器輸出的累加相位數(shù)據(jù)N相加,把相加后的結(jié)果送至累加存放器的輸入端。累加存放器一方面將上一時(shí)鐘周期作用后所產(chǎn)生的新的數(shù)據(jù)反應(yīng)到加法器的輸入端,以使加法器在下一時(shí)鐘的作用下繼續(xù)與頻率控制數(shù)據(jù)M相加;另一方面將這個(gè)值作為取樣地址值送入幅度/相位轉(zhuǎn)換電路,此電路根據(jù)取樣地址輸出相應(yīng)的波形數(shù)據(jù)。假設(shè)有一個(gè)頻率為f的余弦信號st=cos?zπft,現(xiàn)以采樣頻率f其中Tc=1f為采樣周期。上式對應(yīng)的相位序列為:φn=2πf由上式可以知道如果將2π的相位等分為M份,那么頻率為f=K∕MfC的余弦信號以頻率fc采樣后,其量化序列的樣本之間的量化相位增量為一個(gè)可調(diào)的值Δφn=2πKM,通過改變K的值可以實(shí)現(xiàn)相位以不同的步長值增長。將f=本設(shè)計(jì)所基于的理論技術(shù)就是這些,事實(shí)上,現(xiàn)在的DDS普遍都是采用這樣的方法來實(shí)現(xiàn)的。我們小組查閱了很多相關(guān)的文檔,其中無一不是采用了類似的查找表的方式實(shí)現(xiàn),所以本小組也采用了該方法。但是在設(shè)計(jì)時(shí)應(yīng)注意的問題是,根據(jù)信號采樣的原理可知,輸入信號和輸出信號的頻率必須滿足如下關(guān)系才能保證采樣可恢復(fù):f因此,如果相位累器的地址范圍為N位〔2N〕,即采樣點(diǎn)為每周期2N個(gè)采樣點(diǎn)。那么輸入的頻率控制字最大值為2N-1此時(shí)輸出最大頻率為f三、系統(tǒng)組成模塊簡介1、頂層模塊頂層模塊是系統(tǒng)程序的主模塊,它負(fù)責(zé)將fom查找表、相位累加等模塊組裝在一起,通過調(diào)用的關(guān)系使它們組合成為一個(gè)有機(jī)的整體。在頂層模塊中,定義了參考時(shí)鐘的輸入,復(fù)位端口,波形輸出、頻率控制字等。2、相位累加器模塊相位累加器是決定系統(tǒng)性能的關(guān)鍵局部,主要是利用頻率控制字和相位控制字來累加出尋址地址。相位累加器在基準(zhǔn)頻率信號clk的控制下以頻率控制字data為步長進(jìn)行累加運(yùn)算,產(chǎn)生需要的頻率控制數(shù)據(jù),在時(shí)鐘的控制下把累加的結(jié)果作為波形存儲器ROM的地址,實(shí)現(xiàn)對波形存儲器ROM的尋址。由于相位累加模塊通過C語言實(shí)現(xiàn)比擬容易,故我們沒有單獨(dú)成立一個(gè)模塊,而是將它集成到了頂層模塊的一個(gè)always語句塊中:case(choose_wave)2'b00:beginsin_ena<=1'b1;cos_ena<=1'b0;sawtooth_ena<=1'b0;triangle_ena<=1'b0;if(ADD_B>256)ADD_B<=0;//關(guān)鍵代碼,實(shí)現(xiàn)相位累加的功能elseADD_B<=ADD_A+ADD_B;end2'b01:begincos_ena<=1'b1;sin_ena<=1'b0;sawtooth_ena<=1'b0;triangle_ena<=1'b0;if(ADD_B>256)ADD_B<=0;//關(guān)鍵代碼,實(shí)現(xiàn)相位累加的功能elseADD_B<=ADD_A+ADD_B;end2'b10:beginsin_ena<=1'b0;cos_ena<=1'b0;sawtooth_ena<=1'b1;triangle_ena<=1'b0;if(ADD_B>256)ADD_B<=0;//關(guān)鍵代碼,實(shí)現(xiàn)相位累加的功能elseADD_B<=ADD_A+ADD_B;end2'b11:beginsin_ena<=1'b0;cos_ena<=1'b0;sawtooth_ena<=1'b0;triangle_ena<=1'b1;if(ADD_B>256)ADD_B<=0;//關(guān)鍵代碼,實(shí)現(xiàn)相位累加的功能elseADD_B<=ADD_A+ADD_B;enddefault:beginADD_B<=9'b0;sin_ena<=1'b0;cos_ena<=1'b0;sawtooth_ena<=1'b0;triangle_ena<=1'b0;endendcase在程序中還出現(xiàn)了一個(gè)變量〔wave_choose〕這是一個(gè)用來選擇所要輸出波形的一個(gè)變量,通過它可以控制輸出的波形種類〔正弦波,余弦波,三角波,鋸齒波〕。但是由于在設(shè)計(jì)的時(shí)候沒有考慮到存在負(fù)值的影響,導(dǎo)致最后綜合的結(jié)果不正確,經(jīng)過詢問老師知道修改方法是將rom查找表中所有采樣點(diǎn)的電壓負(fù)值全部抬高,消除負(fù)值,但是由于時(shí)間的原因沒有來得及修改,也不知道方案修改的結(jié)果。3、查找表本模塊實(shí)現(xiàn)的是一個(gè)rom存貯器,用于存儲采樣的波形數(shù)據(jù),并提供地址查找的功能。具體實(shí)現(xiàn)的過程:首先使用數(shù)學(xué)工具計(jì)算得到波形采樣點(diǎn),生成mif文件導(dǎo)入數(shù)據(jù)采樣點(diǎn),給每一個(gè)采樣點(diǎn)分配地址,并提供外部尋址的接口,此過程可以通過QuartasⅡ來輔助完成由于我們組的設(shè)計(jì)時(shí)在modelsim下進(jìn)行的,modelsim面向的是仿真,它不會產(chǎn)生所謂的“rom〞這種實(shí)際的電路,所以我們沒有采用這樣的方法,而是簡單的使用case語句來實(shí)現(xiàn)。雖然這樣也能得到預(yù)期的效果,但是它卻沒有真正的生成一個(gè)“rom〞,根據(jù)我組的綜合結(jié)果來看,使用case語句生成的是一個(gè)與輸入相關(guān)的復(fù)雜的邏輯網(wǎng)絡(luò),而不是rom那樣有一定規(guī)那么的電路結(jié)構(gòu)。一下是我們使用C語言產(chǎn)生采樣點(diǎn)的程序:voidmain(){ inti,j=0;; FILE*fp; fp=fopen("data.txt","w"); for(i=0;i<=256;i++){ //j=255*sin(2*3.14159/256*i)+0.5;//四舍五入 fprintf(fp,"i=%d,\tj=%d\n",i,j); } fclose(fp);}第二章結(jié)果與討論第一節(jié)實(shí)驗(yàn)中遇到的問題 本次課設(shè)整體來說還是比擬簡單的,但是還是碰到些難以解決的問題。其中,最大的問題就是綜合的結(jié)果不正確,我們組就一直卡在那里找不到原因,后來經(jīng)過老師的查閱才找到原因:我們r(jià)om查找表中含有負(fù)值,由于Verilog編程經(jīng)驗(yàn)缺乏,沒有注意到這一點(diǎn),所以導(dǎo)致了問題的出現(xiàn)。 另外還有一些缺乏的地方,我們的查找表使用的是case語句,不能生成真正的rom;第二,我們沒有對查找表做優(yōu)化,其中存儲的是整個(gè)波形周期的采樣點(diǎn),其實(shí),對于有一定周期的正弦函數(shù)而言,我們只需要存儲它的四分之一個(gè)周期的數(shù)據(jù),然后通過相位翻轉(zhuǎn)等實(shí)現(xiàn)整個(gè)波形的復(fù)原,這樣可以節(jié)省存儲空間,然而我們由于能力有限,不能實(shí)現(xiàn)相關(guān)文檔中所述的方法。第二節(jié)實(shí)驗(yàn)結(jié)論以上就是本小組查閱資料學(xué)習(xí)的成果,經(jīng)過編碼,調(diào)試后,在modelsim下仿真得到了預(yù)期的結(jié)果,以下是仿真截圖。圖2.1正弦波仿真結(jié)果〔choose_wave=00〕圖2.2余弦波仿真結(jié)果〔choose_wave==01〕圖2.3三角波仿真結(jié)果〔choose_wave=10〕圖2.4鋸齒波仿真結(jié)果〔choose_wave=11〕由仿真圖可以看出,在modelsim下所有功能都能夠正確實(shí)現(xiàn),前仿真順利實(shí)現(xiàn)。后仿真時(shí)由于沒有綜合得到正確的結(jié)果,故不貼出仿真結(jié)果截圖。以下是綜合報(bào)告。由。于篇幅有限,在這里只能貼出局部報(bào)告。1〕延時(shí)信息****************************************Report:timing-pathfull-delaymax-max_paths1-sort_bygroupDesign:rom_sinVersion:D-2023.03-SP2Date:FriJun2815:23:452023****************************************OperatingConditions:typicalLibrary:typicalWireLoadModelMode:topStartpoint:wr_data_reg[0](risingedge-triggeredflip-flopclockedbyCLK_0)Endpoint:wr_data[0](outputportclockedbyCLK_0)PathGroup:CLK_0PathType:maxPointIncrPath-----------------------------------------------------------clockCLK_0(riseedge)0.000.00clocknetworkdelay(ideal)0.000.00wr_data_reg[0]/CK(DFFRHQXL)0.000.00rwr_data_reg[0]/Q(DFFRHQXL)0.230.23rwr_data[0](out)0.000.23rdataarrivaltime0.23clockCLK_0(riseedge)5.005.00clocknetworkdelay(ideal)0.005.00outputexternaldelay-2.003.00datarequiredtime3.00-----------------------------------------------------------datarequiredtime3.00dataarrivaltime-0.23-----------------------------------------------------------slack(MET)2.77*****EndOfReport*****2〕constraint****************************************Report:constraint-verboseDesign:rom_sinVersion:D-2023.03-SP2Date:FriJun2815:26:022023****************************************Startpoint:wr_data_reg[0](risingedge-triggeredflip-flopclockedbyCLK_0)Endpoint:wr_data[0](outputportclockedbyCLK_0)PathGroup:CLK_0PathType:maxPointIncrPath-----------------------------------------------------------clockCLK_0(riseedge)0.000.00clocknetworkdelay(ideal)0.000.00wr_data_reg[0]/CK(DFFRHQXL)0.000.00rwr_data_reg[0]/Q(DFFRHQXL)0.230.23rwr_data[0](out)0.000.23rdataarrivaltime0.23clockCLK_0(riseedge)5.005.00clocknetworkdelay(ideal)0.005.00outputexternaldelay-2.003.00datarequiredtime3.00-----------------------------------------------------------datarequiredtime3.00dataarrivaltime-0.23-----------------------------------------------------------slack(MET)2.77Net:n382max_transition3.00-TransitionTime0.39------------------------------Slack2.61(MET)Net:n331max_capacitance0.16-Capacitance0.01------------------------------Slack0.15(MET)Design:rom_sinmax_area0.00-CurrentArea7970.05------------------------------Slack-7970.05(VIOLATED)*****EndOfReport*****面積****************************************Report:areaDesign:rom_sinVersion:D-2023.03-SP2Date:FriJun2815:25:162023****************************************Library(s)Used:typical(File:/apps/library/SMIC018Digital/synopsys/typical.db)Numberofports:21Numberofnets:370Numberofcells:358Numberofreferences:26Combinationalarea:7341.364857Noncombinationalarea:628.689606NetInterconnectarea:undefined(Nowireloadspecified)Totalcellarea:7970.054462Totalarea:undefined*****EndOfReport*****以下是綜合后的截圖圖2.5綜合后的門級網(wǎng)表圖2.6綜合后的門級網(wǎng)表第三章心得與體會 感覺對于我來說,每次課程設(shè)計(jì)都是一次學(xué)習(xí)的時(shí)機(jī)。因?yàn)槊看味紩龅揭恍┳约簭膩頉]有遇到的問題??赡苁怯捎谧约鹤龅臇|西比擬少的緣故吧,碰到的各種反常的情況很有限,導(dǎo)致了自己解決問題的能力也有限??偟膩碚f這次課設(shè)還是很有意義的,至少我又碰到一個(gè)案例,相信在以后的實(shí)踐過程中我就會防止再出現(xiàn)這樣的問題,這樣就可能會更早地實(shí)現(xiàn)我想要的結(jié)果。 這次課設(shè)讓我又一次加深了對verilog語言的理解,并且在由verilog這種純軟件的東西變成硬件的東西的過程中又對軟硬件的工作過程有更深層次的理解。而且我還做了之前verilog課程設(shè)計(jì)沒有接觸過的一個(gè)流程——那就是綜合。當(dāng)我看到自己寫的程序編程一個(gè)個(gè)邏輯門的連接的時(shí)候,感覺自己離集成電路又近一步了。參考文獻(xiàn)【1】齊懷龍,楊力生FPGA《實(shí)現(xiàn)任意波形發(fā)生器》萬方數(shù)據(jù)庫文章編號1008-1739〔2023〕3、4-92-3【2】余鴻洲哈爾濱理工大學(xué)碩士學(xué)位論文《基于DDS技術(shù)的函數(shù)波形發(fā)生器設(shè)計(jì)》萬方數(shù)據(jù)庫【3】欒佳明,張秀娟山東科技大學(xué)《基于FPGA的可調(diào)信號發(fā)生器》文章編號1674-6236〔2023〕05-0095-03附錄源程序在這里給出了主模塊和sin函數(shù)查找表兩個(gè)模塊,由于它們實(shí)現(xiàn)了課設(shè)要求的功能,而且另外幾個(gè)波形的rom查找表與sin查找表類似,就是改了一下采樣點(diǎn)的數(shù)據(jù),在此由于篇幅限制,就不貼上了。附錄1:主模塊moduleDDS(clk,rst,data,choose_wave,we,data_out);inputclk;inputrst;input[1:0]choose_wave;inputwe;//loadfrequencycontrlwordinput[8:0]data;//frequencyoutput[8:0]data_out;//waveout//romaddressreg[8:0]ADD_A;reg[8:0]ADD_B;regsin_ena;regcos_ena;regsawtooth_ena;regtriangle_ena;reg[8:0]data_out;wire[8:0]sine_d;wire[8:0]cosine_d;wire[8:0]sawtooth_d;wire[8:0]triangle_d;wire[8:0]rom_ad;assignrom_ad=ADD_B;always@(posedgeclkornegedgerst)beginif(!rst)beginADD_A<=9'd0;endelsecase(we)1'b1:ADD_A<=data;1'b0:ADD_A<=9'd0;default:ADD_A<=9'd0;endcaseendalways@(posedgeclkornegedgerst)beginif(!rst)beginADD_B<=9'b0;sin_ena<=1'b0;cos_ena<=1'b0;sawtooth_ena<=1'b0;triangle_ena<=1'b0;endelsebegincase(choose_wave)2'b00:beginsin_ena<=1'b1;cos_ena<=1'b0;sawtooth_ena<=1'b0;triangle_ena<=1'b0;if(ADD_B>256)ADD_B<=0;elseADD_B<=ADD_A+ADD_B;end2'b01:begincos_ena<=1'b1;sin_ena<=1'b0;sawtooth_ena<=1'b0;triangle_ena<=1'b0;if(ADD_B>256)ADD_B<=0;elseADD_B<=ADD_A+ADD_B;end2'b10:beginsin_ena<=1'b0;cos_ena<=1'b0;sawtooth_ena<=1'b1;triangle_ena<=1'b0;if(ADD_B>256)ADD_B<=0;elseADD_B<=ADD_A+ADD_B;end2'b11:beginsin_ena<=1'b0;cos_ena<=1'b0;sawtooth_ena<=1'b0;triangle_ena<=1'b1;if(ADD_B>256)ADD_B<=0;elseADD_B<=ADD_A+ADD_B;enddefault:beginADD_B<=9'b0;sin_ena<=1'b0;cos_ena<=1'b0;sawtooth_ena<=1'b0;triangle_ena<=1'b0;endendcaseendendalways@(posedgeclk)begincase(choose_wave)2'b00:begindata_out<=sine_d;end2'b01:begindata_out<=cosine_d;end2'b10:begindata_out<=sawtooth_d;end2'b11:begindata_out<=triangle_d;enddefault:begindata_out<=9'b0;endendcaseendrom_sinrom_sin1(.address(rom_ad),.clock(clk),.ena(sin_ena),.wr_data(sine_d));rom_cosrom_cos1(.address(rom_ad),.clock(clk),.ena(cos_ena),.wr_data(cosine_d));rom_trianglerom_triangle1(.address(rom_ad),.clock(clk),.ena(triangle_ena),.wr_data(triangle_d));rom_sawtoothrom_sawtooth1(.address(rom_ad),.clock(clk),.ena(sawtooth_ena),.wr_data(sawtooth_d));endmodule附錄2:sin函數(shù)查找表modulerom_sin(address,clock,wr_data,ena);input[8:0]address;inputclock;inputena;output[8:0]wr_data;reg[8:0]wr_data;always@(posedgeclock)if(ena)begincase(address)0:beginwr_data<=0;end 1:beginwr_data<=6;end 2:beginwr_data<=13;end 3:beginwr_data<=19;end 4:beginwr_data<=25;end 5:beginwr_data<=31;end 6:beginwr_data<=37;end 7:beginwr_data<=44;end 8:beginwr_data<=50;end 9:beginwr_data<=56;end 10:beginwr_data<=62;end 11:beginwr_data<=68;end 12:beginwr_data<=74;end 13:beginwr_data<=80;end 14:beginwr_data<=86;end 15:beginwr_data<=92;end 16:beginwr_data<=98;end 17:beginwr_data<=103;end 18:beginwr_data<=109;end 19:beginwr_data<=115;end 20:beginwr_data<=120;end 21:beginwr_data<=126;end 22:beginwr_data<=131;end 23:beginwr_data<=136;end 24:beginwr_data<=142;end 25:beginwr_data<=147;end 26:beginwr_data<=152;end 27:beginwr_data<=157;end 28:beginwr_data<=162;end 29:beginwr_data<=166;end 30:beginwr_data<=171;end 31:beginwr_data<=176;end 32:beginwr_data<=180;end 33:beginwr_data<=185;end 34:beginwr_data<=189;end 35:beginwr_data<=193;end 36:beginwr_data<=197;end 37:beginwr_data<=201;end 38:beginwr_data<=205;end 39:beginwr_data<=208;end 40:beginwr_data<=212;end 41:beginwr_data<=215;end 42:beginwr_data<=219;end 43:beginwr_data<=222;end 44:beginwr_data<=225;end 45:beginwr_data<=228;end 46:beginwr_data<=230;end 47:beginwr_data<=233;end 48:beginwr_data<=236;end 49:beginwr_data<=238;end 50:beginwr_data<=240;end 51:beginwr_data<=242;end 52:beginwr_data<=244;end 53:beginwr_data<=246;end 54:beginwr_data<=247;end 55:beginwr_data<=249;end 56:beginwr_data<=250;end 57:beginwr_data<=251;end 58:beginwr_data<=252;end 59:beginwr_data<=253;end 60:beginwr_data<=254;end 61:beginwr_data<=254;end 62:beginwr_data<=255;end 63:beginwr_data<=255;end 64:beginwr_data<=255;end 65:beginwr_data<=255;end 66:beginwr_data<=255;end 67:beginwr_data<=254;end 68:beginwr_data<=254;end 69:beginwr_data<=253;end 70:beginwr_data<=252;end 71:beginwr_data<=251;end 72:beginwr_data<=250;end 73:beginwr_data<=249;end 74:beginwr_data<=247;end 75:beginwr_data<=246;end 76:beginwr_data<=244;end 77:beginwr_data<=242;end 78:beginwr_data<=240;end 79:beginwr_data<=238;end 80:beginwr_data<=236;end 81:beginwr_data<=233;end 82:beginwr_data<=231;end 83:beginwr_data<=228;end 84:beginwr_data<=225;end 85:beginwr_data<=222;end 86:beginwr_data<=219;end 87:beginwr_data<=216;end 88:beginwr_data<=212;end 89:beginwr_data<=209;end 90:beginwr_data<=205;end 91:beginwr_data<=201;end 92:beginwr_data<=197;end 93:beginwr_data<=193;end 94:beginwr_data<=189;end 95:beginwr_data<=185;end 96:beginwr_data<=181;end 97:beginwr_data<=176;end 98:beginwr_data<=171;end 99:beginwr_data<=167;end 100:beginwr_data<=162;end 101:beginwr_data<=157;end 102:beginwr_data<=152;end 103:beginwr_data<=147;end 104:beginwr_data<=142;end 105:beginwr_data<=137;end 106:beginwr_data<=131;end 107:beginwr_data<=126;end 108:beginwr_data<=121;end 109:beginwr_data<=115;end 110:beginwr_data<=109;end 111:beginwr_data<=104;end 112:beginwr_data<=98;end 113:beginwr_data<=92;end 114:beginwr_data<=86;end 115:beginwr_data<=80;end 116:beginwr_data<=74;end 117:beginwr_data<=68;end 118:beginwr_data<=62;end 119:beginwr_data<=56;end 120:beginwr_data<=50;end 121:beginwr_data<=44;end 122:beginwr_data<=38;end 123:beginwr_data<=32;end 124:beginwr_data<=25;end 125:beginwr_data<=19;end 126:beginwr_data<=13;end 127:beginwr_data<=7;end 128:beginwr_data<=0;end 129:beginwr_data<=-5;end 130:beginwr_data<=-11;end 131:beginwr_data<=-17;end 132:beginwr_data<=-24;end 133:beginwr_data<=-30;end 134:beginwr_data<=-36;end 135:beginwr_data<=-42;end 136:beginwr_data<=-48;end 137:beginwr_data<=-54;end 138:beginwr_data<=-61;end 139:beginwr_data<=-67;end 140:beginwr_data<=-73;end 141:beginwr_data<=-79;end 142:beginwr_data<=-84;end 143:beginwr_data<=-90;end 144:beginwr_data<=-96;end 145:beginwr_data<=-102;end 146:beginwr_data<=-108;end 147:beginwr_data<=-113;end 148:beginwr_data<=-119;end 149:beginwr_data<=-124;end 150:beginwr_data<=-130;end 151:beginwr_data<=-135;end 152:beginwr_data<=-140;end 153:beginwr_data<=-145;end 154:beginwr_data<=-151;end 155:beginwr_data<=-155;end 156:beginwr_data<=-160;end 157:beginwr_data<=-165;end 158:beginwr_data<=-170;end 159:beginwr_data<=-174;end 160:beginwr_data<=-179;end 161:beginwr_data<=-183;end 162:beginwr_data<=-188;end 163:beginwr_data<=-192;end 164:beginwr_data<=-196;end 165:beginwr_data<=-200;end 166:beginwr_data<=-204;end 167:beginwr_data<=-207;end 168:beginwr_data<=-211;end 169:beginwr_data<=-214;end 170:beginwr_data<=-217;end 171:beginwr_data<=-221;end 172:beginwr_data<=-224;end 173:beginwr_data<=-227;end 174:beginwr_data<=-229;end 175:beginwr_data<=-232;end 176:beginwr_data<=-234;end 177:beginwr_data<=-237;end 178:beginwr_data<=-239;end 179:beginwr_data<=-241;end 180:beginwr_data<=-243;end 181:beginwr_data<=-245;end 182:beginwr_data<=-246;end 183:beginwr_data<=-248;end 184:beginwr_data<=-249;end 185:beginwr_data<=-250;end 186:beginwr_data<=-251;end 187:beginwr_data<=-252;end 188:beginwr_data<=-253;end 189:beginwr_data<=-253;end 190:beginwr_data<=-254;end 191:beginwr_data<=-254;end 192:beginwr_data<=-254;end 193

溫馨提示

  • 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

提交評論