计算机组成专题实验资料7 运算器设计案例Word格式.docx

上传人:b****2 文档编号:5774557 上传时间:2023-05-05 格式:DOCX 页数:23 大小:180.20KB
下载 相关 举报
计算机组成专题实验资料7 运算器设计案例Word格式.docx_第1页
第1页 / 共23页
计算机组成专题实验资料7 运算器设计案例Word格式.docx_第2页
第2页 / 共23页
计算机组成专题实验资料7 运算器设计案例Word格式.docx_第3页
第3页 / 共23页
计算机组成专题实验资料7 运算器设计案例Word格式.docx_第4页
第4页 / 共23页
计算机组成专题实验资料7 运算器设计案例Word格式.docx_第5页
第5页 / 共23页
计算机组成专题实验资料7 运算器设计案例Word格式.docx_第6页
第6页 / 共23页
计算机组成专题实验资料7 运算器设计案例Word格式.docx_第7页
第7页 / 共23页
计算机组成专题实验资料7 运算器设计案例Word格式.docx_第8页
第8页 / 共23页
计算机组成专题实验资料7 运算器设计案例Word格式.docx_第9页
第9页 / 共23页
计算机组成专题实验资料7 运算器设计案例Word格式.docx_第10页
第10页 / 共23页
计算机组成专题实验资料7 运算器设计案例Word格式.docx_第11页
第11页 / 共23页
计算机组成专题实验资料7 运算器设计案例Word格式.docx_第12页
第12页 / 共23页
计算机组成专题实验资料7 运算器设计案例Word格式.docx_第13页
第13页 / 共23页
计算机组成专题实验资料7 运算器设计案例Word格式.docx_第14页
第14页 / 共23页
计算机组成专题实验资料7 运算器设计案例Word格式.docx_第15页
第15页 / 共23页
计算机组成专题实验资料7 运算器设计案例Word格式.docx_第16页
第16页 / 共23页
计算机组成专题实验资料7 运算器设计案例Word格式.docx_第17页
第17页 / 共23页
计算机组成专题实验资料7 运算器设计案例Word格式.docx_第18页
第18页 / 共23页
计算机组成专题实验资料7 运算器设计案例Word格式.docx_第19页
第19页 / 共23页
计算机组成专题实验资料7 运算器设计案例Word格式.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

计算机组成专题实验资料7 运算器设计案例Word格式.docx

《计算机组成专题实验资料7 运算器设计案例Word格式.docx》由会员分享,可在线阅读,更多相关《计算机组成专题实验资料7 运算器设计案例Word格式.docx(23页珍藏版)》请在冰点文库上搜索。

计算机组成专题实验资料7 运算器设计案例Word格式.docx

C0

C1=G1+P1C0

S2=P2

C1

C2=G2+P2C1=G2+P2G1+P2P1C0

S3=P3

C2

C3=G3+P3C2=G3+P3G2+P3P2G1+P3P2P1C0

S4=P4

C3

C4=G4+P4C3=G4+P4G3+P4P3G2+P4P3P2G1+P4P3P2P1C0

(2)减法器

减法可以用加法来实现,只需要把输入opr2、cin和输出cout取反即可。

(3)乘法器

由于VDHL硬件编程语言提供了乘法计算,只需在程序中申明即可实现,而不需要使用复杂的程序。

故此实验设计方案中不另外设计乘法器,而是调用系统软件包实现该运算。

(4)与、或、非、异或运算

与、或、非、异或的实现非常简单,只需对每个操作位进行按位运算即可。

(5)移位运算(移位数不超过7)

移位操作共有6种类型,算术左右移、逻辑左右移、循环左右移。

1.算术左移SAL(ShiftArithmeticalLeft)、算术右移SAR(ShiftArithmeticalRight)

把操作数看成带符号数,对寄存器操作数进行移位。

左移时空出的位补与最低位相同的1或0;

右移时空出的其余位补与最高位相同的1或0,如图2-4所示。

算术左移算术右移

图2-4算术左右移

2.逻辑左移SLL(ShiftLogicalLeft)、逻辑右移SLR(ShiftLogicalRight)

把操作数看成无符号数,对寄存器操作数进行移位。

左移时空出的位补‘0’;

右移时空出的其余位补‘1’,如图2-5所示。

逻辑左移逻辑右移

图2-5逻辑左右移

3.循环左移ROF(RotationLeft)、循环右移ROR(RotationRight)

循环左右移其实是一样的,比如说8位的操作数,左移n(0≤n≤8)位和右移n-8位结果是一样的。

左移时,移出的最高位移回到最低位;

右移时,移出的最低位移回到最高位。

如图2-6所示。

循环左移循环右移

图2-6循环左右移

2.3实验设计目标

设计一个8位运算器,满足以下要求。

(1)8位运算器能够进行下列运算:

加法、减法、加1、减1、乘法、与、或、非、传送、算术左移、算术右移、逻辑左移、逻辑右移、循环左移和循环右移。

用4位运算操作码OP[2..0]运算类型,控制方式如表2-1所示:

表2-1运算器方式表

运算操作码OP[3..0]

运算

对标志位flag的影响

0000

result←opr1+opr2

进位

0001

result←opr1+1

0010

result←opr1-opr2

借位

0011

result←opr1-1

0100

result←opr1*opr2

0101

result←opr1

0110

result←opr1andopr2

0111

result←opr1oropr2

1000

result←notopr1

1001

result←opr1xoropr2

1010

result←opr1salopr2

移位数是否合理

1011

result←opr1saropr2

1100

result←opr1sllopr2

1101

result←opr1alropr2

1110

result←opr1rolopr2

1111

result←opr1roropr2

(2)设计一个输入信号cin,表示之前低位向高位的进位或借位情况。

(3)设计一个运算控制信号set,当操作数和操作类型码准备好以后,set为高电平,启动运算过程。

(1)运算控制信号set对应实验台上开关SA0;

(2)低位向高位的进位或者借位信号cin对应实验台上开关SA1;

(3)操作码code[2..0]对应实验台上开关SA5~SA2;

(4)第一操作数opr1[7..0]对应于实验台上开关SD7~SD0;

(5)第二操作数opr2[7..0]对应实验台上开关SD15~SD8;

(6)运算结果result[15..0]对应实验台上指示灯A7~A0;

(7)运算结果标志位flag对应实验台上指示灯A8。

2.5实验步骤

(1)创建一个新文件夹E:

\ALU.

(2)使用File二级菜单中NewProjectWizard菜单项创建一个工程文件ALU.此时文件夹(目录)、工程名和顶层设计实体名全为ALU.设计使用器件为cyclone系列的EP1C6Q240C6.选择EDA工具选中3种功能:

综合、仿真和时序分析.检查工程中的各种设置确保无误.

(3)建立源文件.

新建VHDL类型的文件并命名为ALU.在VHDL文本编辑窗口内输入源程序.

---程序流程图如图2-7所示:

图2-7程序流程图

图2-8加法运算的流程图

---程序源代码如下:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

useieee.std_logic_arith.all;

entityALUis

port(

set:

instd_logic;

--运算控制信号(算术/逻辑)

code:

instd_logic_vector(3downto0);

--操作码

cin:

--低位向高位的进位或者借位信号

opr1:

instd_logic_vector(7downto0);

--第一操作数(operand)

opr2:

--第二操作数

result:

outstd_logic_vector(7downto0);

--运算结果

flag:

outstd_logic--运算结果标志位flag

);

endALU;

architecturebehavofALUis

signala:

std_logic_vector(7downto0);

signalb:

signalc:

begin

process(a,b,c,set,code,cin,opr1,opr2)

variablei:

integer;

a<

="

00000000"

;

b<

C<

result<

flag<

='

0'

ifset='

1'

then

casecodeis

when"

0000"

=>

--"

+"

a(0)<

=opr1(0)andopr2(0);

b(0)<

=opr1(0)xoropr2(0);

--产生本地进位和传递条件

a

(1)<

=opr1

(1)andopr2

(1);

b

(1)<

=opr1

(1)xoropr2

(1);

a

(2)<

=opr1

(2)andopr2

(2);

b

(2)<

=opr1

(2)xoropr2

(2);

a(3)<

=opr1(3)andopr2(3);

b(3)<

=opr1(3)xoropr2(3);

a(4)<

=opr1(4)andopr2(4);

b(4)<

=opr1(4)xoropr2(4);

a(5)<

=opr1(5)andopr2(5);

b(5)<

=opr1(5)xoropr2(5);

a(6)<

=opr1(6)andopr2(6);

b(6)<

=opr1(6)xoropr2(6);

a(7)<

=opr1(7)andopr2(7);

b(7)<

=opr1(7)xoropr2(7);

--每四位一组,组内先行进位加法,组间串行进位加法.

result(0)<

=b(0)xorcin;

c(0)<

=a(0)or(b(0)andcin);

result

(1)<

=b

(1)xorc(0);

c

(1)<

=a

(1)or(b

(1)anda(0))or(b

(1)andb(0)andcin);

result

(2)<

=b

(2)xorc

(1);

c

(2)<

=a

(2)or(b

(2)anda

(1))or(b

(2)andb

(1)anda(0))or(b

(2)andb

(1)andb(0)andcin);

result(3)<

=b(3)xorc

(2);

c(3)<

=a(3)or(b(3)anda

(2))or(b(3)andb

(2)anda

(1))or(b(3)andb

(2)andb

(1)anda(0))or(b(3)andb

(2)andb

(1)andb(0)andcin);

result(4)<

=b(4)xorc(3);

c(4)<

=a(4)or(b(4)andc(3));

result(5)<

=b(5)xorc(4);

c(5)<

=a(5)or(b(5)anda(4))or(b(5)andb(4)andc(3));

result(6)<

=b(6)xorc(5);

c(6)<

=a(6)or(b(6)anda(5))or(b(6)andb(5)anda(4))or(b(6)andb(5)andb(4)andc(3));

result(7)<

=b(7)xorc(6);

flag<

=a(7)or(b(7)anda(6))or(b(7)andb(6)anda(5))or(b(7)andb(6)andb(5)anda(4))or(b(7)andb(6)andb(5)andb(4)andc(3));

0001"

+1"

=notopr1(0);

=opr1

(1)xoropr1(0);

=opr1

(2)xor(opr1

(1)andopr1(0));

=opr1(3)xor(opr1

(2)andopr1

(1)andopr1(0));

=opr1(4)xor(opr1(3)andopr1

(2)andopr1

(1)andopr1(0));

=opr1(5)xor(opr1(4)andopr1(3)andopr1

(2)andopr1

(1)andopr1(0));

=opr1(6)xor(opr1(5)andopr1(4)andopr1(3)andopr1

(2)andopr1

(1)andopr1(0));

=opr1(7)xor(opr1(6)andopr1(5)andopr1(4)andopr1(3)andopr1

(2)andopr1

(1)andopr1(0));

=opr1(7)andopr1(6)andopr1(5)andopr1(4)andopr1(3)andopr1

(2)andopr1(0);

0010"

-"

=opr1(0)and(notopr2(0));

=opr1(0)xor(notopr2(0));

=opr1

(1)and(notopr2

(1));

=opr1

(1)xor(notopr2

(1));

=opr1

(2)and(notopr2

(2));

=opr1

(2)xor(notopr2

(2));

=opr1(3)and(notopr2(3));

=opr1(3)xor(notopr2(3));

=opr1(4)and(notopr2(4));

=opr1(4)xor(notopr2(4));

=opr1(5)and(notopr2(5));

=opr1(5)xor(notopr2(5));

=opr1(6)and(notopr2(6));

=opr1(6)xor(notopr2(6));

=opr1(7)and(notopr2(7));

=opr1(7)xor(notopr2(7));

=b(0)xor(notcin);

=a(0)or(b(0)and(notcin));

=a

(1)or(b

(1)anda(0))or(b

(1)andb(0)and(notcin));

=a

(2)or(b

(2)anda

(1))or(b

(2)andb

(1)anda(0))or(b

(2)andb

(1)andb(0)and(notcin));

=a(3)or(b(3)anda

(2))or(b(3)andb

(2)anda

(1))or(b(3)andb

(2)andb

(1)anda(0))or(b(3)andb

(2)andb

(1)andb(0)and(notcin));

c(7)<

=notc(7);

0011"

-1"

=opr1

(1)xor(notopr1(0));

=opr1

(2)xor(not(opr1

(1)oropr1(0)));

=opr1(3)xor(not(opr1

(2)oropr1

(1)oropr1(0)));

=opr1(4)xor(not(opr1(3)oropr1

(2)oropr1

(1)oropr1(0)));

=opr1(5)xor(not(opr1(4)oropr1(3)oropr1

(2)oropr1

(1)oropr1(0)));

=opr1(6)xor(not(opr1(5)oropr1(4)oropr1(3)oropr1

(2)oropr1

(1)oropr1(0)));

=opr1(7)xor(not(opr1(6)oropr1(5)oropr1(4)oropr1(3)oropr1

(2)oropr1

(1)oropr1(0)));

=not(opr1(7)oropr1(6)oropr1(5)oropr1(4)oropr1(3)oropr1

(2)oropr1

(1)oropr1(0));

0100"

*"

操作数为4位,结果为8位,无符号数乘法

c<

=opr1(3downto0)*opr2(3downto0);

result<

=c;

0101"

--传送数据

=opr1(7downto0);

0110"

and"

=opr1(0)andopr2(0);

=opr1

(1)andopr2

(1);

=opr1

(2)andopr2

(2);

=opr1(3)andopr2(3);

=opr1(4)andopr2(4);

=opr1(5)andopr2(5);

=opr1(6)andopr2(6);

=opr1(7)andopr2(7);

0111"

or"

=opr1(0)oropr2(0);

=opr1

(1)oropr2

(1);

=opr1

(2)oropr2

(2);

=opr1(3)oropr2(3);

=opr1(4)oropr2(4);

=opr1(5)oropr2(5);

=opr1(6)oropr2(6);

=opr1(7)oropr2(7);

1000"

not"

=notopr1

(1);

=notopr1

(2);

=notopr1(3);

=notopr1(4);

=notopr1(5);

=notopr1(6);

=notopr1(7);

1001"

xor"

=opr1(0)xoropr2(0);

=opr1

(1)xoropr2

(1);

=opr1

(2)xoropr2

(2);

=opr1(3)xoropr2(3);

=opr1(4)xoropr2(4);

=opr1(5)xoropr2(5);

=opr1(6)xoropr2(6);

=opr1(7)xoropr2(7);

1010"

SAL"

caseopr2is

when"

=opr1;

00000001"

result(0)<

=opr1(0);

result(7downto1)<

=opr1(6downto0);

00000010"

result(7downto2)<

=opr1(5downto0);

00000011"

result(7downto3)<

=opr1(4downto0);

00000100"

result(7downto4)<

=opr1(3downto0);

00000101"

result(7downto5)<

=opr1(2downto0);

00000110"

resul

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

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2