欢迎来到天天文库
浏览记录
ID:55339327
大小:139.44 KB
页数:11页
时间:2020-05-11
《EDA实验-8位二进制乘法电路.docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、EDA数字系统设计实验——8位二进制乘法电路学院:电子工程学院学号:0210****姓名:***8位二进制乘法电路1.选题目的:通过八位二进制乘法器设计实验,进一步熟悉VHDL语言的电路设计,及数字电路的基本知识,为以后进一步在数字电路学习上奠定基础。2.设计要求8位二进制乘法采用移位相加的方法。即用乘数的各位数码,从低位开始依次与被乘数相乘,每相乘一次得到的积称为部分积,将第一次(由乘数最低位与被乘数相乘)得到的部分积右移一位并与第二次得到的部分积相加,将加得的和右移一位再与第三次得到的部分积相加,再将相加的结果右移一位与第四次得到的部分积相加。直到所有的部分积都被加过一次。例如:被乘数
2、(M7M6M5M4M3M2M1M0)和乘数(N7N6N5N4N3N2N1N0)分别为11010101和10010011,其计算过程如下:11010101×1001001111010101N0与被乘数相乘的部分积,部分积右移一位11010101N1与被乘数相乘的部分积+1101010110011111111001111111两个部分积之和,部分积之和右移一位+00000000N2与被乘数相乘的部分积0100111111101001111111与前面部分积之和相加,部分积之和右移一+00000000N4与被乘数相乘的部分积······N7与被乘数相乘的部分积+11010101111101001
3、001111与前面部分积之和相加011110100100111右移一位得到最后的积为了实现硬件乘法器,根据上面的乘法的计算过程可以得出3点:一是只对两个二进制数进行相加操作,并用寄存器不断累加部分积;而是将累加的部分积左移(复制的被乘数不移动);三是乘数的对应位若为0时,对累加的部分积不产生影响(不操作)。3.硬件乘法器的实现根据硬件乘法器的设计思想,画出8位二进制乘法器的ASM图,如下。其中d为被乘数输入,b为乘数输入,ST为启动信号,A[15..0]为累加结果输出,输出Z为二进制乘法器结束指示,当Z输出信号有上跳脉冲时,A[15..0]输出端口为乘积。当ST为1时乘法器运算开始,累加器
4、A清零。在S1状态下,对乘数最低位b0进行检测,若为1,将被乘数加到A中的部分积上;如果b0为0,系统不操作,直接进入到S2状态。在S2状态中进行累加寄存器A和乘数b的右移一位,并且判断乘数的位数是否已运算结束。若乘法运算结束,在S3状态下输出乘积结果。STd[7..0]被乘数b[7..0]乘数n位数S001Z=1输出n←n-1S1S3b0A右移n=00图8位二进制乘法器的ASM图4.根据以上流程图写出的VHDL描述LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYmulti_lpmISG
5、ENERIC(WIDTHd:INTEGER:=8;——设置被乘数位数参数WIDTHb:INTEGER:=8);——设置乘数位数参数PORT(clk,clrn,st:INSTD_LOGIC;d:INSTD_LOGIC_VECTOR(WIDTHd-1DOWNTO0);——被乘数b:INSTD_LOGIC_VECTOR(WIDTHb-1DOWNTO0);——乘数A:OUTSTD_LOGIC_VECTOR(WIDTHb+WIDTHd-1DOWNTO0);——乘积z:OUTSTD_LOGIC);——运算结束指示ENDmulti_lpm;ARCHITECTUREoneOFmulti_lpmISTYPE
6、ssIS(s0,s1,s2,s3);——定义状态机SIGNALstate:ss:=s0;——定义状态变量SIGNALn:INTEGERRANGEWIDTHbDOWNTO0;——乘数位数SIGNALq:STD_LOGIC_VECTOR(WIDTHb+WIDTHdDOWNTO0);——累加寄存器SIGNALt:STD_LOGIC_VECTOR(WIDTHb-1DOWNTO0);——乘数BEGINPROCESS(clk,clrn)——此进程描述状态转移BEGINIFclrn='0'THENstate<=s0;ELSIF(clk'EVENTANDclk='1')THENCASEstateIS——用
7、CASE语句和IF语句来实现状态转移WHENs0=>IFst='1'THENstate<=s1;ENDIF;WHENs1=>state<=s2;WHENs2=>IFn=0THENstate<=s3;ELSEstate<=s1;ENDIF;WHENs3=>state<=s0;WHENOTHERS=>state<=s0;ENDCASE;ENDIF;ENDPROCESS;PROCESS(clk)——此进程描述寄存器操作VARI
此文档下载收益归作者所有