定点补码一位乘法器方案

合集下载

定点源码一位乘法器的设计内容结论

定点源码一位乘法器的设计内容结论

定点源码一位乘法器的设计内容结论篇一:设计一个定点源码一位乘法器可以帮助我们更好地理解计算机内部如何进行乘法运算。

本文将介绍一个定点源码一位乘法器的设计方案,包括其基本结构和实现方式,结论是这种乘法器在计算机内部可以实现,并且具有高效的性能。

首先来看乘法器的基本原理。

乘法是将两个数相乘得到的结果存储在两个数的对应位上,然后根据乘积的二进制表示将结果进行位运算得到最终的答案。

对于一位乘法器,其基本操作如下:1. 读取两个数,并将它们存储在一个临时变量中。

2. 对两个数进行位运算,将乘积的对应位设置为1,其他位设置为0。

3. 将结果存储回原来的两倍位置。

下面我们来具体实现一个一位乘法器。

首先,我们需要选择一种编程语言来实现乘法器。

由于一位乘法器只涉及两个数的不同位,因此选择C语言作为实现语言。

接下来,我们需要设计一个乘法器的数据结构。

对于一位乘法器,我们只需要将乘积的二进制表示存储在一个数组中,而不需要存储中间结果。

因此,我们可以使用一个二进制数组来实现一位乘法器。

接下来,我们来实现乘法器的代码。

首先,我们初始化两个数组,一个用于存储乘积的二进制表示,另一个用于存储中间结果。

然后,我们使用位运算来实现乘法操作。

具体地,我们按照以下步骤进行操作:1. 读取两个数。

2. 对两个数进行位运算。

3. 将乘积的对应位设置为1,其他位设置为0。

4. 将结果存储回原来的两倍位置。

下面是完整的代码实现:```c#include <stdio.h>#include <stdlib.h>#define MAX_INT 32767// 乘法器数据结构typedef struct {int value;int bit[2];} 乘积;// 初始化乘积void init_积(乘积*积) {积->value = 0;for (int i = 0; i < 2; i++) {积->bit[i] = 0;}}// 读取两个数int read_nums(乘积*积, int num1, int num2) { 乘积 temp;init_积(&temp);int carry = 0;for (int i = 0; i < 8; i++) {int bit = (num2 >> i) & 1;temp.bit[i] = bit;if (bit) {carry++;}}temp.value = carry ? (temp.value + num1) : num1;return temp.value;}// 位运算void bit_Ops(乘积*积, int num1, int num2, int bit) { if (bit) {积->bit[2 * bit - 1] = num2 & 1;}}// 打印结果void print_result(乘积*积, int num1, int num2) {for (int i = 0; i < 2; i++) {printf("%d ",积->bit[i]);}printf("");}int main() {乘积积1,积2;int num1, num2;printf("请输入两个整数:");scanf("%d%d", &num1, &num2);printf("请输入第一个整数:");scanf("%d", &积1.value);printf("请输入第二个整数:");scanf("%d", &积2.value);printf("请输入第一个整数的位数: ");scanf("%d", &积1.bit[0]);printf("请输入第二个整数的位数: ");scanf("%d", &积2.bit[0]);printf("计算结果为:");printf("%d", read_nums(积1, num1, num2));printf("计算结果的位数:");printf("%d ",积1.bit[2 *积1.bit[0] - 1]);printf(" ");printf("计算结果的进位:");printf("%d ",积2.bit[2 *积2.bit[0] - 1]);printf(" ");return 0;}```根据上面的代码,我们可以得到一位乘法器的基本结构。

定点补码一位乘法器的设计

定点补码一位乘法器的设计

定点补码一位乘法器的设计一、简介定点补码一位乘法器是一种常见的数字电路设计,用于完成两个定点补码数相乘的操作。

在计算机中,乘法是一个非常基础和重要的操作,因此定点补码一位乘法器的设计对于数字系统的性能有着直接的影响。

在本篇文章中,我们将详细介绍一位乘法器的设计思路与实现方法。

二、原理分析定点补码乘法器的原理基于二进制乘法的基本原理。

乘法的本质是累加多个被乘数与乘法因子相乘的结果。

一位乘法器是指每次只进行一位乘法运算的乘法器。

因为乘法运算是一个递归的过程,所以一位乘法器的设计方法对于多位乘法器的设计有着很高的实用价值。

定点补码的乘法过程中,首先需要将两个操作数分别转换为其对应的补码表示形式。

然后,将乘法因子的每一位与被乘数的每一位相乘,并将每一位的结果累加起来。

最终,我们需要将乘法的结果转换回原来的表示形式。

三、设计过程1.补码转换首先,我们需要将操作数转换为其对应的补码形式。

对于一个定点数(例如8位定点数),其补码形式可以通过将原码取反加一得到。

对于一个n位的定点数,其补码的范围是从-2^(n-1)到2^(n-1)-1、补码的转换可以通过比较操作数的最高位来判断是否为负数,如果是负数,则需要对其取反加一得到补码形式,否则保持原值不变即可。

2.乘法运算乘法运算过程中,我们需要将乘法因子的每一位与被乘数的每一位相乘,并将结果累加起来。

在这个过程中,乘法因子的每一位都需要与被乘数的每一位相乘,并将结果保存在一个暂存器中。

通过多次递进,我们可以求得最终的乘法结果。

3.结果转换乘法运算得到的结果是定点补码形式的。

因此,我们需要将其转换回原来的表示形式。

转换过程可以通过比较结果的最高位来判断是否为负数,如果是负数,则需要对其取反加一得到原码形式,否则保持原值不变即可。

四、设计示例下面我们给出一个8位定点补码一位乘法器的设计示例:输入:A(8位),B(8位)输出:Result (16位)1.补码转换A=(A[7]==1?~(A)+1:A)B=(B[7]==1?~(B)+1:B)2.乘法运算Result = 0for i = 0 to 7:if B[i] == 1:Result += (A << i)3.结果转换Result = (Result[15] == 1 ? ~(Result) + 1 : Result)五、总结定点补码一位乘法器是一种常见的数字电路设计,用于完成两个定点补码数相乘的操作。

补码一位乘法

补码一位乘法

计算机组成原理第三章运算方法与运算器3.4 补码一位乘法1补码一位乘法的基本方法设[X]补= X0X1X2X3…X n[Y]补= Y0Y1Y2Y3…Y n可证明:[X⋅Y]补= [X]补•( 0.Y1Y2Y3…Yn) –Y0• [X]补进一步展开合并后可得:n[x•y]补=[x] 补•∑(y i+1-y i)2-i (符号位参加运算)i=01补码一位乘法的基本方法[x•y] 补=[x] 补• (y i+1-y i)2-i (符号位参加运算)补码一位乘法的运算规则如下:(1)如果y n+1=y n,部分积加0,部分积算术右移1位;(2)如果y n+1y n=10,部分积加[x]补,部分积算术右移1位;(3)如果y n+1y n=01,部分积加[-x]补,部分积算术右移1位.重复进行n+1步,但最后一步不移位。

包括一位符号位,所得乘积为2n+1位,其中n为数据位位数.1补码一位乘法的基本方法几个特殊问题的处理[x •y] 补=[x] 补• (y i+1-y i )2-i (符号位参加运算) 设[X]补= X 0X 1X 2X 3…X n [Y]补= Y 0Y 1Y 2Y 3…Y n(1)i=n 时,y n+1=?(2)y n+1是哪个寄存器?(3)算术右移的对象有哪些?y n+1=0在乘数寄存器Y 后增加的一位部分积和乘数寄存器均右移2补码一位乘法的举例例1 已知X= +1101 Y=+1011 用补码一位乘法求X⨯Y解:[X]补=01101 [Y]补=01011 [–X]补=10011部分积乘数说明000000 010110Y n+1< Y n部分积+[–X]补+ 110011110011→111001101011结果右移一位,Y n+1= Y n部分积+0+ 000000111001→111100 110101结果右移一位, Y n+1> Y n部分积+[X]补+ 0011010010012补码一位乘法的举例部分积乘数说明→000100 111010将结果右移一位, Y n+1< Y n部分积+[–X]补+ 110011110111→111011 111101将结果右移一位, Y n+1> Y n部分积+[X]补+ 001101001000∴[X⋅Y]补=010001111∴X⋅Y= 010001111。

补码一位乘的程序设计 计算机组成原理

补码一位乘的程序设计  计算机组成原理

沈阳航空航天大学课程设计报告课程设计名称:计算机组成原理课程设计课程设计题目:定点补码乘法器的程序设计院(系):专业:班级:学号:姓名:指导教师:完成日期:沈阳航空航天大学课程设计报告目录第1章总体设计方案 (1)1.1设计原理 (1)1.2设计思路 (1)1.3设计环境 (2)第2章详细设计方案 (4)2.1总体方案的设计与实现 (4)2.1.1总体方案的具体描述 (4)2.2流程图的设计与实现 (5)2.2.1流程图具体分析 (5)第3章程序调试与结果测试 (9)3.1程序调试 (9)3.2程序测试及结果分析 (9)参考文献 (14)附录 (15)第1章 总体设计方案1.1 设计原理采用伟福COP2000试验箱,设计并实现定点补码一位乘(booth )。

要求:采用的算法为定点补码一位乘booth 算法,乘数和被乘数规定为6位,其中首位为符号位。

数据要求以原码的形式输入,采用补码方式进行运算。

实验数据从试验箱的开关输入,运算的结果在OUT 寄存器中显示。

设计原理:比较YnYn+1的状态执行相应的操作。

如下图是补码一位乘的运算规则:表1.1 Booth 算法操作表说明需要说明的是此操作表是在当n ≠0时,当n=0时,判断YnYn+1,运算规则同此操作表只是不移位。

即在运算的最后一步,乘积不再右移。

1.2 设计思路(1) 构造补码一位乘的初始化所需要的数值因为补码一位乘的算法需要先求出[X]补、[-X]补、[Q]补,所以先将[X]补、[-X]补、[Q]补分别存贮到0F0H 到0F2H 存储单元中。

因为部分积和附加位的初始值都是0,所以在0E0H 单元存入附加位初始值0,在R0中存入部分积初始值0。

其他数的处理:将输入的一个值Q 求出补码作为乘数Y ,并存入R2中;另一个值X 存入R1中,根据它来求出[X]补、[-X]补;本实验规定乘数和被乘数为6位,数据位为五位,所以要完成六次操作,但最后一次不移位,在R3寄存中存入数值n=5,每次操作完成后减1。

补码一位乘法器logisim实验步骤

补码一位乘法器logisim实验步骤

补码一位乘法器logisim实验步骤补码一位乘法器的实验步骤如下:步骤1:打开Logisim并创建新电路。

选择"文件"->"新建",然后选择"干净的电路"。

步骤2:从左侧的元件面板中选择所需的元件,在本实验中我们需要的元件有:- 输入端口(选择位数适当的位宽)- 与门- 异或门- 输出端口(选择位数适当的位宽)步骤3:连接输入端口和与门。

将与门拖动到电路编辑区域,并连接到输入端口。

步骤4:连接异或门和输出端口。

将异或门拖动到电路编辑区域,并连接到输出端口。

步骤5:添加中间变量。

我们需要两个中间变量a和b来存储输入的两个操作数。

从左侧的元件面板选择一个“双输入线”元件,并将其拖动到电路编辑区域。

重复此步骤来添加第二个中间变量。

步骤6:连接中间变量和与门。

将中间变量a和b连接到与门的两个输入端口处。

步骤7:添加补码转换电路。

我们需要一个电路来将输入的补码转换为二进制表示形式。

从左侧的元件面板选择一个“4位补码转换”元件(这里的位数根据实验要求选择),然后将其拖动到电路编辑区域。

将中间变量a和b连接到补码转换电路的输入端口处。

步骤8:连接补码转换电路和异或门。

将补码转换电路的输出连接到异或门的两个输入端口处。

步骤9:添加输入变量。

我们需要一个变量来控制乘法器是否进行计算。

从左侧的元件面板选择一个“输入”元件,并将其拖动到电路编辑区域。

步骤10:连接输入变量和与门。

将输入变量连接到与门的两个输入端口处。

步骤11:完成连接。

确保所有元件都正确连接,没有无效或断开的连接。

步骤12:设置输入变量的值。

右键单击输入变量并选择“编辑”来设置其值。

步骤13:运行仿真。

点击Logisim的“模拟”按钮,然后选择“仿真”。

步骤14:观察输出结果。

在仿真窗口中查看输出结果,确认乘法器是否按预期工作。

步骤15:保存电路。

选择“文件”->“保存”来保存电路。

定点补码一位乘法的实现算法 用[x]补×[y]补直接求[x×y]补

定点补码一位乘法的实现算法 用[x]补×[y]补直接求[x×y]补

i =1 i =1 n
当Y为负值时,用补码乘计算[X×Y]补,是用[X]补乘上[Y]补的数 值位,而不理[Y]补符号位上的1,乘完之后,在所得的乘积中再 减X,即加- [X]补。
定点补码一位乘法的实现算法
实现补码乘法的另一个方案是比较法,是由BOOTH最早提出 的,这一方法的出发点是避免区分乘数符号的正负,而且让乘 数符号位也参加运算。技巧上表现在分解乘数的每一位上的1 为高一位的一个+1和本位上的一个-1:
原码一位除法的实现算法
计算机中常用原码的加减交替法完成除法运算,商的符号为相除二数符号 的异或值,数值则为二数的绝对值之商。 除法的算法有恢复余数法和不恢复余数法(加减交替法)二种。 原码一位除法实现方案小结: (1)对定点小数除法,首先要比较除数和被除数的绝对值的大小,防止出 现数值溢出的错误。 (2)商的符号为相除二数的半加和。 (3)在计算机中用加减交替法实现除法时,被除数的位数可以是除数的2 倍,其低位的数值部分,开始时放在用于保存商的寄存器中。运算过程中, 放被除数和商的寄存器同时左移位。 (4)在计算机中,求差和移位是在同一操作步骤中完成的,而不是用两个 步骤完成。
定点补码一位乘法的实现算法
用[X]补×[Y]补直接求[X×Y]补 讨论当相乘的两个数中有一个或二个为负数的情况 在讨论补码乘法运算时,对被乘数或部分积的处理上与原码乘 法有某些类似,差别仅表现在被乘数和部分积的符号位要和数 值一起参加运算。 若[Y]补=Y0Y1Y2…Yn 当Y0为1时,则有
n
Y=-1+ ∑ Yi×2-i 故有 X×Y=X× ∑ Yi×2-1-X
定点补码一位乘法的实现算法
Pn=[2-1(Pn-1+(Y2-Y1) ×X)]补 Pn+1=[ (Pn+(Y1-Y0) ×X)]补 则最终补码乘积为[X*Y]补=[Pn+1]补 由上述公式可以看出,比较法是用乘数中每相邻的两位判断 如何求得每次的相加数。 每两位Yi和Yi+1的取值有00,01,10,11四种组合,则它们的 差值分别为0,1,-1和0,非最后一次的部分积,分别为上一 次部分积的1/2(右移一位)的值Rj ,Rj +[X] 补 ,Rj-[X] 补 (即Rj +[-X] 补 )和Rj ,但一定要注意:最后一次求出的部 分积即为最终乘积,不执行右移操作。

补码一位乘法校正法

补码一位乘法校正法

补码一位乘法校正法补码一位乘法校正法是一种用于检测和纠正乘法器误差的方法。

在数字电路中,乘法器是一种非常重要的组件,负责执行数字信号的乘法运算。

然而,由于硬件设计和制造的不完美,乘法器可能会产生误差,导致输出结果不准确。

补码一位乘法校正法就是一种常用的解决方案。

在理解补码一位乘法校正法之前,我们首先需要了解补码的概念。

补码是一种用于表示有符号整数的编码方式。

在计算机中,负数一般使用补码表示,这样可以简化运算。

补码的计算方法是将原码的符号位保持不变,其余位按位取反后加1。

例如,-5的原码为10000101,补码为11111011。

补码一位乘法校正法的基本思想是将乘法器的输出结果与真实的乘法结果进行比较,并根据比较结果来调整乘法器的输出。

具体步骤如下:1. 乘法器的输入为两个n位的补码数字,输出为一个2n位的补码数字。

2. 将乘法器的输出结果与真实的乘法结果进行比较。

如果两者相等,则乘法器的输出是正确的;如果不相等,则说明乘法器存在误差。

3. 根据乘法器输出的最高位进行判断。

如果最高位为1,说明乘法器的输出是负数,需要对乘法器的输出进行补码取反操作;如果最高位为0,则不需要进行操作。

4. 将乘法器的输出与校正后的结果进行比较。

如果两者相等,则乘法器的输出是正确的;如果不相等,则说明乘法器的误差无法通过补码一位乘法校正法进行修复。

补码一位乘法校正法的原理是通过对乘法器输出结果的最高位进行判断,来确定是否需要对乘法器的输出进行补码取反操作。

通过这种方法,可以有效地检测和纠正乘法器误差,提高乘法器的准确性和可靠性。

然而,补码一位乘法校正法只能处理一位乘法误差,对于多位乘法误差无法进行有效的修复。

在实际应用中,补码一位乘法校正法通常与其他纠错技术结合使用,以进一步提高乘法器的准确性。

例如,可以将补码一位乘法校正法与冗余校验码相结合,通过对乘法器输出结果进行校验和校正,来实现更可靠的乘法运算。

总结起来,补码一位乘法校正法是一种用于检测和纠正乘法器误差的方法。

补码一位乘法booth算法例题

补码一位乘法booth算法例题

补码一位乘法booth算法例题补码一位乘法 Booth 算法是一种用于进行乘法运算的算法,它可以有效地减少乘法器的操作次数,从而提高乘法运算的效率。

这个算法基于补码的概念,可以用来进行有符号数的乘法运算。

让我们以一个例题来说明补码一位乘法 Booth 算法的工作原理。

假设我们要计算 5(0101)乘以 -3(1101)。

首先,我们需要将乘数和被乘数转换为补码形式。

-3 的补码是其本身(1101),而 5 的补码是 0101。

然后,我们将它们排成两列,如下所示:0101 (5的补码)。

1101 (-3的补码)。

接下来,我们引入一个额外的位,称为扩展位,用于在算法中移动。

初始时,扩展位为 0。

然后,我们开始从右向左遍历两列,对每一对比特进行操作。

首先,我们观察最右边的两位(01),它们对应的乘法结果为01。

然后,我们移动扩展位并继续比较下一对比特。

接着,我们看到 10,这时候我们需要减去 5(0101)的补码,所以我们需要加上 5 的补码(0101)。

这样,我们得到了 11。

然后,我们再次移动扩展位并继续比较下一对比特。

最后,我们观察到 11,这时候我们需要再次加上 5 的补码(0101)。

这样,我们得到了 100。

最终,我们得到的结果是 100,即 -15 的补码。

这就是补码一位乘法 Booth 算法的运算过程。

总的来说,补码一位乘法 Booth 算法通过引入扩展位和对比特的逐个操作,可以高效地进行有符号数的乘法运算。

这种算法在数字逻辑电路和计算机系统中得到了广泛的应用,因为它能够减少乘法器的操作次数,从而提高了乘法运算的效率。

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

个人资料整理仅限学习使用课程设计报告课程设计名称:计算机组成原理课程设计课程设计题目:定点补码一位乘法器的设计院<系):计算机学院专业:计算机科学与技术班级:学号:姓名:指导教师:完成日期:2018年1月15日目录第1章总体设计方案11.1设计原理11.2设计思路21.3设计环境4第2章详细设计方案52.1顶层方案图的设计与实现52.1.1创建顶层图形设计文件52.1.2器件的选择与引脚锁定62.2功能模块的设计与实现72.2.1求补电路模块的设计与实现72.2.2 控制电路模块的设计与实现82.2.3选择器模块的设计与实现10第3章编程下载与硬件测试123.1编程下载123.2硬件测试及结果分析12参考文献14附录<电路原理图)15第1章总体设计方案1.1设计原理<1)用[X]补×[Y]补直接求[X×Y]补讨论当相乘的两个数中有一个或二个为负数的情况,在讨论补码乘法运算时,对被乘数或部分积的处理上与原码乘法有某些类似,差别仅表现在被乘数和部分积的符号位要和数值一起参加运算。

若[Y]补=Y0Y1Y2…Yn 当Y0为1时,则有Y=-1+Yi×2-i故有X×Y=X×Yi×2-1-X当Y为负值时,用补码乘计算[X×Y]补,是用[X]补乘上[Y]补的数值位,而不理[Y]补符号位上的1,乘完之后,在所得的乘积中再减X,即加-[X]补。

实现补码乘法的另一个方案是比较法,是由BOOTH最早提出的,这一方法的出发点是避免区分乘数符号的正负,而且让乘数符号位也参加运算。

技巧上表现在分解乘数的每一位上的1为高一位的一个+1和本位上的一个-1:X×Y=X×<-1+Yi×2i)<逐项展开则得)=X×[-Y0+Y1×2-1+Y2×2-2+…+Yn×2-n]=X×[-Y0+(Y1-Y1×2-1>+(Y2×2-1-Y2×2-2>+…+(Yn×2-(n-1>-Yn×2-n>]<合并相同幂次项得)=X×[(Y1-Y0>+(Y2-Y1> ×2-1+…+(Yn-Yn-1> ×2-(n-1>+(0-Yn> ×2-n]=X×<Yi+1-Yi)×2-i<写成累加求和的形式,得到实现补码乘运算的算法)将上述公式展开,则每一次的部分积为:P1=[2-1(Yn+1-Yn> ×X]补P2=[2-1(P1+(Yn-Yn-1> ×X>]补…Pi=[2-1(Pn-i+(Yn-I+2-Yn-I+1> ×X>]补…Pn=[2-1(Pn-1+(Y2-Y1> ×X>]补Pn+1=[ (Pn+(Y1-Y0> ×X>]补则最终补码乘积为[X*Y]补=[Pn+1]补由上述公式可以看出,比较法是用乘数中每相邻的两位判断如何求得每次的相加数。

每两位Yi和Yi+1的取值有00,01,10,11四种组合,则它们的差值分别为0,1,-1和0,非最后一次的部分积,分别为上一次部分积的1/2<右移一位)的值Rj,Rj+[X]补,Rj-[X]补<即Rj+[-X]补)和Rj,但一定要注意:最后一次求出的部分积即为最终乘积,不执行右移操作。

用此法计算乘积,需要乘数寄存器的最低一位之后再补充一位Yn+1,并使其初值为0,再增加对Yn和Yn+1两位进行译码的线路,以区分出Yn+1-Yn 4种不同的差值。

对N位的数<不含符号位)相乘,要计算N+1次部分积,并且不对最后一次部分积执行右移操作。

此时的加法器最好采用双符号位方案。

<2)Booth乘法规则假设X、Y都是用补码形式表示的机器数,[X]补和[Y]补=Ys.Y1Y2…Yn,都是任意符号表示的数。

比较法求新的部分积,取决于两个比较位的数位,即Yi+1Yi的状态。

布斯乘法规则归纳如下:首先设置附加位Yn+1=0,部分积初值[Z0]补=0。

当n≠0时,判断YnYn+1,若YnYn+1=00或11,即相邻位相同时,上次部分积右移一位,直接得部分积。

若YnYn+1=01,上次部分积加[X]补,然后右移一位得新部分积。

若YnYn+1=10,上次部分积加[-X]补,然后右移一位得新部分积。

当n=0时,判YnYn+1(对应于Y0Y1>,运算规则同(1>只是不移位。

即在运算的最后一步,乘积不再右移。

1.2设计思路设计一个二输入三选一选择器对可能的三种情况进行选择。

当选择器中输入为S0 S1为00或者11时,由一寄存器一端接GND,另一端对其进行零输入;当选择器中输入为S0 S1为01时,对其进行[X]补输入;当选择器中输入为S0 S1为10时,对[X]补输入端加一非门和一加法器对其进行取反加1输入。

输出结果与一个一端接GND初始置零的寄存器相连接于一个加法器,实现部分积加法运算计算结果存放于两个相同的移位寄存器中,当部分积相加之后,由两个移位寄存器同时对部分积的和进行移位操作。

最后由两个移位寄存器的输出端连接至选择器重新选择进行循环操作,直到部分积移位结束。

这里用布斯算法在硬件电路上比较容易实现。

布斯算法的流程图如下:图1.1 定点补码一位乘法器的流程图补码一位乘法的硬件实现逻辑图如下:1.2 定点原码一位乘法器的原理框图1.3 设计环境·硬件环境:伟福COP2000型计算机组成原理实验仪、XCV200实验板、微机;·EDA环境:Xilinx设计软件。

第2章详细设计方案2.1 顶层方案图的设计与实现顶层方案图实现一位补码乘法器的逻辑功能,采用原理图设计输入方式完成,电路实现基于XCV200可编程逻辑芯片。

在完成原理图的功能设计后,把输入/输出信号安排到XCV200指定的引脚上去,实现芯片的引脚锁定。

2.1.1创建顶层图形设计文件顶层图形文件主要由一个两个16进制数和和一个封装模块组装而成的一个完整的设计实体。

可利用Xilinx模块实现顶层图形文件的设计,顶层图形文件结构如图2.1所示。

图2.1 一位补码乘法器顶层图形文件结构2.1.2器件的选择与引脚锁定<1)器件的选择由于硬件设计环境是基于伟福COP2000型计算机组成原理实验仪和XCV200实验板,故采用的目标芯片为Xlinx XCV200可编程逻辑芯片。

<2)引脚锁定把顶层图形文件中的输入/输出信号安排到Xlinx XCV200芯片指定的引脚上去,实现芯片的引脚锁定,各信号及Xlinx XCV200芯片引脚对应关系如表 2.1所示。

表2.1 信号和芯片引脚对应关系2.2功能模块的设计与实现2.2.1求补电路模块的设计与实现这个模块由八位加法器,非门组成,GND8输入的是8个低电平信号,这个模块实现的是对-X求补功能。

(1)创建求补电路模块设计原理图。

求补电路原理结构如图2.2所示:图2.2求补电路模块逻辑框图<2)创建元件图形符号为能在图形编辑器<原理图设计输入方式)中调用NEG芯片,需要为NEG模块创建一个元件图形符号,可利用Xilinx foundation f3.1编译器中的如下步骤实现:Tools=>Symbol Wizard=>下一步。

A[7:0]是输入信号,B[7:0]是输出信号。

其元件图形符号如图2.3所示:图2.3求补电路模块元件图形符号<3)功能仿真对创建的寄存器模块进行功能仿真,验证其功能的正确性,可用Xilinx foundation f3.1编译器的Simulator模块实现。

仿真结果如图2.4所示:图2.4 求补电路仿真结果2.2.2控制电路模块的设计与实现控制电路模块是由8个选择器模块和一个求补电路模块组成,实现选择控制功能。

当C为高电平时输出-X的补码,当C端为低电平时,输出X的补码。

(1)控制电路设计原理图。

控制电路原理结构如图2.5所示:图2.5 控制电路逻辑框图<2)创建元件图形符号为能在图形编辑器<原理图设计输入方式)中调用2_1DC8芯片,需要为2_1DC8模块创建一个元件图形符号,可利用Xilinx foundation f3.1编译器中的如下步骤实现:Tools=>Symbol Wizard=>下一步。

A[7:0]、C是输入信号,OUT[7:0]是输出信号。

其元件图形符号如图2.6所示:图2.6 控制电路图形符号<3)功能仿真对创建的寄存器模块进行功能仿真,验证其功能的正确性,可用Xilinx foundation f3.1编译器的Simulator模块实现。

仿真结果如图2.7所示:图2.7 控制电路仿真结果2.2.3选择器模块的设计与实现选择器主要由三个门电路组成,当CC输入为高电平时,O输出的值为A的值,否则输出B的值(1)创建选择器设计原理图。

选择器原理结构如图2.8所示:图2.8选择器原理框图<2)创建元件图形符号为能在图形编辑器<原理图设计输入方式)中调用DC1芯片,需要为DC1模块创建一个元件图形符号,可利用Xilinx foundation f3.1编译器中的如下步骤实现:Tools=>Symbol Wizard=>下一步。

A、B、CC是输入信号,O是输出信号。

其元件图形符号如图2.9所示:图2.9选择器元件图形符号<3)功能仿真对创建的寄存器模块进行功能仿真,验证其功能的正确性,可用Xilinx foundation f3.1编译器的Simulator模块实现。

仿真结果如图2.10所示:图2.10 选择器仿真结果第3章编程下载与硬件测试3.1编程下载利用COP2000仿真软件的编程下载功能,将得到.bit文件下载到XCV200实验板的XCV200可编程逻辑芯片中。

3.2 硬件测试及结果分析利用XCV200实验板进行硬件功能测试。

一位补码乘法器的输入数据通过XCV200实验板的输入开关实现,输出数据通过XCV200实验板的LED指示灯实现,其对应关系如表3.1所示。

表3.1XCV200实验板信号对应关系利用表3.1中的输入参数作为输入数据,逐个测试输出结果,即用XCV200实验板的开关K0、K1及K2控制数据输入,同时观察数码显示管和发光二极管显示结果,得到如图3.1所示的硬件测试结果。

图3.1 硬件测试结果图参考文献[1] 曹昕燕.EDA技术实验与课程设计[M].北京:清华大学出版社,2006[2] 范延滨.微型计算机系统原理、接口与EDA设计技术[M].北京:北京邮电大学出版社,2006[3] 王爱英.计算机组成与结构(第4版>[M].北京:清华大学出版社,2006[4]侯伯亨,顾新.VHDL硬件描述语言与数字逻辑电路设计[M].西安:西安电子科技大学出版社,1998.5-9.[5]廖裕评,陆瑞强.CPLD数字电路设计--使用MAX+PLUSⅡ[M].北京:清华大学出版社,2001.217-221.[6]John F Wakerly.DIGIAL DESIGN Principles & Practices (Third Edition>[M].北京:高等教育出版社,2001.446-54附录<电路原理图)。

相关文档
最新文档