您好,欢迎访问三七文档
当前位置:首页 > 金融/证券 > 投融资/租赁 > 16位ALUVHDL实现源程序
思考题:编写十六位运算器的VHDL程序——MYALU实验任务:用CPT16的扩展实验板上的开关K3、K2、K1、K0做为输入、八段数码管LED0..LED3做为输出,用VHDL语言编写程序,下载到EP1C6中,实现十六位模型机的MYALU功能见下表。实验说明:在MYALU.VHD程序设计中,定义A为16位累加器,其值由K3、K2两组开关输入;W为16位工作寄存器,其值由K1、K0两组开关共输入;S2、S1、S0为运算功能控制位,接在K4开关的第2、1、0个开关上,根据S2、S1、S0的不同,MYALU实现不同功能D为运算结果输出,显示在四位八段管LED3..LED0上;CIn为进位输入,由K4开关组的第3个开关输入;COut为进位输出,用发光二极管L0显示其状态。逻辑功能:控制信号S运算000算术运算A+B;A+B+1001A-B;A-B-1010A;A+1011A;A-1100逻辑运算AB101A+B110A⊕B111Alibraryieee;------库程序包调用useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entityasanxiais------实体:电路外观配置port(inA:INUNSIGNED(15DOWNTO0);--K3,K2inAinW:INUNSIGNED(15DOWNTO0);--K1,K0inWoutLED:OUTSTD_LOGIC_VECTOR(15DOWNTO0);--LED3~LED0outLEDinC:INSTD_LOGIC_VECTOR(2DOWNTO0);--ControlInputinCCin:INSTD_LOGIC;--CInputk4.3CinCout:OUTSTD_LOGIC--COutputL0Cout);endasanxia;architecturearchofasanxiais------结构体:电路功能描述--中间变量signalc:std_logic_vector(15downto0);--暂存进位信号signalq:UNSIGNED(15downto0);--暂存各位数值beginprocess(inC,inA,inW,Cin)begincaseinCiswhen000=------加法:A+B;A+B+1q(0)=inA(0)xorinW(0)xorCin;c(0)=(inA(0)andinW(0))or(inW(0)andCin)or(inA(0)andCin);--inA(0),inW(0),Cin有两个以上为1即产生进位。gen1:foriin1to15loopq(i)=inA(i)xorinW(i)xorc(i-1);--本位和进位异或,产生不用and,因q(i)只能存储一位信息c(i)=(inA(i)andinW(i))or(inW(i)andc(i-1))or(inA(i)andc(i-1));--inA(0),inW(0),Cin有两个以上为1即产生进位。endloop;outLED=q(15)&q(14)&q(13)&q(12)&q(11)&q(10)&q(9)&q(8)&q(7)&q(6)&q(5)&q(4)&q(3)&q(2)&q(1)&q(0);--给输出赋值,将各位连缀起来Cout=c(15);when001=------减法:A-B;A-B-1q(0)=inA(0)xorinW(0)xorCin;c(0)=(notinA(0)andinW(0))or(inW(0)andCin)or(notinA(0)andCin);gen2:foriin1to15loopq(i)=inA(i)xorinW(i)xorc(i-1);c(i)=(notinA(i)andinW(i))or(inW(i)andc(i-1))or(notinA(i)andc(i-1));endloop;outLED=q(15)&q(14)&q(13)&q(12)&q(11)&q(10)&q(9)&q(8)&q(7)&q(6)&q(5)&q(4)&q(3)&q(2)&q(1)&q(0);--给输出赋值Cout=c(15);when010=ifCin='0'thenoutLED=inA+1;--执行a+1endif;Cout='0';when011=ifCin='0'thenoutLED=inA-1;--执行a-1endif;Cout='0';when100=--逻辑与:ABgen3:foriin0to15loopq(i)=inA(i)andinW(i);outLED=q(15)&q(14)&q(13)&q(12)&q(11)&q(10)&q(9)&q(8)&q(7)&q(6)&q(5)&q(4)&q(3)&q(2)&q(1)&q(0);--给输出赋值endloop;when101=--逻辑或:A+Bgen4:foriin0to15loopq(i)=inA(i)orinW(i);outLED=q(15)&q(14)&q(13)&q(12)&q(11)&q(10)&q(9)&q(8)&q(7)&q(6)&q(5)&q(4)&q(3)&q(2)&q(1)&q(0);--给输出赋值endloop;when110=--异或:A⊕Bgen5:foriin0to15loopq(i)=inA(i)xorinW(i);outLED=q(15)&q(14)&q(13)&q(12)&q(11)&q(10)&q(9)&q(8)&q(7)&q(6)&q(5)&q(4)&q(3)&q(2)&q(1)&q(0);--给输出赋值endloop;whenothers=--逻辑非:outLED=notinA(15)¬inA(14)¬inA(13)¬inA(12)¬inA(11)¬inA(10)¬inA(9)¬inA(8)¬inA(7)¬inA(6)¬inA(5)¬inA(4)¬inA(3)¬inA(2)¬inA(1)¬inA(0);Cout='0';endcase;endprocess;endarch;
本文标题:16位ALUVHDL实现源程序
链接地址:https://www.777doc.com/doc-6307816 .html