算数逻辑单元_第1页
算数逻辑单元_第2页
算数逻辑单元_第3页
算数逻辑单元_第4页
算数逻辑单元_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1、 实验目的:1、掌握简单运算器的数据传送通路2、验证运算器的组合功能二、实验原理: 算术逻辑部件的主要功能是对二进制数据进行定点算术运算、逻辑运算和各种移位操作。算术运算包括定点加减乘除运算;逻辑运算主要有逻辑与、逻辑或、逻辑异或和逻辑非操作。ALU通常有两个数据输入端A和B,一个数据输出端Y以及标志位等。74181是一种典型的4位ALU器件。图是74181的电路图。 20世纪80年代计算机中的算是逻辑单元有许多是用现成的算术逻辑器件连接起来构成的。如上面提到的74181和Am2901等就是著名的算术逻辑器件。使用这些4位的算术逻辑器件,能够构成8位、16位等长度的算术逻辑单元。现在由于超

2、大规模器件的广泛应用,使用这种方法构成算术逻辑单元已经不多见,代之以直接用硬件描述语言设计算术逻辑单元。CPU的算术逻辑单元就是一个简单的例子。图 74181的电路图三、实验步骤:(1)打开Quartus,参照3.4节,安装ByteBlaster。(2)将子板上的JTAG端口和PC机的并行口用下载电缆连接。打开试验台电源。(3)执行ToolsProgrammer命令,将adder8.sof下载到FPGA中,注意在执行Programmer中,应在program/configure下的方框中打钩,然后下载。(4) 在试验台上通过模式开关选择FPGA-CPU独立的调试模式010.要求:1、实验设计目

3、标设计一个16位算术逻辑单元,满足以下要求。(1)16位算术逻辑单元能够进行下列运算:加法、减法、加1、减1、与、或、非和传送。用3位运算操作码OP210进行运算,控制方式如表4.1所示:运算操作码OP210运 算对标志位Z和C的影响000resultßA+B影响标志位Z和C001resultßA+1影响标志位Z和C010resultßA-B影响标志位Z和C011resultßA-1影响标志位Z和C100resultßA and B影响标志位Z101resultßA or B影响标志位Z110resultßnot B影响标志

4、位Z111resultß B不影响标志位Z和C(2)设立两个标志位寄存器Z和C。当复位信号reset为低电平时,将这两个标志寄存器清零。当预算结束后,在时钟CLK的上升沿改变标志寄存器Z和C的值。运算结果改变标志寄存器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时,如果允许写信号writ

5、e=1,则在时钟clk的上升沿将数据输入dinput送入B。(4)算术逻辑单元用一个设计实体完成。2、顶层设计实体的引脚要求引脚要求对应关系如下:clk对应实验台上的时钟(单脉冲);reset对应实验台上的CPU复位信号CPU_RST;数据输入dinput对应实验台开关SD15SD0;允许写信号write对应实验台开关SA5;OP210对应实验台开关SA2SA0;寄存器选择信号sel对应实验台开关SA4;16位运算结果result对应实验台上的指示灯A15A0;Z、C标志位对应实验台上的Z、C指示灯。4、 实验现象及分析:(1)实验台设置成FPGA-CPU独立调试模块;REGSEL=0,CLK

6、SEL=1,FDSEL=0.使用实验平台上的单脉冲,即STEP_CLK短路子短接,短路子RUN_CLK断开;(2)将设计在Quartus II 下输入,在编译后下载到TEC-CA上的FPGA中;(3)输入A这个数:Sel=0(SA4),write=1(SA5),A数(SD15SD0) ,按一下单脉冲按钮(单脉冲按钮),使之存入A寄存器;(4)输入B这个数:Sel=1(SA4),write=1(SA5),B数(SD15SD0),按一下单脉冲按钮(单脉冲按钮),使之存入B寄存器;(5)输入功能码OP210(SA2SA0),按一下单脉冲按钮(单脉冲按钮);(6)观察16位运算结果result(A15

7、A0)及Z、C指示灯;(7)重复实验步骤(3)-(6)对以下4组数据进行表4.1的8种运算,把运算结果及标志位填写在表中:A、对第一组数据进行8种运算,A为0xAAAA,B为0x5555;B、对第一组数据进行8种运算,A为0xFFFF,B为0x0000;C、对第一组数据进行8种运算,A为0x0000,B为0xFFFF;D、对第一组数据进行8种运算,A为0x8950,B为0x9863;表 算术逻辑单元实验运算数据运算类型操作码OP运算结果result标志位C标志位Z运算前运算后运算前运算后第1组数据A=0xAAAAB=0x5555resultßA+B0000xFFFF0 0 0 0re

8、sultßA+10010xAAAB0 0 0 0resultßA-B0100x55550 0 0 0resultßA-10110xAAA90 0 0 0resultßA and B1000x00000 00 1resultßA or B1010xFFFF0 00 0resultßnot B1100xAAAA0 00 0resultß B1110x55550 00 0第2组数据A=0xFFFFB=0x0000resultßA+B0000xFFFF0 00 0resultßA+10010x00000 10 1

9、resultßA-B0100xFFFF1 01 0resultßA-10110xFFFE0 00 0resultßA and B1000x00001 11 1resultßA or B1010xFFFF0 00 0resultßnot B1100xFFFF0 01 0resultß B1110x00000 01 0第3组数据A=0x0000B=0xFFFFresultßA+B0000xFFFF0 01 0resultßA+10010x00010 00 0resultßA-B0100x00010 10 0r

10、esultßA-10110xFFFF0 10 0resultßA and B1000x00000 00 1resultßA or B1010xFFFF0 00 0resultßnot B1100x00000 00 1resultß B1110xFFFF1 10 0第4组数据A=0x8950B=0x9863resultßA+B0000x21B31 10 0resultßA+10010x89511 00 0resultßA-B0100xF0ED0 10 0resultßA-10110x894F1 00 0re

11、sultßA and B1000x88400 00 0resultßA or B1010x99731 10 0resultßnot B1100x679C1 10 0resultß B1110x98631 10 0五、实验过程中遇到问题及解决方法: 设立两个标志位寄存器Z和C。当复位信号reset为低电平时,将这两个标志寄存器清零。当预算结束后,在时钟CLK的上升沿改变标志寄存器Z和C的值。运算结果改变标志寄存器C、Z的情况下:加法、减法、加1、减1、运算改变Z、C;与、或、非运算改变Z,C保持不变;传送操作保持Z、C不变。六、实验源码:(加注释)-算数逻

12、辑单元libraryieee;use ieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entity ALU isport(reset,clk :in std_logic;-reset复位信号,当reset为低电平时,两个标志寄存器清零。clk为时钟信号,clk为高电平,改变Z,C OP: in std_logic_vector(2 downto 0);-运算操作码sel: in std_logic;-选择信号,sel=0,若为写信号,clk上升则存入A寄存器,若sel=1则存入

13、B寄存器 write:in std_logic;-写信号 C,Z:out std_logic;-Z,C为标志位Dinput: in std_logic_vector(15 downto 0);-输入将写入的数据通过它存入A寄存器或B寄存器 result: out std_logic_vector(15 downto 0)-输出结果);end ALU;architecturebehav of alu iscomponentreg isport(clr: instd_logic;-寄存器复位信号D:instd_logic_vector(15 downto 0);-寄存器输入信号clock:inst

14、d_logic;-时钟信号write:instd_logic;-写信号sel:instd_logic;-选择信号Q:outstd_logic_vector(15 downto 0);end component;signalz_tmp :std_logic;signal A,B :std_logic_vector(15 downto 0);signalresult_t: std_logic_vector(16 downto 0);beginA_reg: reg port map-A寄存器(clr=> reset,-对应ALU的复位信号 D=>Dinput,对应ALU的输入信号 clo

15、ck=>clk,-对应ALU的时钟信号write=> write,sel=> (not sel),-sel=0则表示选择A寄存器 Q=> A);B_reg: reg port map-B寄存器(clr=> reset, D=>Dinput,clock=>clk, write=> write,-sel=1则表示选择B寄存器sel=>sel, Q=> B);alu_proc:process(OP,A,B)begincase OP iswhen "000" =>result_t<= ('0'

16、& A) + ('0' & B);-A+Bwhen "001" =>result_t<= ('0' & A) + '1'-A+1when "010" =>result_t<= ('0' & A) - ('0' & B);-ABwhen "011" =>result_t<= ('0' & A) - '1'-A-1when "100&q

17、uot; =>result_t<= ('0' & A) and ('0' & B);-与when "101" =>result_t<= ('0' & A) or ('0' & B);-或when "110" =>result_t<= not ('0' & B);-非when "111" =>result_t<= ('0' & B);-传递end

18、case;end process;result <= result_t(15 downto 0);z_tmp<= (not result_t(15) and (not result_t(14) and(not result_t(13) and (not result_t(12) and(not result_t(11) and (not result_t(10) and(not result_t(9) and (not result_t(8) and(not result_t(7) and (not result_t(6) and(not result_t(5) and (not

19、result_t(4) and(not result_t(3) and (not result_t(2) and(not result_t(1) and (not result_t(0);c_proc: Process(reset,clk,result_t,OP)begin if reset = '0' then-若按下复位信号则寄存器C为0C <= '0'elsifclk'event and clk = '1' then-若clk为上升 if OP(2) = '0' thenC <= result_t(16);end if;end if;end process;z_proc: process(reset,clk,z_tmp,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论