EDA技术与应用讲义 第7章 电子系统设计实践(二)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第7章电子系统设计实践(二)EDA技术与应用课程讲义下一章上一章本章内容1.正弦信号发生器2.8位硬件乘法器设计3.乐曲硬件演奏电路设计正弦信号发生器目的:学会使用LPM模块,ROM模块。原理:如何用FPGA硬件实现?Y=sin(x)x:0~2π有2个方法:1.台劳级数展开,sin运算变成乘加运算,硬件实现乘加运算。2.查表法。硬件查表查表法的正弦信号发生器必须先解决的2个问题:1.在FPGA中如何存储正弦函数表?使用LPM_ROM宏模块2.如何得到y=sinx函数的关系表用高级语言程序计算用excel表计算(最为简单)正弦信号发生器:设计步骤1.用excel计算y=sinx的数值。2.编辑*.mif文件,保存步骤一计算的结果3.定制用于存储mif文件的LPM_ROM模块4.编写对LPM_ROM模块进行查表的代码5.编译、仿真测试6.完毕用excel计算y=sinx的数值X的取值范围,变化步长(分辨率)X(0~63)输入A=x*2*3.1415926/64折算的角度(弧度)B=SIN(A)正弦值C=(1+B1)*127.5折算0~255量程数0000127010.0981726880.841470985234020.1963495380.909297427243030.2945180630.141120008145·········FE6.086835663-0.73918069733FF6.1848793130.1673557148计算过程参见:正弦数据的EXCEL表mif文件格式1.DEPTH=64;%Memorydepthandwidtharerequired%2.WIDTH=8;%Enteradecimalnumber%3.ADDRESS_RADIX=HEX;%Addressandvalueradixesareoptional%4.DATA_RADIX=HEX;%EnterBIN,DEC,HEX,orOCT;unless%5.%otherwisespecified,radixes=HEX%6.--Specifyvaluesforaddresses,whichcanbesingleaddressorrange7.CONTENT8.BEGIN9.[0..F]:3FFF;%Range--Everyaddressfrom0toF=3FFF%10.6:F;%Singleaddress--Address6=F%11.8:FE5;%Rangestartingfromspecificaddress--%12.END;%Addr[8]=F,Addr[9]=E,Addr[A]=5%本例中的mif文件的内容1.DEPTH=64;2.WIDTH=8;3.ADDRESS_RADIX=DEC;--HEX4.DATA_RADIX=DEC;--HEX5.CONTENT6.BEGIN7.0:127;8.1:234;9.2:243;10.3:145;11.4:31;12.5:5;13.6:91;14.7:211;15.8:253;16.………17.61:4;18.62:33;19.63:148;20.END;详细参见:P196_EX7_12_SINDATAMif文件的2种编辑方法1.对话窗下输入FILE-NEW-OTHERFILES-MEMORYINITIALIZATIONFILE2.任何文本编辑器直接输入,要注意格式定制用于存储mif文件的LPM_ROM模块进入:Tools-MegaWizardPlug-InManager设置LPM_ROM的数据位和地址宽度指定ROM要保存的mif文件名称最终自动生成的LPM_ROM文件如下1.ENTITYsindataIS2.PORT(address:INSTD_LOGIC_VECTOR(5DOWNTO0);3.inclock:INSTD_LOGIC;4.q:OUTSTD_LOGIC_VECTOR(7DOWNTO0));5.ENDsindata;6.ARCHITECTURESYNOFsindataIS7.SIGNALsub_wire0:STD_LOGIC_VECTOR(7DOWNTO0);8.COMPONENTlpm_rom9.GENERIC(lpm_width:NATURAL;10.lpm_widthad:NATURAL;11.lpm_address_control:STRING;12.lpm_outdata:STRING;13.lpm_file:STRING);14.PORT(address:INSTD_LOGIC_VECTOR(5DOWNTO0);15.inclock:INSTD_LOGIC;16.q:OUTSTD_LOGIC_VECTOR(7DOWNTO0));17.ENDCOMPONENT;18.BEGIN19.q=sub_wire0(7DOWNTO0);20.lpm_rom_component:lpm_rom21.GENERICMAP(LPM_WIDTH=8,22.LPM_WIDTHAD=6,23.LPM_ADDRESS_CONTROL=REGISTERED,24.LPM_OUTDATA=UNREGISTERED,25.LPM_FILE=./p196_ex7_12_sindata.mif)26.PORTMAP(address=address,27.inclock=inclock,28.q=sub_wire0);29.ENDSYN;编写对LPM_ROM模块进行查表的代码1.ENTITYSINGTIS2.PORT(CLK:INSTD_LOGIC;3.DOUT:OUTSTD_LOGIC_VECTOR(7DOWNTO0));4.ENDSINGT;5.ARCHITECTUREDACCOFSINGTIS6.COMPONENTSINADATA7.PORT(address:INSTD_LOGIC_VECTOR(5DOWNTO0);8.inclock:INSTD_LOGIC;9.q:OUTSTD_LOGIC_VECTOR(7DOWNTO0));10.SIGNALQ1:STD_LOGIC_VECTOR(5DOWNTO0);11.BEGIN12.PROCESS(CLK)13.BEGIN14.IFCLK'EVENTANDCLK='1'THEN15.Q1=Q1+1;;16.ENDIF;17.ENDPROCESS;18.U1:SINDATAPORTMAP(adress=Q1,=DOUT,inclock=CLK);19.ENDARCHITECTUREDACC;8位硬件乘法器设计:目的1.掌握用FPGA实现数学运算的方法2.了解快速乘法器设计的问题3.训练大型VHDL代码的分析和阅读的技巧4.加深对VHDL语法和电路设计方法的理解8位硬件乘法器设计:方法1.快速硬件的乘法器是FPGA应用的重要课题2.高档FPGA器件具有硬件乘法器模块3.FPGA中实现硬件乘法器的方法有4种:①移位累加乘法器②查询表乘法器③Booth乘法器④加法器树结构乘法器参考:基于FPGA的乘法器实现结构分析与仿真移位累加乘法器过程同一般心算过程根据被乘数为“1”或“0”来决定乘数的移位和累加运算例子:D7D6D5D4D3D2D1D0部分积dec乘数0101被乘数1010000000010110000010010150问题:速度如何?3位查询表乘法器0000010100111001011101110000000000000101234567010024681012140110369121518211000481216202428101051015202530351100612182430364211107142128354249问题:1:速度如何?2:存储容量?乘数积被乘数本例子的方法采用移位相加乘法器移位相加乘法器的设计要点1.设置一个保存乘积的寄存器.位数:16(2*N)2.移位(i)的实现:直接使用高2N-i位乘积和被乘数相加3.无需2*N加法,实际只需要N位加法.我们来看看代码的实现?移位累加乘法器:框图移位累加乘法器:代码1.8位右移寄存器p246_ex8_24_experiment8_1_SREG8B1.8位加法器p246_ex8_25_experiment8_1_ADDER8B2.1位乘法器p246_ex8_26_experiment8_1_ANDARITH3.16位锁存器p247_ex8_27_experiment8_1_REG16B4.运算控制模块p247_ex8_28_experiment8_1_ARICTL5.8位乘法器顶层模块p248_ex8_29_experiment8_1_MULTI8X8本试验思考1.根据顶层模块,分析各模块的作用和相互关系,画出模块间的连接电路图2.该代码中,乘数和被乘数如何产生的,乘积如何观察?,时钟CLK信号连接在如何,写出信号连接过程,引脚指配信息。可用图形和表格标识3.编译配置下载,设置不同的乘数和被乘数,记录乘积,并观察和是否正确?4.如何测试该乘法器运算所需要的时间,从代码分析中得到的结果是多少?如何测试最短的运算时间?乐曲硬件演奏电路设计:目的1.学习数控分频器的应用2.学习FPGA中ROM模块的使用3.训练大型VHDL代码的分析和阅读的技巧4.加深对VHDL语法和电路设计方法的理解乐曲硬件演奏电路设计:原理用ROM存储乐谱数据乐谱数据包括2个内容:1.音符的音调(也就信号的频率)2.音符的发声时间长短用ROM存储乐谱数据格式1.音符的音调系数(共13个,表示13个音调)2.时间长短:音调的重复存储来表达。音调数据1.WIDTH=4;2.DEPTH=256;3.ADDRESS_RADIX=DEC;4.DATA_RADIX=DEC;5.CONTENTBEGIN6.00:3;7.01:3;8.02:3;9.03:3;10.04:5;11.05:5;12.06:5;13.07:6;14.············15.137:0;16.138:0;17.END音调3重复4拍乐曲硬件演奏电路设计:框图乐曲硬件演奏电路设计:VHDL代码顶层控制模块Songer(p252_ex8_30_experiment8_2_SONGER)乐谱读取模块:NoteTabs(p254_ex8_33_experiment8_2_NoteTabs)乐谱和音频信号频率查表模块:ToneTaba(p253_ex8_32_experiment8_2_ToneTaba)音频输出模块:Speakera(p252_ex8_31_experiment8_2_Speakera)乐谱文件p255_ex8_34_experiment8_2_musicdata乐曲硬件演奏电路设计:实验内容实验内容1:1.编译适配以上3个示例文件,给出仿真波形,最后进行下载和硬件测试实验。建议使用实验电路模式“3”(附图1-5),用短路帽选择“CLOCK9”的输入频率选择12MHz,此信号作为系统输入信号CLK12MHZ;键8至键1作为INDEX输入信号控制各音阶;选择数码管1显示琴音简谱码,发光管D1显示高8度。2.在原设计的基础上,增加一个NOTETABS模块(如图8-15所示),用于产生节拍控制(INDEX数据存留时间)和音阶选择信号,即在NOTETABS模块放置一个乐曲曲谱真值表,由一个计数器的计数值来控制此真值表的输出,而由此计数器的计数时钟信号作为乐曲节拍控制信号,从而可以设计出一个纯硬件的乐曲自动演奏电路。试完成此项设计,并在EDA实验系统上的FPGA目标器件中实现之。思考题1:1.例8-27中的进程DelaySpkS对扬声器发声有什么影响?2.在电路上应该满足哪些条件,才能用数字器件直接输出的方波驱动扬声器发声?TheendTheend.以下内容为正文的引用,可不阅读。返回STD_LOGIC的取值1.TYPEstd_ulogicIS('U',--Uninitia

1 / 35
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功