实验四硬件电子琴电路设计.docx
- 文档编号:8660871
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:21
- 大小:416.17KB
实验四硬件电子琴电路设计.docx
《实验四硬件电子琴电路设计.docx》由会员分享,可在线阅读,更多相关《实验四硬件电子琴电路设计.docx(21页珍藏版)》请在冰豆网上搜索。
实验四硬件电子琴电路设计
《FPGA》课程报告设计题目:
学生班级:
学生学号:
学生姓名:
指导教师:
时间:
成绩:
硬件电子琴电路设计
一、实验目的:
学习利用数控分频器设计硬件电子琴实验。
二、实验原理:
主系统由3个模块组成,例1是顶层设计文件,其内部有三个功能模块(如图1
所示):
Speakera.v例4)和ToneTaba.v例3),NoteTabs.v例2)。
模块ToneTaba是音阶发生器,当8位发声控制输入Index中某一位为高电平时,则对应某一音阶的数值将从端口Tone输出,作为获得该音阶的分频预置值;同时由Code输出对应该音阶简谱的显示数码,如‘5'并由High输出指示音阶高8
度显示。
模块Speakera中的主要电路是一个数控分频器,它由一个初值可预置的加法计数器构成,当模块Speakera由端口Tone获得一个2进制数后,将以此值为计数器的预置数,对端口Clk12MHZ输入的频率进行分频,之后由Spkout向扬声器输出发声。
增加一个NoteTabs模块用于产生节拍控制(Index数据存留时间)和音阶选择信号,即在NoteTabs模块放置一个乐曲曲谱真值表,由一个计数器的计数值来控制此真值表的输出,而由此计数器的计数时钟信号作为乐曲节拍控制信号,从而可以设计出一个纯硬件的乐曲自动演奏电路。
三、实验过程:
1.分别输入ToneTaba.v和Speakera.v的VerilogHDL文本:
其中ToneTaba.v的代码是:
=I訂口eMrnnULA亠JiFoSF.Tnne
』*■
WPJCr"烹Hesu
D專P8S301004盟
OJZPUXMMaE】
Dunpm『40+fiQ】mdsJ
Tns器5nc&^
晋QTU
百箱s§£HgzLI"L監Eu0-IadheKFlMErftQJL口
孟dKIhQexJI
**IS」・boOHoA■gm
■gl百
■■bollMI匕Bf営OQ••Eg*哼bsa*・su口2m
speakera.vsK;^^-
•■bela尸nSAOrp■■Elb-ri-r”■■bc«l;l3-ggIRn“be註口„ErriQMcl■■beflp"FA1.B叫rrlb口HMGyqLp■■rr苗四严誑
HM*令一】占lM駐匸一・sI门口ftAwlH.trmQCJocloloHT吕nmHOMDgilmMQn・A冒一一/&廿」)101口1lcHHO»?
^^-WM2soaMOMOHnsx*一二b1EO101£00HElsecb1HdtriQH1Do□口◎10YgeTlfPCH110C3H。
H8X4^^MMQSOSMMOHnKAiMM^MMOOMOMOHHOMOO^A—ITtrm00口吕口0rtffllMTtr醫01loccloQ-o
aoft*Aino^Aft
-—^OB■一3-E2】」■laGISAk普警n存。
席討:
一-4.■日吕qi』tu暮;i.*g—.占SQWJUQ切匸二g;蹲ph』:
■bseK苕冥■幕岂匸g」」—JnErQ口SJfLL也crA-^-ITiJJli託H—£卜0『
—.4二"I.占Q口一話曽弓{L总防sb.4^■tlcKZ*Klab具■HE1“味£t
■r*i4ilw"h*£001M岸3A.F1*bH*—"・■■«
Ho&prt5f:
rlJa片EHR(门Ik:
*TD口IT*5忙疔5inwtirlcllc":
mpllrfLlo“2Tcmmzoucpub5巧挥・"
mHmgPHeclm
9HrtQ呵匚一Isplcs"
HoHes3"0一counrtM
1】.reg〔10“OJCQUnrtll"
12r巾gCOLnlcz"
13reg5*O1C5“
14
14aJ-wa^m^-JPDSeclgeQllc》
16tregin
17iHl(caunc山¥11】XEnImPHeQLlcANl・tTl“
19ccmnrl血AM1*
hjoeyd
MHelseb-mgin
22pHecl片 23counMAWCOUncm古•柑1“ B& 25end 27alwayag(posedge 23if(Count11>=11・HYFF)begin 29Count11<=Tone; 30FullSFkS<-1・bl; 31end 32elsebegin 33Countll<_Countll+lrbl; 34Full5p]c5<: =0; 35end 36end 37 3Salways@(posedgeFullSpkS)begin 39Count2<—€0011^2; 40if(Count2=l・匕1)SpkS<=l'bl; 41elseSpfcS^l^O; 42end 43 44 45 4石endmodule 然后写testbench方针文件,进行方针: ToneTaba.v的testbench文件代码是: 1'timescaleIns/Ips 2moduletestbench_ToneTaba; 3_ 4//Inputs 5reg[3: 0]Index; 6 //Outputswire wire [3: 0]Code;High; 10 wire[10: 0]Tone; 11 12 //InsranriatetheUnitUnder 13 ToneTabauut( 14 •Index(Index)9 15 .Code(Code). 16 .High(High), 17 .Tone(Tone) 18 ); 19 20 initialbegin 21 //InitializeInputs 22 Index=0; 23 24 //Wait100nsforglobal 25 #100begin 26 Index=0; 27 end 28 #100begin 29 Index=1; 30 end 31 #100begin 32 Index=2; 33 end Test reset (UUT) tofinish tlOObegin Index=3;end #100begin Index-E;end f100begin Index=7;end #100begin Index=8;end #100begin Index■9;end #100begin Index-10;end #100begin Index=12;end #100begin Index=13;end f100beginIndex=15; end //Addstimulushere end endir.odule 仿真图形是: Speakera.v的testbench文件代码是: 3 4 5 6 7 fl 9 10 1112 13 14 15 1617IS19NO2122 23 24 25 26272E 29 30 31 32 33 34 35 36 373S I'tiitescaleIns/IpsmoduleEesubench_Spea)cera; //Inputs 工亡gClk; reg[10: 0]Tone; //Outputs wireSpkS; //Ins匸arrtia/tErheUnitUnderTe: sz(UUT)Speakersuut( ・Clk(Clk), .Tone(Tone)t ・SpkS(5pXS) initialbegin //InitializeInpurs Clk=0; Tone■0; //Wait100nsforglobalresettofinish#100begin Clk=1; Tone-20€7; end #100begin Tone-1723; end #100begin Ione■ices; end //Addstjjt.uIlibhere end en 仿真图形如下: 2•首先打开电脑上的记事本,按照COE文件的格式要求输入《梁祝》音乐,并存盘。 39J8 15 59362 i—l _INITIALIZATION_RADIX二10;_INITIALIZATION_VECTOR= 3,3,3,5,5,5,6,8,8, 9,6,&5,5』12,12,12, 12,10,12,9,9,9,9t 0,9,9,9,10,匚7, 55,d&&9,9, 8.6, 5,6,8 5,5$ 』5,5,10,IQ 10,12, 6,&5,5, 3,3, 5,6, J玄 』6』6,5,6, &Sj ‘12JO,9,9,10, 9,&& 3,3,3,3*8>8,8;&,6.5,3,5,6,8,5,5, 新建一个IPcore: BMMFile ■;■! ・・;■・uafM・m・in・・』・・・r・・mii・w.・m・a;i・ ^tnerator&ArcniteCtureWn£fV*vww^WWWH*WHWWWVWWWWWWWWWWWWWWWWWVWWI! WWWWW RIP(COREGenL._ll.1二WJlMEMFilt对Schematic ImptemenUTiOnCOhttraintSFiltf*StateDpagram冋T总覺Emnj/.'j.T*srm =*UierDoCumert MVftrilogModule矽veri.QjT^stFixture陆『I4DLMccu.eQVHDLLibrary 5VmOLPackage MoreInfo 5, 9』 S3 Filenamej Mutic Location: EJFRGA.'20105381-sender •Addtoproject Carne _AutQ^iQtiMELIdd_striaL ・SiiicElemerts QConftparaton 一: 匚LUAr --1MemoryEiernents QBlockMemoryGeneratory27 匚DistritotedMemoryGe^e-at-r^34 勺DutlPortBlockM*moryv£_3 IS1Registers.ShiftersiPip^lining Co™irmutiicati^jritT*Er.\Drkiflg -'n^*HIfrAy^fifirA^rti^ jtitjrvInfo *R*uk W玳* Cdncei 选择ReadOnly 存储器位宽: Width为4,深度: Depth为256按Next继续设定 訂刊佔QCort|qConlacl SinglePortBlockMemory CornmnscirhhmnMw4e «-PwtSrtlpuraiMi ADDR DOILTT» 怖Writ* •R・强Only — 厂MtnwySiui 1 mtgh|4 Wvii^ftangtt256 — Dtptfl(2M ^shaRjungt2S4B570 CLK 1 i-Moat PageSof4 钩选LoadInitFile 点击LoadFile•按键,装载初始文件Music.coe 点击Generate按键生成ROM的 IPCORE 输入NoteTabs.v文件,实现按照4HZ频率循环读取ROM的音乐节拍、频率信号。 2 moduleNateTabs(ClkfTanelndex,clr □ 4 }* inp'jtCllcfclr; 5 dutp^jt[3: 0]Tonelndex; 巧 reg[7: 0]Counter; 7 always®(posedgeClkorposedgeclr) S if(clr) 9 CountezK—S*bOOOOOOOO; 10 else 11 begin 12 if{Counter>=138)Counter<=8rb0OOOOOOO; 13 elseCounte^^CounEer+l1bl; 14 end 15 Mu3zcu5(.addr(亡oun匸Et}” 16 17 ・dout(Tonelndex^); 1S endrr.odule NoteTabs.v的testbench文件代码是: 7 B 9 10 11 12 13 14 15 16 17 IS 19 20 21 22 23 24 23 26 27 26 29 仿真图形如下: |Ltirrescal^Ins/Ips ireduletestbenchWoteTibs; //Inputs xegCllc; reqclr; //Outputs wire[3: 0]Toneindex; //InstantiatetheUnitUnderTest(UUT)NoteTabsuut( .cik(cik), .Toneindex(Tanelndex}, .clx(clr) initialbegin //InitializeInputs Clk-0; clr-0; #40clr=l; #40clr=0; //Wait100nsforglobalreseutofinishforever#40ClJc=*Clk; //AddBtimulushere end endiLodule 3.输入div_50_12M.v、div_50_4HZ.v的VerilogHDL文本: 其中div_50_12M.v 的代码是: iLodulediv5012M(elk,elk12M,reset inpLi匸clkfreset;outputclk_12M;reg[1: 01count; regelk12M;parameterN=^;initial count<=l; always®(posedgeelk)begin iflreset) begincounc<=l;clk_12M<=0;end elseif(count-=3) clk_12M<—C1JC12M;coun匸c二2; e^d else begin eoLiii匸GuoLirrd;end end endnr.odjle 7 S 9 10 11 12 13 IT 15 1€ 17 IS 19 20 21 22 23 24 25 26 27 23 div504HZ.v的代码如下: 5 6 7 S 9 10 11 12 13 14 15 1€ 17 18 19 20 21 22 23 2弓 25 27 23 modulediv_50_4HZ(clkfclk_4HZ,reset); incutelk,reset; outputclk_4HZ; reg[23: 0]count; regclk_4HZ; parairetezN=125OOO0O; initial count<=l: always0(posedgeelk} begin if(reset) begincount<=-l;clk_4HZ<=0;end elseif(count==(N/2+1))begin clk_4HZ<—alk_4HZ;count<-2; end else begin count<=count+1; end end endmodule div5012M.v的testbench文件代码是: modulediv_12; regclk_S0M=11b0;wirecllc_12M; regresec; 仿真图像如下: 写顶层文件将上面的模块例化在一起: 2ooctidEmoa冒亡r口昶》上色百EE*色丄,日丄口話ifSpjfduu 3): 勺elJt_5DM; $inpvtresets 4[3: 0]Ccde1; outputfpkuut; BwiEe(lOfO)Tiine; 5wireO;0jTonelndcx; 10wirecllr_^HZyClk_12M: 11Nor电Tat)日uOCCiir,,T0nelDd*K(Tonelndeatj,.clr[jflaerf\i 12ToneTabaul[・Index[ZaEielndex}t+Code(Codel)*.High*・Tone(Tone)); 13Spealcerau2i.Cli(=1)£_12H)*.Tdm(Tane).Spt5-Spoilt}); 14di¥_50_12MU3(ClDM,C1K_1JH.工七*亡匕||= 15div&04HZu4(dkSOM,elk4KZrn«»t>; 16en^jddul^ 最后执行综合。 4•执行完上述步骤后,进行索引脚操作 锁引脚完成后,编辑、修改约束文件: 1: StartofConstraintsgeneratedbyPACE 2 3tPACE: StartofPACEI/OPinAssignrr.entB 4 5 NET叱1忙_500 NETT,Codel<0> LOC-e匚却R; "LOC="F12r,; € NETr-CodeL □LOC="E15H; 7 NET"Codel<2> ”LOC-"Ell"; 3 NET"Codel<3> "LOC=nFllH; 9 NETh,Hig-hLr, LOC=; 10 NET LOC-"DIE"; 11 NET吒口也W LOC=nD7H; 12 13 #PACT: Start cfPACEAreaConstraints 14 15 ♦PACE: Starv ofPACEProhibi匸Consrraints 17 #PACE: Endof ConstraintsgeneratedbyPAGE 1-o 5•生成下载配置文件,下载到开发板进行经行验证。 四、思考题: 1电路上应该满足哪些条件,才能用数字器件直接输出的方波驱动扬声器发声? 答: 电路上应当满足输出的频率在扬声器的工作范围之内,且驱动电流能够驱动扬声器。 2、如果演奏其他乐曲,程序应做哪些方面的改动? 答: Music模块要改掉,改成相应乐曲的谱调。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 硬件 电子琴 电路设计
![提示](https://static.bdocx.com/images/bang_tan.gif)