DSP算法实验报告.docx

上传人:b****3 文档编号:26716888 上传时间:2023-06-22 格式:DOCX 页数:10 大小:182.39KB
下载 相关 举报
DSP算法实验报告.docx_第1页
第1页 / 共10页
DSP算法实验报告.docx_第2页
第2页 / 共10页
DSP算法实验报告.docx_第3页
第3页 / 共10页
DSP算法实验报告.docx_第4页
第4页 / 共10页
DSP算法实验报告.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

DSP算法实验报告.docx

《DSP算法实验报告.docx》由会员分享,可在线阅读,更多相关《DSP算法实验报告.docx(10页珍藏版)》请在冰豆网上搜索。

DSP算法实验报告.docx

DSP算法实验报告

ALU模块运行测试

实验报告

一、实验目的

通过对指令译码的输入测试,了解掌握ALU模块运行的一般原理和规律,加深对ALU模块的了解。

二、测试结果

(一)ALU原理

ALU(ArithmeticLogicUnit)算术逻辑单元,是指中央处理器(CPU)的执行单元,是所有中央处理器的核心组成部分,由"AndGate"和"OrGate"构成的算术逻辑单元,主要功能是进行二进制的算术运算。

ALU在处理器CPU之中用于计算的那一部分,与其同级的有数据传输单元和分支单元。

ALU负责处理数据的运算工作,包括算术运算起(如:

加、减、乘、除等),逻辑运算(如:

AND、OR、NOT..等)及关系运算(比较大小等关系),并将运算的结果存回记忆单元。

ALU必须与数字电路的其他部分使用同样的格式来进行数字处理。

对现代处理器而言,数值一律使用二进制补码表示。

早期的计算机曾使用过很多种数字系统,包括反码、符号数值码,甚至是十进制码,每一位用十个管子。

以上这每一种数字系统所对应的ALU都有不同的设计,而这也影响了当前对二进制补码的优先选择,因为二进制补码能简化ALU加法和减法的运算。

一个简单的能进行与或非和加运算的2位ALU。

绝大部分计算机指令都是由ALU执行的。

ALU从寄存器中取出数据。

数据经过处理将运算结果存入ALU输出寄存器中。

其他部件负责在寄存器与内存间传送数据。

控制单元控制着ALU,通过控制电路来告诉ALU该执行什么操作。

通常而言,ALU具有对处理器控制器、内存及输入输出设备的直接读入读出权限。

输入输出是通过总线进行的。

输入指令包含一个指令字,有时被称为机器指令字,其中包括操作码,单个或多个操作数,有时还会有格式码;操作码指示ALU机要执行什么操作,在此操作中要执行多少个操作数。

比如,两个操作数可以进行比较,也可以进行加法操作。

格式码可与操作码结合,告知这是一个定点还是浮点指令;输出包括存放在存储寄存器中的结果及显示操作是否成功的设置。

如操作失败,则在机器状态字中会有相应的状态显示。

(二)ALU模块主要作用

算术逻辑运算部件ALU主要作用:

1、算术逻辑运算部件ALU主要完成二进制代码的定点算术和逻辑运算,有时也叫多功能函数发生器;

2、算术运算主要包括定点加、减运算;

3、逻辑运算主要包括逻辑与、或、非、异或;

4、ALU的核心加法器。

(三)ALU模块功能实现

指令的测试方法

首先下载ModelSim6.5软件,安装。

组合电路测试

对于一个已有的待测模块,测试平台中需要声明与待测模块输入输出端口对应的变量。

与输入端口相连接的变量定义为reg,与输出端口相连接的变量定义为wire,例化时将测试平台中声明的变量与待测模块的输入输出端口相关联。

使用initial语句控制程序运行,initial语句是一种过程结构,在initial块中可使用延迟控制语句来控制initial块中的程序流动。

这里对一个简单的算术逻辑单元(ALU)为例进行测试,下面是该单元Verilog描述。

//多动能ALU的Verilog代码

'timescale1ns/100ps

modulealu_4bit(a,b,f,oe,y,p,ov,a_gt_b,a_eg_b,a_lt_b);

input[3:

0]a,b;

input[1:

0]f;

inputoe;

input[3:

0]y;

outputp,ov,a_gt_b,a_eg_b,a_lt_b;

reg[4:

0]im_y;

always@(aorborf)

begin

ov=1'b0;

im_y=0;

case(f)

2'b00:

begin

im_y=a+b;

if(im_y>5'b01111)

ov=1'b1;

end

2'b01:

begin

im_y=a-b;

if(im_y>5'b01111)

ov=1'b1;

end

2'b10:

im_y[3:

0]=a&b;

2'b11:

im_y[3:

0]=a^b;

default:

im_y[3:

0]=4'b0000;

endcase

end

always@(aorb)

begin

if(a>b)

{a_gt_b,a_ge_b,a_lt_b}=3'b100;

elseif(a

{a_gt_b,a_ge_b,a_lt_b}=3'b001;

else

{a_gt_b,a_ge_b,a_lt_b}=3'b010;

end

assignp=^im_y[3:

0];

assigny=oe?

im_y[3:

0]:

4'bz;

endmodule

模块alu_4bit是四功能的算术逻辑单元,输入包括数据信号a、b和功能信号f,输出包括数据信号y和ALU生成的奇偶校验信号p、溢出信号ov及比较信号。

下面代码描述了alu_4bit模块的测试平台。

moduletest_alu_4bit;

reg[3:

0]a=4'b1011,b=4'b0110;

reg[1:

0]f=2'b00;

regoe=1;

wire[3:

0]y;

wirep,ov,a_gt_b,a_eg_b,a_lt_b;

alu_4bitcut(a,b,f,oe,y,p,ov,a_gt_b,a_eg_b,a_lt_b);

initial

begin

#20b=4'b1011;

#20b=4'b1110;

#20b=4'b1110;

#80oe=1'b0;

#20$finish;

end

always#23f=f+1;

endmodule

与alu_4bit模块相连的变量在声明时被赋初值。

用一个initial语句对ALU的输入数据b和输出使能oe赋值,在前60ns,每隔20n给b赋一个新值然后等待80ns,给oe赋0值来禁止ALU的输出,再等待20ns后结束仿真。

最终等待20ns后,显示的仿真结果里包含最后一个输入数据产生的输出。

用always语句对alu_4bit的输入数据f赋值,f的初值为0,以后每隔23ns它的值加1.initial块的$finish语句在160ns时被执行,此时所有正在运行的过程语句都停止,仿真结束。

下图所示是仿真后的波形曲线。

 

并行加法器与进位链结构情况

1、用n位全加器实现两个n位操作数各位同时相加,这种加法器称为并行加法器。

2、并行加法器中传递进位信号的逻辑线路称为进位链。

基本进位公式

例如:

设两个n位操作数为:

A=An-1An-2...Ai...A0

B=Bn-1Bn-2...Bi...B0

定义辅助函数情况:

其中,Gi称为进位产生函数,其含义:

若该位两个输入端Ai,Bi均为1,必向高位产生进位,此分量与低位进位无关;Pi称为进位传递函数,其含义:

当Pi=1,如果低位有进位,本位必产生进位,也即低位传来的进位能工越过本位而向更高位传递。

因此有:

Ci+1=Gi+PiCi

并行加法器的串行进位情况

1、所谓串行进位又叫行波进位,其中的进位是逐级形成的,每一级进位直接依赖前一级进位。

将i=0,1,...,n-1分别代入上式,可得:

优点:

节省器件,成本低

缺点:

延迟时间长

并行进位(先行进位,同时进位)

1、各级进位同时形成

2、根据上式得到的逻辑图:

3、常用的分组进位结构:

(1)组内并行,组间串行;

(2)组内并行,组间并行。

运算方法情况

1、数值运算的核心是加、减、乘、除四则运算。

由于计算机中的数有定点和浮点表示,因此相应有定点数的运算和浮点数的运算。

定点加减运算

在大多数计算机中,通常只设置加法器,减法运算是通过转换为加法来实现的。

原码加减运算

对原码表示的两个操作数进行加减运算时,计算机的实际操作是加还是减,不仅取决指令中的操作码,还取决于两个操作数的符号。

而且运算结果的符号判断也较复杂。

例如,加法指令指示做(+A)+(-B)由于一操作数为负,实际操作是做减法(+A)-(+B),结果符号与绝对值大的符号相同。

同理,在减法指令中指示做(+A)-(-B)实际操作做加法(+A)+(+B),结果与被减数符号相同。

由于原码加减法比较繁琐,相应地需要由复杂的硬件逻辑才能实现,因此在计算机中很少被采用。

补码加减运算

在计算机中,参加补码运算的操作数及运算结果皆用补码表示。

(1)补码加法运算

两个相加的数无论正负,只要表示成对应的补码形式,则可直接按二进制规则相加,且符号位作为数的一部分直接参与运算,所得结果就是和的补码形式。

可用如下关系式描述:

[X]补+[Y]补=[X+Y]补

(2)补码减法运算

公式:

[X-Y]补=[X+(-Y)]补=[X]补+[-Y]补

三、实验收获和心得体会

通过对老师所给指令译码的输入测试,才发现课堂学习和实践操作之间的差距如此之大,明白了要把一个理论的事物运用到实际操作中面临如此之多的问题,这还仅仅是依据已给定的指令译码进行输入测试,就已经遇到各种各样的问题了,如果是自己设计、编写译码和开放ALU模块,那会是多么复杂呢?

由此可以看出,学习不是一个简单听听老师讲课,自己看看书就行的工作,而是要通过自己的实际动手操作,在实际中发现问题,然后带着问题去学习,去思考,去解决问题,一步一步的才会把老师教的知识慢慢转化为自己所掌握的内容。

虽然在指令译码测试中遇到了很多问题,但是通过老师讲解和查阅各种资料、学习借鉴网络上的他人经验,使我对ALU模块有了一定的理解。

衷心感谢老师的淳淳教诲,在以后的学习中,将更加珍惜机会,加强学习。

 

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

当前位置:首页 > 自然科学 > 物理

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

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