文档库 最新最全的文档下载
当前位置:文档库 › 二位BCD码加法器的VHDL源程序如下

二位BCD码加法器的VHDL源程序如下

二位BCD码加法器的VHDL源程序如下
二位BCD码加法器的VHDL源程序如下

二位BCD码加法器的VHDL源程序如下:

ibrary ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity bcdadd is ---------------------实体部分

port(key:in std_logic;---------------定义key输入口

a0,a1,b0,b1:in integer range 0 to 9; -----定义两个加数的输入口

a0l,a1l,b0l,b1l,s0l,s1l,s2l:out std_logic_vector(6 downto 0);----定义七个输出数码管s:out std_logic);----定义Key指示灯输出口

end;

architecture one of bcdadd is ----------结构体部分

signal one:integer range 0 to 18; ----定义两个数的个位相加之后的信号

signal ten:integer range 0 to 19; -----定义两个数的十位相加之后的信号

signal co1,co2:integer range 0 to 1; ----定义个位和十位的进位信号

signal s0,s1:integer range 0 to 15;

begin

p1:process(one,ten,a0,b0,a1,b1,co1)----第一个进程,进行加运算

begin

one<=a0+b0; --------------------个位相加之和

if one>9 then--------------------和大于9,进位为1

co1<=1;

s0<=one-10; -----------------------个位的值

else -----------------------和小于9,进位为0

co1<=0;

s0<=one; -------------------------个位的值

end if;

ten<=a1+b1+co1;----------------------十位相加值和,加数包括个位来的进位

if ten>9 then -------------------和大于9,进位为1

co2<=1;

s1<=ten-10;-------------------十位的值

else ----------------------------------和小于9,进位为0

co2<=0;

s1<=ten;-----------------------十位的值

end if;

end process p1;

p2:process(a0,a1,b0,b1) ----------第二个进程,两个加数的输出数码管显示译码

begin

case a0 is ----------------------被加数的个位显示译码

when 0=>a0l<="1000000";

when 1=>a0l<="1111001";

when 2=>a0l<="0100100";

when 3=>a0l<="0110000";

when 4=>a0l<="0011001";

when 5=>a0l<="0010010";

when 6=>a0l<="0000010";

when 7=>a0l<="1111000";

when 8=>a0l<="0000000";

when 9=>a0l<="0010000";

when others=>a0l<="ZZZZZZZ";

end case;

case a1 is ------------------------------被加数的十位显示译码when 0=>a1l<="1000000";

when 1=>a1l<="1111001";

when 2=>a1l<="0100100";

when 3=>a1l<="0110000";

when 4=>a1l<="0011001";

when 5=>a1l<="0010010";

when 6=>a1l<="0000010";

when 7=>a1l<="1111000";

when 8=>a1l<="0000000";

when 9=>a1l<="0010000";

when others=>a1l<="ZZZZZZZ";

end case;

case b0 is-----------------------------加数的个位显示译码when 0=>b0l<="1000000";

when 1=>b0l<="1111001";

when 2=>b0l<="0100100";

when 3=>b0l<="0110000";

when 4=>b0l<="0011001";

when 5=>b0l<="0010010";

when 6=>b0l<="0000010";

when 7=>b0l<="1111000";

when 8=>b0l<="0000000";

when 9=>b0l<="0010000";

when others=>b0l<="ZZZZZZZ";

end case;

case b1 is ----------------------------加数的十位显示译码when 0=>b1l<="1000000";

when 1=>b1l<="1111001";

when 2=>b1l<="0100100";

when 3=>b1l<="0110000";

when 4=>b1l<="0011001";

when 5=>b1l<="0010010";

when 6=>b1l<="0000010";

when 7=>b1l<="1111000";

when 8=>b1l<="0000000";

when 9=>b1l<="0010000";

when others=>b1l<="ZZZZZZZ";

en d case;

end process p2;

p3:process(key,s0,s1,co2,a0,a1,b0,b1) --------第三个进程,和的显示译码以及输入大于9是的出

begin

if key='0' or a0>9 or b0>9 or a1>9 or b1>9 then --当key等于0或者两个输入中的任何

一个位大于9,和的数码显示均为“Z”状态s0l<="ZZZZZZZ";

s1l<="ZZZZZZZ";

s2l<="ZZZZZZZ";

else

case s0 is-------------------------------和的个位显示译码

when 0=>s0l<="1000000";

when 1=>s0l<="1111001";

when 2=>s0l<="0100100";

when 3=>s0l<="0110000";

when 4=>s0l<="0011001";

when 5=>s0l<="0010010";

when 6=>s0l<="0000010";

when 7=>s0l<="1111000";

when 8=>s0l<="0000000";

when 9=>s0l<="0010000";

when others=>s0l<="ZZZZZZZ";

end case;

case s1 is--------------------------------和的十位显示译码

when 0=>s1l<="1000000";

when 1=>s1l<="1111001";

when 2=>s1l<="0100100";

when 3=>s1l<="0110000";

when 4=>s1l<="0011001";

when 5=>s1l<="0010010";

when 6=>s1l<="0000010";

when 7=>s1l<="1111000";

when 8=>s1l<="0000000";

when 9=>s1l<="0010000";

when others=>s1l<="ZZZZZZZ";

end case;

case co2 is --------------------------和的百位显示译码

when 0=>s2l<="1000000";

when 1=>s2l<="1111001";

end case;

end if;

end process p3;

p4:process(key) -------------第四个进程,设置key的指示灯begin

i f key='1' then

s<='1' ;

else s<='0';

end if;

end process p4;

end;

相关文档