




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
八位乘法器的设计汪明2080130204信号与信息处理乘法是算术运算中经常用到的一个运算单元,所以在算法实现中会经常用到乘法。由于乘法器具有一定的复杂性,考虑到面积等因素,很多传统的处理器中都不包含乘法器单元乘法则是通过算法换算成加法和移位在处理器中进行实现,针对这些处理器编写程序的时候应尽量少的应用乘法运算。随着DSP技术的逐步发展,目前大多数高性能的处理器中都包含了乘法器运算单元,但仍有很多小型的控制型处理器不包含这一单元,所以设计面积小、速度快、性能稳定的乘法器模块仍然很有意义。本实验的目的是选用一种设计方案设计一个八位乘法器,利用XINLINXISE软件进行VHDL程序的编写,然后对程序进行仿真验证,并对所设计的乘法器进行评价。1原理分析与方案选择乘法器的设计有多种方案,有模拟乘法器、数字乘法器两种类型,前者主要是利用模拟器件对模拟信号进行乘法的设计,复杂度较高,后者则是通过数字器件来实现数字信号的乘法。本实验利用FPGA设计数字乘法器件,根据数字信号的乘法运算准则,又有串行和并行两种设计方法,串行设计时被乘数从低位到高位串行输入,乘法结果从低位到高位串行输出,其常用的结构(四位乘法器)如下图(1)所示;并行乘法器的输入/输出采用并行的方式,通常情况下计算性能比串行的好。图1四位串行乘法器结构本文采用并行输入/输出方式来进行乘法器的设计。下面以4位二进制数的乘法为例,对二进制乘法运算的过程(图2示)进行说明。由图2可知,如果对中间部分一行一行的处理,则乘法部分由一个个的2输入与门与二输入全加器组成,将这些结构联合在一起组成如图3所示的结构。b3b2b1b0TOC\o"1-5"\h\za3a2ala0 xa0•b3a0•b2a0•bla0•b0
al•b3al•b2al•blal•b0 +a2•b3a2•b2a2•bla2•b0 +a3•b3a3•b2a3•bla3•b0 +pro(7)pro(6)pro(5)pro(4)pro(3)pro(2)pro(l) pro(0)图2四位二进制乘法过程
从图3三个层结构完全相同。在设计的时候,首先设计二位与门与二位全加器,然后构成组成上述结构的三种不同的模块,进而构造三种层的结构,用模块设计的方法完成乘法器的设计。上图指的是4位乘法器的结构模型,根据乘法运算规则,很容易推广到八位的情况。本实验将采用这种方法来进行八位乘法器的设计。2模块分析与VHDL程序的编写本设计采用元件(component)的设计方法,将二输入与门、二输入全加器、图3中三种不同的方框结构以及三种不同的层结构设计为元件,存储在元件库中,然后在设计乘法器的过程中直接调用这些模块实现乘法的功能。二输入与门与二输入全加器从上面的结构图中可以看出,二输入的与门是该结构中用的最频繁的一个元件之一,二输入与门的VHDL语言非常简单,其源代码如图4示。二输入全加器full_adder即以带进位的加法器,通过全加的准则,也很容易写出全加器的VHDL代码,代码如图5示。设置适当的波形,对这两个模块进行仿真验证,很容易证明元件设计的正确性,由于这两个元件都很简单,故不再描述仿真结果。在完成仿真后,将这两个元件添加进元件库my_compopnents中,以便以后其它结构进行调用。-coiTLponentat_Ld_2 project:8-bit-coiTLponentat_Ld_2 project:8-bitlibraryIEEE;useIEEE.STD_LOGIC_1164.libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_^:ITH.ALL:useIEEE.STD_LOGIC_UNSIGtIED.ALL;entit27:md_2isport(.ajb:instd_logic;y:outstd_logic);end日nd_2;architectureBehavioralof:di_Ld_2isbegin:mdb:endBel_Lavioral;图4二输入与门的VHDL代码元件包libraryIEEE:useIEEE.STD_LOGIC_1164.ALL:useIEEE.STD_LOGIC_ARITH.ALL:useIEEE.STD_LOGIC_UNSIGNED.ALL::ent full_adderisporti:bjcin:instd_logic;Sjcout:outstd_logic);endfull_adder;architectureEehavioraloffull_adderisbegins<=azorbzorcin;cout<=(a:di_Ldb)or(a注门己cin)or(b^ndcin);endEehavioral;图5二输入全加器的VHDL代码此次乘法器的设计采用的是component的方法,故像上面的两个元件等要添加到元件包中,所以需要一个存放元件的元件包。在这里,我们通过设计package文件的方法将所有可能用到的元件放入元件包my_components中,其源代码如图6所示。从图中可以看出,其包含二输入与门、二输入全加器、top_row、mid_row、low_row共5个元件。libraryIEEE;useIEEE.STD_L0GIC_1164.allpackagemy_componentsiscomponentand_2isport(Sjb:instd_logic;y:outstd_logic):endcomponent;componentfull_adderisport(ajbjcin:instd_logic;cout:outstd_logic)endcomponent;componenttop_rowisport(a:instd_logic:b:instd_logic_vector(7dournto0);soutjcout:outstd_logic_vector(6doimto0)p:outstd_logic);endcomponent;componentmid_rowisport(a:instd_logic:b:instd_logic_vector(7downto0):sin,cin:instd_logic_vector(6doimto0)soutjcout:outstd_logic_vector(6doimto0)p:outstd_logic);endcomponent;componentlow_rowisport(sirijcin:instd_logic_vector(6doimto0):
p:outstd_logic_vector(7doimto0));endcomponent;endmy_components;图6元件包my_components顶层、中间层及底层模块从结构图中可以看出,乘法器的结构中包含三个大的模块,即顶层结构(top_row)、
中间层结构(mid_row)和底层结构(low_row)。在上一节的元件包中,已将这三种模块
的接口写进了元件包my_components。这三种模块的结构都不一样,顶层图中主要包含的是
二输入与门、中间层中则二输入与门和二输入全加器、底层则只有全加器,对这三种结构分
libraryIEEE;别进行VHDL程序的编写(注意程序中需用到二输入与门与二输入全加器,故在头文件库中应该添加语句:usework.my_components.ALL;),代码如图7、8、libraryIEEE;IEEE.STD_L0GIC_1164.ALL;IEEE.STD_LOGIC_ARITH.ALL;IEEE.STD_LOGIC_UNSIGNED.ALLwork.my_components.ALL;entitytop_rowisport(a:instd_logic:b:instd_logic_vector(7doimto0):soutcout:outstd_logic_vector(6doimto0):p:outstd_logic):endtop_row;architecturestructuralofegmU1:componentU2architecturestructuralofegmU1:componentU2:componentU3:componentU4:componentU5:componentU6:componentU7:componentU8:componentP
,0?
,0?,0?endstructural:cout⑹<cout⑸<cout⑷<cout⑶<cout(2)<cout(1)<cout(0)<IQIQIQIQIQIQIQIQttttttttrrrrrrrroooo_u_u_u_upppppppptop_rowismap(ajb(7)jsout⑹);map(a,b⑹,sout⑸);map(a,b⑸,sout⑷);mapb⑷,sout(3));map(a.jb⑶,sout⑵);mapb(2)jsout⑴);mapb(1)jsout(0));map(a,b(0)p);图7顶层模块的VHDL程序libraryIEEE;IEEE.STD_LOGIC_1164.ALL;IEEE.STD_LOGIC_ARITH.ALL;IEEE.STD_LOGIC_UNSIGNED.libraryIEEE;IEEE.STD_LOGIC_1164.ALL;IEEE.STD_LOGIC_ARITH.ALL;IEEE.STD_LOGIC_UNSIGNED.ALL;work.my_comporients.all;entitylow_rowisport(sin,cin:instd_logic_vector(6doimto0):p:outstd_logic_vector(7doimto0)):endlow_row;rchitecturestructuraloflow_rowissignallocal:std_logic_vector(6doimto0);eginlocal(0)<=JCT;U1:componentU2:componentU3:componentU4:componentU5:componentU6:componentU7:componentendstructural:fullfullfullfullfullfullfulladderadderadderadderadderadderadderportportportportportportportmap(sin(Cl)cin(0)local(0)p(0)local(1));map(sin(l)cin(l)local(1)p(1)local(2));map(sin(2)uiit⑵,local(2)p(2)local(3));map(sin(3)cin(3)j1dual⑷,p⑶,local(4));map(sin(4)cin(4)jlocal(4)p(4)local(5));map(sin(5)cin(5)jlocal(5)p(5)local(6));map(sin(6)3uin⑹』local(6)3p(6)3p(7));图8底层模块的VHDL程序libraryIEEE:useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;llseIEEE.STD_LOGIC_UNSIGNED.ALL;llsework.my_components.ALL;entitymid_rowisport(a:instd_logic;b:instd_logic_vector(7downto0);sirijcin:instd_logic_vector(6downto0):soutjcout:outstd_logic_vector(6downto0);p:outstd_logic);endmid_row;architecturestructuralofmid_rowisarchitecturestructuralofmid_rowisUl:componentand_2portU2:componentand_2portU3:componentand_2portU4:componentand_2portU5:componentand_2portU6:componentand_2portU7:componentand_2portU8:componentand2portU9:componentfull_adderU10:componentfulladderUli:componentfulladderU12:componentfulladderU13:componentfulladderU14:componentfulladderU15:componentfulladderendstructural:signaland_out:std_logiceginvector(6downto0):mapb(7)sout(6));map(a^b(6)3and_out⑹);map(3jb(5)3and_out⑸);map(3jb(4)3and_out(4)):mapb(3)3and_out⑶);mapb(2)and_ou-t⑵);mapb(1)and_ciut⑴);map(a^b(0)3and_out(0)):portmap(sin(6)cin(6)andportmap(sin(5)jcin(5)jandportmap(sin(4)juiri⑷,andportmap(sin(3)cin(3)andportmap(sin(2)cin(2)andportmap(sin(1)jcin(1)jandportmap(sin(0)cin(0)andout⑹ssout⑸』cout⑹);out(5)jsout(4)jcout⑸);out(4)sout(3)jcout⑷);out(3)sout(2)jcout(3));out(2)sout(1)jcout(2));out(1)3sout(0)jcout(1));out(0)Pjcout(0));图9中间层模块的VHDL程序乘法器的顶层设计设计好上面所有的元件后,便可以利用元件库中的这些元件来进行乘法器的设计了,按照图3所示的结构来编写乘法器的VHDL语言。同样,由于利用到了自己设计的元件库,故在程序的library区,应添加代码:usework.my_components.ALL。编写好的VHDL如下图10所示。libraryIEEE;seseseseIEEE.STD_L0GIC_1164.ALL;IEEE.STD_LOGIC_ARITH.ALLlibraryIEEE;seseseseIEEE.STD_L0GIC_1164.ALL;IEEE.STD_LOGIC_ARITH.ALL;IEEE.STD_LOGIC_UNSIGNED.ALL;work.my_components.all;entitymac_8isportb:instd_logic_vector(7doimto0):prob:outstd_logic_vector(15downto0));endmac_8;architectureBehavioralofmac8isTYPEmatrisisarray(0tosignalSjcimatris;eginU1:componentU2:componentU3:componentU4:componentU5:componentU6:componentU7:componentU8:componentU9:componentndBehavioral;top.midmidmidmidmidmidmidlowrowrowrowrowrowrowrowrowrowportportportportportportportportport7jofstd_logic_vector(6doumto0);map(a(0)bjmap(a⑴,b,map(a⑵,b,map(a⑶,bjmap(a⑷,b,map(a⑸,bjmap(a⑹,b3map(a(7),bjmap(s(7),c(7)jprob(15downto8)):s9),c(0)prob(0));s(0)^c(0)s(1)^c(1)^prob(1));w⑴,c⑴,w⑵,u⑵,prciti⑵);s(.2),c⑵,w⑶,u⑶,prciti⑶);w⑶,c⑶,w⑷,u(4)prob⑷);m⑷,匚⑷,m⑸,匚(5)^prob⑸);s(5)3c⑸,m⑹,u(6)3prob⑹);s(6)c⑹,s(7),c(7),prob(7));图10乘法器的顶层VHDL设计3仿真实现在上一节,完成了各元件的VHDL设计与仿真验证,并最终完成了乘法器的顶层VHDL设计。现设计适当的波形文件,对完成的乘法器进行仿真验证,波形文件mac_88.tbw如图
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 浙江省稽阳联谊学校2025年4月高三联考数学试卷(含答案)
- 《人生的意义在于奉献》课件
- 《演讲的艺术》课件
- 受弯构件的其他构造要求钢筋混凝土结构课件
- 短期合同续签建议
- 铁路班组管理S班组凝聚力训练课件
- 讨论照明电路能否采用三相三线制供电方式不加零线会不会出现问
- 网格桥架安装施工方案
- 铁路客运站车无线交互系统客运管理部分课件
- 大学生职业规划大赛《视觉传达设计专业》生涯发展展示
- 院感试题100题及答案
- 急性冠脉综合征诊断及治疗课件
- 吹小号的天鹅试题及答案
- 数据库开发 试题及答案
- GB/T 45434.3-2025中国标准时间第3部分:公报
- 2024年郑州工业应用技术学院单招职业适应性测试题库附答案
- 北京市消防条例解读
- 农业合作社管理与运营模式试题及答案
- Unit 4 Clothes 单元整体(教学设计)-2024-2025学年人教精通版(2024)英语三年级下册
- 2025年版中等职业教育专业教学标准 710205 大数据技术应用
- 2025年河南省郑州市九年级中考一模数学试题 (原卷版+解析版)
评论
0/150
提交评论