硬件描述语言实验:四位加法器实验实验人姓名:王昭学号:2010482062实验地点:B3-216实验三:--QuartusIIVHDLTemplate--BasicShiftRegisterlibraryieee;useieee.std_logic_1164.all;entityadder4isport(a,b:instd_logic_vector(3downto0);ci:instd_logic;s:outstd_logic_vector(3downto0);co:outstd_logic);endentity;architecturertlofadder4issignalc0,c1,c2:std_logic;begins(0)=a(0)xorb(0)xorci;c0=(a(0)andb(0))or(a(0)andci)or(b(0)andci);s(1)=a(1)xorb(1)xorc0;c1=(a(1)andb(1))or(a(1)andc0)or(b(1)andc0);s(2)=a(2)xorb(2)xorc1;c2=(a(2)andb(2))or(a(2)andc1)or(b(2)andc1);s(3)=a(3)xorb(3)xorc2;co=(a(3)andb(3))or(a(3)andc2)or(b(3)andc2);endrtl;实验原理:a和b为两个四位的数,定义三个信号量,c0,c1,c2;低位进位si=0;s(0)=a(0)+b(0)+si;进位为c0;s(1)=a(1)+b(1)+c0;进位为c1;s(2)=a(2)+b(2)+c1;进位为c2;s(3)=a(3)+b(3)+c2;进位为co;低位进位si都为0;如果a+b的值大于15时,则co为1,s=a+b-16;如果不是大于15,则相加时则s=a+b的值,co=0;经仿真可以验证此四位加法器正确。实验四:--QuartusIIVHDLTemplate--BasicShiftRegisterlibraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityadder4_2isport(a,b:std_logic_vector(3downto0);ci:instd_logic;s:outstd_logic_vector(3downto0);co:outstd_logic);endentity;architecturertlofadder4_2issignalaa,bb,ss:std_logic_vector(4downto0);beginaa='0'&a;bb='0'&b;ss=aa+bb+ci;s=ss(3downto0);co=ss(4);endrtl;实验分析:此实验与上一实验功能相同,但此实验代码中运用了高层次抽象行为描述,直接使用了现实中使用的加法运算。定义了aa,bb,ss三个信号量,来存储a,b,s的值,通过aa=’0’&a把四位的a和b变成五位。来实现ss=aa+bb+si;最终把ss的低四位赋给s;ss的高位赋给co;便实现了四位加法器。观察仿真图,可以发现,si=0;因为最低位没有最低进位,通过高层次抽象行为描述直接把aa(4downto0)+bb(4downto0)的和赋给ss,把ss(3downto0)赋给s,co=ss(4);从仿真图上看出来,计算正确。此四位加法器正确。实验八:--QuartusIIVHDLTemplate--BasicShiftRegisterlibraryieee;useieee.std_logic_1164.all;entityadder4_3isport(A,B:instd_logic_vector(3downto0);Ci:instd_logic;S:outstd_logic_vector(3downto0);Co:outstd_logic);endentity;architecturefullofadder4_3iscomponentfull_adderisport(a:instd_logic;b:instd_logic;ci:instd_logic;s,co:outstd_logic);endcomponent;signalc0,c1,c2:std_logic;beginu0:full_adderportmap(A(0),b(0),Ci,S(0),c0);u1:full_adderportmap(A(1),B(1),c0,S(1),c1);u2:full_adderportmap(A(2),B(2),c1,S(2),c2);u3:full_adderportmap(A(3),B(3),c2,S(3),Co);endfull;实验分析:此实验是通过一位加法器来实现的四位加法器,一位加法器的代码如下:libraryieee;useieee.std_logic_1164.all;entityfull_adderisport(a:instd_logic;b:instd_logic;ci:instd_logic;s,co:outstd_logic);endentity;architecturertloffull_adderisbegins=axorbxorci;co=(aandb)or(aandci)or(bandci);endrtl;这个四位加法器的实现是通过把最低位的输入一位加法器,得出进位与得数,然后把次低位输入一位加法器相加,得出进位与得数,依次类推,得出四位加法器。