您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 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
本文标题:EDA技术与应用讲义 第7章 电子系统设计实践(二)
链接地址:https://www.777doc.com/doc-3516081 .html