运算器实验报告.docx
- 文档编号:9037497
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:22
- 大小:102.68KB
运算器实验报告.docx
《运算器实验报告.docx》由会员分享,可在线阅读,更多相关《运算器实验报告.docx(22页珍藏版)》请在冰豆网上搜索。
运算器实验报告
运算器实验报告
计算机学科实验基地
实验报告
评分:
学分:
实验类型:
必修?
选修实验日期:
05年06月28日实验名称:
运算器逻辑设计
实验地点:
实验基地
学生姓名:
指导教师:
班级:
评阅教师:
同组学生:
计算机科学与工程学院制
实验报告内容:
一、实验目的
理解运算器结构及功能,理解各选择器、算逻部件、移位器的端口及实现逻辑和各部件之间的接口关系,并学会如何利用VHDL对硬件实体逻辑进行描述并进行模块级、系统级仿真,从而模拟完整的ALU结构和功能。
具体目的如下:
1)掌握用硬件描述语言设计逻辑部件的方法。
2)了解运算器的设计过程。
3)掌握74181芯片的连接方法和分级同时进位技术。
4)验证运算器的功能。
二、实验方案与计划(对硬件和项目设计)
模块编号:
U_ALU_16
功能:
在微命令的控制下对输入A、B进行算术逻辑运算。
基本运算有:
A+B、A-B、A、B、A+1、A-1、A与B、A或B、A(B)反COM、A(B)补NEG、左移、右移输入:
R0、R1、R2、R3、C、D、PC、SP/*选择器A的输入(16位)
R0、R1、R2、R3、C、D、PSW、MBR/*选择器B的输入(16位)
SELA3/*选择器A的选择控制(3位)
SELB3/*选择器B的选择控制(3位)
CON_ALU6/*ALU的功能控制(6位)
SHIFT_REG2/*移位器的控制(2位)—左移、右移、直传(DM)输出:
IN_BUS_16/*内部数据总线(16位)—运算结果
内部框图:
IN_BUS_16
SHIFT_REG2
移位寄存器
CON_ALU6ALU_OUT
ALU
SELA3ALU_INAALU_INBSELB3
选择器A选择器B
R0、R1、R2、R3、R0、R1、R2、R3、C、
C、D、PC、SPD、PSW、MBR
1、选择器A(U_SEL_A)
1)输入:
R0、R1、R2、R3、C、D、PC、SP、SELA3
输出:
ALU_INA
2)功能:
SELAALU_INA
000R0
001R1
010R2
011R3
100C
101D
110PC
111SP2、选择器B(U_SEL_B)
1)输入:
R0、R1、R2、R3、C、D、PSW、MBR、SELB3
输出:
ALU_INB
2)功能:
SELBALU_INB
000R0
001R1
010R2
011R3
100C
101D
110PSW
111MBR3、移位寄存器(U_SHIFT_REG)
1)输入:
ALU_OUT、SHIFT_REG2
2)输出:
IN_BUS_16
3)功能:
SHIFT_REG2IN_BUS_16备注
00ALU_OUTDM(直传)
01ALU_OUT(14DOWNTO0)&’0’LS(左移)
10’0’&ALU_OUT(15DOWNTO1)RS(右移)
XXZ高阻4、ALU(U_ALU_4)
1)输入:
ALU_INA、ALU_INB、CON_ALU6
2)输出:
ALU_OUT
3)内部框图:
SN74182
P4G4C3P3G3C2P2G2C1P1G1
15—1211—87—43—0ALU_OUT
SN74181SN74181SN74181SN74181CON_ALU6(0)
5—15—15—15—1
CON_ALU615—1211—87—43—0
ALU_INA15—1211—87—43—0
ALU_INB
5、SN74181(U_SN74181)小组内并行进位(4位)注意Pi、Gi的产生逻辑;1)输入:
A_IN/*四位输入
B_IN/*四位输入
CON_ALU6/*六位输入S3S2S1S0MC0
C/*进位
2)输出:
F_OUT/*四位输出
P_OUT/*A_IN异或B_IN
G_OUT/*A_IN与B_IN
3)功能:
工作方式选择输出F_OUT(OP_SEL)S3S2S1S0
M=1逻辑运算M=0算术运算0000A非A减10001(AB)非AB减10010A非+BAB非减10011逻辑1全10100(A+B)非A加(A+B非)0101B非AB加(A+B非)0110(A异或B)非A加B非0111A+B非A+B非1000A非BA加(A+B)1001A异或BA加B1010BAB非加(A+B)1011A+BA+B1100逻辑001101AB非AB加A1110ABAB非加A1111AA
6、SN74182(U_SN74182)组间并行进位;
1)输入:
C0、P1、G1、P2、G2、P3、G3、P4、G4
2)输出:
C1、C2、C3
3)功能:
C1=G1+P1C0
C2=G2+P2G1+P2P1C0
C3=G3+P3G2+P3P2G1+P3P2P1C0
三、实验过程理解与描述
经过整理的数据及表格
1、选择器A功能表
SELAALU_INA000R0001R1010R2011R3100C101D110PC111SP
2、选择器B功能表
SELBALU_INB000R0001R1010R2011R3100C101D110PSW111MBR
3、移位寄存器功能表
SHIFT_REG2IN_BUS_16备注00ALU_OUTDM(直传)
01ALU_OUT(14DOWNTO0)&’0’LS(左移)
10’0’&ALU_OUT(15DOWNTO1)RS(右移)
XXZ高阻
4、ALU控制信号功能表
工作方式选择输出F_OUT(OP_SEL)S3S2S1S0
M=1逻辑运算M=0算术运算0000A非A减10001(AB)非AB减10010A非+BAB非减10011逻辑1全10100(A+B)非A加(A+B非)0101B非AB加(A+B非)0110(A异或B)非A加B非0111A+B非A+B非1000A非BA加(A+B)1001A异或BA加B1010BAB非加(A+B)1011A+BA+B1100逻辑001101AB非AB加A1110ABAB非加A1111AA
实验记录的分析、讨论与结论
ALU_SN74181仿真波形i.
ii.m_74182仿真波形
ALU_SELECT仿真波形iii.
iv.M_shift_reg仿真波形
v.CPU_ALU仿真波形
结论:
通过功能仿真可以看出,各部件功能正确,集成后可以满足运算器的功能。
实验小结
通过本次运算器的设计及实现,深刻理解了运算器的组成结构及各部件之间的相互关系和如何用硬件描述语言VHDL对运算器部件进行描述及实现其功能,也更加熟悉了MAX+plusII平台下VHDL的编码、调试,及功能仿真验证、系统级合成,以及通过编程器将其合成结果下载到FPGA中。
通过本次实验,进一步提高了动手能力和独立分析思考问题、解决问题的能力。
四、对指定问题的回答
?
需要学生回答的问题
1、请描述加法器组内并行、组间并行进位链。
加法器字长16位,如果每4位为一组,则可将进位链分为两级。
(1)第一级:
小组内并行进位链
进位逻辑:
C1=G1+P1C0
C2=G2+P2G1+P2P1C0
C3=G3+P3G2+P3P2G1+P3P2P1C0C4=G4+P4G3+P4P3G2+P4P3P2G1+P4P3P2P1C0其余各组可按照类推,如
C5=G5+P5C1
C6=G6+P6G5+P6P5C1
。
。
。
。
。
。
其中C1是第一小组产生的组间进位,作为第二小组的初始进位。
(2)第二级:
小组间并行进位链
C?
=G?
+P?
C0
CП=PПG?
+PПP?
C0
Cш=GП+PПGП+PПP?
G?
+PшPПP?
C0
。
。
。
。
。
。
。
其中,C?
是组间并行进位链中由第一小组产生的进位,G?
是第一小组的进位产生函数,P?
是第一小组的进位传递函数,其余类推。
G?
=G4+P4G3+P4P3G2+P4P3P2G1
P?
=P4P3P2P1
。
。
。
。
。
。
。
2、画出原变量输入的全加器单元,并写出其加法逻辑公式。
?
iCi+?
?
AiBiCi-1
该全加器的计算逻辑式:
?
i=Ai?
Bi?
Ci-1
Bi)Ci-1Ci=AiBi+(Ai?
?
实验前对学生的特殊要求
深刻理解运算器结构功能,熟悉VHDL语言,能熟练运用相关开发工具。
五、对实验的评价和建议
本实验能让学生加深对运算器组织结构及功能的理解,以及学会如何在具体的应
用环境中综合运用VHDL语言进行硬件描述及功能模拟,但所描述的对象结构简化无实
际应用意义,建议增加实验的实际应用性。
六、实验附件
运算器程序清单:
(CPU_ALU)
--16bitselectandaluandshift
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
entitycpu_aluis
Port(r0:
instd_logic_vector(15downto0);
r1:
instd_logic_vector(15downto0);
r2:
instd_logic_vector(15downto0);
r3:
instd_logic_vector(15downto0);
sp:
instd_logic_vector(15downto0);
pc:
instd_logic_vector(15downto0);
psw:
instd_logic_vector(15downto0);
mbr:
instd_logic_vector(15downto0);
sela3:
instd_logic_vector(2downto0);
selb3:
instd_logic_vector(2downto0);
con_alu6:
instd_logic_vector(5downto0);
shift_reg2:
instd_logic_vector(1downto0);
in_bus_16:
outstd_logic_vector(15downto0);
c:
instd_logic_vector(15downto0);
d:
instd_logic_vector(15downto0));endcpu_alu;
architecturecpu_alu_archofcpu_aluis
componentalu_16
Port(alu_ina:
instd_logic_vector(15downto0);
alu_inb:
instd_logic_vector(15downto0);
con_alu6:
instd_logic_vector(5downto0);
alu_out:
outstd_logic_vector(15downto0));endcomponent;
componentalu_select
Port(r0:
instd_logic_vector(15downto0);
r1:
instd_logic_vector(15downto0);
r2:
instd_logic_vector(15downto0);
r3:
instd_logic_vector(15downto0);
r4:
instd_logic_vector(15downto0);
r5:
instd_logic_vector(15downto0);
r6:
instd_logic_vector(15downto0);
r7:
instd_logic_vector(15downto0);
r_out:
outstd_logic_vector(15downto0);
con:
instd_logic_vector(2downto0));endcomponent;
componentM_SHIFT_REG
Port(
ALU_OUT:
INSTD_LOGIC_VECTOR(15DOWNTO0);
SHIFT_REG2:
INSTD_LOGIC_VECTOR(1DOWNTO0);
ALU_INBUS_16:
OUTSTD_LOGIC_VECTOR(15DOWNTO0));endcomponent;
signalalu_ina,alu_inb,alu_out:
std_logic_vector(15downto0);
begin
u_sela:
alu_select
portmap(r0=>r0,
r1=>r1,
r2=>r2,
r3=>r3,
r4=>c,
r5=>d,
r6=>sp,
r7=>pc,
r_out=>alu_ina,
con=>sela3);
u_selb:
alu_select
portmap(r0=>r0,
r1=>r1,
r2=>r2,
r3=>r3,
r4=>c,
r5=>d,
r6=>psw,
r7=>mbr,
r_out=>alu_inb,
con=>selb3);
u_alu_in_16:
alu_16
Portmap(alu_ina=>alu_ina,
alu_inb=>alu_inb,
con_alu6=>con_alu6,
alu_out=>alu_out);
u_shift:
M_SHIFT_REG
Portmap(ALU_OUT=>alu_out,
SHIFT_REG2=>shift_reg2,
ALU_INBUS_16=>in_bus_16);
endcpu_alu_arch;
configurationcpu_alu_configofcpu_aluis
forcpu_alu_arch
endfor;
endcpu_alu_config;
(ALU_16)
-16bitalu
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
entityalu_16is
Port(alu_ina:
instd_logic_vector(15downto0);
alu_inb:
instd_logic_vector(15downto0);
con_alu6:
instd_logic_vector(5downto0);
alu_out:
outstd_logic_vector(15downto0));endalu_16;
architecturealu_16_archofalu_16is
componentm_74182
port(C0,P1,G1,P2,G2,P3,G3,g4,p4:
instd_logic;
C1,C2,C3:
outstd_logic);
endcomponent;
componentalu_sn74181
port(a_in:
instd_logic_vector(3downto0);--operanda
b_in:
instd_logic_vector(3downto0);--operandb
op_sel:
instd_logic_vector(4downto0);
f_out:
outstd_logic_vector(3downto0);--outvaluef
c_in:
instd_logic;
p_out:
outstd_logic;
g_out:
outstd_logic);endcomponent;
signalalu_p1,alu_p2,alu_p3,alu_p4,alu_g1,alu_g2,alu_g3,alu_g4:
std_logic;
signalalu_c0,alu_c1,alu_c2,alu_c3:
std_logic;
begin
u_74181_1:
alu_sn74181
portmap(a_in=>alu_ina(3downto0),
b_in=>alu_inb(3downto0),
op_sel=>con_alu6(5downto1),
f_out=>alu_out(3downto0),
c_in=>con_alu6(0),
p_out=>alu_p1,
g_out=>alu_g1);
u_74181_2:
alu_sn74181
portmap(a_in=>alu_ina(7downto4),
b_in=>alu_inb(7downto4),
op_sel=>con_alu6(5downto1),
f_out=>alu_out(7downto4),
c_in=>alu_c1,
p_out=>alu_p2,
g_out=>alu_g2);
u_74181_3:
alu_sn74181
portmap(a_in=>alu_ina(11downto8),
b_in=>alu_inb(11downto8),
op_sel=>con_alu6(5downto1),
f_out=>alu_out(11downto8),
c_in=>alu_c2,
p_out=>alu_p3,
g_out=>alu_g3);
u_74181_4:
alu_sn74181
portmap(a_in=>alu_ina(15downto12),
b_in=>alu_inb(15downto12),
op_sel=>con_alu6(5downto1),
f_out=>alu_out(15downto12),
c_in=>alu_c3,
p_out=>alu_p4,
g_out=>alu_g4);
u_74182:
m_74182
portmap(c0=>con_alu6(0),
p1=>alu_p1,
g1=>alu_g1,
p2=>alu_p2,
g2=>alu_g2,
p3=>alu_p3,
g3=>alu_g3,
p4=>alu_p4,
g4=>alu_g4,
c1=>alu_c1,
c2=>alu_c2,
c3=>alu_c3);
endalu_16_arch;
configurationalu_16_configofalu_16is
foralu_16_arch
endfor;
endalu_16_config;
(ALU_SN74181)
--primitivevariableinputandoutput(operand,c0)--cannotsetzerowhenopel=11001andc_in=0libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
entityalu_sn74181is
Port(a_in:
instd_logic_vector(3downto0);--operanda
b_in:
instd_logic_vector(3downto0);--operandb
op_sel:
instd_logic_vector(4downto0);
f_out:
outstd_logic_vector(3downto0);--outvaluef
c_in:
instd_logic;
p_out:
outstd_logic;
g_out:
outstd_logic);
--c_out:
outstd_logic);--carrayoutendalu_sn74181;
architecturealu_sn74181_archofalu_sn74181issignalc0,m:
std_logic;
signala,b,s:
std_logic_vector(3downto0);signala_0,b_0,a_1,b_1,a_2,b_2,a_3,b_3:
std_logic;
signald,e,h,t:
std_logic;
signalp_neg,g_neg,p_temp,g_temp:
std_logic;
signalis_f:
std_logic_vector(3downto0);
signalf_neg:
std_logic_vector(3downto0);
begin
p_alu:
process(op_sel,c_in,a_in,b_in,c0,m,a,b,s,a_0,b_0,a_1,b_1,a_2,b_2,a_3,b_3,d,e,h,t)
begin
c0<=c_in;
m<=op_sel(0);
a<=not(a_in);
b<=not(b_in);
s<=op_sel(4downto1);
a_0<=not((notb(0)ands
(1))or(b(0)ands(0))ora(0));
a_1<=not((notb
(1)ands
(1))or(b
(1)ands(0))ora
(1));
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 运算器 实验 报告