《乘法器课程设计(共27页).doc》由会员分享,可在线阅读,更多相关《乘法器课程设计(共27页).doc(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上摘要:基于VHDL的数字系统设计具有设计技术齐全、方法灵活、支持广泛等优点,同时也是EDA技术的重要组成部分.文章用VHDL语言设计了左移法和进位节省法实现的两种组合乘法器,通过功能仿真,对两种乘法器的性能进行了比较,从而得知后者的传输延迟时间小,即速度较快.通过设计实例,介绍了利用VHDL语言进行数字系统设计的方法.关键词:VHDL语言 左移法 进位节省法Abstract: Digital system design based on VHDL has complete design techniques, methods, the advantages of fl
2、exible and wide support, at the same time also is the important component of the EDA technology. The article using VHDL language to design the left shift method and carry save method to realize the combination of two kinds of multiplier, through the function simulation, compares the performance of t
3、he two kinds of multiplier, which the latters small transmission delay time, namely fast. Through the design example, introduced the method of using VHDL language to design digital system.Keywords: VHDL language ,left shift method ,carry save method目 录2.1 设计要求.2 2.2系统组成. .2 2.2.1 乘法器电路基本原理.3 2.2.2 输
4、入数据的获得.32.2.3 数据的选择输入和输出控制.3 4.整体仿真105. 调试中遇到的问题及解决的方法116设计总结127.参考文献13附录:程序代码14 1.前言 电子EDA技术发展迅猛,逐渐在教学、科研、产品设计与制造等各方面都发挥着巨大的作用。在教学方面:几乎所有理工科(特别是电子信息)类的高校都开设了EDA课程。主要是让学生了解EDA的基本原理和基本概念、硬件描述系统逻辑的方法、使用EDA工具进行电子电路课程的模拟仿真实验并在作毕业设计时从事简单电子系统的设计,为今后工作打下基础。EDA技术不单是应用于前期的计算机模拟仿真、产品调试,而且也在后期的制作、电子设备的研制与生产、电路
5、板的焊接、器件的制作过程等有重要作用。可以说电子EDA技术已经成为电子工业领域不可缺少的技术。 通过此次课程设计的锻炼,要求学生掌握设计乘法器电路的一般设计方法,具备初步的独立设计能力,懂得如何通过各个小程序组合成一个大程序,懂得如何通过三个控制信号进行输入输出的选择,懂得如何通过段选位选实现8位数码管依次显示乘积,被乘数与乘数,从而提高综合运用所学的理论知识独立分析和解决问题的能力,培养学生的创新精神。2.系统设计总述设计带符号乘法器并同时要8个数码管显示结果要用到的子模块非常多,通过EDA用软件的方式设计硬件,且其到硬件系统的转换是由有关的开发软件自动完成的。设计过程中可用有关软件进行各种
6、仿真,整个系统可集成在一个芯片上,体积小、功耗低、可靠性高。2.1 设计要求设计一个能进行两个十进制数相乘的乘法器,乘数和被乘数均小于100,通过按键输入,并用数码管显示,显示器显示数字时从低位向高位前移,最低位为当前显示位。当按下相乘键后,乘法器进行两个数的相乘运算,数码管将乘积显示出来。2.2 系统组成图1乘法器硬件系统示意图2.2 乘法器电路基本原理 纯组合逻辑构成的乘法器虽然工作速度较快,但过于占用硬件资源,难以实现宽位乘法器,由加法器构成的以时序逻辑方式设计的乘法器,具有一定的使用价值。而且由FPGA构成实验系统后,可以很容易的用ASIC大型集成芯片来完成,性价比高,可操作性强。其乘
7、法原理是:乘法通过逐项移位相加原理来完成,从被乘数的最低位开始,若为1,则乘数左移后于上一次的和相加;若为0左移后以全零相加,直至被乘数的最高位。2.2.2 输入数据的获得表1 编码器真值表数据开关电平信号编码器输出K1 K2 K3 K4 K5 K6 K7 K8 K9 K10Q3 Q2 Q1 Q0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
8、0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 1 0 0 0 0 2.2.3 数据的选择输入和输出控制当clk=1且reset=0时,当CH=0,DH=0时,输入被乘数A,当CH=1.DH=0时,输入乘数B,当CH=1,DH=1时,输出乘积。 3.设计步骤3.1整体原理框图: 图2 乘法器系统框图3.2乘法器整体电路原理图:3.3输入模块:模块说明:由 CH,DH控制数据的输入,由SHUJU端输入数据,当CH,DH为0,0时输入被乘数,由输出
9、端A输出,当按下“乘号键CH”即CH,DH为1,0时输入乘数,由输出端B输出,当RESET为0时输出端清零。3.4运算模块:模块说明:分别由AO和BO端接收被乘数和乘数,由CJ端输出带符号位的二进制乘积结果。此模块由三个子模块组成:“数字与符号分离子模块”,“乘法运算子模块”及“数字与符号重组子模块”。数字与符号分离子模块:乘法运算子模块:数字与符号重组子模块:3.5显示控制模块:模块说明:当CH,DH为0,0时显示被乘数,当按下“乘号键CH”即CH,DH为1,0时显示乘数,当按下“等号键DH”即CH,DH为1,1时显示乘积。 3.6显示模块:模块说明:由AIN端接收要显示的二进制内容,输出转
10、换成十进制后各位对应的数码管显示代码。此模块由六个子模块组成:“输出数字与符号分离子模块”,“进制转换子模块”,“消零子模块”,“符号位数码管显示子模块”,“数字位数码管显示子模块”和“灭点子模块”。 此模块组成结构如下:输出数字与符号分离子模块:进制转换子模块:此模块是用来对结果进行二进制到十进制转换的,便于在显示数码管上显示。定义3个变量A1,A2,A3,并赋初值为0,从高到低判断输入的数据A(二进制)的各个位,首先是百位,若大于一百,则A3加1,EJZ减去100;然后是十位,若大于十,则A2加1,EJZ减去10;最后是个位,直接将EJZ剩余值赋值给A1。依次将A1,A2,A3赋值给GOU
11、T,SOUT,BOUT输出。消零子模块:符号位数码管显示子模块:数字位数码管显示子模块:灭点子模块:4.整体仿真仿真整体波形如下:以输入被乘数-9,乘数12,输出乘积-108为例:5. 调试中遇到的问题及解决的方法1在进行整体编译时,出现芯片的逻辑资源不足而无法继续编译的问题。该问题困扰了我很长时间,一开始以为是程序不精简,但后来在同学的提醒下,发现原来在编译时没有设置软件的优化选项,从而导致逻辑资源不足,经设置后问题得以解决。2进行仿真时,发现只能显示被乘数和乘积而无法显示乘数,该问题又让我检查了很长时间,后来自己一步步仔细分析查找,终于发现原来是整体电路原理图中一根线不小心连错了,经改正后
12、,显示结果恢复正常。6.设计总结:通过这次时间为两周的EDA课程设计,使我更加深刻的认识到了EDA的对电路设计的重要性,对我们电子专业学科同学发展的重要性。同时,我也熟悉了EDA工具Quartus II软件的应用,VHDL硬件描述语言的编辑、编译、调试、仿真等,使电路设计过程由软件的描述语言到集成电路图再到功能的仿真波形。整个过程符合逻辑、通俗易懂;在设计过程中我也遇到了许多困难,比如:VHDL语言的编译出现错误、仿真时波形出现失真或错误等。由于Quartus II软件使用时,一个错误就会导致很多的错误出现。所以在编写VHDL语言时,应该更加的细心和准确,才能保证设计的顺利开展。不过在这次设计
13、里,我虽然遇到了这样的困难,但我细心耐心的改正编译出现的错误知道编译成功。使得我更加熟悉了VHDL语言的一些关键句,让我掌握了VHDL语言的编写。两周的课程设计,使我受益匪浅,让我学到了在课堂上所学不到的知识和能力。同时,也让我明白了实践操作能力,独立思考能力和解决困难问题的能力对于我们工科同学的重要性。最后,感谢学校为我们提供这样的实践机会,真正的提高我们的能力和综合素质。7.参考文献: 王金明,数字系统设计与Veriling HDL.电子工业出版社2011.1 黄仁欣.EDA技术实用教程.清华大学出版社,2006 曹昕燕,周凤臣,聂春燕,EDA技术实验与课程设计.清华大学出版社,2006.
14、5 杨亦华,延明,数字电路EDA入门,北京邮电大学出版社,2003 邹彦,庄严,邹宁,王宇鸿,EDA技术与数字系统设计,电子工业出版社,2008 潘松 ,黄继业EDA技术与VHDL,北京,清华大学出版社,2006 附录:程序代码1. 输入模块LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY shuru IS PORT(CH,DH,RESET,CLK:IN STD_LOGIC; shuju:IN STD_LOGIC_VECT
15、OR(4 DOWNTO 0); A,B:OUT STD_LOGIC_VECTOR(4 DOWNTO 0);END shuru;ARCHITECTURE behave OF shuru IS BEGIN PROCESS(CH,DH,shuju,RESET,CLK) BEGIN IF CLKEVENT AND CLK=1 THEN IF RESET=1 THEN A=00000; B=00000; ELSE IF CH=0 AND DH=0 THEN A=shuju; ELSIF CH=1 AND DH=0 THEN BA0,B=B0,C=C1,D=D1,FH=FHW); U2:MUL PORT
16、MAP(E=C1,F=D1,Q=OUT1); U3:sfcz PORT MAP(Q=OUT1,FHO=FHW,CJO=CJ);END BEHAVE;3数字与符号分离子模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY sffl ISPORT(A,B:IN STD_LOGIC_VECTOR(4 DOWNTO 0); FH:OUT STD_LOGIC; C,D:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);E
17、ND sffl;ARCHITECTURE behave OF sffl ISBEGIN C=A(3 DOWNTO 0); D=B(3 DOWNTO 0); FH=A(4) XOR B(4);END behave;4乘法运算子模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY MUL IS PORT(E,F:IN STD_LOGIC_VECTOR(3 DOWNTO 0); Q:OUT STD_LOGIC_VECTOR(7 DOW
18、NTO 0);END MUL;ARCHITECTURE behave OF MUL IS SIGNAL Q1:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL Q2:STD_LOGIC_VECTOR(4 DOWNTO 0); SIGNAL Q3:STD_LOGIC_VECTOR(5 DOWNTO 0); SIGNAL Q4:STD_LOGIC_VECTOR(6 DOWNTO 0); SIGNAL FF0:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL FF1:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL FF2:ST
19、D_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL FF3:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINFF0=F(0)&F(0)&F(0)&F(0);FF1=F(1)&F(1)&F(1)&F(1);FF2=F(2)&F(2)&F(2)&F(2);FF3=F(3)&F(3)&F(3)&F(3);Q1=E AND FF0;Q2=(E AND FF1)&0;Q3=(E AND FF2)&00;Q4=(E AND FF3)&000;Q=Q1+Q2+Q3+Q4;END behave;5数字与符号重组子模块LIBRARY IEEE;USE IEEE.STD_LO
20、GIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY sfcz ISPORT(Q:IN STD_LOGIC_VECTOR(7 DOWNTO 0); FHO:IN STD_LOGIC; CJO:OUT STD_LOGIC_VECTOR(8 DOWNTO 0);END sfcz;ARCHITECTURE behave OF sfcz IS BEGIN CJO=FHO & Q; END behave;6显示控制模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL
21、;ENTITY xskz ISPORT(CH:IN STD_LOGIC; DH:IN STD_LOGIC; CLK:IN STD_LOGIC; AIN:IN STD_LOGIC_VECTOR(4 DOWNTO 0); BIN:IN STD_LOGIC_VECTOR(4 DOWNTO 0); CJIN:IN STD_LOGIC_VECTOR(8 DOWNTO 0); shuchu:OUT STD_LOGIC_VECTOR(8 DOWNTO 0);END xskz;ARCHITECTURE behave OF xskz ISBEGIN PROCESS(CH,DH,CLK) BEGIN IF(CLK
22、EVENT AND CLK=1)THEN IF(CH=0 AND DH=0)THEN shuchu=AIN(4)&0000&AIN(3 DOWNTO 0); ELSIF(CH=1 AND DH=0)THEN shuchu=BIN(4)&0000&BIN(3 DOWNTO 0); ELSE shuchu=CJIN; END IF; END IF; END PROCESS;END BEHAVE;7输出数字与符号分离子模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY outsffl ISPORT(AIN:IN STD_LOGIC_VECTOR(8 D
23、OWNTO 0); fhout:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); shujuout:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END outsffl;ARCHITECTURE behave OF outsffl ISSIGNAL B:STD_LOGIC;BEGINBfhoutfhoutfhout=NULL; END CASE; END PROCESS;shujuout=AIN(7 DOWNTO 0);END behave;8进制转换子模块module zhuanhuan(clk,a,bout,sout,gout);input clk;i
24、nput7:0 a;output3:0 bout,sout,gout;reg3:0 A1,A2,A3,bout,sout,gout;reg7:0 aa;reg2:0 num;always(posedge clk)begincase(num) 0: begin aa7:0=a; num=1; A1=0; A2=0; A3=100) begin A3=A3+1; aa=10)&(aa100) begin A2=A2+1; aa=1)&(aa10) begin A1=aa; aa=0; end else begin num=2; end end 2: begin gout=A1; sout=A2;
25、bout=A3; num=0; end default:num=0; endcase endendmodule9消零子模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY xiaoling ISPORT(B:IN STD_LOGIC_VECTOR(3 DOWNTO 0); S:IN STD_LOGIC_VECTOR(3 DOWNTO 0); G:IN STD_LOGIC_VECTOR(3 DOWNTO 0); BOUT:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); SOUT:OUT STD_LOGIC_VECTOR(3 DOW
26、NTO 0); GOUT:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END xiaoling;ARCHITECTURE behave OF xiaoling ISBEGIN PROCESS(B,S,G) BEGIN IF(B=0000)THEN IF(S=0000)THEN IF(G=0000)THEN BOUT=1010; SOUT=1010; GOUT=1010; ELSE BOUT=1010; SOUT=1010; GOUT=G; END IF; ELSE BOUT=1010; SOUT=S; GOUT=G; END IF; ELSE BOUT=B; SOUT=S; GOUTfh_showfh_showfh_show=; END CASE; END PROCESS;END behave;专心-专注-专业