当前位置:   article > 正文

计算机组成原理第二次实验(带符号的阵列乘法器)_完善下面的乘法器结构图 (含部件名称、位长、是否具有移位以及移位方向,部件间的

完善下面的乘法器结构图 (含部件名称、位长、是否具有移位以及移位方向,部件间的

一、实验目的

  1. 掌握乘法器的原理及其设计方法。
  2. 熟悉 CPLD 应用设计及 EDA 软件的使用。

二、实验原理与内容

  硬件乘法器常规的设计是采用“串行移位”和“并行加法”相结合的方法,这种方法并不 需要很多的器件,然而“加法-移位”的方法毕竟太慢。随着大规模集成电路的发展,采用高速 的单元阵列乘法器,无论从计算机的计算速度,还是从提高计算效率,都是十分必要的。阵列 乘法器分带符号和不带符号的阵列乘法器,本节只讨论不带符号阵列乘法。高速组合阵列乘法 器,采用标准加法单元构成乘法器,即利用多个一位全加器(FA)实现乘法运算。
  对于一个 4 位二进制数相乘,有如下算式:

在这里插入图片描述

  这个 4 × 4 阵列乘法器的原理如图 1-3-1 所示。
在这里插入图片描述

图 1-3-1 4×4 阵列乘法器原理图

  FA(全加器)的斜线方向为进位输出,竖线方向为和输出。图中阵列的最后一行构成了一 个串行进位加法器。由于 FA 一级是无需考虑进位的,它的进位被暂时保留下来不往前传递,因此同一极中任意一位 FA 加法器的进位输出与和输出几乎是同时形成的,与“串行移位”相比可 大大减少同级间的进位传递延迟,所以送往最后一行串行加法器的输入延迟仅与 FA 的级数(行 数)有关,即与乘数位数有关。本实验用 CPLD 来设计一个 4×4 位加法器,且全部采用原理图方式实现。
  本次实验要求实现一个带符号的4×4阵列乘法器。

三、实验过程

  1. 根据上述阵列乘法器的原理,使用 Quartus II 软件编写程序并进行调试。程序代码如下:
module zhenliechengfa(
input [4:0] x,
input [4:0] y,
output [8:0] z
    );
wire c0 = 0;
wire [2:0]cin1=0;
wire [2:0]cin2;
wire [2:0]cin3;
wire [2:0]cin4;
wire [1:0]m4;
wire [1:0]m3;
wire [1:0]m1;
wire [1:0]m2;
wire a1,a2,a3,a4;
xor M(z[8], x[4], y[4]);
lie1 aaa1(.x(x),.y(y[0]),.m(m1),.s(z[0]),.a(a1));
lie234 aaa2(.x(x),.y(y[1]),.cin(cin1),.u(m1),.aa(a1),.s(z[1]),.m(m2),.a(a2),.cout(cin2));
lie234 aaa3(.x(x),.y(y[2]),.cin(cin2),.u(m2),.aa(a2),.s(z[2]),.m(m3),.a(a3),.cout(cin3));
lie234 aaa4(.x(x),.y(y[3]),.cin(cin3),.u(m3),.aa(a3),.s(z[3]),.m(m4),.a(a4),.cout(cin4));
chaoqian3 aaa5(.c0(c0),.x({a4,m4[1],m4[0]}),.y(cin4),.sum({z[6],z[5],z[4]}),.cout(z[7]));
endmodule

module lie1(input [3:0]x,input y,output [1:0]m,output s,output a);
and(s,x[0],y);
and(m[0],x[1],y);
and(m[1],x[2],y);
and(a,x[3],y);
endmodule

module lie234(input [3:0]x,input y,input [2:0]cin,input [1:0]u,input aa, 
output s,output [1:0]m,output a,output [2:0]cout);
wire [2:0]bi;
and(bi[0],x[0],y);
and(bi[1],x[1],y);
and(bi[2],x[2],y);
and(a,x[3],y);
fa u1(.a(u[0]),.b(bi[0]),.cin(cin[0]),.sum(s),.cout(cout[0]));
fa u2(.a(u[1]),.b(bi[1]),.cin(cin[1]),.sum(m[0]),.cout(cout[1]));
fa u3(.a(aa),.b(bi[2]),.cin(cin[2]),.sum(m[1]),.cout(cout[2]));
endmodule

module chaoqian3(input c0,input [2:0]x,input [2:0]y,output [2:0]sum,output cout);
    wire [2:0]c;
    chaoqianjinwei add3(x,y,c,c0);
    wire [2:0]u;
    fa U1(.cout(u[0]),.sum(sum[0]),.a(x[0]),.b(y[0]),.cin(c0));
    fa U2(.cout(u[1]),.sum(sum[1]),.a(x[1]),.b(y[1]),.cin(c[0]));
    fa U3(.cout(u[2]),.sum(sum[2]),.a(x[2]),.b(y[2]),.cin(c[1]));
    assign cout=c[2];
endmodule

module chaoqianjinwei(x,y,c,c0);
    input c0;
    input [2:0]x;
    input [2:0]y;
    output  [2:0]c;
    wire [2:0]G,P;
    assign P = x | y;
    assign G = x & y;
    assign c[0]= G[0] | (c0&P[0]);
    assign c[1]= G[1] | (P[1]&G[0]) | (P[1]&P[0]&c0);
    assign c[2]= G[2] | (P[2]&G[1]) | (P[2]&P[1]&G[0]) | (P[2]&P[1]&P[0]&c0);
endmodule


module fa(
input a,
input b,
input cin,
output sum,
output cout
);
wire S1, T1, T2, T3;
xor x1 (S1, a, b);
xor x2 (sum, S1, cin);
and A1 (T3, a, b );
and A2 (T2, b, cin);
and A3 (T1, a, cin);
or O1 (cout, T1, T2, T3 );
endmodule

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  1. 进行仿真调试,检测程序运行是否正确,并进行管脚的分配。仿真图及管脚分配图如下:
    . 在这里插入图片描述
图3-1 仿真调试图

四、实验总结

   本次实验通过编写程序、仿真运行、电路连接等步骤,较好地实现了带符号的4×4阵列乘法器的功能。可以通过本程序,实现两个带符号的4位二进制数的乘法,最终得到一个带符号的8位二进制数的结果。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/707910
推荐阅读
相关标签
  

闽ICP备14008679号