EDA5位整数乘法器设计.docx

上传人:b****5 文档编号:8301243 上传时间:2023-01-30 格式:DOCX 页数:19 大小:103.31KB
下载 相关 举报
EDA5位整数乘法器设计.docx_第1页
第1页 / 共19页
EDA5位整数乘法器设计.docx_第2页
第2页 / 共19页
EDA5位整数乘法器设计.docx_第3页
第3页 / 共19页
EDA5位整数乘法器设计.docx_第4页
第4页 / 共19页
EDA5位整数乘法器设计.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

EDA5位整数乘法器设计.docx

《EDA5位整数乘法器设计.docx》由会员分享,可在线阅读,更多相关《EDA5位整数乘法器设计.docx(19页珍藏版)》请在冰豆网上搜索。

EDA5位整数乘法器设计.docx

EDA5位整数乘法器设计

目录

1.摘要2

1.1EDA的概念2

1.1.1EDA技术及应用2

1.1.2EDA技术发展趋势3

1.2.1EDA硬件工作平台3

1.2.2EDA的软件工作平台3

2.课程设计的性质、目的和任务3

3.题目要求4

3.设计步骤4

3.1整体原理框图:

4

3.2乘法器整体电路原理图:

5

3.3输入模块:

5

3.4运算模块:

6

3.5显示控制模块:

9

3.6显示模块:

10

4.整体仿真15

5.调试中遇到的问题及解决的方法15

6.心得体会16

7.参考文献16

1.摘要

1.1EDA的概念

 EDA是电子设计自动化(ElectronicDesignAutomation)的缩写。

由于它是一门刚刚发展起来的新技术,涉及面广,内容丰富,理解各异,所以目前尚无一个确切的定义[1]。

但从EDA技术的几个主要方面的内容来看,可以理解为:

EDA技术是以大规模可编程逻辑器件为设计载体,以硬件描述语言为系统逻辑描述的主要表达方式,以计算机、大规模可编程逻辑器件的开发软件及实验开发系统为设计工具,通过有关的开发软件,自动完成用软件的方式设计电子系统到硬件系统的一门新技术。

可以实现逻辑编译、逻辑化简、逻辑分割、逻辑综合及优化,逻辑布局布线、逻辑仿真。

完成对于特定目标芯片的适配编译、逻辑映射、编程下载等工作,最终形成集成电子系统或专用集成芯片[2]。

EDA技术是伴随着计算机、集成电路、电子系统的设计发展起来的,至今已有30多年的历程。

EDA是电子技术设计自动化,也就是能够帮助人们设计电子电路或系统的软件工具。

该工具可以在电子产品的各个设计阶段发挥作用,使设计更复杂的电路和系统成为可能。

在原理图设计阶段,可以使用EDA中的仿真工具论证设计的正确性;在芯片设计阶段,可以使用EDA中的芯片设计工具设计制作芯片的版图;在电路板设计阶段,可以使用EDA中电路板设计工具设计多层电路板。

特别是支持硬件描述语言的EDA工具的出现,使复杂数字系统设计自动化成为可能,只要用硬件描述语言将数字系统的行为描述正确,就可以进行该数字系统的芯片设计与制造[5]。

21世纪将是EDA技术的高速发展期,EDA技术将是对21世纪产生重大影响的十大技术之一。

 

  硬件描述语言 :

 硬件描述语言(HDL)是一种用于进行电子系统硬件设计的计算机高级语言,它采用软件的设计方法来描述电子系统的逻辑功能、电路结构和连接形式。

 常用硬件描述语言有HDL、Verilog和VHDL语言[6]。

1.1.1EDA技术及应用

电子EDA技术发展迅猛,逐渐在教学、科研、产品设计与制造等各方面都发挥着巨大的作用。

在教学方面:

几乎所有理工科(特别是电子信息)类的高校都开设了EDA课程。

主要是让学生了解EDA的基本原理和基本概念、硬件描述系统逻辑的方法、使用EDA工具进行电子电路课程的模拟仿真实验并在作毕业设计时从事简单电子系统的设计,为今后工作打下基础。

具有代表性的是全国每两年举办一次的大学生电子设计竞赛活动。

在科研方面:

主要利用电路仿真工具进行电路设计与仿真;利用虚拟仪器进行产品调试;将FPGA器件的开发应用到仪器设备中。

在产品设计与制造方面:

从高性能的微处理器、数字信号处理器一直到彩电、音响和电子玩具电路等,EDA技术不单是应用于前期的计算机模拟仿真、产品调试,而且也在后期的制作、电子设备的研制与生产、电路板的焊接、器件的制作过程等有重要作用。

可以说电子EDA技术已经成为电子工业领域不可缺少的技术支持[7]。

1.1.2EDA技术发展趋势

EDA技术在进入21世纪后,由于更大规模的FPGA器件的不断推出,在仿真和设计两方面支持标准硬件描述语言的功能强大的EDA软件不断更新、增加,使电子EDA技术得到了更大的发展。

电子技术全方位纳入EDA领域,EDA使得电子领域各学科的界限更加模糊,更加互为包容特别是EDA技术在我国尚未普及,掌握和普及这一全新的技术,将对我国电子技术的发展具有深远的意义。

  

1.2.1EDA硬件工作平台

1.计算机

2.EDA实验开发系统:

EL教学实验箱。

1.2.2EDA的软件工作平台

PLD(ProgrammableLogicDevice)是一种由用户根据需要而自行构造逻辑功能的数字集成电路。

目前主要有两大类型:

CPLD(ComplexPLD)和FPGA(FieldProgrammableGateArray)。

它们的基本设计方法是借助于EDA软件,用原理图、状态机、布尔表达式、硬件描述语言等方法,生成相应的目标文件,最后用编程器或下载电缆,由目标器件实现。

生产PLD的厂家很多,但最有代表性的PLD厂家为Altera、Xilinx和Lattice公司。

我们采用了QuartusⅡ软件作为开发工具。

2.课程设计的性质、目的和任务

创新精神和实践能力二者之中,实践能力是基础和根本。

这是由于创新基于实践、源于实践,实践出真知,实践检验真理。

实践活动是创新的源泉,也是人才成长的必由之路。

通过课程设计的锻炼,要求学生掌握电路的一般设计方法,具备初步的独立设计能力,提高综合运用所学的理论知识独立分析和解决问题的能力,培养学生的创新精神。

3.题目要求

设计一个两个5位数相乘的乘法器。

用发光二极管显示输入数值,用7段显示器显示十进制结果。

乘数和被乘数分两次输入。

在输入乘数和被乘数时,要求显示十进制输入数据。

输入显示和计算结果显示,采用分时显示方式进行,可参见计算器的显示功能

时钟

结果寄存

累加器

相乘逻辑

移位寄存

移位寄存

被乘数

乘数

 

3.设计步骤

3.1整体原理框图:

3.2乘法器整体电路原理图:

3.3输入模块:

模块说明:

由CH,DH控制数据的输入,由SHUJU端输入数据,当CH,DH为0,0时输入被乘数,由输出端A输出,当按下“乘号键CH”即CH,DH为1,0时输入乘数,由输出端B输出,当RESET为0时输出端清零。

VHDL程序代码如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYshuruIS

PORT(CH,DH,RESET,CLK:

INSTD_LOGIC;

shuju:

INSTD_LOGIC_VECTOR(4DOWNTO0);

A,B:

OUTSTD_LOGIC_VECTOR(4DOWNTO0));

ENDshuru;

ARCHITECTUREbehaveOFshuruIS

BEGIN

PROCESS(CH,DH,shuju,RESET,CLK)

BEGIN

IFCLK'EVENTANDCLK='1'THEN

IFRESET='1'THEN

A<="00000";

B<="00000";

ELSE

IFCH='0'ANDDH='0'THEN

A<=shuju;

ELSIFCH='1'ANDDH='0'THEN

B<=shuju;

ELSENULL;

ENDIF;

ENDIF;

ENDIF;

ENDPROCESS;

ENDbehave;

3.4运算模块:

模块说明:

分别由AO和BO端接收被乘数和乘数,由CJ端输出带符号位的二进制乘积结果。

此模块由三个子模块组成:

“数字与符号分离子模块”,“乘法运算子模块”及“数字与符号重组子模块”。

VHDL程序代码如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYyunsuanIS

PORT(A0:

INSTD_LOGIC_VECTOR(4DOWNTO0);

B0:

INSTD_LOGIC_VECTOR(4DOWNTO0);

CJ:

OUTSTD_LOGIC_VECTOR(8DOWNTO0));

ENDyunsuan;

ARCHITECTUREBEHAVEOFyunsuanIS

COMPONENTsffl

PORT(A,B:

INSTD_LOGIC_VECTOR(4DOWNTO0);

FH:

OUTSTD_LOGIC;

C,D:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));

ENDCOMPONENT;

COMPONENTMUL

PORT(E,F:

INSTD_LOGIC_VECTOR(3DOWNTO0);

Q:

OUTSTD_LOGIC_VECTOR(7DOWNTO0));

ENDCOMPONENT;

COMPONENTsfcz

PORT(Q:

INSTD_LOGIC_VECTOR(7DOWNTO0);

FHO:

INSTD_LOGIC;

CJO:

OUTSTD_LOGIC_VECTOR(8DOWNTO0));

ENDCOMPONENT;

SIGNALC1,D1:

STD_LOGIC_VECTOR(3DOWNTO0);

SIGNALFHW:

STD_LOGIC;

SIGNALOUT1:

STD_LOGIC_VECTOR(7DOWNTO0);

BEGIN

U1:

sfflPORTMAP(A=>A0,B=>B0,C=>C1,D=>D1,FH=>FHW);

U2:

MULPORTMAP(E=>C1,F=>D1,Q=>OUT1);

U3:

sfczPORTMAP(Q=>OUT1,FHO=>FHW,CJO=>CJ);

ENDBEHAVE;

数字与符号分离子模块:

程序代码如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYsfflIS

PORT(A,B:

INSTD_LOGIC_VECTOR(4DOWNTO0);

FH:

OUTSTD_LOGIC;

C,D:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));

ENDsffl;

ARCHITECTUREbehaveOFsfflIS

BEGIN

C<=A(3DOWNTO0);

D<=B(3DOWNTO0);

FH<=A(4)XORB(4);

ENDbehave;

乘法运算子模块:

程序代码如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYMULIS

PORT(E,F:

INSTD_LOGIC_VECTOR(3DOWNTO0);

Q:

OUTSTD_LOGIC_VECTOR(7DOWNTO0));

ENDMUL;

ARCHITECTUREbehaveOFMULIS

SIGNALQ1:

STD_LOGIC_VECTOR(3DOWNTO0);

SIGNALQ2:

STD_LOGIC_VECTOR(4DOWNTO0);

SIGNALQ3:

STD_LOGIC_VECTOR(5DOWNTO0);

SIGNALQ4:

STD_LOGIC_VECTOR(6DOWNTO0);

SIGNALFF0:

STD_LOGIC_VECTOR(3DOWNTO0);

SIGNALFF1:

STD_LOGIC_VECTOR(3DOWNTO0);

SIGNALFF2:

STD_LOGIC_VECTOR(3DOWNTO0);

SIGNALFF3:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

FF0<=F(0)&F(0)&F(0)&F(0);

FF1<=F

(1)&F

(1)&F

(1)&F

(1);

FF2<=F

(2)&F

(2)&F

(2)&F

(2);

FF3<=F(3)&F(3)&F(3)&F(3);

Q1<=EANDFF0;

Q2<=(EANDFF1)&"0";

Q3<=(EANDFF2)&"00";

Q4<=(EANDFF3)&"000";

Q<=Q1+Q2+Q3+Q4;

ENDbehave;

数字与符号重组子模块:

程序代码如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYsfczIS

PORT(Q:

INSTD_LOGIC_VECTOR(7DOWNTO0);

FHO:

INSTD_LOGIC;

CJO:

OUTSTD_LOGIC_VECTOR(8DOWNTO0));

ENDsfcz;

ARCHITECTUREbehaveOFsfczIS

BEGIN

CJO<=FHO&Q;

ENDbehave;

3.5显示控制模块:

模块说明:

当CH,DH为0,0时显示被乘数,当按下“乘号键CH”即CH,DH为1,0时显示乘数,当按下“等号键DH”即CH,DH为1,1时显示乘积。

VHDL程序代码如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYxskzIS

PORT(CH:

INSTD_LOGIC;

DH:

INSTD_LOGIC;

CLK:

INSTD_LOGIC;

AIN:

INSTD_LOGIC_VECTOR(4DOWNTO0);

BIN:

INSTD_LOGIC_VECTOR(4DOWNTO0);

CJIN:

INSTD_LOGIC_VECTOR(8DOWNTO0);

shuchu:

OUTSTD_LOGIC_VECTOR(8DOWNTO0));

ENDxskz;

ARCHITECTUREbehaveOFxskzIS

BEGIN

PROCESS(CH,DH,CLK)

BEGIN

IF(CLK'EVENTANDCLK='1')THEN

IF(CH='0'ANDDH='0')THEN

shuchu<=AIN(4)&"0000"&AIN(3DOWNTO0);

ELSIF(CH='1'ANDDH='0')THEN

shuchu<=BIN(4)&"0000"&BIN(3DOWNTO0);

ELSE

shuchu<=CJIN;

ENDIF;

ENDIF;

ENDPROCESS;

ENDBEHAVE;

3.6显示模块:

模块说明:

由AIN端接收要显示的二进制内容,输出转换成十进制后各位对应的数码管显示代码。

此模块由六个子模块组成:

“输出数字与符号分离子模块”,“进制转换子模块”,“消零子模块”,“符号位数码管显示子模块”,“数字位数码管显示子模块”和“灭点子模块”。

此模块组成结构如下:

输出数字与符号分离子模块:

程序代码如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYoutsfflIS

PORT(AIN:

INSTD_LOGIC_VECTOR(8DOWNTO0);

fhout:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

shujuout:

OUTSTD_LOGIC_VECTOR(7DOWNTO0));

ENDoutsffl;

ARCHITECTUREbehaveOFoutsfflIS

SIGNALB:

STD_LOGIC;

BEGIN

B<=AIN(8);

PROCESS(B)

BEGIN

CASEBIS

WHEN'0'=>fhout<="0000";

WHEN'1'=>fhout<="0001";

WHENOTHERS=>fhout<=NULL;

ENDCASE;

ENDPROCESS;

shujuout<=AIN(7DOWNTO0);

ENDbehave;

进制转换子模块:

此模块是用来对结果进行二进制到十进制转换的,便于在显示数码管上显示。

定义3个变量A1,A2,A3,并赋初值为0,从高到低判断输入的数据A(二进制)的各个位,首先是百位,若大于一百,则A3加1,EJZ减去100;然后是十位,若大于十,则A2加1,EJZ减去10;最后是个位,直接将EJZ剩余值赋值给A1。

依次将A1,A2,A3赋值给GOUT,SOUT,BOUT输出。

程序代码如下:

modulezhuanhuan(clk,a,bout,sout,gout);

inputclk;

input[7:

0]a;

output[3:

0]bout,sout,gout;

reg[3:

0]A1,A2,A3,bout,sout,gout;

reg[7:

0]aa;

reg[2:

0]num;

always@(posedgeclk)

begin

case(num)

0:

begin

aa[7:

0]<=a;

num<=1;

A1<=0;

A2<=0;

A3<=0;

end

1:

begin

if(aa>=100)

begin

A3<=A3+1;

aa<=aa-100;

end

elseif((aa>=10)&&(aa<100))

begin

A2<=A2+1;

aa<=aa-10;

end

elseif((aa>=1)&&(aa<10))

begin

A1<=aa;

aa<=0;

end

else

begin

num<=2;

end

end

2:

begin

gout<=A1;

sout<=A2;

bout<=A3;

num<=0;

end

default:

num<=0;

endcase

end

endmodule

消零子模块:

程序代码如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYxiaolingIS

PORT(B:

INSTD_LOGIC_VECTOR(3DOWNTO0);

S:

INSTD_LOGIC_VECTOR(3DOWNTO0);

G:

INSTD_LOGIC_VECTOR(3DOWNTO0);

BOUT:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

SOUT:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

GOUT:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));

ENDxiaoling;

ARCHITECTUREbehaveOFxiaolingIS

BEGIN

PROCESS(B,S,G)

BEGIN

IF(B="0000")THEN

IF(S="0000")THEN

IF(G="0000")THEN

BOUT<="1010";

SOUT<="1010";

GOUT<="1010";

ELSE

BOUT<="1010";

SOUT<="1010";

GOUT<=G;

ENDIF;

ELSE

BOUT<="1010";

SOUT<=S;

GOUT<=G;

ENDIF;

ELSE

BOUT<=B;

SOUT<=S;

GOUT<=G;

ENDIF;

ENDPROCESS;

ENDbehave;

符号位数码管显示子模块:

程序代码如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYfh_ledIS

PORT(fh:

INSTD_LOGIC_VECTOR(3DOWNTO0);

fh_show:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

ENDfh_led;

ARCHITECTUREbehaveOFfh_ledIS

BEGIN

PROCESS(fh)

BEGIN

CASEfhIS

WHEN"0000"=>fh_show<="1111111";

WHEN"0001"=>fh_show<="0111111";

WHENOTHERS=>fh_show<="0000000";

ENDCASE;

ENDPROCESS;

ENDbehave;

数字位数码管显示子模块:

程序代码如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYshuzi_ledIS

PORT(shuzi:

INSTD_LOGIC_VECTOR(3DOWNTO0);

shuzi_show:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

ENDshuzi_led;

ARCHITECTUREbehaveOFshuzi_ledIS

BEGIN

PROCESS(shuzi)

BEGIN

CASEshuziIS

WHEN"0000"=>shuzi_show<="1000000";

WHEN"0001"=>shuzi_show<="1111001";

WHEN"0010"=>shuzi_show<="0100100";

WHEN"0011"=>shuzi_show<="0110000";

WHEN"0100"=>shuzi_show<="0011001";

WHEN"0101"=>shuzi_show<="0010010";

WHEN"0110"=>shuzi_show<="0000010";

WHEN"0111"=>shuzi_show<="1011000";

WHEN"1000"=>shuzi_show<="0000000";

WHEN"1001"=>shuzi_show<="0010000";

WHENOTHERS=>shuzi_show<="1111111";

ENDCASE;

ENDPROCESS;

ENDbehave;

灭点子模块:

4.整体仿真

仿真整体波形如下:

以输入被乘数-9,乘数12,输出乘积-108为例:

5.调试中遇到的问题及解决的方法

1.在进行整体编译时,出现芯片的逻辑资源不足而无法继续编译的问题。

该问题困扰了我很长时间,一开始以为是程序不精简,但后来在同学的提

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 幼儿教育 > 唐诗宋词

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1