算术逻辑运算实验
一.实验目的
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运算器的算术运算和逻辑运算功能,记录实验数据。
四.实验要求
1. 做好实验预习,掌握运算器的数据传送通路和ALU的功能特性,并熟悉本实验中所用的控制台开关的作用和使用方法。
2. 写出实验报告,内容是:
①实验目的;
②按理论分析值填写好表2-2、表2-3和表2-4,给出对应的仿真波形。
③列表比较实验数据(2)的理论分析值与实验结果值;并对结果进行分析。实验结果与理论分析值比较,有没有不同?为什么?
④通过本实验,你对运算器ALU有何认识,有什么心得体会?
五.实验结果
填写表格2-3、2-4:
文章来源:https://www.toymoban.com/news/detail-457553.html
六.实验心得体会
1.通过本次实验,我掌握了运算器的传输和计算方法,了解了简单运算器的数据传输通路。
2.通过本次实验,我熟悉了逻辑运算单元ALU181的真值表和对应的功能。
3.通过本次实验,我加深了对FPGA器件工作方式的理解,在验证ALU181功能的过程中提升了自己的动手能力,这也能让自己变得更细致和有耐心。
4.在验证ALU功能特性的时候,我发现当S3 S2 S1 S0 = 1000,M=1,Cn=0时,ALU原本应该实现F=A非+B,但实际操作下来却发现并非如此,询问老师后得知可能是ALU181真值表与实际功能实现间存在极少数不对应的情况。文章来源地址https://www.toymoban.com/news/detail-457553.html
到了这里,关于西电计组实验二 运算器实验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!