8位乘法器实验报告

合集下载

EDA实验--8位二进制乘法电路

EDA实验--8位二进制乘法电路

EDA数字系统设计实验——8位二进制乘法电路学院:电子工程学院学号:0210****姓名:***8位二进制乘法电路1.选题目的:通过八位二进制乘法器设计实验,进一步熟悉VHDL语言的电路设计,及数字电路的基本知识,为以后进一步在数字电路学习上奠定基础。

2.设计要求8位二进制乘法采用移位相加的方法。

即用乘数的各位数码,从低位开始依次与被乘数相乘,每相乘一次得到的积称为部分积,将第一次(由乘数最低位与被乘数相乘)得到的部分积右移一位并与第二次得到的部分积相加,将加得的和右移一位再与第三次得到的部分积相加,再将相加的结果右移一位与第四次得到的部分积相加。

直到所有的部分积都被加过一次。

例如:被乘数(M7M6M5M4M3M2M1M0)和乘数(N7N6N5N4N3N2N1N0)分别为11010101和10010011,其计算过程如下:1 1 0 1 0 1 0 1× 1 0 0 1 0 0 1 11 1 0 1 0 1 0 1 N0与被乘数相乘的部分积,部分积右移一位1 1 0 1 0 1 0 1 N1与被乘数相乘的部分积+ 1 1 0 1 0 1 0 11 0 0 1 1 1 1 1 1 11 0 0 1 1 1 1 1 1 1 两个部分积之和,部分积之和右移一位+ 0 0 0 0 0 0 0 0 N2与被乘数相乘的部分积0 1 0 0 1 1 1 1 1 1 10 1 0 0 1 1 1 1 1 1 1 与前面部分积之和相加,部分积之和右移一+ 0 0 0 0 0 0 0 0 N4与被乘数相乘的部分积· · ·· · · N7与被乘数相乘的部分积+ 1 1 0 1 0 1 0 11 1 1 1 0 1 0 0 1 0 0 1 1 1 1 与前面部分积之和相加0 1 1 1 1 0 1 0 0 1 0 0 1 1 1 右移一位得到最后的积为了实现硬件乘法器,根据上面的乘法的计算过程可以得出3点:一是只对两个二进制数进行相加操作,并用寄存器不断累加部分积;而是将累加的部分积左移(复制的被乘数不移动);三是乘数的对应位若为0时,对累加的部分积不产生影响(不操作)。

基于FPGA的8位硬件乘法器设计

基于FPGA的8位硬件乘法器设计

本科毕业设计基于FPGA的8位硬件乘法器设计摘要VHDL(VHSIC Hardware Description Language)是当今最流行的硬件描述语言之一,能够对最复杂的芯片和最完整的电子系统进行描述。

以硬件描述语言作为设计输入,经过简单的综合与布局,快速烧录至FPGA(Field Programmable Gate Array)上进行测试,是现代IC设计验证的技术主流。

乘法器是处理器进行科学计算和数字信号处理的基本硬件结构,是现代微处理器中的重要部件。

乘法器完成一次乘法操作的周期基本上决定了微处理器的主频。

本文基于FPGA,采用VHDL语言,结合MAX+plusⅡ这个强大的软件平台设计了8位二进制乘法器,并对其进行符号扩展,使其可以统一处理8位带符号数和无符号数。

高速乘法器设计通常分为三个关键步骤:部分积产生、部分积累加和最终结果获得。

本文对部分积产生过程采用改进Booth算法,有效减少部分积加法项;为了统一带符号和无符号数,对部分积进行符号扩展;而对部分积的累加则采取3-2压缩器和4-2压缩器进行压缩;最终结果的获得则以一个根据部分积累加结果到达时间的不同进行延迟优化的选择进位加法器将累加结果和累加进位相加而得。

关键词:乘法器改进Booth算法压缩器选择进位加法器The Circuit Design of 8-bit Hardware Multiplier Based on FPGAKe Xiuyan(College of Engineering, South China Agricultural University, Guangzhou 510642, China) Abstract: VHSIC Hardware Description Language, one of today's most popular hardware description languages, is used to describe the most complex chip and most complete electronic systems.The multiplier is not only the basic hardware structure of the processor for scientific computing and digital signal processing but also an important component of modern microprocessors. This design for 8-bit binary multiplier is based on FPGA, using VHDL language, and proved by the MAX+plusⅡsoftware platform. The multiplicand has an extended sign bit so that the multiplier can unify 8-bit signed and unsigned.High-speed multiplier design is usually divided into three key steps: partial product generation circuit, accumulator and adder. In this paper, the partial product generation process uses the modified Booth algorithm, so that the partial product addition terms can be effectively reduced. The accumulation of partial products takes 3-2 compressor and 4-2 compressor to compress. The final result is obtained with select carry adder.Key words: multiplier the modified Booth algorithm compressor select carry adder目录1 前言 (1)1.1 乘法器的研究背景和意义 (1)1.2 乘法器的研究发展状况 (1)2 总体方案确定 (2)2.1 乘法器设计方案 (2)2.2 硬件描述语言VHDL (3)2.2.1 硬件描述语言 (3)2.2.2 VHDL语言简介 (3)2.2.3 VHDL的基本结构 (4)2.2.4 VHDL的优点 (4)2.3 实验工具MAX+plusⅡ (5)2.3.1 MAX+plusⅡ简介 (5)2.3.2 MAX+plusⅡ的设计流程 (6)2.3.3 MAX+plusⅡ的特点 (6)2.4 现场可编辑门阵列(FPGA) (7)2.4.1 FPGA简介 (7)2.4.2 FPGA的基本结构 (7)2.4.3 FPGA的特点 (8)3 理论分析及设计 (9)3.1 乘法器的数据格式 (9)3.1.1 二进制的表示 (9)3.1.2 无符号数的运算 (9)3.1.3 带符号数的运算 (9)3.1.4 带符号数的符号扩展表示 (9)3.2 乘法器算法 (10)3.2.1 移位相加算法 (10)3.2.2 Booth算法 (11)3.2.3 改进型Booth算法 (12)3.3 加法器 (15)3.3.1 半加器 (15)3.3.2 全加器 (16)3.3.3 串行进位加法器 (16)3.3.4 超前进位加法器 (17)3.3.5 选择进位加法器 (18)3.4 压缩器 (19)4 测试与试验分析 (22)4.1 乘法器的总体结构 (22)4.2 乘法器各个模块的仿真 (23)4.2.1 Booth编码器 (23)4.2.2 Booth译码器 (23)4.2.3 部分积产生电路 (24)4.2.4 压缩器 (25)4.2.5 加法器 (26)4.2.6 顶层文件 (27)5 结论 (28)参考文献 (29)附录 (30)致谢 (33)毕业设计成绩评定表1 前言1.1 乘法器的研究背景和意义微电子技术的迅猛发展,计算机技术的不断进步,带动了集成电路工艺的不断增进,数字芯片的集成度不断提高。

中山学院EDA综合实验报告-8位硬件乘法器设计

中山学院EDA综合实验报告-8位硬件乘法器设计
三、实验结论与心得
在实验老师的指导下,我圆满完成了实验任务,有了不少收获,其中了解到了移位相加原理构成乘法器与用组合逻辑电路直接设计的同样功能的电路优势,并且在加深了如何通过VerilogHDL生成原理图器件并进行相应仿真,最后学习了应用移位相加原理设计8位乘法器。
3、ADDER8BT的仿真图及分析
如图所示,红色剪头表示8+11=19,绿色剪头表示8+9=17,紫色剪头表示8+9+1=18,这说明S=A+B+CIN。
4、完整乘法器的仿真图及分析
如图所示,红色剪头表示外部按键START按下(给SREG8BT的LOAD高电平)时给ARIEND一个高电平输出,绿色剪头处的Q为31104,而31104<<1结果为0xF300,此处最高位为0xF3,即相乘的结果为0xF3,这里表示B的数值0xF3乘以A的数值0xC8第4位再加上前3位的结果,因为前3位相乘后的结果为0,因此这里相乘的结果为0xF3,紫色剪头也是同理。
如图所示,在第一个2,此时输出Q=1536,其二进制表示为0000 0110 0000 0000,由VerilogHDL代码可知R16S[6:0]<=R16S[7:1]即R16S[6:0] = 0,R16S[15:7] = 12,此结果与Q输出结果一致绿色剪头与紫色剪头也是同理。
学生实验报告
系别
电子信息学院
课程名称
《EDA综合实验》
班级
实验名称
8位硬件乘法器设计
姓名
实验时间
学号
指导教师
成绩
批改时间
报告内容
一、实验目的和任务
1、学习应用移位相加原理设计8位乘法器。
2、了解移位相加原理构成乘法器与用组合逻辑电路直接设计的同样功能的

8位并行乘法器

8位并行乘法器

8位并行乘法器在数字信号处理中,乘法器的速度对整个芯片以及系统性能有着重要影响。

随着超大规模集成电路的发展,高速、低功耗、版图设计规则、占用芯片面积小等是乘法器研究的重点。

串行乘法器,通常是两个N位二进制数x、y的乘积用简单的方法计算就是利用移位操作来实现。

但计算一次乘法需要8个周期,这种乘法器的优点是所占用的资源是所有类型乘法器中最少的,在低速的信号处理中有着广泛的应用,但是串行乘法器速度比较慢、时延大。

为了加快运算速度,一般的快速乘法器通常采用逐位并行的迭代阵列结构,将每个操作数的N位都并行地提交给乘法器。

但是一般对于FPGA来讲,进位的速度快于加法的速度,这种阵列结构并不是最优的。

所以可以采用多级流水线的形式,将相邻的两个部分乘积结果再加到最终的输出乘积上,即排成一个二叉树形式的结构,这样对于N位乘法器需要lb(N)级来实现。

一、VHDL代码library IEEE;use IEEE.STD_LOGIC_1164.all;use IEEE.STD_LOGIC_ARITH.all;use IEEE.STD_LOGIC_UNSIGNED.all;entity chengfa isport( clk :in std_logic;a :in std_logic_VECTOR(7 downto 0);b :in std_logic_VECTOR(7 downto 0);cout:out std_logic_VECTOR(15 downto 0) );end chengfa;architecture one of chengfa issignal a1,b1:std_logic_vector(3 downto 0);signal a2,b2:std_logic_vector(7 downto 4);signal cout1:std_logic_vector(15 downto 0);signal cout2:std_logic_vector(15 downto 0);signal a1b1,a2b1,a1b2,a2b2:std_logic_vector(15 downto 0); beginprocess(a,b,clk)beginif clk'event and clk='1' thena1b1<="0000"&(a(5 downto 0) *b(5 downto 0));a2b1<="00"&(a(7 downto 6)*b(5 downto 0))&"000000"; a1b2<="00"&(a(5 downto 0)*b(7 downto 6))&"000000"; a2b2<=(a(7 downto 6)*b(7 downto 6))&"000000000000"; end if;end process;process(clk)beginif clk'event and clk='1' thencout1<=a1b1+a2b1;cout2<=a1b2+a2b2;end if;end process;process(clk)beginif clk'event and clk='1' thencout<=cout1+cout2;end if;end process;end one;。

8位乘法器设计范文

8位乘法器设计范文

8位乘法器设计范文1.乘法器的基本原理乘法器的基本原理是通过将两个数中的每一位进行相乘,得到部分乘积,然后将所有部分乘积相加得到最终的乘积。

以两个8位数A和B相乘为例,可以将A的每一位与B的每一位相乘,然后将部分乘积相加,得到一个16位的结果。

2.乘法器的电路结构一种常见的8位乘法器电路结构是使用一位乘法器和8位加法器组合而成。

这种结构可以将乘法操作分解为多个阶段,简化电路设计。

首先,使用一个一位乘法器对A的每一位分别与B的所有位进行相乘,得到8个部分乘积。

然后,使用8位加法器将这些部分乘积相加,得到最终的乘积。

3.一位乘法器的设计一位乘法器是8位乘法器的基本组成部分。

它是一个计算两个单独位的乘法结果的电路。

常见的一位乘法器实现方法包括使用门电路、Karnaugh图和有限状态机等。

3.1使用门电路的一位乘法器设计一位乘法器可以通过使用与门、或门和非门来实现。

基本原理是将两个输入位相与得到部分乘积的低位,然后使用或门和非门对部分乘积和进位进行处理,得到最终的乘积位和进位位。

3.2 使用Karnaugh图的一位乘法器设计Karnaugh图是一种按照二进制输入和输出函数绘制的图表。

它可以帮助分析和简化布尔代数函数。

使用Karnaugh图可以快速绘制并简化一位乘法器的逻辑电路。

3.3使用有限状态机的一位乘法器设计有限状态机是一种具有有限个状态和状态转移规则的模型。

可以使用有限状态机模型来描述和实现一位乘法器的行为。

这种设计方法可以更好地描述一位乘法器的状态转移关系,但也需要更复杂的控制电路。

4.8位乘法器的实现使用一位乘法器的设计方法,可以将乘法器分为两个阶段:部分乘积生成和部分乘积相加。

首先,使用8个一位乘法器对A的每一位与B的每一位进行相乘,得到8个部分乘积。

然后,使用8位加法器将这些部分乘积相加,得到最终的乘积。

这个设计方法的优点是每个一位乘法器可以独立并行地进行计算,提高了计算效率。

而且,部分乘积生成和部分乘积相加可以分别设计和优化,使得整个乘法器的电路结构更清晰。

ASIC系统设计实验报告八位乘法器

ASIC系统设计实验报告八位乘法器

八位乘法器的设计汪明 2080130204 信号与信息处理 乘法是算术运算中经常用到的一个运算单元,所以在算法实现中会经常用到乘法。

由于乘法器具有一定的复杂性,考虑到面积等因素,很多传统的处理器中都不包含乘法器单元,乘法则是通过算法换算成加法和移位在处理器中进行实现,针对这些处理器编写程序的时候应尽量少的应用乘法运算。

随着DSP 技术的逐步发展,目前大多数高性能的处理器中都包含了乘法器运算单元,但仍有很多小型的控制型处理器不包含这一单元,所以设计面积小、速度快、性能稳定的乘法器模块仍然很有意义。

本实验的目的是选用一种设计方案设计一个八位乘法器,利用XINLINX ISE 软件进行VHDL 程序的编写,然后对程序进行仿真验证,并对所设计的乘法器进行评价。

1 原理分析与方案选择乘法器的设计有多种方案,有模拟乘法器、数字乘法器两种类型,前者主要是利用模拟器件对模拟信号进行乘法的设计,复杂度较高,后者则是通过数字器件来实现数字信号的乘法。

本实验利用FPGA 设计数字乘法器件,根据数字信号的乘法运算准则,又有串行和并行两种设计方法,串行设计时被乘数从低位到高位串行输入,乘法结果从低位到高位串行输出,其常用的结构(四位乘法器)如下图(1)所示;并行乘法器的输入/输出采用并行的方式,通常情况下计算性能比串行的好。

图1 四位串行乘法器结构本文采用并行输入/输出方式来进行乘法器的设计。

下面以4位二进制数的乘法为例,对二进制乘法运算的过程(图2示)进行说明。

由图2可知,如果对中间部分一行一行的处理,则乘法部分由一个个的2输入与门与二输入全加器组成,将这些结构联合在一起组成如图3所示的结构。

)0()1()2()3()4()5()6()7(0313233302122232011121310010203001230123pro pro pro pro pro pro pro pro b a b a b a b a b a b a b a b a b a b a b a b a b a b a b a b a a a a a b b b b ----------------------------------------+••••+••••+••••••••⨯K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K 图2 四位二进制乘法过程图3 四位二进制乘法结构图从图3可以看出,上述结构中顶层、底层、中间层分别采用不同的结构,而且中间层的三个层结构完全相同。

8位乘法器实验报告

8位乘法器实验报告

6.2 8位乘法器的设计1.实验目的(1)熟悉isEXPERT/MAX+plusisEXPERT/MAX+plus II/Foudation Series 软件的基本使用方法。

(2)熟悉GW48-CK EDA实验开发系统的基本使用方法。

(3)学习VHDL基本逻辑电路的综合设计。

2.实验内容设计并调试好由8位加法器构成的以时序逻辑方式设计的8位乘法器。

此乘法器通过判断被乘数的位值为1还是零,并通过乘数的左移与上一次和相加的方法,实现了8位乘法的运算,并用GW48-CK EDA实验开发系统进行硬件验证。

3.实验条件(1)开发设备:Lattice ispEXPERT。

(2)实验设备:GW48-CK EDA实验开发系统。

(3)拟用芯片:ispLSI1032E PLCC-84或EPF10K10LC84-3或XCS05/XL PLCC84以及运算控制电路和外部时钟。

4.实验设计1)系统的原理框图2)VHDL源程序(1)选通与门模块的源程序ANDARITH.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ANDARITH ISPORT(ABIN: IN STD_LOGIC;DIN: IN STD_LOGIC_VECTOR(7 DOWNTO 0); DOUT: OUT STD_LOGIC_vector(7 DOWNTO 0)); END ENTITY ANDARITH;ARCHITECTURE ART OF ANDARITH ISBEGINPROCESS(ABIN,DIN)ISBEGINFOR I IN 0 TO 7 LOOPDOUT(I)<=DIN(I)AND ABIN;END LOOP;END PROCESS;END ARCHITECTURE ART;(2)16位锁存器的源程序REG16B.VHD LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG16B ISPORT (CLK: IN STD_LOGIC;CLR: IN STD_LOGIC;D: IN STD_LOGIC_VECTOR(8 DOWNTO 0); Q: OUT STD_LOGIC_VECTOR(15 DOWNTO 0)); END ENTITY REG16B;ARCHITECTURE ART OF REG16B ISSIGNAL R16S: STD_LOGIC_VECTOR(15 DOWNTO 0); BEGINPROCESS(CLK,CLR)ISBEGINIF CLR='1' THEN R16S<="0000000000000000"; ELSIF CLK'EVENT AND CLK= '1' THENR16S(6 DOWNTO 0)<=R16S(7 DOWNTO 1);R16S(15 DOWNTO 7)<=D;END IF;END PROCESS;Q<=R16S;END ARCHITECTURE ART;(3)8位右移寄存器的源程序SREG8B.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SREG8B ISPORT(CLK:IN STD_LOGIC; LOAD:IN STD_LOGIC; DIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0); QB: OUT STD_LOGIC);END ENTITY SREG8B;ARCHITECTURE ART OF SREG8B ISSIGNAL REG8B :STD_LOGIC_VECTOR(7 DOWNTO 0); BEGINPROCESS(CLK, LOAD)ISBEGINIF CLK'EVENT AND CLK='1'THENIF LOAD='1'THEN REG8B<=DIN;ELSE REG8B(6 DOWNTO 0)<=REG8B(7 DOWNTO 1); END IF;END IF;END PROCESS;QB<=REG8B(0);END ARCHITECTURE ART;(4)乘法运算控制器的源程序ARICTL.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ARICTL ISPORT(CLK:IN STD_LOGIC; START:IN STD_LOGIC; ARIEND:OUT STD_LOGIC;CLKOUT: OUT STD_LOGIC;RSTALL: OUT STD_LOGIC);END ENTITY ARICTL;ARCHITECTURE ART OF ARICTL ISSIGNAL CNT4B: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGINRSTALL<=START;PROCESS(CLK,START)ISBEGINIF START='1'THEN CNT4B<="0000";ELSIF CLK'EVENT AND CLK='1'THENIF CNT4B<8 THENCNT4B <=CNT4B+1;END IF;END IF;END PROCESS;PROCESS(CLK,CNT4B,START)ISBEGINIF START='0' THENIF CNT4B<8 THENCLKOUT <=CLK;ARIEND<='0';ELSE CLKOUT<='0';ARIEND<='1';END IF;ELSE CLKOUT<=CLK;ARIEND<='0';END IF;END PROCESS;END ARCHITECTURE ART;(5)8位乘法器的源程序MULTI8X8.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MULTI8X8 ISPORT(CLK:IN STD_LOGIC;START:IN STD_LOGIC;A:IN STD_LOGIC_VECTOR(7 DOWNTO 0);B:IN STD_LOGIC_VECTOR(7 DOWNTO 0);ARIEND:OUT STD_LOGIC;DOUT:OUT STD_LOGIC_VECTOR(15 DOWNTO 0)); END ENTITY MULTI8X8;ARCHITECTURE ART OF MULTI8X8 ISCOMPONENT ARICTL ISPORT(CLK:IN STD_LOGIC;START:IN STD_LOGIC;CLKOUT:OUT STD_LOGIC; RSTALL:OUT STD_LOGIC; ARIEND: OUT STD_LOGIC);END COMPONENT ARICTL;COMPONENT ANDARITH ISPORT(ABIN:IN STD_LOGIC;DIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0);DOUT: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END COMPONENT ANDARITH;COMPONENT ADDER8B ISPORT(CIN: IN STD_LOGIC;A: IN STD_LOGIC_VECTOR(7 DOWNTO 0);B: IN STD_LOGIC_VECTOR(7 DOWNTO 0);S: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);COUT: OUT STD_LOGIC);END COMPONENT ADDER8B ;COMPONENT SREG8B ISPORT(CLK: IN STD_LOGIC;LOAD: IN STD_LOGIC;DIN: IN STD_LOGIC_VECTOR(7 DOWNTO 0);QB: OUT STD_LOGIC);END COMPONENT SREG8B ;COMPONENT REG16B ISPORT (CLK: IN STD_LOGIC;CLR: IN STD_LOGIC;D: IN STD_LOGIC_VECTOR(8 DOWNTO 0);Q: OUT STD_LOGIC_VECTOR(15 DOWNTO 0)); END COMPONENT REG16B ;SIGNAL S1: STD_LOGIC;SIGNAL S2: STD_LOGIC;SIGNAL S3: STD_LOGIC;SIGNAL S4: STD_LOGIC;SIGNAL S5: STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL S6: STD_LOGIC_VECTOR(8 DOWNTO 0);SIGNAL S7: STD_LOGIC_VECTOR(15 DOWNTO 0);BEGINDOUT<=S7; S1<='0';U1:ARICTL PORT MAP(CLK=>CLK,START=>START,CLKOUT=>S2,RSTALL=>S3,ARIEND=>ARIEND);U2:SREG8B PORT MAP(CLK=>S2,LOAD=>S3,DIN=>A,QB=>S4);U3:ANDARITH PORT MAP(ABIN=>S4,DIN=>B,DOUT=>S5);U4:ADDER8B PORT MAP(CIN=>S1,A=>S7(15 DOWNTO 8)),B=>S5(7 DOWNTO 0),S=>S6(7 DOWNTO 0),COUT=>S6(8); U5:REG16B PORT MAP(CLK=>S2,CLR=>S3,D=>S6(8 DOWNTO 0),Q=>S7(7 DOWNTO 0));END ARCHITECTURE ART;5.系统仿真文件当ATRRT为高电平时,将16位寄存器清零,当START为低电平时,在CLK为1时进行乘法运算,通过8次移位和加法操作,运算进行8个CLK为1的时钟,之后得到输出结果,且ARIEND为1,乘法运算结束。

8bit booth乘法器

8bit booth乘法器

8bit booth乘法器8位乘法器是一种能够完成两个8位二进制数的乘法运算的电子器件。

在数字电路和计算机学中,乘法器是实现算术运算的重要组件之一。

由于乘法涉及到多位数的运算,所以乘法器的设计将会比加法器复杂一些,但因为其实现是数字逻辑的原理之一,所以乘法器仍然是非常常见且广泛应用的电路。

8位乘法器由多个基本的逻辑门组成,这些逻辑门能够根据一个简单的算法将两个输入的数相乘得出一个结果。

下面将会详细介绍8位乘法器的工作原理、设计方法和优缺点。

1. 工作原理8位乘法器的工作原理是通过模拟手算乘法的过程来实现:将其中一个乘数按照二进制数的位数将其分为多个数字,然后逐位与另一个乘数相乘;然后将相乘所得的结果相加,得到最终的积。

8位乘法器通常采用Booth乘法算法。

Booth乘法算法是一种数值优化的乘法算法,其基本思想是在乘法过程中尽量减少加法器的使用次数。

Booth乘法使用了“移位-加/减”操作,通过每次将操作数向右移一位,从而将相乘的过程分解成一系列的加/减运算。

具体来讲,假设我们要将A和B两个8位二进制数相乘,现在以A=00101011和B=00011101为例说明Booth乘法的具体流程:1) 将A和B扩展为9位宽,即A=000101011和B=000011101;2) 将B的最低位和次低位相连,得到"01",将其作为操作码,表示下一步的移位和加/减操作的类型;3) 将A向左移一位,再加上操作码;4) 根据操作码,选择加法或减法,得到一个结果,存储在寄存器中;5) 将寄存器向右移一位,得到下一步的操作码;6) 重复3)到5)的步骤,共进行8次,即完成了整个乘法的计算。

Booth乘法的关键就在于它的“加减优化”机制。

当操作码为“01”时,表示需要对寄存器进行减法操作,而这个减法实际上是通过加上B 的补码来实现的;同样,当操作码为“10”时,表示需要对寄存器进行加法操作,但实际上是通过减去B的补码来实现的。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

6.2 8位乘法器的设计1.实验目的(1)熟悉isEXPERT/MAX+plusisEXPERT/MAX+plus II/Foudation Series 软件的基本使用方法。

(2)熟悉GW48-CK EDA实验开发系统的基本使用方法。

(3)学习VHDL基本逻辑电路的综合设计。

2.实验内容设计并调试好由8位加法器构成的以时序逻辑方式设计的8位乘法器。

此乘法器通过判断被乘数的位值为1还是零,并通过乘数的左移与上一次和相加的方法,实现了8位乘法的运算,并用GW48-CK EDA实验开发系统进行硬件验证。

3.实验条件(1)开发设备:Lattice ispEXPERT。

(2)实验设备:GW48-CK EDA实验开发系统。

(3)拟用芯片:ispLSI1032E PLCC-84或EPF10K10LC84-3或XCS05/XL PLCC84以及运算控制电路和外部时钟。

4.实验设计1)系统的原理框图2)VHDL源程序(1)选通与门模块的源程序ANDARITH.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ANDARITH ISPORT(ABIN: IN STD_LOGIC;DIN: IN STD_LOGIC_VECTOR(7 DOWNTO 0); DOUT: OUT STD_LOGIC_vector(7 DOWNTO 0)); END ENTITY ANDARITH;ARCHITECTURE ART OF ANDARITH ISBEGINPROCESS(ABIN,DIN)ISBEGINFOR I IN 0 TO 7 LOOPDOUT(I)<=DIN(I)AND ABIN;END LOOP;END PROCESS;END ARCHITECTURE ART;(2)16位锁存器的源程序REG16B.VHD LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG16B ISPORT (CLK: IN STD_LOGIC;CLR: IN STD_LOGIC;D: IN STD_LOGIC_VECTOR(8 DOWNTO 0); Q: OUT STD_LOGIC_VECTOR(15 DOWNTO 0)); END ENTITY REG16B;ARCHITECTURE ART OF REG16B ISSIGNAL R16S: STD_LOGIC_VECTOR(15 DOWNTO 0); BEGINPROCESS(CLK,CLR)ISBEGINIF CLR='1' THEN R16S<="0000000000000000"; ELSIF CLK'EVENT AND CLK= '1' THENR16S(6 DOWNTO 0)<=R16S(7 DOWNTO 1);R16S(15 DOWNTO 7)<=D;END IF;END PROCESS;Q<=R16S;END ARCHITECTURE ART;(3)8位右移寄存器的源程序SREG8B.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SREG8B ISPORT(CLK:IN STD_LOGIC; LOAD:IN STD_LOGIC; DIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0); QB: OUT STD_LOGIC);END ENTITY SREG8B;ARCHITECTURE ART OF SREG8B ISSIGNAL REG8B :STD_LOGIC_VECTOR(7 DOWNTO 0); BEGINPROCESS(CLK, LOAD)ISBEGINIF CLK'EVENT AND CLK='1'THENIF LOAD='1'THEN REG8B<=DIN;ELSE REG8B(6 DOWNTO 0)<=REG8B(7 DOWNTO 1); END IF;END IF;END PROCESS;QB<=REG8B(0);END ARCHITECTURE ART;(4)乘法运算控制器的源程序ARICTL.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ARICTL ISPORT(CLK:IN STD_LOGIC; START:IN STD_LOGIC; ARIEND:OUT STD_LOGIC;CLKOUT: OUT STD_LOGIC;RSTALL: OUT STD_LOGIC);END ENTITY ARICTL;ARCHITECTURE ART OF ARICTL ISSIGNAL CNT4B: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGINRSTALL<=START;PROCESS(CLK,START)ISBEGINIF START='1'THEN CNT4B<="0000";ELSIF CLK'EVENT AND CLK='1'THENIF CNT4B<8 THENCNT4B <=CNT4B+1;END IF;END IF;END PROCESS;PROCESS(CLK,CNT4B,START)ISBEGINIF START='0' THENIF CNT4B<8 THENCLKOUT <=CLK;ARIEND<='0';ELSE CLKOUT<='0';ARIEND<='1';END IF;ELSE CLKOUT<=CLK;ARIEND<='0';END IF;END PROCESS;END ARCHITECTURE ART;(5)8位乘法器的源程序MULTI8X8.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MULTI8X8 ISPORT(CLK:IN STD_LOGIC;START:IN STD_LOGIC;A:IN STD_LOGIC_VECTOR(7 DOWNTO 0);B:IN STD_LOGIC_VECTOR(7 DOWNTO 0);ARIEND:OUT STD_LOGIC;DOUT:OUT STD_LOGIC_VECTOR(15 DOWNTO 0)); END ENTITY MULTI8X8;ARCHITECTURE ART OF MULTI8X8 ISCOMPONENT ARICTL ISPORT(CLK:IN STD_LOGIC;START:IN STD_LOGIC;CLKOUT:OUT STD_LOGIC; RSTALL:OUT STD_LOGIC; ARIEND: OUT STD_LOGIC);END COMPONENT ARICTL;COMPONENT ANDARITH ISPORT(ABIN:IN STD_LOGIC;DIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0);DOUT: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END COMPONENT ANDARITH;COMPONENT ADDER8B ISPORT(CIN: IN STD_LOGIC;A: IN STD_LOGIC_VECTOR(7 DOWNTO 0);B: IN STD_LOGIC_VECTOR(7 DOWNTO 0);S: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);COUT: OUT STD_LOGIC);END COMPONENT ADDER8B ;COMPONENT SREG8B ISPORT(CLK: IN STD_LOGIC;LOAD: IN STD_LOGIC;DIN: IN STD_LOGIC_VECTOR(7 DOWNTO 0);QB: OUT STD_LOGIC);END COMPONENT SREG8B ;COMPONENT REG16B ISPORT (CLK: IN STD_LOGIC;CLR: IN STD_LOGIC;D: IN STD_LOGIC_VECTOR(8 DOWNTO 0);Q: OUT STD_LOGIC_VECTOR(15 DOWNTO 0)); END COMPONENT REG16B ;SIGNAL S1: STD_LOGIC;SIGNAL S2: STD_LOGIC;SIGNAL S3: STD_LOGIC;SIGNAL S4: STD_LOGIC;SIGNAL S5: STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL S6: STD_LOGIC_VECTOR(8 DOWNTO 0);SIGNAL S7: STD_LOGIC_VECTOR(15 DOWNTO 0);BEGINDOUT<=S7; S1<='0';U1:ARICTL PORT MAP(CLK=>CLK,START=>START,CLKOUT=>S2,RSTALL=>S3,ARIEND=>ARIEND);U2:SREG8B PORT MAP(CLK=>S2,LOAD=>S3,DIN=>A,QB=>S4);U3:ANDARITH PORT MAP(ABIN=>S4,DIN=>B,DOUT=>S5);U4:ADDER8B PORT MAP(CIN=>S1,A=>S7(15 DOWNTO 8)),B=>S5(7 DOWNTO 0),S=>S6(7 DOWNTO 0),COUT=>S6(8); U5:REG16B PORT MAP(CLK=>S2,CLR=>S3,D=>S6(8 DOWNTO 0),Q=>S7(7 DOWNTO 0));END ARCHITECTURE ART;5.系统仿真文件当ATRRT为高电平时,将16位寄存器清零,当START为低电平时,在CLK为1时进行乘法运算,通过8次移位和加法操作,运算进行8个CLK为1的时钟,之后得到输出结果,且ARIEND为1,乘法运算结束。

相关文档
最新文档