欢迎来到天天文库
浏览记录
ID:39615843
大小:102.50 KB
页数:5页
时间:2019-07-07
《实验CPU算术逻辑单元》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验CPU算术逻辑单元姓名:闫盼蛟学号:2009432017一、实验目的(1)掌握运算器的工作原理。(2)验证运算器的功能。二、实验原理算术逻辑单元的主要功能是对二进制数据进行定点算术运算、逻辑运算和各种移位操作。算术运算包括定点加减乘除运算;逻辑运算主要有逻辑与、逻辑或、逻辑异或和逻辑非操作。ALU通常有两个数据输入端A和B,一个数据输出端Y以及标志位等。三、实验要求1、实验设计目标设计一个16位算术逻辑单元,满足以下要求。(1)16位算术逻辑单元能够进行下列运算:加法、减法、加1、减1、与、或、非和传送。用3位运算操作码OP[2..0]进行运算,控
2、制方式如下表所示。运算操作码OP[2..0]运算对标志位Z和C的影响000ResultßA+B影响标志位Z和C001ResultßA+1影响标志位Z和C010ResultßA-B影响标志位Z和C011ResultßA-1影响标志位Z和C100ResultßAandB影响标志位Z101ResultßAorB影响标志位Z110ResultßnotB影响标志位Z111ResultßB不影响标志位Z和C(2)设立两个标志寄存器Z和C。当复位信号reset为低电平时,将这两个标志寄存器清零。当运算结束后,在时钟clk的上升沿改变标志寄存器Z和C的值。运算结果改变
3、标志寄存器C、Z的情况如下:加法、减法、加1、减1运算改变Z、C;与、或、非运算改变Z,C保不变;传送操作保持Z、C不变。因此在运算结束Z、C需要两个D触发器保存。(3)为了保存操作数A和B,设计两个16位寄存器A和B。当寄存器选择信号sel=0时,如果允许写信号write=1.,则在诗中clk的上升沿将数据输入dinput送入A寄存器;当寄存器选择信号sel=1时,如果允许写信号write=1.,则在诗中clk的上升沿将数据输入dinput送入B寄存器。(4)算术逻辑单元用一个设计实体完成。2.顶层设计实体的引脚要求(1)clk对应试验台上的时钟(单
4、脉冲)。(2)reset对应实验台上的CPU复位信号CPU-RST。(3)数据输入dinput对应试验台开关SD15~SD0。(4)允许写信号write对应试验台开关SA5.(5)OP[2..0]对应试验台开关SA2~SA0.(6)寄存器选择信号sel对应试验台开关SA4.(7)16为运算结果result对应实验台上的指示灯A15~A0.(8)Z、C标志位对应试验台上的Z、C指示灯。四、实验代码libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_l
5、ogic_unsigned.all;entityALUisport(reset,clk:instd_logic;OP:instd_logic_vector(2downto0);sel:instd_logic;write:instd_logic;C,Z:outstd_logic;Dinput:instd_logic_vector(15downto0);result:outstd_logic_vector(15downto0));endALU;architecturebehavofaluiscomponentregisport(clr:instd_logi
6、c;D:instd_logic_vector(15downto0);clock:instd_logic;write:instd_logic;sel:instd_logic;Q:outstd_logic_vector(15downto0));endcomponent;signalz_tmp:std_logic;signalA,B:std_logic_vector(15downto0);signalresult_t:std_logic_vector(16downto0);beginA_reg:regportmap(clr=>reset,D=>Dinput,
7、clock=>clk,write=>write,sel=>(notsel),Q=>A);B_reg:regportmap(clr=>reset,D=>Dinput,clock=>clk,write=>write,sel=>sel,Q=>B);alu_proc:process(OP,A,B)begincaseOPiswhen"000"=>result_t<=('0'&A)+('0'&B);when"001"=>result_t<=('0'&A)+'1';when"010"=>result_t<=('0'&A)-('0'&B);when"011"=>res
8、ult_t<=('0'&A)-'1';when"100"=>result_t<=('0'&A)
此文档下载收益归作者所有