数电课程设计四位二进制乘法器的设计与实现

合集下载

4位乘法器

4位乘法器

一、概述利用四位二进制寄存器、全加器以及D触发器等元器件,实现四位二进制乘法器的控制部分和乘法的实现部分。

成法是加法的简便运算乘法运算只能通过加法运算以及移位运算来实现。

在控制端用四个触发器产生四个控制信号来控制实现的加法移位功能,实现端在控制端信号作用下依次执行置零、加法、移位和循环操作。

二、方案说明设计一个4位二进制乘法器,可以存储其乘积。

电路原理框图如图1所示。

乘法器可以利用家发起和寄存器实现。

图1 乘法器原理框图寄存器B存放被乘数,寄存器Q存放乘数,两个乘积长度可能是原来的2倍,故计算完成后将累加和高位放入寄存器A,而Q放寄存器的低位,P 记录乘数的位数,每形成一个部分P加1,当P=4时,乘法结束,两数之积放在AQ寄存器中。

控制端产生四个控制信号分别为T0、T1、T2、T3。

在初态T0时,被乘数和乘数已分别存于寄存器B和Q中,等待启动信号S的到来,当S=1时控制器进入状态T1,在此状态下A、E、P清零,准备乘法操作。

从状态T2开始,控制器进入累计部分积的循环操作过程。

首先检验乘数的最低有效位Q1。

如Q1=1,A和B相加结果存于A和E之中;如果Q1=0,不做加法运算。

无论Q1为何值,都要将计数器P加1。

在状态T3,合成寄存器EAQ右移一位得到累计的部分积,时检测P之值,如果P不等于4,状态返回T2,继续累计部分积的过程。

如果P=4,停止循环,系统返回初始状态T0。

三、电路设计1、控制器设计根据图2所示的ASM图表,可以设计二进制乘法器的控制器。

图2 二进制乘法器ASM图表四个D触发器的驱动方程为:D0=T0S’+T3Z=((T0S’)’·(T3Z)’)’D1=T0S=((T0S)’)’D2=T1+T3Z’=(T1’·(T3Z’)’)’D3=T2控制器仿真电路如图2所示。

控制器中S为启动信号,高电平有效,系统开始工作时应使T0=1,T1=T2=T3=0,故图中设置了Reset信号(负脉冲)图2 二进制乘法器的控制逻辑图2. 二进制乘法器数据处理器(1) A寄存器A寄存器具有并入、移位、同步清0和保持功能。

4位乘法器的设计

4位乘法器的设计

4位乘法器的设计乘法器是计算机中非常重要的组成部分,用于实现数字乘法运算。

在设计4位乘法器时,需要考虑到多个方面,如计算的准确性、速度和功耗等。

本文将详细探讨4位乘法器的设计原理、逻辑电路实现以及性能分析。

1.乘法器的基本原理乘法操作是通过将被乘数与乘数一位一位地相乘,再将各位的结果相加得到最终的乘积。

因此,4位乘法器的设计需要考虑到每一位乘法的计算和结果的累加。

2.乘法器的逻辑电路实现2.14位乘法器的简单实现最简单的方法是采用两个4位二进制数相乘的定义,即将每一位的乘积相加得到最终的结果。

这可以通过4个并行的与门和一些全加器来实现。

具体的逻辑电路图如下所示:A0───────┐┌─────A1───────┤├─────A2───────┤├─────A3───────┤├─────AND0 OR0 CoutB0───────┐│B1───────┤XOR0B2───────┤B3───────┘从上图可以看出,A0到A3和B0到B3分别作为输入,经过与门得到各位的乘积,然后通过一系列的全加器将乘积相加得到最终结果。

在这种设计中,每个位的计算之间是并行的,因此可以快速得到乘法运算的结果。

2.2优化的4位乘法器上述简单实现的4位乘法器虽然能够实现乘法运算,但其性能方面存在一些不足。

为了提高性能,可以采用更复杂的逻辑电路设计。

一种常见的优化方法是使用布斯加算器(Booth's Algorithm)来实现乘法运算。

这种方法通过将乘法运算转化为位移和加减运算来减少乘法的次数,从而提高性能。

具体的实现方法如下:1)将被乘数和乘数拓展到5位,比特位B4作为符号位,初始值为0。

2)将被乘数拓展为4位乘子,乘数拓展为5位乘数。

3)初始化中间结果为0。

4)迭代循环4次进行乘法运算,每次进行下面的步骤:-如果乘数的最低位和符号位相同,什么都不做。

-如果乘数的最低位为0且前一位为1,将乘数和被乘数相加。

-如果乘数的最低位为1且前一位为0,将乘数和被乘数相减。

四位二进制乘法器课程设计报告

四位二进制乘法器课程设计报告

外,通过更换库再重新综合很容易移植为ASIC设 计。 (三)独立性 VHDL的硬件描述与具体的工艺技术和硬件结构无 关。设计者可以不懂硬件的结构,也不必管最终设 计实现的目标器件是什么,而进行独立的设计。程 序设计的硬件目标器件有广阔的选择范围,可以是 各系列的CPLD、FPGA及各种门阵列器件。 (四)可操作性 由于VHDL具有类属描述语句和子程序调用等功能, 对于已完成的设计,在不改变源程序的条件下,只 需改变端口类属参量或函数,就能轻易地改变设计 的规模和结构。 (五)灵活性 VHDL最初是作为一种仿真标准格式出现的,有着丰 富的仿真语句和库函数。使其在任何大系统的设计 中,随时可对设计进行仿真模拟。所以,即使在远 离门级的高层次(即使设计尚未完成时),设计者 就能够对整个工程设计的结构和功能的可行性进行 查验,并做出决策。
有了更深了解,其实当初想到设计这个课题。 1.2 设计要求 1)构造一个4位二进制乘法器; 2)受按键控制由4bit输入端口先后输入四位乘数 和被乘数(乘数,被乘数均由HDB3码表示); 3)用两个七段数码管显示积,以十进制显示; 2硬件描述语言——VHDL 2.1 VHDL简介 VHDL语言是一种用于电路设计的高级语言。它在 80年代的后期出现。最初是由美国国防部开发出来 供美军用来提高设计的可靠性和缩减开发周期的一 种使用范围较小的设计语言 。但是,由于它在一 定程度上满足了当时的设计需求,于是他在1987年 成为A I/IEEE的标准(IEEE STD 1076-1987)。 1993年更进一步修订,变得更加完备,成为A I/IEEE的A I/IEEE STD 1076-1993标准。目前,大 多数的CAD厂商出品的EDA软件都兼容了这种标准。 VHDL的英文全写是:VHSIC(Very High eed Integrated Circuit)Hardware Descriptiong Language.翻译成中文就是超高速集成电路硬件描 述语言。因此它的应用主要是应用在数字电路的设 计中。目前,它在中国的应用多数是用在 FPGA/CPLD/EPLD的设计中。当然在一些实力较为雄 厚的单位,它也被用来设计ASIC。 VHDL主要用于

四位二进制乘法器的设计与实现

四位二进制乘法器的设计与实现

四位二进制乘法器的设计与实现1.实验目的A A A A设计一个乘法器,实现两个四位二进制数的乘法。

两个二进制数分别是被乘数3210B B B B。

被乘数和乘数这两个二进制数分别由高低电平给出。

乘法运算的结果即乘和乘数3210积由电平指示灯显示的二进制数。

做到保持乘积、输出乘积,即认为目的实现,结束运算。

2.总体设计方案或技术路线总体思路:将乘法运算分解为加法运算和移位运算。

根据Bi的值决定部分积P与A相加或与0相加,之后移位,经过四次以上运算后得到最终的乘积。

对于4位乘法器而言,设A=1011,B=1101,则运算过程可由下图所示。

从乘法运算过程可知,乘法运算可分解为移位和相加两种子运算,而且是多次相加运算,所以是一个累加的过程。

实现这一累加过程的方法是,把每次相加的结果用部分积P表示,若B中某一位Bi=1,把部分积P与A相加后右移1位;若B中某一位Bi= 0,则部分积P与0相加后右移1位(相当于只移位不累加)。

通过4次累加和移位,最后得到的部分积P就是A与B的乘积。

为了便于理解乘法器的算法,将乘法运算过程中部分积P的变化情况用图3表示出来。

存放部分积的是一个9位的寄存器,其最高位用于存放在做加法运算时的进位输出。

先把寄存器内容清零,再经过4次的加法和移位操作就可得到积。

注意,每次做加法运算时,被乘数A与部分积的P7~P4位相加。

设A=1011,B=1101则结果如下图所示技术路线:实验中,将乘法器电路分为三个部分分别设计,分别是时钟电路,乘法控制电路,乘法运算电路。

(1) 时钟电路:由一个D 触发器和一个非门组成,D 触发器为二分频接法。

时钟电路共产生CP ̅̅̅̅, CLK,CLK ̅̅̅̅̅̅三个不同于原时钟CP 的时钟,其中CP̅̅̅̅是寄存器1,2的时钟,CLK 是寄存器3,4的时钟,CLK̅̅̅̅̅̅是计数器,控制端D 触发器的时钟。

(2) 乘法控制电路:由一个D 触发器,一个计数器和两个与非门组成。

数字电路课程设计之乘法器

数字电路课程设计之乘法器

X
Y
C
S
0
0
0
0
0
1
0
1
1
0
0
1
1
1
1
0
最简积之和式为 S=X`Y+XY`=X○+ Y;C=XY.
电路图为:
X`
1
3
Y
2
X
1
3
Y`
2
X
1
3
S
Y
2
1
3
S
2
X
1
Y
2
3
C
1
3
C
2
2.2 全加器
全加器是为三输入两输出,输入存在进位,真值表如下图所示,输入 X,Y,Z,输出 C,S
X
Y
Z
C
S
0
0
0
0
0
0
0
1
0
carry_look_add cla1 (.A(v),.B(w),.Cin(0),.Cout(d[4]),.S(d[3:0])); assign S[1]= d[0]; and (z[0],A[2],B[0]); and (z[1],A[2],B[1]); and (z[2],A[2],B[2]); and (z[3],A[2],B[3]); carry_look_add cla2 (.A(d[4:1]),.B(z),.Cin(0),.Cout(d1[4]),.S(d1[3:0])); assign S[2]=d1[0];
and (x[0],A[3],B[0]); and (x[1],A[3],B[1]); and (x[2],A[3],B[2]); and (x[3],A[3],B[3]); carry_look_add cla3 (.A(d1[4:1]),.B(x),.Cin(0),.Cout(d2[4]),.S(d2[3:0])); assign S[7:3]=d2[4:0]; endmodule 3.6 Verilog 测试平台语言编写 `timescale 1ns/1ps module mul_tb(); reg[3:0] A,B; wire [7:0] S; mul mu (.A(A),.B(B),.S(S)); initial begin

乘法运算电路设计

乘法运算电路设计

乘法运算电路设计通常涉及到模拟或数字电路设计。

这里提供一种基于数字电路设计的简单示例,说明如何设计一个二进制乘法器。

一、二进制乘法器设计
1. 设计原理:
假设有两个两位的二进制数A1 A0和B1 B0,它们相乘的结果是Y3 Y2 Y1 Y0。

这个设计基于基本的二进制乘法原理。

2. 逻辑电路图:
根据乘法的定义,可以归纳出输出4位二进制数与输入的两位二进制数之间的逻辑关系,并据此设计逻辑电路图。

3. 仿真波形图:
通过仿真测试,验证设计的正确性。

二、硬件乘法器电路设计
1. 设计思路:
利用硬件箱自带的16进制码发生器,通过对应的键控制输出4位2进制构成的1位16进制码,数的范围是0000~1111,即
0H~FH。

每按键一次,输出递增1,输出进入目标芯片的4位2进制数将显示在该键对应的数码管。

2. 乘数和被乘数的输入模块:
将16进制码的A~F码设计成输出为null,减少无用码的输入。

3. 程序设计:
利用移位相加的方法简化程序。

以上是一个简单的乘法运算电路设计的概述,具体的电路设计还需要根据实际需求和条件进行优化和调整。

4位乘法器的设计

4位乘法器的设计

数字电子技术课程设计报告题目: 4位乘法器的设计学年 2009-2010 学期 2专业***** 班级:***学号:****** 姓名:***指导教师: ***8时间:2010年3 月1 日~2010 年3 月4 日浙江万里学院电子信息学院目录一、设计任务与要求 (3)二、设计总体方案 (3)三、各单元模块电路的设计实施方案 (5)四、结果分析 (7)五、体会和总结 (10)附录一、电路设计总图 (10)附录二、主要芯片引脚图 (10)1、 设计任务与要求试设计一4位二进制乘法器输入信号:4位被乘数A (A 3 A 2 A 1 A 0),4位乘数B (B 3 B 2 B 1 B 0),启动信号START 。

输出信号:8位乘积P (P 7 P 6 P 5 P 4 P 3 P 2 P 1 P 0),结束信号END 。

当发出一个高电平的START 信号以后,乘法器开始乘法运算,运算完成以后发出高电平的END 信号。

2、设计总体方案移向-加法器数混合乘法器实现框图如图所示,主体包括寄存序列、与逻辑和加法器等三部分。

乘数通过实现框图看出其原理就是:被乘数与乘数进入寄存序列,然后通过与逻辑和加法器的运算后得到被乘数与乘数的乘积。

其中启动信号用来启动乘法运算,而清零信号则为积存器和计数器的清零信号。

可以确定乘法器的表达式为:B AII B AI B AII AI Y ⨯+⨯⨯=⨯+⨯=222)2(移向-加法器树混合乘法器算法方案框图设计出的移向-加法器树混合乘法器框。

END P AB START1 0 1 11 1 0 1×1 0 1 10 0 0 01 0 1 11 0 1 111011001移向-加法器数混合乘法结构框图从结构框图中可以看出:被乘数与4位二进制乘数的低二位通过寄存器相乘得到的6位的2进制数部分积,然后被乘数与4位二进制的高二位在通过寄存器阵列相乘后也得到了6位2进制数部分积。

2个部分积通过加法器后得可以得到8位2进制乘积了。

4位二进制乘法器课设报告

4位二进制乘法器课设报告

课程设计4位二进制乘法器电路的设计班级学号学生姓名指导教师课程设计任务书课程名称数字逻辑课程设计课程设计题目4位二进制乘法器电路的设计课程设计的内容及要求:一、设计说明设计一个4位二进制乘法器,可以存贮其乘积。

电路原理框图如图1所示。

乘法器可以利用加法器和寄存器实现。

图1 乘法器原理框图寄存器B存放被乘数,寄存器Q存放乘数,两个乘积长度有可能是原来的2倍,故计算完成后将累加和寄存器A放乘积的高位,而Q放乘积的低位,P记录乘数的位数,每形成一个部分积P加1,当P=4时,乘法结束,两数之积放在AQ寄存器中。

二、技术指标1.设计4位二进制乘法器。

2.其乘积可以存贮。

三、设计要求1.在选择器件时,应考虑成本。

2.根据技术指标通过分析计算确定电路形式和元器件参数。

3.主要器件:(1)74LS74双D触发器;(2)74LS194双向移位的寄存器;(3)74LS283加法器;(4)74LS00、74LS04等门电路。

四、实验要求1.根据技术指标制定实验方案;验证所设计的电路。

2.进行实验数据处理和分析。

五、推荐参考资料1.谢自美. 电子线路设计·实验·测试. [M]武汉:华中理工大学出版社,2000年2.阎石. 数字电子技术基础. [M]北京:高等教育出版社,2006年3.付家才. 电子实验与实践. [M]北京:高等教育出版社,2004年六、按照要求撰写课程设计报告成绩评定表:指导教师签字:一、概述4位二进制乘法器在实际中具有广泛应用。

它是一些计算器的基本组成部分,其原理适用于很多计算器和大型计算机,它涉及到时序逻辑电路如何设计、分析和工作等方面。

通过此电路更深刻的了解时序逻辑部件的工作原理,从而掌握如何根据需要设计满足要求的各种电路图,解决生活中的实际问题,将所学知识应用于实践中。

根据任务书规定,设计电路的技术指标:设计乘积可存贮的4位二进制乘法器;设计要求:根据成本选择器件,根据技术指标确定电路形式和元器件参数;实验要求:根据技术指标制定实验方案,并验证所设计的电路,对实验数据进行处理和分析。

4位数字乘法器设计

4位数字乘法器设计

4位数字乘法器设计
设计一个4位数字乘法器需要考虑多个方面,包括硬件设计和
算法实现。

首先,在硬件设计方面,可以使用逻辑门、寄存器和加法器等
元件来实现。

可以将两个4位的输入数分别存储在两个寄存器中,
然后使用逻辑门和加法器来实现乘法运算。

具体来说,可以使用乘
法器的部分积计算方法,将被乘数的每一位与乘数的每一位相乘,
并将结果相加得到最终的乘积。

另外,还需要考虑溢出和进位的处理。

在乘法过程中,可能会
产生进位,需要确保算法能够正确处理进位。

同时,乘法的结果可
能会超出4位的表示范围,因此需要考虑如何处理溢出的情况。

在算法实现方面,可以采用乘法的基本原理,逐位相乘并累加
的方法来实现4位数字的乘法运算。

可以使用循环结构来逐位相乘
并累加,同时考虑进位和溢出的情况,确保算法的正确性和稳定性。

总的来说,设计一个4位数字乘法器需要综合考虑硬件设计和
算法实现两个方面,确保乘法器能够正确高效地进行4位数字的乘法运算。

数电— 4位并行乘法器的电路设计与仿真

数电— 4位并行乘法器的电路设计与仿真
# 140reset=0,a=15,b=14,y=146
# 155reset=0,a=15,b=14,y=162
# 170reset=0,a=15,b=14,y=178
# 185reset=0,a=15,b=14,y=210
# 200reset=0,a= 0,b= 0,y=210
# 225reset=0,a= 0,b= 0,y=156
reg a,b,ci;
wire s,co;
fulladder add0(s,co,a,b,ci);
initial
begin
a=1'b0;b=1'b0;ci=1'b1;
#15 a=1'b0;b=1'b0;ci=1'b0;
$monitor($time,"a=%d,b=%d,ci=%d,s=%d,co=%d",a,b,ci,s,co);
文档:分析文档、设计文档、测试文档、代码和总结。
设要有完整的组合逻辑电路设计步骤;
每一步骤完成要正确合理;
设计电路时分模块测试。
时间安排
分析设计阶段:周一至周二上午;
代码编写阶段:周二下午至周三;
代码测试优化阶段:周四;
仿真分析及总结:周五上午;
验收:周五下午。
验收标准
文档齐全(20分)。
注:无文档不可以进行下一步。
#15 a=1'b1;b=1'b1;ci=1'b1;
end
endmodule
//一位全加器加上最大延迟15ns,分析乘法器最大延时为90ns(六个全加器),
//实际测得乘法器延时75ns,即可输出正确结果。测试结果如下:
# 0reset=1,a= 1,b= 4,y= 0

实验五 四位移位乘法器

实验五 四位移位乘法器

实验五四位移位乘法器一、实验目的1. 学会用层次化设计方法进行逻辑设计;2. 设计一个八位乘法器。

二、实验原理1)乘法器工作原理:四位二进制乘法采用移位相加的方法。

即用乘数的各位数码, 从高位开始依次于被乘数相乘, 每相乘一次得到的积称为部分积, 将第一次得到的部分积左移一位并与第二次得到的部分积相加, 将加得的和左移一位再与第三次得到的部分积相加, 再将相加的结果左移一位与第四次得到的部分积相加,……直到所有的部分积都被加过一次。

最后的结果以十进制的形式通过三个数码管进行显示。

2)设计整体思路:主要分两大模块,乘法器模块和主模块。

第一步:乘法器通过一个function实现,该函数输出为八位二进制数的积;第二步:把八位二进制数转化为三位十进制数,分别为个位、十位、百位,由主模块实现。

第三步:依次选通三个数码管,让这三个数码管分别显示第二步中的个、十、百位,由主模块实现。

3)轮换显示工作原理:因为硬件对数码管的显示控制只有8个管口,所以同一时间只能控制一个数码管的显示。

我们利用视觉暂留的原理,采用一个时钟信号(除lhz以外均可)控制是三个数码管的依次轮换选通,可以达到三个数码管同时显示的视觉效果。

我们采用一个2位的二进制数的累加来选通数码管,同时让数码管显示个、时、百位。

三、思路流程图四、实验流程图注意:时钟clk 给1M Hz六、实验心得1、把八位二进制数转化为三位十进制数,分别为个位、十位、百位:result1=out/100; //求出百位 result3=out%10; //求出个位 result2=(out%100)/10; //求出十位 2、个位、十位、百位必须用三个变量来存储,不能用一个三位的变量来存储,因为要存储的是十进制数,而一个三位的变量中的某一位只能是0或者1,无法表示一个十进制数。

3、看了很多同学的代码后发现大家用了模块调用,在这里我没有用调用,用一个FOR 循环,实现了代码简单。

用Verilog实现题示电路实现四位二进制无符号数乘法计算(a3a2a1a0Xb3b2b1b0)

用Verilog实现题示电路实现四位二进制无符号数乘法计算(a3a2a1a0Xb3b2b1b0)

(二) 设计电路
该运算可由如下电路实现:
运算电路
-6-
(三)程序编写
根据电路,编写如下程序: module yunsuan(A,B,D); input [4:1] A,B; output[2*4:1] D; reg [2*4:1] D; integer i; always @(*) begin D=0; for(i=1;i<=4;i=i+1) if(B[i]) D=D+(A<<(i-1)); end endmodule
-8-
得到如下实验结果:
经过测试, 程序能够顺利执行四位二进制数的乘法, 计算结果与实际值符合。
三.设计总结
我们采用了分工合作, 互补互助的方式完成了此次设计。我们每人先设计其 中一道题目,然后交换彼此的设计与仿真结果,进行检查改进,最终顺利完成了 设计任务。 通过本次课程设计,基本掌握了由要求设计电路、由电路编写 VERILOG 语 言、 调试程序并解决问题的方式方法,使我们对于硬件描述语言有了一个基本的 了解,加深了对数电理论知识及其运用的理解能力。 本次设计最大的收获应该是学会了如何在设计中发现问题并解决问题, 然后 是学会了 Multisim 软件的基本使用方法。
-7-
.D(D) ); initial begin // Initialize Inputs A = 0; B = 0; // Wait 100 ns for global reset to finish #100; // Add stimulus here A=4'b1011; B=4'b1100; #100; A=4'b1000; B=4'b1111; #100; A=4'b1010; B=4'b0101; #100; end endmodule

vhdl 四位流水线乘法器

vhdl 四位流水线乘法器

实验二四位流水线乘法器一、实验目的1.了解四位并行乘法器的原理。

2.了解四位并行乘法器的设计思想和流水线的实现方法。

3.掌握用VHDL 语言实现基本二进制运算的方法。

二、实验内容与要求通过开关和键盘输入两组4BIT的二进制数据,按照二进制加法器原理进行加和,求出和及进位,并通过LED显示灯输出显示,完成编译、综合、适配、仿真、实验箱上的硬件测试。

三、实验原理流水线结构的并行乘法器的最大有点就是速度快,尤其实在连续输入的乘法器中,可以达到近乎单周期的运算速度。

流水线乘法器是组合逻辑电路实现无符号数乘法的方法上发展而来的。

其关键是在组合逻辑电路的基础上插入寄存器。

假如有被乘数A 和乘数B,首先用A 与B 的最低位相乘得到S1,然后再把A 左移1 位与B 的第2 位相乘得到S2,再将A 左移3 位与B 的第三位相乘得到S3,依此类推,直到把B 的所有位都乘完为止,然后再把乘得的结果S1、S2、S3……相加即得到相乘的结果。

需要注意的是,具体实现乘法器是,并不是真正的去乘,而是利用简单的判断去实现,举个简单的例子。

假如A 左移n 位后与B 的第n 位相乘,如果B 的这位为‘1’,那么相乘的中间结果就是A 左移n 位后的结果,否则如果B 的这位为‘0’,那么就直接让相乘的中间结果为0 即可。

带B 的所有位相乘结束后,把所有的中间结果相加即得到A 与B 相乘的结果。

在此基础上插入寄存器即可实现流水线乘法器。

四、实验平台(1)硬件:计算机、GX-SOC/SOPC-DEV-LABCycloneII EP2C35F672C8核心板(2)软件:Quartus II软件PIN_AF8 DATAOUT[4] LED4PIN_AE7 DATAOUT[5] LED5PIN_AF7 DATAOUT[6] LED6PIN_AA11 DATAOUT[7] LED7PIN_AE21 BCD[0] 数码管DP4BPIN_AB20 BCD[1]PIN_AC20 BCD[2]PIN_AF20 BCD[3]PIN_AE20 BCD[4] 数码管DP5BPIN_AD19 BCD[5]PIN_AC19 BCD[6]PIN_AA17 BCD[7]PIN_AA18 BCD[8] 数码管DP6BPIN_W17 BCD[9]PIN_V17 BCD[10]PIN_AB18 BCD[11]六、仿真截图七、硬件实现八、程序代码1---clkgen.vhdlibrary IEEE;-- 1HZuse IEEE.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity clkgen isport (CLK : in std_logic;CLK1HZ: out std_logic);end entity;architecture clk_arch of clkgen issignal COUNT : integer range 0 to 50000000; --50MHZ -->1hz begin -- 50M/1=50000000 PROCESS(CLK)BEGINif clk'event and clk='1' thenIF COUNT= 50000000 thenCOUNT<=0;ELSE COUNT<=COUNT+1;END IF;END IF;END PROCESS;PROCESS(COUNT)BEGINIF COUNT= 5000000 THEN -- 1HZCLK1HZ<='1';ELSE CLK1HZ<='0';END IF;END PROCESS;end architecture;2—BCD-- 输出控制模块,把乘法器的输出转换成BCD码在数码管上显示、-- SCKZ.VHDlibrary IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity BIN2BCD isport ( DIN: in std_logic_vector(7 downto 0); ---The input 8bit binaryBCDOUT: out std_logic_vector(11 downto 0)--输出显示, 已转换成BCD码);end entity;architecture arch of BIN2BCD issignal data2,data3,data4 :std_logic_vector(9 downto 0);-- 输出数据缓存signal hundred,ten,unit:std_logic_vector(3 downto 0);--signal bcdbuffer:std_logic_vector(11 downto 0);---2'1111_1001_11=999beginBCDOUT<= bcdbuffer;bcdbuffer(11 downto 8)<=hundred;bcdbuffer(7 downto 4)<=ten;bcdbuffer(3 downto 0)<=unit;get_hundred_value:process(data2)beginDA TA2<="00"&DIN;---get hundred valueif data2>=900 thenhundred<="1001";--9data3<=data2-900;elsif data2>=800 thenhundred<="1000";--8data3<=data2-500;elsif data2>=700 thenhundred<="0111";--7data3<=data2-700;elsif data2>=600 thenhundred<="0110";--6data3<=data2-600;elsif data2>=500 thenhundred<="0101";--5data3<=data2-500;elsif data2>=400 thenhundred<="0100";--4data3<=data2-400;elsif data2>=300 thenhundred<="0011";--3data3<=data2-300;elsif data2>=200 thenhundred<="0010";--2data3<=data2-200;elsif data2>=100 thenhundred<="0001";--1data3<=data2-100;else data3<=data2;hundred<="0000";end if;end process; ---get_thousand_valueget_tens_value:process(data3) begin---get tens placeif data3>=90 thenten<="1001";--9data4<=data3-90;elsif data3>=80 thenten<="1000";--8data4<=data3-50;elsif data3>=70 thenten<="0111";--7data4<=data3-70;elsif data3>=60 thenten<="0110";--6data4<=data3-60;elsif data3>=50 thenten<="0101";--5data4<=data3-50;elsif data3>=40 thenten<="0100";--4data4<=data3-40;elsif data3>=30 thenten<="0011";--3data4<=data3-30;elsif data3>=20 thenten<="0010";--2data4<=data3-20;elsif data3>=10 thenten<="0001";--1data4<=data3-10;else data4<=data3;ten<="0000";end if;end process; ---get_ten_valueget_unit_value:process(data4)begin--unit's orderif (data4>0) thenunit<=data4(3 downto 0);else unit<="0000";end if;end process;end arch;3 multi4b --------------------------------------------------------------------------------/ -- DESCRIPTION : Signed mulitplier:-- AIN (A) input width : 4-- BIN (B) input width : 4-- Q (data_out) output width : 8-- 并行流水乘法器--------------------------------------------------------------------------------/--10 × 9 = 90-- 1 0 1 0-- 1 0 0 1 =-- --------------- 1 0 1 0-- 0 0 0 0 --partial products-- 0 0 0 0-- 1 0 1 0-- -------------------- 1 0 1 1 0 1 0--parallel : process all the inputs at the same time--pipeline : use several stages with registers to implement it----关键思想,插入寄存器library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity multi4b isport ( CLK: in STD_LOGIC; ---system clockAIN: in STD_LOGIC_VECTOR (3 downto 0); ---one inputBIN: in STD_LOGIC_VECTOR (3 downto 0);-- the other inputdata_out: out STD_LOGIC_VECTOR (7 downto 0)---the result ---make sure the biggest value ,i,e. 1111x1111=1110_0001 can be held in the register );end multi4b;architecture multi_arch of multi4b issignal A,B :std_logic_vector(3 downto 0); --input register---registers to hold the result of the first processing---registers added to make use of pipeline, the 1st stagesignal A_MULT_B0: STD_LOGIC_VECTOR (3 downto 0);signal A_MULT_B1: STD_LOGIC_VECTOR (3 downto 0);signal A_MULT_B2: STD_LOGIC_VECTOR (3 downto 0);signal A_MULT_B3: STD_LOGIC_VECTOR (3 downto 0);---register to hold the result of the multipliersignal C_TEMP : STD_LOGIC_VECTOR (7 downto 0);beginPROCESS(CLK,AIN,BIN)beginif CLK'EVENT AND CLK='1' THEN-- multiplier operand inputs are registeredA<= AIN;B<= BIN;-----------------Fist stage of the multiplier------------------here we get the axb(0),axb(1),axb(2),axb(3),i.e.partial products---put them into the responding registersA_MULT_B0(0) <= A (0) and B (0);----- multi 1 , get the a(0) and b(0), & put it into the register A_MULT_B0(0)A_MULT_B0(1) <= A (1) and B (0);A_MULT_B0(2) <= A (2) and B (0);A_MULT_B0(3) <= A (3) and B (0);--10 × 9 = 90-- 1 0 1 0-- 1 0 0 1 =-- --------------- 0 0 0 0 1 0 1 0-- 0 0 0 0 0 0 0 0 --partial products-- 0 0 0 0-- 1 0 1 0-- -------------------- 1 0 1 1 0 1 0A_MULT_B1(0) <= A (0) and B (1);A_MULT_B1(1) <= A (1) and B (1);A_MULT_B1(2) <= A (2) and B (1);A_MULT_B1(3) <= A (3) and B (1);A_MULT_B2(0) <= A (0) and B (2);A_MULT_B2(1) <= A (1) and B (2);A_MULT_B2(2) <= A (2) and B (2);A_MULT_B2(3) <= A (3) and B (2);A_MULT_B3(0) <= A (0) and B (3);A_MULT_B3(1) <= A (1) and B (3);A_MULT_B3(2) <= A (2) and B (3);A_MULT_B3(3) <= A (3) and B (3);end if;end process;--------------------Second stage of the multiplier---------------add the all the partial products ,then get the result of the multiplier C_TEMP<=( "0000" & A_MULT_B0 )+( "000"& A_MULT_B1 &'0' )+( "00" & A_MULT_B2 & "00" )+( '0'&A_MULT_B3 & "000" );--build a signal register output---输出寄存,利于实现流水data_out <= C_TEMP; --output registerend multi_arch;九、实验总结。

数电课程设计四位二进制乘法器的设计与实现

数电课程设计四位二进制乘法器的设计与实现

四位二进制乘法器的设计与实现物理系光信息科学与技术专业1011202班 11011202181. 实验目的设计一个乘法器,实现两个四位二进制数的乘法。

两个二进制数分别是被乘数3210A A A A 和乘数3210B B B B 。

被乘数和乘数这两个二进制数分别由高低电平给出。

乘法运算的结果即乘积由两个数码管显示。

其中显示低位的数码管是十进制的;显示高位的数码管是二进制的,每位高位片的示数都要乘以16再与低位片相加。

所得的和即是被乘数和乘数的乘积。

做到保持乘积、输出乘积,即认为目的实现,结束运算。

2.总体设计方案或技术路线总体思路:将乘法运算分解为加法运算。

被乘数循环相加,循环的次数是乘数。

加法运算利用双四位二进制加法器74LS283实现,循环次数的控制利用计数器74LS161、数码74LS85比较器实现。

运算结果的显示有数码管完成,显示数字的高位(进位信号)由计数器74LS161控制。

技术路线:以54 为例。

被乘数3210A A A A 是5,输入0101;乘数3210B B B B 是4,输入0100.将3210A A A A 输入到加法器的A 端,与B 端的二进制数相加,输出的和被送入74LS161的置数端(把这个计数器成为“置数器”)。

当时钟来临,另一个74LS161(被称之为“计数器”)计1,“置数器”置数,返回到加法器的B 端,再与被乘数3210A A A A 相加……当循环相加到第四个时钟的时候,“计数器”计4,这个4在数码比较器74LS85上与乘数3210B B B B 比较,结果是相等,A=B 端输出1,经过反相器后变为0返回到被乘数输入电路,截断与门。

至此,被乘数变为0000,即便是再循环相加,和也不变。

这个和,是多次循环相加的和,就是乘积。

高位显示电路较为独立,当加法器产生了进位信号,CA 端输出了一个高电平脉冲,经过非门变为下降脉冲驱动74LS161计一次数,这个数可以通过数码管显示出来。

数字设计原理与实践_课程设计_乘法器

数字设计原理与实践_课程设计_乘法器

数字设计原理与实践课程设计题目名称:学生姓名:学号:指导老师:1.设计题目乘法器电路设计:设计一个乘法器,能够完成两个4位二进制无符号数的乘法运算。

2.设计目标设计一个乘法器,使之能完成两个4位的二进制数的乘法运算。

3.设计思路4位二进制数的乘法,按照十进制的乘法规则,可进行相应的运算。

比如a1a2a3a4和b1b2b3b4运算过程见右图。

如图所示,乘开之后,就产生了许多的两个二进制数相乘,即两个二进制数相与的过程。

如果利用合适的加法器把这些二进制数相与的结果进行合适的累加,最后即可得到4位二进制数相乘的结果。

也就是说4位二进制数的乘法可以分解成许多相与项相加(积之和)的形式,最后实现题目的要求。

4.设计电路推导由题可知,两个4位二进制数相乘结果位为8位。

其中a1b1可直接输出作为积的(第八位)最低位。

然后是a2b1与a1b2的和作为积的第七位,并且向前进位。

接着a3b1、a2b2、a1b3相加,此时可以用加法器级联,以此类推,所有的相与项都能加起来。

在加法器方面,选择4位二进制加法器74ls283。

74LS283的引脚图和逻辑原理图见上,可知,74LS283是4位二进制全加器。

两个加数输入端分别为A0~A3,和B0~B3,和为C0~C3,S1为进位输入端,S3为进位输出端。

了解了各引脚之后,我们计划使用三个74LS283,其中a1b1直接输出,不需要接入加法器。

然后a1b2、a1b3、a1b4分别接入第一个加法器的A0~A2端,a2b1、a2b2、a2b3、a2b4分别接第一个加法器的B0~B3接口。

这样第一个接口的输出端:和的最低位C0 就是a1b2+a2b1,所以直接输出就是最后乘积的第七位(次低位)。

现在讨论下两片74LS283的级联。

SUM的最低位是作为积的一位直接输出,然后后几位依次与下一个74238的输入A1~A4相连,就完成了两个74283的级联。

这样做的原理已在前面的讨论中给出,这里不做赘述。

vhdl 四位流水线乘法器

vhdl 四位流水线乘法器

实验二四位流水线乘法器一、实验目的1.了解四位并行乘法器的原理。

2.了解四位并行乘法器的设计思想和流水线的实现方法。

3.掌握用VHDL 语言实现基本二进制运算的方法。

二、实验内容与要求通过开关和键盘输入两组4BIT的二进制数据,按照二进制加法器原理进行加和,求出和及进位,并通过LED显示灯输出显示,完成编译、综合、适配、仿真、实验箱上的硬件测试。

三、实验原理流水线结构的并行乘法器的最大有点就是速度快,尤其实在连续输入的乘法器中,可以达到近乎单周期的运算速度。

流水线乘法器是组合逻辑电路实现无符号数乘法的方法上发展而来的。

其关键是在组合逻辑电路的基础上插入寄存器。

假如有被乘数A 和乘数B,首先用A 与B 的最低位相乘得到S1,然后再把A 左移1 位与B 的第2 位相乘得到S2,再将A 左移3 位与B 的第三位相乘得到S3,依此类推,直到把B 的所有位都乘完为止,然后再把乘得的结果S1、S2、S3……相加即得到相乘的结果。

需要注意的是,具体实现乘法器是,并不是真正的去乘,而是利用简单的判断去实现,举个简单的例子。

假如A 左移n 位后与B 的第n 位相乘,如果B 的这位为‘1’,那么相乘的中间结果就是A 左移n 位后的结果,否则如果B 的这位为‘0’,那么就直接让相乘的中间结果为0 即可。

带B 的所有位相乘结束后,把所有的中间结果相加即得到A 与B 相乘的结果。

在此基础上插入寄存器即可实现流水线乘法器。

四、实验平台(1)硬件:计算机、GX-SOC/SOPC-DEV-LABCycloneII EP2C35F672C8核心板(2)软件:Quartus II软件PIN_AF8 DATAOUT[4] LED4PIN_AE7 DATAOUT[5] LED5PIN_AF7 DATAOUT[6] LED6PIN_AA11 DATAOUT[7] LED7PIN_AE21 BCD[0] 数码管DP4BPIN_AB20 BCD[1]PIN_AC20 BCD[2]PIN_AF20 BCD[3]PIN_AE20 BCD[4] 数码管DP5BPIN_AD19 BCD[5]PIN_AC19 BCD[6]PIN_AA17 BCD[7]PIN_AA18 BCD[8] 数码管DP6BPIN_W17 BCD[9]PIN_V17 BCD[10]PIN_AB18 BCD[11]六、仿真截图七、硬件实现八、程序代码1---clkgen.vhdlibrary IEEE;-- 1HZuse IEEE.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity clkgen isport (CLK : in std_logic;CLK1HZ: out std_logic);end entity;architecture clk_arch of clkgen issignal COUNT : integer range 0 to 50000000; --50MHZ -->1hz begin -- 50M/1=50000000 PROCESS(CLK)BEGINif clk'event and clk='1' thenIF COUNT= 50000000 thenCOUNT<=0;ELSE COUNT<=COUNT+1;END IF;END IF;END PROCESS;PROCESS(COUNT)BEGINIF COUNT= 5000000 THEN -- 1HZCLK1HZ<='1';ELSE CLK1HZ<='0';END IF;END PROCESS;end architecture;2—BCD-- 输出控制模块,把乘法器的输出转换成BCD码在数码管上显示、-- SCKZ.VHDlibrary IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity BIN2BCD isport ( DIN: in std_logic_vector(7 downto 0); ---The input 8bit binaryBCDOUT: out std_logic_vector(11 downto 0)--输出显示, 已转换成BCD码);end entity;architecture arch of BIN2BCD issignal data2,data3,data4 :std_logic_vector(9 downto 0);-- 输出数据缓存signal hundred,ten,unit:std_logic_vector(3 downto 0);--signal bcdbuffer:std_logic_vector(11 downto 0);---2'1111_1001_11=999beginBCDOUT<= bcdbuffer;bcdbuffer(11 downto 8)<=hundred;bcdbuffer(7 downto 4)<=ten;bcdbuffer(3 downto 0)<=unit;get_hundred_value:process(data2)beginDA TA2<="00"&DIN;---get hundred valueif data2>=900 thenhundred<="1001";--9data3<=data2-900;elsif data2>=800 thenhundred<="1000";--8data3<=data2-500;elsif data2>=700 thenhundred<="0111";--7data3<=data2-700;elsif data2>=600 thenhundred<="0110";--6data3<=data2-600;elsif data2>=500 thenhundred<="0101";--5data3<=data2-500;elsif data2>=400 thenhundred<="0100";--4data3<=data2-400;elsif data2>=300 thenhundred<="0011";--3data3<=data2-300;elsif data2>=200 thenhundred<="0010";--2data3<=data2-200;elsif data2>=100 thenhundred<="0001";--1data3<=data2-100;else data3<=data2;hundred<="0000";end if;end process; ---get_thousand_valueget_tens_value:process(data3) begin---get tens placeif data3>=90 thenten<="1001";--9data4<=data3-90;elsif data3>=80 thenten<="1000";--8data4<=data3-50;elsif data3>=70 thenten<="0111";--7data4<=data3-70;elsif data3>=60 thenten<="0110";--6data4<=data3-60;elsif data3>=50 thenten<="0101";--5data4<=data3-50;elsif data3>=40 thenten<="0100";--4data4<=data3-40;elsif data3>=30 thenten<="0011";--3data4<=data3-30;elsif data3>=20 thenten<="0010";--2data4<=data3-20;elsif data3>=10 thenten<="0001";--1data4<=data3-10;else data4<=data3;ten<="0000";end if;end process; ---get_ten_valueget_unit_value:process(data4)begin--unit's orderif (data4>0) thenunit<=data4(3 downto 0);else unit<="0000";end if;end process;end arch;3 multi4b --------------------------------------------------------------------------------/ -- DESCRIPTION : Signed mulitplier:-- AIN (A) input width : 4-- BIN (B) input width : 4-- Q (data_out) output width : 8-- 并行流水乘法器--------------------------------------------------------------------------------/--10 × 9 = 90-- 1 0 1 0-- 1 0 0 1 =-- --------------- 1 0 1 0-- 0 0 0 0 --partial products-- 0 0 0 0-- 1 0 1 0-- -------------------- 1 0 1 1 0 1 0--parallel : process all the inputs at the same time--pipeline : use several stages with registers to implement it----关键思想,插入寄存器library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity multi4b isport ( CLK: in STD_LOGIC; ---system clockAIN: in STD_LOGIC_VECTOR (3 downto 0); ---one inputBIN: in STD_LOGIC_VECTOR (3 downto 0);-- the other inputdata_out: out STD_LOGIC_VECTOR (7 downto 0)---the result ---make sure the biggest value ,i,e. 1111x1111=1110_0001 can be held in the register );end multi4b;architecture multi_arch of multi4b issignal A,B :std_logic_vector(3 downto 0); --input register---registers to hold the result of the first processing---registers added to make use of pipeline, the 1st stagesignal A_MULT_B0: STD_LOGIC_VECTOR (3 downto 0);signal A_MULT_B1: STD_LOGIC_VECTOR (3 downto 0);signal A_MULT_B2: STD_LOGIC_VECTOR (3 downto 0);signal A_MULT_B3: STD_LOGIC_VECTOR (3 downto 0);---register to hold the result of the multipliersignal C_TEMP : STD_LOGIC_VECTOR (7 downto 0);beginPROCESS(CLK,AIN,BIN)beginif CLK'EVENT AND CLK='1' THEN-- multiplier operand inputs are registeredA<= AIN;B<= BIN;-----------------Fist stage of the multiplier------------------here we get the axb(0),axb(1),axb(2),axb(3),i.e.partial products---put them into the responding registersA_MULT_B0(0) <= A (0) and B (0);----- multi 1 , get the a(0) and b(0), & put it into the register A_MULT_B0(0)A_MULT_B0(1) <= A (1) and B (0);A_MULT_B0(2) <= A (2) and B (0);A_MULT_B0(3) <= A (3) and B (0);--10 × 9 = 90-- 1 0 1 0-- 1 0 0 1 =-- --------------- 0 0 0 0 1 0 1 0-- 0 0 0 0 0 0 0 0 --partial products-- 0 0 0 0-- 1 0 1 0-- -------------------- 1 0 1 1 0 1 0A_MULT_B1(0) <= A (0) and B (1);A_MULT_B1(1) <= A (1) and B (1);A_MULT_B1(2) <= A (2) and B (1);A_MULT_B1(3) <= A (3) and B (1);A_MULT_B2(0) <= A (0) and B (2);A_MULT_B2(1) <= A (1) and B (2);A_MULT_B2(2) <= A (2) and B (2);A_MULT_B2(3) <= A (3) and B (2);A_MULT_B3(0) <= A (0) and B (3);A_MULT_B3(1) <= A (1) and B (3);A_MULT_B3(2) <= A (2) and B (3);A_MULT_B3(3) <= A (3) and B (3);end if;end process;--------------------Second stage of the multiplier---------------add the all the partial products ,then get the result of the multiplier C_TEMP<=( "0000" & A_MULT_B0 )+( "000"& A_MULT_B1 &'0' )+( "00" & A_MULT_B2 & "00" )+( '0'&A_MULT_B3 & "000" );--build a signal register output---输出寄存,利于实现流水data_out <= C_TEMP; --output registerend multi_arch;九、实验总结。

基于booth算法的4位乘法器

基于booth算法的4位乘法器

基于booth算法的4位乘法器详细设计姓名:魏可望(23)班级:微电子1102指导老师:***日期:2014年4月29日1设计目标 (3)1.1功能定义 (3)1.2引脚描述 (3)1.2.1 4位乘法器的单元系统级信号 (3)1.2.2 4位乘法器的输入接口定义 (3)1.2.3 4位乘法器的器输出接口定义 (3)2 模块设计 (3)3测试 (4)4设计开发环境 (4)5设计开发计划 (4)1设计目标1.1功能定义本文描述4位乘法器的详细设计方案。

其功能是求出4位2进制数的乘积功能,并在FPGA开发板上验证设计的正确性。

1.2引脚描述1.2.1 4位乘法器单元系统级信号1.2.2 4位乘法器输入接口定义1.2.3 4位乘法器输出接口定义2 模块设计本设计按要求,用异步复位的方式实现基于booth算法的4位乘法器。

3测试本单元电路控制逻辑采用systemverilog断言描述状态信息测试,数据通路部分用采用sysetemverilog随机验证的方法,并结合覆盖率检测,做到100%验证。

为了减少测试时间,在测试时将24位计数值修改为2位计数值,并测试8位计数器从0到255各种变化情况。

将本设计下载到Sparten 3E开发板上,将计数器的输出连接到LED灯上,以验证设计的正确性。

4设计开发环境语言级设计:Verilog综合工具:xilinx 14.7rFPGA设计和仿真工具:ISE13.2,synopsys VCS布局和布线工具:appllo ,模拟设计和仿真工具: modelsim寄生参数提取和仿真工具: star_sim RC5设计开发计划附录1:基于booth算法的4位乘法器module datapath(clk, res_n, mul1, mul2, load, shift_1, shift_2, add, sub, Yi,product);parameter width=3'd4;input clk,res_n;input [width-1:0]mul1,mul2;input load,shift_1,shift_2,add,sub;output [2:0]Yi;output [2*width-1:0]product;reg [width-1:0]multiplier;reg [2*width-1:0]multiplicant,product;reg Q;//the additon bit ;assign Yi={multiplier[1:0],Q};always@(posedge clk or negedge res_n)beginif(!res_n)beginmultiplier<=0;multiplicant<=0;Q<=0;product<=0;endelse if(load)begincase(mul1[width-1])1:multiplicant<={4'b1111,mul1};0:multiplicant<={4'b0000,mul1};endcasemultiplier<=mul2;Q<=0;product<=0;endelse if(shift_2)beginmultiplier<=multiplier>>2;multiplicant<=multiplicant<<2;endelse if(shift_1)beginmultiplier<=multiplier>>1;multiplicant<=multiplicant<<1;endelse if(add)beginproduct<=multiplicant+product;endelse if(sub)beginproduct<=product-multiplicant;endendendmodule。

四位二进制乘法器电路的设计

四位二进制乘法器电路的设计

四位二进制乘法器电路的设计一、前言在数字电路设计中,四位二进制乘法器是一个常见的电路设计,它可以将两个四位的二进制数相乘,并输出八位的结果。

本文将详细介绍四位二进制乘法器电路的设计原理和实现方法。

二、四位二进制乘法器电路的原理1. 乘法运算原理在十进制数中,两个数相乘的运算过程是将其中一个数每一位与另一个数相乘,并将每次得到的结果相加。

例如,计算12×13时,先用12分别与3和1相乘,得到36和12,然后将这两个结果相加即可得到156。

在二进制数中也是同样的道理。

例如,计算1010(10)×1101(13)时,先用1010分别与1、0、1、1相乘,得到1010、0000、1010、1010四个结果;然后将这四个结果左移0、4、8、12位(即对应不同位置上的十进制值),再相加即可得到11100110(230)。

2. 四位二进制乘法器电路原理根据以上运算原理,在数字电路中可以设计出四位二进制乘法器电路。

该电路由以下几部分组成:① 两个四位二进制数输入端:分别为被乘数和乘数,每个输入端有四个二进制位。

② 乘法器:该电路的核心部分,用于实现两个四位二进制数的相乘。

具体实现方式为将被乘数的每一位与乘数相乘,并将结果存储在一个8×4的矩阵中。

其中,矩阵的第i行第j列表示被乘数第i位和乘数第j位相乘的结果(i和j均从0开始计数)。

例如,当被乘数为1010、乘数为1101时,该矩阵如下所示:1 0 1 0---------1 | 1 0 1 01 | 0 0 00 | 1 01 | 1其中,第一列表示被乘数的最低位与乘数相乘的结果,第二列表示被乘数次低位与乘数相乘的结果,以此类推。

③ 加法器:用于将矩阵中每一行的结果相加,并输出一个八位二进制结果。

具体实现方式为将矩阵中同一行的四个二进制数字依次左移不同位置后相加,并将得到的八位结果输出。

例如,在上述示例中,对于第一行来说,需要将1010左移0、4、8、12位,分别得到10100000、00000000、00000000和00000000,然后将这四个数相加,得到10100110(166),即为最终结果。

四位二进制乘法器

四位二进制乘法器

四位二进制乘法器设计报告一、原理此四位乘法器主要运用多次错位相加运算来实现乘法运算。

由开关控制输入高电平或低电平产生两个二进制数(高电平有效),利用与门实现一位和四位的乘积运算,再将两次的乘积输入加法器,得到的和与进位与下一个乘积再进行加法运算。

设两个二进制数分别是被乘数D1C1B1A1和乘数D2C2B2A2,得到结果Y8Y7Y6Y5Y4Y3Y2Y1,可以把乘法运算分解成四个一位与四位的乘积和三次错位相加。

错位相加时累计和的最后一项可以直接输出为乘积的最低位,剩下三位和进位端再与高位乘积相加,每次相加后的最低位直接接到CD4511未接的最低位,经过三次相加就可以得到乘积。

以1011和1101为例1101*1011110□1(Y1)+11011001□1(Y2)+0000100□1(Y3)+110110001 (Y8—Y4)网上有的乘法器电路图一般采用反复进行移位和加法来进行乘法计算,依靠寄存器不断左移实现错位,而我直接把最低位输出到数码管,将进位端作为最高位进行下一步计算,在接线时就完成了移位,省去了寄存器的使用,使电路更加简单。

二、主要器件74ls283 3片74ls08 4片开关 8个数码管 4个CD4511 2片10KΩ电阻 8个470Ω电阻 14个三、芯片介绍74ls08:由四个与门组成74ls283:加法器,(5,3,14,12,6,2,15,11)8个脚输入两个乘数,(4,,1,13,10)四个脚输出,7脚输入低电平控制芯片做加法,9脚是进位端。

CD4511:用于驱动共阴极 LED (数码管)显示器的 BCD 码-七段码译码器,无法显示十六进制数的A-E。

四、原理图五、仿真3*7=1*16+5=2111*11=7*16+9=121六、运算结果举例七、遇到的问题用protues仿真时输出直接接BCD码的数码管,显示的是十六进制数,焊接时用了CD4511,A-E消隐导致乘积只能显示0-9,有A-E就无法显示。

4位二进制乘法器

4位二进制乘法器

4位二进制乘法器的设计一、概述4位二进制乘法器在实际中的应用相当广泛,是一些计算器的基本组成部分,其原理适用于很多计算器和大型计算机,它涉及到时序逻辑电路如何设计、分析和工作等方面。

通过此电路更深刻的了解时序逻辑部件的工作原理,从而掌握如何根据需要设计满足要求的各种电路图,解决生活中的实际问题,将所学知识应用于实践中。

根据任务书设计电路主要要求是:绘制出电路的原理图,并且诠释每部分的功能;根据设计的电路图分析所需要元器件种类和个数;根据技术指标制定实验方案,验证所设计的电路;进行实验数据处理和分析。

设计任务技术指标;输入数据:被乘数X(0000~1111);乘数Y(0000~1111);输入命令:启动信号S1,高有效。

输出数据:乘积C(00000000~11100001);其乘积可以存贮。

二、方案说明此方案采用74LS194双向移位寄存器,74LS283加法器和 74LS00、74LS04等门电路。

乘法就是反复进行移位和加法,被乘数放入MD寄存器,乘数放入MQ 寄存器,A寄存器中放结果,乘数的位数放在C寄存器中。

AC寄存器的初值为0。

A寄存器的内容被右移时,最高位移入0,其最低位内容被移入MQ的最高位。

C 寄存器右移时,其最高位移入1。

若MQ寄存器的最低位(用M(0)来表示)为1时,将被乘数与A寄存器中的内容用全加器相加后,将结果放回A寄存器中保存。

若M(0)的值为0,将0与A寄存器的内容相加,将其结果再存入A寄存器。

接着,将A、MQ、C寄存器的内容右移1位。

将此动作反复进行乘数位数那么多遍。

此乘法电路通过同步电路操作,运算与时钟脉冲同步进行。

从以上方案中可知,方案设有信号发生电路,数据输入电路,移位寄存电路,加法电路和运算结束判断电路和启动电路。

各部分功能明确且之间的联系容易理解,所以采用这种方案。

原理框图如图1所示。

1图1 4位二进制乘法器电路的原理框图三、电路设计1. 信号发生电路因为A 寄存器起着存储并移位的作用,所以它的时钟信号频率应为主时钟频率的2倍,占空比相同且都大于50%,如图2信号发生电路。

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

四位二进制乘法器的设计与实现
物理系
光信息科学与技术专业
1011202班 1101120218
1. 实验目的
设计一个乘法器,实现两个四位二进制数的乘法。

两个二进制数分别是被乘数3210A A A A 和乘数3210B B B B 。

被乘数和乘数这两个二进制数分别由高低电平给出。

乘法运算的结果即乘积由两个数码管显示。

其中显示低位的数码管是十进制的;显示高位的数码管是二进制的,每位高位片的示数都要乘以16再与低位片相加。

所得的和即是被乘数和乘数的乘积。

做到保持乘积、输出乘积,即认为目的实现,结束运算。

2.总体设计方案或技术路线
总体思路:将乘法运算分解为加法运算。

被乘数循环相加,循环的次数是乘数。

加法运算利用双四位二进制加法器74LS283实现,循环次数的控制利用计数器74LS161、数码74LS85比较器实现。

运算结果的显示有数码管完成,显示数字的高位(进位信号)由计数器74LS161控制。

技术路线:以54 为例。

被乘数3210A A A A 是5,输入0101;乘数3210B B B B 是4,输入0100.将3210A A A A 输入到加法器的A 端,与B 端的二进制数相加,输出的和被送入74LS161的置数端(把这个计数器成为“置数器”)。

当时钟来临,另一个74LS161(被称之为“计数器”)计1,“置数器”置数,返回到加法器的B 端,再与被乘数3210A A A A 相加……当循环相加到第四个时钟的时候,“计数器”计4,这个4在数码比较器74LS85上与乘数3210B B B B 比较,结果是相等,A=B 端输出1,经过反相器后变为0返回到被乘数输入电路,截断与门。

至此,被乘数变为0000,即便是再循环相加,和也不变。

这个和,是多次循环相加的和,就是乘积。

高位显示电路较为独立,当加法器产生了进位信号,CA 端输出了一个高电平脉冲,经过非门变为下降脉冲驱动74LS161计一次数,这个数可以通过数码管显示出来。

但是由于二进制数是满足8421排列的,进位的数是10000,即是10进制数的16。

这一点在读数的时候要格外注意!
2.实验电路图
说明:左下角的D1C1B1A1为被乘数的输入端,单刀双掷开关向上是“1”,向下时“0”。

左侧的D2C2B2A2是乘数的输入端。

被乘数经过中间靠右的“加法器低位片”循环相加,相加的结果经过右上方的“置数器”返回到加法器。

“置数器”和“计数器”共用一个时钟信号,当“计数器”所计的数与乘数相等的时候,最上方的数码比较器输出“1”,经过非门变为“0”,“0”返回到4双输入与门中将与门封死,输出0000.同样是这个“0”信号,将“计数器”的使能端EP置为“0”,使计数器保持输出,达到稳定输出的目的。

当“加法器低位片”有进位时,输出一个上升沿,经过非门后变为下降沿,驱动“进位信号计数器”计数,其结果被“高位显示”显示出来。

“高位显示”的示数都要乘以16才可以变为10进制的数。

最后的乘积可由两个数码管显示出来。

读数方法:“高位显示”字形所对应的十进制数*16+“低位显示”字形所对应的十进制数。

计算结束,目的达成。

4. 仪器设备名称、型号
74LS85 (一个)
74LS161 (三个)
74LS283 (一个)
74LS08 (两个)
非门(两个)
数码显示管(两个)
5.仿真分析结果
仿真结果1
被乘数1000,乘数1000,结果:4*16=64。

具体情况请看图中的方框。

仿真结果2
被乘数0011,乘数1100,结果:2*16+4=36。

具体情况请看图中的方框。

6.详细实验步骤及实验结果数据记录(包括各仪器、仪表量程及内阻的记录)
7.实验结论
我所设计的乘法器工作良好、结果准确。

8.实验中出现的问题及解决对策
1、问题:加法器循环相加的过程停不下来。

解决:引入“置数器”,时钟来临一次才可以循环相加一次;引入比较器,将循环次数与被乘数作比较,适当的时候封住被乘数,使之变成0000.
2、问题:“计数器”没有办法保持输出为循环次数。

解决:利用74LS161的使能端,如果循环到了规定的次数,产生“0”使使能端EP、ET 中的一个变为“0”,“计数器”保持输出不变。

这样做的好处就是最终的输出结果
也可以保持住。

9.本次实验的收获和体会、对电路实验室的意见或建议
体会:但凡是科研(姑且将本次设计看作是一次简单的科研),必须投入一定量的心血。

为了完成这项设计,我几易其稿、呕心沥血、颇费心思地想了好几天。

当最
初的设想被实现了的时候,我感到无比的满足。

《数电》是一门很有实践价值的课,
通过课上系统的知识积累,我发现即便是比较基础的电子、电路知识也可以造出
来比较复杂的设备,当然这需要设计者的智慧和勤奋。

看来平日生活中随处可见
的电子产品,无不凝聚着工程师、科研人员的汗水和努力。

在设计的过程中,我
遇到了很多困难,有的时候被困难压得头疼,但是经过了与同学的讨论,许多困
难迎刃而解,我体会到了交流的重要性。

最后,感谢老师用这种课程设计的形式督促我应用知识。

否则的话,以我的惰性,很可能就不会去费尽心思地去设计一个乘法器,这样的话,《数电》算白学
了。

谢谢老师。

建议:略有遗憾的是实验室的元件不是十分齐全,以至于74LS85、74LS283芯片都是我们同学自费买的然后大家借着用。

希望实验室可以配备更多的元件,至少把
书上讲过的芯片买齐了。

不过这不是什么大问题,元件的缺少正好可以锻炼同学
们发散思维、用最少的成本达到最大目的的能力。

10.参考文献
杨春玲《数字电子技术》高等教育出版社。

相关文档
最新文档