EDA课程设计---蔡加兴.doc
- 文档编号:371116
- 上传时间:2023-04-29
- 格式:DOC
- 页数:26
- 大小:1.38MB
EDA课程设计---蔡加兴.doc
《EDA课程设计---蔡加兴.doc》由会员分享,可在线阅读,更多相关《EDA课程设计---蔡加兴.doc(26页珍藏版)》请在冰点文库上搜索。
课程设计说明书
课程名称:
EDA课程技术设计
题目:
ALU设计
学院:
电气信息学院
专业:
测控技术与仪器
年级:
2007级
学生:
蔡加兴
学号:
312007080401105
指导教师:
黄勇
完成日期:
2010年6月20日
1. EDA技术和设计题目简介 1
1.1 EDA技术简介 1
1.2 设计题目简介 1
2. 总体方案设计与实现工具 2
2.1 ALU原理分析 2
2.2 用FPGA实现ALU的设计 2
2.3 VerilogHDL开发语言简介 3
3. ALU的各模块的具体设计 4
3.1 译码与控制分配模块alumux的实现 4
3.2 逻辑运算模块alucore的实现 4
3.3 加减模块addsub的实现 6
3.4 乘法模块mul的实现 7
3.5 除法模块div的实现 9
3.6 各各模块的组合 15
4 系统仿真与调试 15
4.1 仿真环境介绍 15
5 总结与体会 20
5.1 设计的体会 20
5.2 设计的不足和改进措施 20
5.3 致谢 20
参考文献 21
附录:
22
西华大学课程设计说明书
EDA技术课程设计
摘要:
本次设计采用的是EDA技术设计一个算术逻辑单元ALU。
本设计主要完成ALU整体设计,设计分为两个模块:
算术运算模块和逻辑运算模块。
算术运算模块包括带进位的八位数的加减和四位数的乘除法运算,逻辑运算模块包括左移与右移。
本设计使用VerilogHDL语言编写,并可以在FPGA上实现。
QuartusII来进行仿真和调试。
关键词:
EDA技术,ALU,VerilogHDL语言,FPGA
Abstract:
ThisdesignisadoptedtodesignaEDAarithmeticlogicunit(ALU).Thedesignofthemaindesign,thedesignoftheALUisdividedintotwomodules:
arithmeticandlogicaloperationsmodule.Withbinaryarithmeticmodulesincludingeightdigitdeductionsandfourdigits,themethodofcomputing,logicoperationmodulesincludingleftandright.ThisdesignUSESVerilogHDLlanguage,andcanberealizedonFPGA.SimulationandQuartusIItodebug
Keywords:
EDAtechnology,ALU,VerilogHDLlanguage,FPGA
23
1.EDA技术和设计题目简介
1.1EDA技术简介
EDA是电子设计自动化(ElectronDesignAutomation)的缩写,是在20世纪90年代初,从CAD(计算机辅助设计)、CAM(计算机辅助制造)、CAT(计算机辅助测试)和CAE(计算机辅助工程)的概念发展起来的。
EDA技术是在电子CAD技术基础上发展起来的计算机软件系统,是指以计算机为工作平台,融合了应用电子技术、计算机技术、信息处理及智能化技术的最新成果,进行电子产品的自动设计。
利用EDA工具,电子设计师可以从概念、算法、协议等开始设计电子系统,大量工作可以通过计算机完成,并可以将电子产品从电路设计、性能分析到设计出IC版图或PCB版图的整个过程的计算机上自动处理完成。
现在对EDA的概念或范畴用得很宽。
包括在机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域,都有EDA的应用。
目前EDA技术已在各大公司、企事业单位和科研教学部门广泛使用。
例如在飞机制造过程中,从设计、性能测试及特性分析直到飞行模拟,都可能涉及到EDA技术。
本文所指的EDA技术,主要针对电子电路设计、PCB设计和IC设计。
EDA设计可分为系统级、电路级和物理实现级。
1.2设计题目简介
算术逻辑单元(ArithmeticLogicUnit,ALU)是中央处理器(CPU)的执行单元,是所有中央处理器的核心组成部分,由"AndGate"和"OrGate"构成的算术逻辑单元,主要功能是进行二进制的算术运算,如加减乘(不包括整数除法)。
基本上,在所有现代CPU体系结构中,二进制都以补数的形式来表示。
此算术逻辑单元能构完成带进位的八位数的加减运算和四位数的乘法和除法的运算。
本文介绍带进位的ALU设计,用VerilogHDL语言编写,并可以在FPGA上实现。
2.总体方案设计与实现工具
通过查阅大量相关技术资料,并结合自己的实际知识,我主要提出了使用FPGA的方案来实现系统功能。
下面我将首先对这这种方案的组成框图和实现原理分别进行说明,然后阐述我最终选择方案的原因。
2
2.1ALU原理分析
根据本实验的设计要求ALU具有以下功能:
(1)带进位的加、减、乘、除四则运算。
(2)数据传送、移位、判断和程序转移等功能。
由于ALU是中央处理器(CPU)的重要组成部分,所以对ALU的面积、功耗、指令执行时间和稳定性都有很强的要求,这样就对设计ALU器件就有特高的要求。
2.2用FPGA实现ALU的设计
在现代电子系统中,数字系统所占的比例越来越大。
现代电子系统发展的趋势是数字化和集成化,CPLD/FPGA作为可编程ASIC器件,在数字系统设计中发挥着重要的作用。
与传统的可编程器件相比,FPGA采用了类似门阵列的通用结构,规模可以做的较大,可实现的功能更强,设计的灵活性更大。
且FPGA的容量越来越大,它所提供的门数从几百门到上百万门,可以满足不同的需要。
因此用FPGA来实现ALU的功能不会受到FPGA门数的限制。
用FPGA实现的ALU有很多优点:
(1)编程方式简便先进。
(2)高速FPGA的时钟延迟可达纳秒级,结合其并行工作方式在超高速应用领域和实时测控方面有非常广阔的应用前景。
(3)高可靠性表现在几乎可将整个系统下载于同一芯片中从而大大缩小了体积易于管理和屏蔽。
(4)开发工具和设计语言标准化开发周期短。
(5)功能强大应用广阔FPGA可供选择范围很大,可根据不同的应用选用不同容量的芯片。
利用它们可实现几乎任何形式的数字电路或数字系统的设计。
(6)易学易用开发便捷FPGA应用的学习不需太多的预备知识,只要具有通常的数字电路和计算机编程基础知识,就足以在短期内掌握基本的设计方法和开发技巧。
2.3VerilogHDL开发语言简介
VerilogHDL是一种硬件描述语言(HDL:
HardwareDiscriptionLanguage),是一种以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。
VerilogHDL语言具有下述描述能力:
设计的行为特性、设计的数据流特性、设计的结构组成以及包含响应监控和设计验证方面的时延和波形产生机制。
所有这些都使用同一种建模语言。
此外,VerilogHDL语言提供了编程语言接口,通过该接口可以在模拟、验证期间从设计外部访问设计,包括模拟的具体控制和运行。
VerilogHDL语言不仅定义了语法,而且对每个语法结构都定义了清晰的模拟、仿真语义。
因此,用这种语言编写的模型能够使用Verilog仿真器进行验证。
语言从C编程语言中继承了多种操作符和结构。
VerilogHDL提供了扩展的建模能力,其中许多扩展最初很难理解。
但是,VerilogHDL语言的核心子集非常易于学习和使用,这对大多数建模应用来说已经足够。
当然,完整的硬件描述语言足以对从最复杂的芯片到完整的电子系统进行描述。
VerilogHDL和VHDL是目前世界上最流行的两种硬件描述语言,都是在20世纪80年代中期开发出来的。
前者由GatewayDesignAutomation公司(该公司于1989年被Cadence公司收购)开发。
两种HDL均为IEEE标准。
3.ALU的各模块的具体设计
ALU模块的功能是按照控制模块给出的指令,对来自数据存储器、程序存储器、累加器ACC和程序状态字的数据进行算术、逻辑或位运算。
ALU模块可以直接或间接的执行很多指令,如加、减、乘、除等算术运算指令,逻辑与、或、异或等逻辑运算指令以及移位操作指令。
ALU模块执行的指令有很多,除去上述的算术运算、逻辑运算和环移指令外,还包括条件转移指令中的比较条件转移指令CJNE和减1条件转移指令DJNZ。
这种设计方法主要考虑比较条件转移指令CJNE设计上的方便与规范性;而减1条件转移指令DJNZ的指令操作需要进行减1操作,正好可以利用ALU模块的相应算术运算来进行,因此可通过ALU模块间接实现的;其余的很多指令则由ALU模块直接实现,这些指令包括算术逻辑运算指令、逻辑运算指令和环移指令。
alu模块共由5个子模块组成,分别是译码与控制分配模块alumux、逻辑运算模块alucore、加减模块addsub、乘法模块mul和除法模块div
3
3.1译码与控制分配模块alumux的实现
alumux模块是alu模块的译码与控制分配模块,用于实现对从control模块传来的操作代码进行译码和把不同的操作代码分配到不同的子模块进行操作,其实体图如图3-1所示。
alumux模块的译码部分采用三个进程(Process)语句来实现,在每个进程中通过CASE
语句来实现对输入信号的译码操作。
由control模块传送给alumux子模块的操作代码共有41条。
其中,每条操作代码都在control模块中用常量来加以定义,如对操作代码
3.2逻辑运算模块alucore的实现
alucore模块主要是实现相应的逻辑运算、移位指令运算及比较指令等相关运算,其实体图如图3-3所示:
当指令代码经alumux模块译码后若选通了alucore模块,并提供相应的操作代码和操作数后,alucore模块开始进行相应的工作。
在VerilogHDL语言中,逻辑运算非常容易实现,可以直接利用相应的与(and)、或(or)、非(not)等语句来实现。
如移位逻辑指令的实现如下:
5'b00011:
begin
{ALU_C,ALU_O}={C_in,AC_in};
end//如果操作译码为5’b00100则完成ALU_C->AC直移
5'b00100:
begin
{ALU_C,ALU_O}={C_in,GR_in};
end//如果操作译码为5’b00100则完成ALU_C->Gr直移
5'b10000:
begin
{ALU_O,ALU_C}={C_in,GR_in};
end//如果操作码为5’b10000则完成SHCRAC,RI
5'b10001:
begin{ALU_C,ALU_O}={GR_in,C_in};
end//如果操作码为5’b10001则完成SHCLAC,RI
5'b01111:
begin
{ALU_C,ALU_O}={C_in,~GR_in};
end//如果操作编码为5’b01111则进行取反操作
3.3加减模块addsub的实现
addsub加减法模块主要用来实现alu模块算术运算中的加减法运算,由于减法运算的
实现也可以转化成加法运算,因此addsub模块的实现实质就是加法器的设计,实现后的实体图如图3-4所示。
其中输入端口18个,两个8位的操作数端口opa_i和opb_i,用于存放加数和被加数;一个状态位cy_i,即低位的进位输入;另一个输入端为加减法选择信号addsub_i,高电平时为加法操作,低电平时为减法操作。
输出端口11个,包括8位的运算结果输出端口rslt_o,两位的进位状态标志位cy_o和一位溢出状态标志位ov_o。
设计采用组合逻辑设计方法,所以对于设计的关键部分,并行进位的产生相应的有一定的要求,即VHDL语言中的进位信号的表示应使用变量(variable),而不能使用信号量(signal)。
因此在VHDL语言中,可直接按照公式的要求进行编写代码,其结果将由信号rslt_o代出addsub模块,返回到alumux中。
代码实现如下:
5'b00111:
begin
{ALU_C,ALU_O}=AC_in+GR_in;
end//如果操作译码为了5‘b00111则进行八位数相加
5'b01000:
begin
{ALU_C,ALU_O}=AC_in-GR_in;
end//如果操作编码为了5‘b01000则八位数相减
5'b01011:
begin
{ALU_C,ALU_O}=AC_in+GR_in+C_in;
end//如果操作译码为了5‘b01011则进行带进位八位数相加
5'b01100:
begin
{ALU_C,ALU_O}=AC_in-GR_in-C_in;
end//如果操作译码为了5‘b01100则进行带借位八位数相减
3.4乘法模块mul的实现
mul模块主要实现算术运算中的乘法运算,该模块的设计非常简单,直接利用VerilogHDL语言中的乘法运算符编写程序进行设计即可,其实体图如图3-5所示。
mul模块的输入为被乘数mula和乘数mulb,均为4位输入,而输出product_o为8位输出。
在VerilogHDL的实现中,内部运算的实现仍然是通过变量的是用来实现的,因为内部的移位相加是通过for循环语句来实现的。
因为是4位的乘法器,所以要循环4次,且从乘数的最低位开始循环至最高位。
每次循环时都要对乘数的对应位进行判断,若乘数的对应位是‘1’,则把被乘数与保存中间值的变量值相加,然后再存于变量v_d中;若乘数的对应位是‘0’,则直接把保存中间值的变量值送入变量v_d中。
判断结束后,循环中止前,都要把v_d中的值放到v_c中,并右移一位。
依此循环4次,则可求出最终乘积,而乘积的结果由信号product_o送回到alumux模块。
其实现代码如下:
5'b11100:
begin{ALU_C,ALU_O}={C_in,mul(AC_in[3:
0],GR_in[3:
0])};end//如果操作译码为5’b11100则完成四位数相乘
function[7:
0]mul;//四位数移位相乘函数
input[3:
0]AC_in;
input[3:
0]GR_in;
reg[7:
0]R;
reg[7:
0]temp;
reg[7:
0]temp2;
begin
R=0;
temp=0;
temp2=AC_in;
if(GR_in[0]==1)
begin
temp=temp2;
R=temp2;
temp2=temp;
end
if(GR_in[1]==1)
begin
temp=temp2;
R=R+(temp2<<1);
temp2=temp;
end
if(GR_in[2]==1)
begin
temp=temp2;
R=R+(temp2<<2);
temp2=temp;
end
if(GR_in[3]==1)
begin
temp=temp2;
R=R+(temp2<<3);
temp2=temp;
end
mul=R;
end
endfunction
3.5除法模块div的实现
div模块主要实现算术运算中的除法运算。
本设计中的除法器采用了逐位相减的算法来设计实现,其实体图如图3-6所示。
div模块的输入为被除数diva_i和除数divb_i,均为8位输入,而输出为商qutnt_o和余数rmndr_o,也为8位输出。
在用VHDL语言实现除法器时,采用for循环语句对被除数从高位到低位逐位选取,选取的位数每循环一次增加一位,将选取的位值通过高位补0的方法扩展成8位数值,并与除数divb_i进行比较,若扩展后数值大于divb_i,则将商数暂存变量v_qutnt(8位)的相应位置‘1’,并求出两者的差值,存放在余数的暂存变量v_dffrnc中,此时若循环未结束,则将余数放到被除数暂存变量v_diva中,为下次计算做准备,然后取出被除数的下一位进行循环计算。
如扩展后数值小于divb_i,则将商数暂存变量v_qutnt(8位)的相应位置‘0’,并将v_diva中的数值直接存入v_dffrnc中,保存余数。
如此循环8次,则循环结束后,v_qutnt中保存了商数,v_dffrnc中保存了余数,两者分别通过信号qutnt_o和rmndr_o送到alumux模块。
实现代码如下:
5'b11101:
begin{ALU_C,ALU_O}={C_in,div(AC_in[7:
0],GR_in[7:
0])};end//如果操作译码为5’b11101则完成四位数相除
function[7:
0]div;//八位数相除的函数
input[7:
0]AC_in;
input[7:
0]GR_in;
reg[7:
0]R_out;
reg[7:
0]temp;
reg[7:
0]temp2;
reg[7:
0]temp3;
reg[7:
0]next;
reg[7:
0]temp4;
begin
R_out=8'b0;
temp=AC_in;
next=8'b0;
temp3=8'b0;
temp2=GR_in;
temp4=AC_in;
if(AC_in>7);
if(temp>=GR_in)
begin
temp3=temp2;
R_out[7]=1'b1;
temp=temp4-(temp2<<7);
temp2=temp3;
next=temp;
temp4=temp;
end
temp=next;
next=temp;
temp=temp>>6;
if(temp>=GR_in)
begin
temp3=temp2;
R_out[6]=1'b1;
temp=temp4-(temp2<<6);
temp2=temp3;
next=temp;
temp4=temp;
end
temp=next;
next=temp;
temp=temp>>5;
if(temp>=GR_in)
begin
temp3=temp2;
R_out[5]=1'b1;
temp=temp4-(temp2<<5);
temp2=temp3;
next=temp;
temp4=temp;
end
temp=next;
next=temp;
temp=temp>>4;
if(temp>=GR_in)
begin
temp3=temp2;
R_out[4]=1'b1;
temp=temp4-(temp2<<4);
temp2=temp3;
next=temp;
temp4=temp;
end
temp=next;
next=temp;
temp=temp>>3;
if(temp>=GR_in)
begin
temp3=temp2;
R_out[3]=1'b1;
temp=temp4-(temp2<<3);
temp2=temp3;
next=temp;
temp4=temp;
end
temp=next;
next=temp;
temp=temp>>2;
if(temp>=GR_in)
begin
temp3=temp2;
R_out[2]=1'b1;
temp=temp4-(temp2<<2);
temp2=temp3;
next=temp;
temp4=temp;
end
temp=next;
next=temp;
temp=temp>>1;
if(temp>=GR_in)
begin
temp3=temp2;
R_out[1]=1'b1;
temp=temp4-(temp2<<1);
temp2=temp3;
next=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 课程设计 蔡加兴