西电计组实验二 运算器实验

算术逻辑运算实验

一.实验目的
  1.了解简单运算器的数据传输通路。
  2.验证运算功能发生器的组合功能。
  3.掌握算术逻辑运算加、减、与的工作原理。
  4.验证实验台运算的8位加、减、与、直通功能。
  5.按给定数据,完成几种指定的算术和逻辑运算。

二.实验原理
  算术逻辑单元ALU的数据通路如图2-1所示。其中运算器ALU181根据74LS181的功能用VHDL硬件描述语言编辑而成,构成8位字长的ALU。参加运算的两个8位数据分别为A[7…0]和B[7…0],运算模式由S[3…0]的16种组合决定,而S[3…0]的值由4位2进制计数器LPM_COUNTER产生,计数时钟是Sclk(图2-1);此外,设M=0,选择算术运算,M=1为逻辑运算,CN为低位的进位位;F[7…0]为输出结果,CO为运算后的输出进位位。两个8位数据由总线IN[7…0]分别通过两个电平锁存器74373锁入,ALU功能如表2-1所示。
  


在这里插入图片描述

  
三.实验步骤
  1. 设计ALU元件
  在Quartus II 环境下,用文本输入编辑器Text Editor输入ALU181.VHD算术逻辑单元文件,编译VHDL文件,并将ALU181.VHD文件制作成一个可调用的原理图元件。
ALU181.VHD文件内容如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY ALU181 IS
  PORT (
     S : IN STD_LOGIC_VECTOR(3 DOWNTO 0 );
     A : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
     B : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
     F : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
     M : IN STD_LOGIC;
     CN : IN STD_LOGIC;
     CO : OUT STD_LOGIC );
END ALU181;
ARCHITECTURE behav OF ALU181 IS
SIGNAL A9 : STD_LOGIC_VECTOR(8 DOWNTO 0);
SIGNAL B9 : STD_LOGIC_VECTOR(8 DOWNTO 0);
SIGNAL F9 : STD_LOGIC_VECTOR(8 DOWNTO 0);
BEGIN
  A9 <= ‘0’ & A ; B9 <= ‘0’ & B ;
  PROCESS(M,CN,A9,B9)
    BEGIN
      CASE S IS
      WHEN “0000” => IF M=‘0’ THEN F9<=A9 + CN ; ELSE F9<=NOT A9; END IF;
      WHEN “0001” => IF M=‘0’ THEN F9<=(A9 or B9) + CN ; ELSE F9<=NOT(A9 OR B9); END IF;
      WHEN “0010” => IF M=‘0’ THEN F9<=(A9 or (NOT B9))+ CN ; ELSE F9<=(NOT A9) AND B9; END IF;
      WHEN “0011” => IF M=‘0’ THEN F9<= “000000000” - CN ; ELSE F9<=“000000000”; END IF;
      WHEN “0100” => IF M=‘0’ THEN F9<=A9+(A9 AND NOT B9)+ CN ; ELSE F9<=NOT (A9 AND B9); END IF;
      WHEN “0101” => IF M=‘0’ THEN F9<=(A9 or B9)+(A9 AND NOT B9)+CN ; ELSE F9<=NOT B9; END IF;
      WHEN “0110” => IF M=‘0’ THEN F9<=(A9 - B9) - CN ; ELSE F9<=A9 XOR B9; END IF;
      WHEN “0111” => IF M=‘0’ THEN F9<=(A9 or (NOT B9)) - CN ; ELSE F9<=A9 and (NOT B9); END IF;
      WHEN “1000” => IF M=‘0’ THEN F9<=A9 + (A9 AND B9)+CN ; ELSE F9<=(NOT A9)and B9; END IF;
      WHEN “1001” => IF M=‘0’ THEN F9<=A9 + B9 + CN ; ELSE F9<=NOT(A9 XOR B9); END IF;
      WHEN “1010” => IF M=‘0’ THEN F9<=(A9 or(NOT B9))+(A9 AND B9)+CN ; ELSE F9<=B9; END IF;
      WHEN “1011” => IF M=‘0’ THEN F9<=(A9 AND B9)- CN ; ELSE F9<=A9 AND B9; END IF;
      WHEN “1100” => IF M=‘0’ THEN F9<=(A9 + A9) + CN ; ELSE F9<= “000000001”; END IF;
      WHEN “1101” => IF M=‘0’ THEN F9<=(A9 or B9) + A9 + CN ; ELSE F9<=A9 OR (NOT B9); END IF;
      WHEN “1110” => IF M=‘0’ THEN F9<=((A9 or (NOT B9)) +A9) + CN ; ELSE F9<=A9 OR B9; END IF;
      WHEN “1111” => IF M=‘0’ THEN F9<=A9 - CN ; ELSE F9<=A9 ; END IF;
      WHEN OTHERS => F9<= “000000000” ;
      END CASE;
END PROCESS;
  F<= F9(7 DOWNTO 0) ; CO <= F9(8) ;
END behav;
    2.以原理图方式建立顶层文件工程
选择图形方式。根据图2-1输入实验电路图,从Quartus II的基本元件库中将各元件调入图形编辑窗口、连线,添加输入输出引脚。
将所设计的图形文件ALU.bdf保存到原先建立的文件夹中,将当前文件设置成工程文件,以后的操作就都是对当前工程文件进行的。
   3.器件选择
选择Cyclone系列,在Devices中选择器件EP1C6QC240C8。编译,引脚锁定,再编译。引脚锁定后需要再次进行编译,才能将锁定信息确定下来,同时生成芯片编程/配置所需要的各种文件。
   4.芯片编程
打开编程窗口。将配置文件ALU.sof下载进GW48系列现代计算机组成原理系统中的FPGA中。
   5.验证ALU的运算器的算术运算和逻辑运算功能
选择实验系统的电路模式为NO.0,根据表2-1,从键盘输入数据A[7…0]和B[7…0],并设置S[3…0]、M、Cy,验证ALU运算器的算术运算和逻辑运算功能,记录实验数据。
  

在这里插入图片描述

图2-1 算术逻辑单元ALU实验原理图

  
四.实验要求
  1. 做好实验预习,掌握运算器的数据传送通路和ALU的功能特性,并熟悉本实验中所用的控制台开关的作用和使用方法。
  2. 写出实验报告,内容是:
   ①实验目的;
   ②按理论分析值填写好表2-2、表2-3和表2-4,给出对应的仿真波形。
   ③列表比较实验数据(2)的理论分析值与实验结果值;并对结果进行分析。实验结果与理论分析值比较,有没有不同?为什么?
   ④通过本实验,你对运算器ALU有何认识,有什么心得体会?
五.实验结果
  填写表格2-3、2-4:
  

表2-3 ALU181功能表
在这里插入图片描述
  
表2-4 8种常用的算术与逻辑运算
在这里插入图片描述

六.实验心得体会
  1.通过本次实验,我掌握了运算器的传输和计算方法,了解了简单运算器的数据传输通路。
  2.通过本次实验,我熟悉了逻辑运算单元ALU181的真值表和对应的功能。
  3.通过本次实验,我加深了对FPGA器件工作方式的理解,在验证ALU181功能的过程中提升了自己的动手能力,这也能让自己变得更细致和有耐心。
  4.在验证ALU功能特性的时候,我发现当S3 S2 S1 S0 = 1000,M=1,Cn=0时,ALU原本应该实现F=A非+B,但实际操作下来却发现并非如此,询问老师后得知可能是ALU181真值表与实际功能实现间存在极少数不对应的情况。

  • 28
    点赞
  • 177
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Polaris_T

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值