乘位阵列乘法器设计集团文件版本号:(M928-T898-M248-WU2669-I2896-DQ586-M1988)课程设计报告课程设计题目: 4乘4位阵列乘法器设计学生姓名:杨博闻学号专业:计算机科学与技术班级: 1120701指导教师:汪宇玲2014年 1月 4日一、设计目的1.掌握乘法器的原理及其设计方法。
2 .熟练应用CPLD 设计及 EDA 操作软件。
二、设计设备1.TDN-CM+或 TDN-CM++教学实验系统一套。
2 ·PC 微机一台。
3·ispDesignEXPERT 软件模型机数据通路结构框图三、设计原理本实验用 CPLD 来设计一个 4 ×4 位乘法器,相对于画电路图输入,用 ABEL 语言描述是比较方便的。
其算式如下(其中括号中的数字表示在 ABEL 源程序描述中的功能块调用编号):a3 a2 a1 a0× b3 b2 b1 b0----------------------------------------------------------------------------------------------------------a3b0(10) a2b0(6)a1b0(3) a0b0(1)a3b1(13) a2b1(9) a1b1(5)a0b1(2)a3b2(15) a2b2(12) a1b2(8) a0b2(4) + a3b3(16) a2b3(14) a1b3(11) a0b3(7)-----------------------------------------------------------------------------------------------------------p7 p6 p5 p4 p3 p2 p1 p0四、设计步骤1.安装EDA 软件打开计算机电源,进入 Windows 系统,安装上述 ispDesignEXPERT软件。
安装完成后,桌面和开始菜单中则建有 ispDesignEXPERT 软件图标。
2.用ispDesignEXPERT 软件根据上述乘法的逻辑原理用ABEL 语言编写功能描述程序。
其在 1032 芯片中对应的管脚如图:3.编辑、编译和下载使用 ispDesignEXPERT 软件编辑源程序并进行编译,然后打开实验系统电源,将生成的 JEDEC 文件下载到 ispLSI1032 中去。
4 .连接实验电路按下图连接实验电路。
5 .给定操作数,观察乘法器输出将 SWITCH UNIT 单元中的 SW-B、AR 开关置为低电平状态。
在INPUT DEVICE 单元中的 8 个开关的高 4 位为乘数 A ,低四位为被乘数B ,而相乘的结果将在OUTPUT DEVICE单元中的数码管中以十六进制形式显示。
给 A 和 B置不同的数,观察相乘的结果。
五、设计结果:六、ABEL源码MODULE multiplyTITLE '4 bit multiplier'"Inputsa3,a2, a1, a0 pin 34,35,36,37;b3,b2, b1, b0 pin 38,39,40,41;"Outputsp7,p6,p5,p4,p3,p2,p1,p0 pin 45,46,47,48,49,50,51,52 istype 'com,invert';"Set declarationsaset = [a3,a2,a1,a0];bset = [b3,b2,b1,b0];product = [p7,p6,p5,p4,p3,p2,p1,p0];"Sub-module declarations, with default input values "In this case, all inputs default to 0 if not used. adder interface (a=0, b=0, sin=0, cin=0 -> sum, carry); "Sub-module instancesablk1 functional_block adder;ablk2 functional_block adder;ablk3 functional_block adder;ablk4 functional_block adder;ablk5 functional_block adder;ablk6 functional_block adder;ablk7 functional_block adder;ablk8 functional_block adder;ablk9 functional_block adder;ablk10 functional_block adder;ablk11 functional_block adder;ablk12 functional_block adder;ablk13 functional_block adder;ablk14 functional_block adder;ablk15 functional_block adder;ablk16 functional_block adder;Equationsp7 = ablk16.carry; " Product output bit 7p6 = ablk16.sum; " bit 6 p5 = ablk14.sum; " bit 5 p4 = ablk11.sum; " bit 4 p3 = ablk7.sum; " bit 3 p2 = ablk4.sum; " bit 2 p1 = ablk2.sum; " bit 1 p0 = ablk1.sum; " bit 0 ablk16.sin = ablk15.carry; ablk16.cin = ablk14.carry; ablk16.a = a3;ablk16.b = b3;ablk15.sin = ablk13.carry; ablk15.cin = ablk12.carry; ablk15.a = a3;ablk15.b = b2;ablk14.sin = ablk15.sum;ablk14.cin = ablk11.carry; ablk14.a = a2;ablk14.b = b3;ablk13.cin = ablk9.carry;ablk13.a = a3;ablk13.b = b1;ablk12.sin = ablk13.sum; ablk12.cin = ablk8.carry; ablk12.a = a2;ablk12.b = b2;ablk11.sin = ablk12.sum; ablk11.cin = ablk7.carry; ablk11.a = a1;ablk11.b = b3;ablk10.a = a3;ablk10.b = b0;ablk9.sin = ablk10.sum; ablk9.cin = ablk6.carry; ablk9.a = a2;ablk9.b = b1;ablk8.sin = ablk9.sum; ablk8.cin = ablk5.carry; ablk8.a = a1;ablk8.b = b2;ablk7.sin = ablk8.sum; ablk7.cin = ablk4.carry; ablk7.a = a0;ablk7.b = b3;ablk6.a = a2; ablk6.b = b0; ablk5.sin = ablk6.sum;ablk5.cin = ablk3.carry; ablk5.a = a1;ablk5.b = b1;ablk4.sin = ablk5.sum;ablk4.cin = ablk2.carry; ablk4.a = a0;ablk4.b = b2;ablk3.a = a1;ablk3.b = b0;ablk2.sin = ablk3.sum;ablk2.cin = ablk1.carry; ablk2.a = a0;ablk2.b = b1;ablk1.a = a0;ablk1.b = b0;Test_vectors([aset, bset] -> product) [ 0 , 0 ] -> 0;[ 0 , 1 ] -> 0;[ 1 , 2 ] -> 2; [ 2 , 3 ] -> 6; [ 3 , 4 ] -> 12; [ 3 , 5 ] -> 15; [ 4 , 5 ] -> 20; [ 4 , 6 ] -> 24; [ 5 , 6 ] -> 30; [ 5 , 7 ] -> 35; [ 6 , 7 ] -> 42; [ 7 , 7 ] -> 49; [ 8 , 8 ] -> 64; [ 9 , 9 ] -> 81 ; [ 10 , 11 ] -> 110; [ 12 , 13 ] -> 156; [ 13 , 14 ] -> 182; [ 13 , 15 ] -> 195; [ 14 , 15 ] -> 210; END六、心得体会经过这次课程设计充分地实践了课上所学到的知识,提高了动手能力,把理论知识运用到实践中。
对阵列乘法运算器的结构以及原理得到了进一步的了解。
在设计的过程中也遇到了很多的问题,最大的问题就是ABEL源码的理解,在老师的教导下,了解了这一源码的形成。
通过本次课程设计受益良多。