八位二进制乘法器_第1页
八位二进制乘法器_第2页
八位二进制乘法器_第3页
八位二进制乘法器_第4页
八位二进制乘法器_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、石家庄铁道大学数字逻辑与数字系统 八位二进制乘法器学院:信息科学与技术学院班级:计0805-2学号:20082459姓名:王志军指导老师:王彦芳 完成时间:2010年7月11日目录1 课题综述2.1 分析问题2.2 结构框图2.3原理图3.1上机调试及排错过程3.2 波形文件3.3 vhdl文本4 上机结果分析5 总结6 致谢7 参考资料课题二:八位二进制乘法器1 课题综述选择这个课题与我以前做过二进制乘法电路有关,思想源于此,但那次是用组合逻辑电路实现的且是两位二进制乘法,很受局限,由此想扩展它。实现二进制乘法器的电路有多种方法,一种是由组合逻辑电路(与、或、非门)构成的乘法器,速度快但占用

2、pld的资源比较多,难以实现多位乘法;另一种是基于pld器件外接rom九九表的乘法器,但无法构成片上系统,不是很适用。这一次我是采用八位二进制乘法的硬件算法,不同于前面两种乘法器电路,是由一个加法器和移位寄存器构成的时序逻辑方式的八位硬件乘法器。2.1 分析问题硬件乘法器的乘法原理是通过逐项移位相加的方法来实现。在计算过程中,先观察乘数的每一位,从最低位开始,若最低位是1,则被乘数被复制到下面,否则复制为全零,复制下来的数值较前一个数值左移一位。最后,将复制的数值相加,它们的和就是乘积。两个n位二进制数相乘的结果最多可以有2n位的二进制数。根据上面这个乘法的过程,可以得出三点:u 只对两个二进

3、制数进行相加运算,并用寄存器不断地累加部分积;u 将累加的部分积左移,但复制的被乘数不左移;u 乘数的对应位若为0时,对累加的部分积不产生影响。2.2 结构框图b0a a+da右移n=0d70被乘数b70乘数n为数sta15.0 0 0n n-1z=1输出s001s1s210s201图12.3原理图图 2在上图中:d为被乘数输入,b为乘数输入,st为启动信号,a15.0输出端口为乘积。当st为一时乘法器运算开始,累加寄存器a清零。在s1状态下对乘数最低位b0进行检测,若为1,被乘数加到a中的部分积上;如果b0为0,系统则不操作,直接进入到s2状态。在s2状态中进行累加寄存器a和乘数b的右移一位

4、,并且判断乘数的位数是否运算结束,若运算结束,在s3状态下,输出乘积结果。这是由两个进程的状态机来实现:一个进程描述状态转移,另一个进程描述寄存器操作。累加寄存器q的位数为widthd+widthb+1,其中,q的高位段(widthd+1)进行数的累加,然后向q的低位进行移位,形成部分积。当计数器n减到0时,乘法过程结束。在寄存器操作进程中,由于使用的是时钟同步工作方式,其操作都是在下一个状态完成,因此在乘法结束进入s3状态下,需要对累加寄存器q左移一位,并将寄存器q中的乘积结果输入到乘积输出端a。3.1上机调试及排错过程本次是课题二,有了做课题一的熟悉和经验,调试过程容易多了。具体步骤是:绘

5、制完后>file>project>set project current file,选择之后,再选择,max+plus2>compiler开始进入调试。图3 compiler调试成功的结果上图是最后调试成功后的结果,在调试没有成功时,曾出现过许多错误,第一个错误也是最普遍的错误就是:error:line1,file e:max+plusmulti_lpm.tdf:tdf syntax error:expected assert ,constant,define,design,function,if.options,parameters,subdesign,or titl

6、e but found a symbolic name”library”上面这个错误是由调试时是用的“。tdf”文件,把文件保存为“.vhd”之后就消除错误。其它的错误也不一一列举,有些错误是逻辑问题,还有的是输入时不小心输入错误,根据错误提示,一步一步的完成排错,最后出现无错的调试结果。3.2 波形文件仿真前:图 4 仿真前波形仿真后:图 5 仿真后波形3.3 vhdl文本library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity multi_lpm is generic(widthd:int

7、eger:=8; widthb:integer:=8); port(clk,clrn,st:in std_logic; d:in std_logic_vector(widthd-1 downto 0); b:in std_logic_vector(widthb-1 downto 0); a:out std_logic_vector(widthd+widthb-1 downto 0); z:out std_logic );end multi_lpm;architecture one of multi_lpm is type ss is(s0,s1,s2,s3); signal state:ss:

8、=s0; signal n:integer range widthb downto 0; signal q:std_logic_vector(widthd+widthb downto 0); signal t:std_logic_vector(widthb-1 downto 0);begin process(clk,clrn) begin if clrn='0' then state<=s0; elsif(clk'event and clk='1')then case state is when s0=>if st='1' t

9、hen state<=s1; end if; when s1=>state<=s2; when s2=>if n=0 then state<=s3; else state<=s1; end if; when s3=>state<=s0; when others=>state<=s0; end case; end if; end process; process(clk) variable cont:std_logic_vector(widthd downto 0); begin if(clk'event and clk=

10、9;1') then case state is when s0=>n<=widthb;t<=b;z<='0'q<=(others=>'0'); cont(widthd downto 0):='0'&d(widthd-1 downto 0); when s1=>n<=n-1;if t(0)='1' then q(widthd+widthb downto widthb)<=q(widthd+widthb downto widthb) +cont(widthd do

11、wnto 0); end if; when s2=>t(widthb-2 downto0)<=t(widthb-1 downto 1);t(widthb-1)<='0' q(widthd+widthb-1 downto 0)<=q(widthd+widthb downto 1);q(widthd+widthb)<='0' when s3=>z<='1'q(widthd+widthb downto 1)<=q(widthd+widthb-1 downto 0); a<=q(widthd+widt

12、hb-1 downto 0); end case; end if; end process;end one;4 上机结果分析本次做的是八位二进制乘法器,在时钟控制下进行运算,条件是:时钟为上升沿,st为1,而且是在时延范围外即可以输出结果。每个运算时延大约为6us,这个时延较大,也算是这个的缺点吧!每一个结果的输出不是就在对应的下方输出结果,而是在时延结束,下一个工作来时输出上一个运算结果。前面已经说明了,z为1时是一个运算结束,即将输出结果的标志。5 总结最开始我考虑过“汽车尾灯控制”,后来发现做的同学比较多,于是另选一个,选了这个八位二进制乘法器,它比较灵活,可以做的简单也可以做的复杂。就这同一个功能,可以写出vhdl文本几百行,也可以写出几十行,说明了八位二进制乘法器实现的的方法有很多种。也体现了vhdl语言的灵活性,任何一种语言都不是死的,都具有一定的灵活性。这次课程设计让我受益匪浅。在摸索该如何设计电路使之实现所需功能的过程中,培养了我的设计思维,增加了实际操作能力,也让我深深地体会到了自己学习知识的不足之处,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论