有符号位的除法器课程设计报告_第1页
有符号位的除法器课程设计报告_第2页
有符号位的除法器课程设计报告_第3页
有符号位的除法器课程设计报告_第4页
有符号位的除法器课程设计报告_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

PAGE2有符号5位整数除法器设计与制作1.课程设计的性质、目的和任务创新精神和实践能力二者之中,实践能力是基础和根本。这是由于创新基于实践、源于实践,实践出真知,实践检验真理。实践活动是创新的源泉,也是人才成长的必由之路。通过课程设计的锻炼,要求学生掌握电路的一般设计方法,具备初步的独立设计能力,提高综合运用所学的理论知识独立分析和解决问题的能力,培养学生的创新精神。2.课程设计基本要求掌握现代大规模集成数字逻辑电路的应用设计方法,进一步掌握电子仪器的正确使用方法,以及掌握利用计算机进行电子设计自动化(EDA)的基本方法。3.设计课题要求设计一个两个五位数相除的整数除法器。用发光二极管显示输入数值,用7段显示器显示结果十进制结果。除数和被除数分两次输入,在输入除数和被除数时,要求显示十进制输入数据。采用分时显示方式进行,可参见计算器的显示功能。4.设计内容:有符号5位整数除法器设计与制作根据系统设计要求,系统设计采用自顶向下的设计方法。顶层设计采用原理图设计方式,系统的整体组装设计原理图如下图所示,它由除法器输入模块、除法实现模块和显示译码模块三部分组成。4.1除法器输入模块本除法器的被除数和除数(有符号5位整数)分两次输入,设置两个标志位A和B,A和B的初值均为0。当A=1,B=0时,输入为被除数;当A=1,B=1时,输入为除数。将被除数和除数分别送至显示电路,以十进制形式显示,同时送入除法实现电路进行除法运算。输入模块的源程序如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYSHURU1ISPORT(LOADA,LOADB,CLK:INSTD_LOGIC;DIN:INSTD_LOGIC_VECTOR(4DOWNTO0);A,B:OUTSTD_LOGIC_VECTOR(4DOWNTO0));ENDSHURU1;ARCHITECTUREBEHAVEOFSHURU1ISBEGINPROCESS(LOADA,LOADB,DIN,CLK)BEGINIF(CLK'EVENTANDCLK='1')THENIF(LOADA='1'ANDLOADB='0')THENA<=DIN;ENDIF;IF(LOADA='1'ANDLOADB='1')THENB<=DIN;ENDIF;ENDIF;ENDPROCESS;ENDBEHAVE;生成模块如图(1-1)所示:如图(1-1)本模块的仿真波形如图(1-2)所示:如图(1-2)4.2除法实现模块本模块作用是将输入的被除数和除数进行除法运算,输出商和余数。计算前在A和B端口输入被除数和除数,然后在Load线上送高电平,把数据存到除法计算电路内部,然后经过若干个时钟周期,计算出商和余数,并在SH和YU端输出。其实现方法是,将除法器分为两个状态:等待状态与运算状态。开始时除法器处于等待状态,在该状态,在每一时钟上升沿,采样Load信号线,若是低电平,则仍处于等待状态,如果采样到高电平,除法器读取A,B数据线上的输入数据,保存到内部寄存器a_r,b_r,置sh_r为0,yu_r为a_r,判断除数是否为零,若不为零则进入运算状态。在运算状态,设置符号位寄存器fu_r,将a_r和b_r的最高位(即符号位)异或后赋给fu_r。在每一时钟上升沿,除法器先比较yu_r,b_r低四位的大小,若yu_r大于等于b_r,则sh_r增加一,yu_r=yu_r–b_r(均为低四位),仍处于运算状态。若yu_r小于b_r的低四位,则说明运算已经完成,再将sh_r、yu_r填上符号位作为结果输出到SH,YU数据线,再次回到等待状态,等待下一次的除法运算。除法实现模块的源程序所下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYCHUFAISPORT(CLK,LOAD:INSTD_LOGIC;A:INSTD_LOGIC_VECTOR(4DOWNTO0);B:INSTD_LOGIC_VECTOR(4DOWNTO0);SH,YU:OUTSTD_LOGIC_VECTOR(4DOWNTO0));ENDCHUFA;ARCHITECTUREDIVOFCHUFAISBEGINPROCESS(CLK)VARIABLEA_R,B_R,SH_R,YU_R,FU:STD_LOGIC_VECTOR(4DOWNTO0);VARIABLESTATE:STD_LOGIC;BEGINIFCLK'EVENTANDCLK='1'THENCASESTATEISWHEN'0'=>IFLOAD='1'THENA_R:=A;B_R:=B;YU_R:="00000";YU_R(3DOWNTO0):=A_R(3DOWNTO0);SH_R:="00000";STATE:='1';ELSESTATE:='0';ENDIF;WHEN'1'=>IFB_R="00000"THENSH_R:="00000";YU_R:="00000";STATE:='0';ELSIFYU_R(3DOWNTO0)>=B_R(3DOWNTO0)THENYU_R(3DOWNTO0):=YU_R(3DOWNTO0)-B_R(3DOWNTO0);SH_R(3DOWNTO0):=SH_R(3DOWNTO0)+1;STATE:='1';ELSEFU:="00000";FU(4):=A_R(4)XORB_R(4);SH<=SH_RORFU;YU<=YU_RORFU;STATE:='0';ENDIF;WHENOTHERS=>ENDCASE;ENDIF;ENDPROCESS;ENDDIV;生成模块如图(2-1)所示:图(2-1)本模块的仿真波形如图(2-2)所示:图(2-2)4.3除法器显示译码模块模块1本模块的作用是通过标志位A,B的不同状态来区分被除数,除数,商和余数,将他们送至输出端进行显示。当A=1,B=0时,将被除数送至输出端;A=1,B=1时,将除数送至输出端;除法运算结束后,A=0,B=1时,将商送至输出端;A=0,B=0时,将余数送至输出端;从而实现分时显示。显示模块1的源程序如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_arith.ALL;USEIEEE.STD_LOGIC_unsigned.ALL;ENTITYXIANSHI1ISPORT(A:INSTD_LOGIC;B:INSTD_LOGIC;LOAD:INSTD_LOGIC;BEICHU:INSTD_LOGIC_VECTOR(4DOWNTO0);CHU:INSTD_LOGIC_VECTOR(4DOWNTO0);SH:INSTD_LOGIC_VECTOR(4DOWNTO0);YU:INSTD_LOGIC_VECTOR(4DOWNTO0);ZJ:OUTSTD_LOGIC_VECTOR(4DOWNTO0));ENDXIANSHI1;ARCHITECTUREMYOFXIANSHI1ISBEGINPROCESS(BEICHU,CHU,SH,YU,A,B)BEGINIF(A='1'andB='0')THENZJ<=BEICHU;ELSIF(A='1'andB='1')THENZJ<=CHU;ELSIF(A='0'andB='1')THENZJ<=SH;ELSEIF(LOAD='1')THENZJ<=YU;ELSEZJ<="00000";ENDIF;ENDIF;ENDPROCESS;ENDMY;生成模块如图(3-1)所示:图(3-1)模块2:本模块的作用是采用3个8段显示器分时显示有符号的十进制结果。模块2的源程序如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_arith.ALL;USEIEEE.STD_LOGIC_unsigned.ALL;ENTITYXIANSHI2ISPORT(ZJ:INSTD_LOGIC_VECTOR(4DOWNTO0);FU:OUTSTD_LOGIC_VECTOR(7DOWNTO0);SHI:OUTSTD_LOGIC_VECTOR(7DOWNTO0);GE:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDXIANSHI2;ARCHITECTUREMYOFXIANSHI2ISBEGINPROCESS(ZJ)BEGINIF(ZJ(4)='0')THENFU<="11111111";ELSEFU<="10111111";ENDIF;IF(ZJ(3DOWNTO0)>"1001")THENSHI<="11111001";ELSESHI<="11111111";ENDIF;CASEZJ(3DOWNTO0)ISWHEN"0000"=>GE<="11000000";WHEN"0001"=>GE<="11111001";WHEN"0010"=>GE<="10100100";WHEN"0011"=>GE<="10110000";WHEN"0100"=>GE<="10011001";WHEN"0101"=>GE<="10010010";WHEN"0110"=>GE<="10000010";WHEN"0111"=>GE<="11011000";WHEN"1000"=>GE<="10000000";WHEN"1001"=>GE<="10010000";WHEN"1010"=>GE<="11000000";WHEN"1011"=>GE<="11111001";WHEN"1100"=>GE<="10100100";WHEN"1101"=>GE<="10110000";WHEN"1110"=>GE<="10011001";WHEN"1111"=>GE<="10010010";WHENOTHERS=>GE<="11111111";ENDCASE;ENDPROCESS;ENDMY;生成模块如图(3-2)所示:图(3-2)本模块的仿真波形如图(3-3)所示:图(3-3)5.调试与仿真结果总电路如下图:仿真结果如下:6.调试中遇到的问题及解决方法第一次调试时数码管显示了一些乱码,怀疑是显示模块出了问题,便想到改程序。经检查发现,由于存在两个process,之间产生冲突,于是我就把显示电路拆成了两个模块,利用了一个中间量进行数值传递,这样就避免了两个process在一个结构体中因敏感信号而产生冲突。第二次调试时,发现除法器总是会显示上一次除法的结果,我就想到一定是除法寄存器在下一次运算前没有清零,于是检查并改动了除法运算模块,是结果正确。以上是调试过程中存在比较大的问

温馨提示

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

评论

0/150

提交评论