1、END behave; 顶层模块:8位二进制并行进位加法器的部分程序ADDER8B.VHD如下:ENTITY ADDER8B ISIN STD_LOGIC_VECTOR(7 DOWNTO 0);OUT STD_LOGIC_VECTOR(7 DOWNTO 0);OUT STD_LOGICEND ADDER8B;ARCHITECTURE a OF ADDER8B ISComponent adder4B -引用4位二进制并行进位加法器END COMPONENT;SIGNAL CARRY_OUT:STD_LOGIC; -4位加法器的进位标志 U1:ADDER4B -安装一个4位二进制加法器U1 POR
2、T MAP(ci=ci,a=a(3 DOWNTO 0),b=b(3 DWONTO 0),s=(3 DOWNTO 0),co=CARRY_OUT); U2:ADDER4B -安装一个4位二进制加法器U2CARRY_OUT,a=a(7 DOWNTO 4),b=b(7 DWONTO 4),s=(7 DOWNTO 4),co=co);加法器VHDL程序如下USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY adder IS port(a:in std_logic; -被加数a -加数bci: -输入进位out std_logic; -结果输出out std_logic -输出进位e
3、nd adder;architecture behave of adder is signal tem: std_logic; -暂存signal stem:begintem=a xor b; -中间变量stem=tem xor ci; -结果co=(tem and ci) or (a and b); -进位输出s=stem; -输出end behave;4位二进制并行进位减法器的源程序suber.VHD如下:ENTITY sub4 IS PORT(a: -4位被减数 -4位减数 -结果输出OUT STD_LOGIC -输出进位end suber;architecture behave of
4、suber iscomponent adder is -引用加法器的模块out std_logic end component;signal btem:std_logic_vector(3 downto 0); -减数寄存signal ctem:std_logic_vector(4 downto 0); - 进位寄存 - 结果寄存btem(3 downto 0)=not b(3 downto 0); -先把减数求反ctem(0)=not ci; -输入的进位也求反,从而对减数求补码g1:for I in 0 to 3 generate -连用4位全加器add:adder port map (a
5、(i),btem(i),ctem(i),stem(i),ctem(i+1);end generate;s(3 downto 0)=stem(3 downto 0);=not ctem(4); -求反输出进位乘法器的源程序:Entity mul is Port( a:in std_logic_vector(3 downto 0); -4位被乘数 -4位乘数 y:out std_logic_vector(7 downto 0) -乘积);end mul;architecture arch of mul isy(7 downto 0) -开始状态if str=1 then -收到启动信号state=
6、one; -转到状态oneatem(3 downto 0)=a(7 downto 4); -把高4位放到减法器被减数端 =b(3 downto 0); -把除数放到减法器减数端ain(7 downto 0)=a(7 downto 0); -寄存被除数bin(3 downto 0) -第一次移位if cotem=0 then -被除数高4位小于除数,溢出!=eror; -转到出错状态else -不溢出ain(3 downto 1)=ain(2 downto 0); -被除数做移位ain(0) -再做3此移位if n=2 then -第四次移位=three; -是,则跳转到下一状态n:=0; -移
7、位计数器清零else -否则 state -还回到这个状态 n:=n+1; -移位计数器加1 end if; if cotem=0 then -不够减,有借位 atem(3 downto 1)=stem(2 downto 0); -减法器结果移位作为下一次的输入else -够减,没有借位=atem(2 downto 0); -结果输出移位作为下一次的输入 ain(3 downto 1) -结果寄存器左移一位 ain(0) -这次运算借位输出,输入到寄存器ain最后一位 atem(0) -正常运算结果输出 s(3 downto 1) -寄存器ain低3位作为输出结果高3位 s(0) -最后一次减
8、法运算的借位输出求反作为结果输出最低位if cotem=0 then -最后一次减法运算,够减(无借位) y(3 downto 0)=atem(3 downto 0); -则减法器输出结果为整个除法的余数else -否则,不够减 -则最后一次减法运算的被减数为整个除法的余数 atem(3 downto 0)= 0; -寄存器清零 btem(3 downto 0) -溢出状态end case;end process p2;citem=0; -4位减法器借位输入接地U1:suber port map(atem,btem,citem,stem,cotem);数字按键译码电路VHDL语言描述entit
9、y numdecoder isport(reset:inclk:innum:std_logic_vetctor(9 downto 0);outnum:buffer std_logic_vector(3 woento 0);outflag:out std_logic);end;architecture behave of numdecoer is if reser=1then outnumoutnumoutflag=”0001”; -按下第二个键表示输入1when”0000000100”=”0010”; -按下第三个键表示输入2when”0000001000”=”0011”; -按下第四个键表示
10、输入3when”0000010000”=”0100”; -按下第五个键表示输入4when”0000100000”=”0101”; -按下第六个键表示输入5when”0001000000”=”0110”; -按下第七个键表示输入6when”0010000000”=”0111”; -按下第八个键表示输入7when”010*”=”1000”; -按下第九个键表示输入8when”1000000000”=”1001”; -按下第十个键表示输入9when others=outnum; -不按键时保持end process;7段译码器的vhdl语言描述entity vdecode isport(indata
11、:outdata:out std_logic_vector(0 to 6)Atchitecture behave of vdecode isBeginWith indata selectOutdata=”1111110”when”0000”, ”0110000”when”0000”,”1111001”when”0000”,”0110011”when”0000”,”1011011”when”0000”,”1011111”when”0000”,”1110000”when”0000”,”1111111”when”0000”,”1111110”when”0000”, ”1111110”when”000
12、0”,”1111011”when”0000”,”0000000”when others;End behave;8位二进制数转换成个位、十位、百位的进程:Ctrview:process(c,clk)Begin If c=1then view1view2viewviewstepktempif ktemp=”11001000”then=ktemp-“11001000;elsif ktemp=”01100100”then=ktemp-“01100100”;elsif view1 viewstep=”01011010”then=ktemp-“01011010”;=”01010000”then view2
13、=ktemp-“01010000”;=”01000110”then=ktemp-“01000110”;=”00111100”then=ktemp-“00111100”;=”00110010”then=ktemp-“00110010”;=”00101000”then=ktemp-“00101000”;=”00011110”then=ktemp-“00011110”;=”00010100”then=ktemp-“00010100”;=”00001010”then=ktemp-“00001010”;elsif view2=oneview3=ktemp(3 downto 0);NULL;end pro
14、cess ctrview;计算器的VHDL语言Entity cal is Port(inclk: num:in std_logic_vector(9 downto 0); plus: in std_logic; subt: mult: mdiv: equal: c: onum1,onum2,onum3:out std_logic_vector(0 to0) );end cal;architecture behave of cal istype state is(takenum,hundred,ten,one);signal viewstep: state;signal ktemp:signal flag:signal fl:signal acc:signalreg:signal keep:signal ans:std_logic_vector(7 downto 0);signal dans:signal numbuff:signal vf:signal strdiv:
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1