1、ALU设计报告青岛理工大学实 验 报 告实验课程: 计算机组成原理I 实验日期: 2013 年 9月18日, 交报告日期:2013 年9月30日,成绩:实验地点:现代教育技术中心101(计算机实验室)计算机工程 学院,计算机科学与技术 专业, 班级:计算112班实验指导教师:盛建伦 批阅教师:同组学生姓名任师锋秦世帅学号一、 实验课题设计一个16位ALU的逻辑,决定外部的端口(名称、有效电平)和内部各元件的连接,画出系统框图和逻辑图,设计仿真数据,用VHDL编程和仿真。实验内容:(1)、主要元件设计 14位并行进位加法器 功能要求:能完成两个4位二进制数(补码和无符号数)的加法和逻辑加运算。内
2、部有并行进位链。可以扩展成多位组。 2组间并行进位链逻辑 功能要求:4个4位小组的组间并行进位链逻辑。 将组间并行进位链逻辑与4个4位超前进位加法器连接可以构成16位进位加法器。可参考74182的逻辑函数。3函数发生器功能要求:能把输入的两个16位二进制数进行变换,与后面的16位超前进加法器配合完成两个16位二进制数(补码和无符号数)的8种算术运算(有些运算考虑低位来的进位)和8种逻辑运算。提示:ALU的功能参考数字逻辑课程的“多功能加法器”实验(2)、顶层设计 用层次结构设计的方法设计一个16位ALU。内部包括4个4位并行进位加 法器、组间并行进位链、16位函数发生器等。 功能要求:能完成两
3、个16位二进制数以及低位来的进位的8种算术运算和8种逻辑运算。可参考74181(3)、仿真 设计仿真波形数据,要考虑到所有可能的情况。在实验报告中必须清楚写明仿真波形数据是怎样设计的。二、逻辑设计一位全加器系统框图端口说明:P,G:进位传递函数,进位产生函数。S:输出a,b:输入cin:来自低位的进位cout:向高位的进位。推导的逻辑函数。S=abcin;P=a or b;G=a and b;Cout=G+P.cin; 超前进位琏系统框图 P(0-3),G(0-3):接收进位传递函数和进位产生函数的端口。C(0-3):产生的进位输出。Cin:来自低位的进位。PN,GN:分别是组件进位传递函数和
4、组件进位产生函数。超前进位输出逻辑函数: Carry0=G0+P0.Cin Carry1=G1+P1.C0 Carry2=G2+P2.C1 Carry3=G3+P3.C2GN =G3+P3G2+P3P2G1+P3P2P1G0 PN =P3P2P1P0四位并行加法器系统框图端口说明:M: 模式控制信号,M=0逻辑加,M=1算术加。A ,B: 输入。S:输出Cin:来自低位的进位。Cout:向高位的进位。PN,GN:分别输出片间的进位传递函数和进位产生函数。四位并行加法器逻辑图片(0-3):1位全加器。M:模式控制信号。G(0-3),P(0-3):分别是组件的进位产生函数和进位传递函数。Cin:来
5、自低位的进位Carry(0-3):超前进位琏产生的进位输出,他们分别与四位并行加法器的Cin(来自低位的进位)相连。Carry3没有用到。a(0-3),b(0-3):输入。S(0-3):是四位并行加法器的输出PN,GN:组件进位传递函数和组件进位产生函数。连接到超前进位琏端口的G(0-3),P(0-3),与一位全加器的PN,GN向连。函数发生器系统框图-M:模式控制信号Ctrl:函数发生控制信号。a,b:输入aout,bout:输出。Cin:低位的进位。Cout:输出函数发生器功能表ms2s1s0运算aoutboutcout1000a加bab01001a加1a011010a加b加低位进位abc
6、i1011b加10b11100a加a01101a加0a001110a加aaa01111a加 加1a10000a+ba+b000001a.ba.b000010000011000100abab000101a+a+000110000111a.a.00十六位并行加法器系统框图端口说明:M: 模式控制信号,M=0逻辑加,M=1算术加。Ctrl:函数控制信号,控制做哪种函数运算。A ,B: 输入。S:输出Cin:来自低位的进位。Cout:向高位的进位。十六位并行加法器逻辑图端口说明: 片(0-3):四位并行加法器(由于空间的限制,其中函数发生控制信号,并没有在逻辑如图中标出)。G(0-3),P(0-3):
7、分别是组件的进位产生函数和进位传递函数。Cin:来自低位的进位Carry(0-3):超前进位琏产生的进位输出,他们分别与四位并行加法器的Cin(来自低位的进位,图中没有标明端口名)相连。Carry3没有用到。S(0-15):是16位并行加法器的输出。M:模式控制信号。Ctrl(0-2):函数发生控制端。, , , :分别表示aout(0-3)bout(0-3),aout(4-7)bout(4-7),aout(8-11)bout(8-11),aout(12-15bout(12-15二、VHDL源程序一位全加器:entity OneAdder isport (a,b :in std_logic;-
8、input cin :in std_logic;-jinwei from the low bit P,G :out std_logic;-P 进位传递函数,G进位产生函数 s :out std_logic);-resultend OneAdder;architecture behave of OneAdder isbegin s=a xor b xor cin; P=a or b; G=a and b;end behave;超前进位琏:-super carrylibrary ieee;use ieee.std_logic_1164.all;entity SuperCarry isport (P
9、,G :in std_logic_vector(3 downto 0);-输入 cin :in std_logic;-来自低位的进位 carry :out std_logic_vector(3 downto 0);-进位输出 PN,GN :out std_logic);-产生组件的进位传递和进位产生函数end SuperCarry;architecture behave of SuperCarry issignal c : std_logic_vector(3 downto 0);begin c(0)=G(0) or (P(0) and cin); carry(0)=c(0); c(1)=G(
10、1) or (P(1) and c(0); carry(1)=c(1); c(2)=G(2) or (P(2) and c(1); carry(2)=c(2); c(3)=G(3) or (P(3) and c(2); carry(3)=c(3); GN=G(3) or (P(3) and G(2) or (P(3) and P(2) and G(1) or (P(3) and P(2) and P(1) and G(0);-产生组件进位产生函数 PN aout=a;bout=b;cout aout=a;bout=iz;cout aout=a;bout=b;cout aout=iz;bout=
11、b;cout aout=a;bout=not b;cout aout=a;bout=iz;cout aout=a;bout=a;cout aout=a;bout=not b;cout aout=a or b;bout=iz;cout aout=a and b;bout=iz;cout aout=not a;bout=iz;cout aout=not b;bout=iz;cout aout=a xor b;bout=iz;cout aout=a or (not b);bout=iz;cout aout=not(a xor b);bout=iz;cout aout=a and (not b);bo
12、ut=iz;cout=zero;-a.not b end case; end if; end process;end behave;四位并行加法器:-four adderlibrary ieee;use ieee.std_logic_1164.all;entity FourAdder isport (a,b :in std_logic_vector(3 downto 0);-input cin :in std_logic; PN,GN :out std_logic;-for the Adder16 组件进位函数,GN-进位产生函数,PN-进位传递函数 s :out std_logic_vect
13、or(3 downto 0);-output cout :out std_logic;-向高位的进位 M :in std_logic);-模式控制m=1 逻辑运算,M=0 算术运算end FourAdder;architecture behave of FourAdder is-declare OneAddercomponent OneAdderport (a,b :in std_logic;-input cin :in std_logic;-jinwei from the low bit P,G :out std_logic;-P 进位传递函数,G进位产生函数 s :out std_logi
14、c);-resultend component; -end declare of OneAdder-declare SuperCarrycomponent SuperCarryport (P,G :in std_logic_vector(3 downto 0); cin :in std_logic; carry :out std_logic_vector(3 downto 0); PN,GN :out std_logic);end component;-the end declare of SuperCarrysignal gt,pt : std_logic_vector(3 downto 0
15、);signal c : std_logic_vector(3 downto 0);-存储中间进位的结果signal xin :std_logic_vector(3 downto 0);begin xin(0)a(0),b=b(0),s=s(0),P=pt(0),G=gt(0),cin=xin(0); xin(1)a(1),b=b(1),s=s(1),P=pt(1),G=gt(1),cin=xin(1); xin(2)a(2),b=b(2),s=s(2),P=pt(2),G=gt(2),cin=xin(2); xin(3)a(3),b=b(3),s=s(3),P=pt(3),G=gt(3),c
16、in=xin(3); TAG5:SuperCarry port map-SuperCarry 实例化 1 (P=pt,G=gt,carry=c,cin=xin(0),PN=PN,GN=GN); coutctrl,M=M,a=a,b=b,cin=cin,aout=aout,bout=bout,cout=scout); x(0)aout(3 downto 0),b=bout(3 downto 0),cin=x(0),PN=pt(0),s=s(3 downto 0),GN=gt(0),M=M); x(1)aout(7 downto 4),b=bout(7 downto 4),cin=x(1),PN=
17、pt(1),s=s(7 downto 4),GN=gt(1),M=M); x(2)aout(11 downto 8),b=bout(11 downto 8),cin=x(2),PN=pt(2),s=s(11 downto 8),GN=gt(2),M=M); x(3)aout(15 downto 12),b=bout(15 downto 12),cin=x(3),PN=pt(3),s=s(15 downto 12),GN=gt(3),M=M); TAG5:SuperCarry port map-SuperCarry 实例化 2-超级进位连 (P=pt,G=gt,cin=x(0),carry=c)
18、; cout=M and c(3);end struct;三、仿真设计一位全加器的仿真数据:将所有的数据组合进行仿真。a00001111b00110011cin01010101P00111100G00000011s01101001注意:P,G,s都是理论应当得到的数据。超前进位琏仿真数据:分析:当进位产生函数为1时,一定会向高位进1.令数据G为0010,P为1000,cin为1预测结果:0010.当进位传递函数为1而进位产生函数为0时,只要来自低位的进位为1就向高位产生进位。令数据G为0000,p为0111,cin为1,预测结果0111.令数据G为0000,P为0101,cin为1,预测结果0001.原因在于低位的进位不为1,则不会向高位产生进位1只要G(3)为1,GN就为1,对于PN要所有的P(0-3)为1才为1。函数发生器仿真:输出aout ,bout ,cout要和功能表的输出一致仿真数据:(由于数据多,此处仅截取部分)数据一般取和功能表所属情况相反的例子进行验证。ms2s1s0abcin
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1