btobcd.vhd

来自「ProtelDXp 实现计算器功能」· VHDL 代码 · 共 219 行

VHD
219
字号
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.STD_LOGIC_ARITH.all;
Entity btobcd is 
Port(							
			   CINA               				: in std_logic_vector(15 downto 0);
               BCD1,BCD2,BCD3,BCD4            : out std_logic_vector(3 downto 0)
     );
End btobcd;
Architecture A of BTOBCD is
Signal A1,A2,A3,A4,BCD,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,B1,B2,B3,B4,B5,B6,B7,B8,B9,B10,B11,C1,C2,C3,C4,C5,C6,C7,C8:INTEGER RANGE -16 TO 100;  
signal  D1,D2,D3,D4,D5,E1,GW,SW,BW,QW,GJ,SJ,BJ,QJ,WW:INTEGER RANGE -16 TO 100;                                                                                                     
Begin
	process(CINA)
begin

	IF CINA(0)='1'THEN
		A1<=1;
    ELSE
		A1<=0;
    END IF;
    IF CINA(1)='1'THEN
		A2<=2;
	ELSE
		A2<=0;
    END IF;
    IF CINA(2)='1'THEN
		A3<=4;
	ELSE
		A3<=0;
    END IF;
    IF CINA(3)='1'THEN
		A4<=8;
	ELSE
		A4<=0;
    END IF;
    IF CINA(4)='1'THEN
		A5<=6;
		B1<=1;
	ELSE
		A5<=0;
		B1<=0;
   END IF;
   IF CINA(5)='1'THEN
		A6<=2;
		B2<=3;
	ELSE
		A6<=0;
		B2<=0;
    END IF;
    IF CINA(6)='1'THEN
		A7<=4;
		B3<=6;
	ELSE
		A7<=0;
		B3<=0;
    END IF;
    IF CINA(7)='1'THEN
		A8<=8;
		B4<=2;
		C1<=1;
	ELSE
		A8<=0;
		B4<=0;
		C1<=0;
    END IF;
    IF CINA(8)='1'THEN
		A9<=6;
		B5<=5;
		C2<=2;
	ELSE
		A9<=0;
		B5<=0;
		C2<=0;
    END IF;
    IF CINA(9)='1'THEN
		A10<=2;
		B6<=1;
		C3<=5;
	ELSE
		A10<=0;
		B6<=0;
		C3<=0;
    END IF;
    IF CINA(10)='1'THEN
		A11<=4;
		B7<=2;
		C4<=0;
		D1<=1;
	ELSE
		A11<=0;
		B7<=0;
		C4<=0;
		D1<=0;
    END IF;
    IF CINA(11)='1'THEN
		A12<=8;
		B8<=4;
		C5<=0;
		D2<=2;
	ELSE
		A12<=0;
		B8<=0;
		C5<=0;
		D2<=0;
   END IF;
   IF CINA(12)='1'THEN
		A13<=6;
		B9<=9;
		C6<=0;
		D3<=4;
   ELSE
		A13<=0;
		B9<=0;
		C6<=0;
		D3<=0;
   END IF;
   IF CINA(13)='1'THEN
		A14<=2;
		B10<=9;
		C7<=1;
		D4<=8;
	ELSE
		A14<=0;
		B10<=0;
		C7<=0;
		D4<=0;
    END IF;
    IF CINA(14)='1'THEN
		A15<=4;
		B11<=9;
		C8<=3;
		D5<=6;
		E1<=1;
	ELSE
		A15<=0;
		B11<=0;
		C8<=0;
		D5<=0;
		E1<=0;
    END IF;		
GW<=A1+A2+A3+A4+A5+A6+A7+A8+A9+A10+A11+A12+A13+A14+A15;
SW<=B1+B2+B3+B4+B5+B6+B7+B8+B9+B10+B11+GJ;
BW<=C1+C2+C3+C4+C5+C6+C7+C8+SJ;
QW<=D1+D2+D3+D4+D5+BJ;
WW<=E1+QJ;
IF GW>=60 THEN
	BCD1<=CONV_STD_LOGIC_VECTOR((GW-60),4);

	GJ<=6;
	ELSE IF GW>=50 THEN
							BCD1<=CONV_STD_LOGIC_VECTOR((GW-50),4);

								GJ<=5;
			ELSE IF GW>=40 THEN
						BCD1<=CONV_STD_LOGIC_VECTOR((GW-40),4);
	
							
							GW<=4;
					ELSE IF GW>=30 THEN
								BCD1<=CONV_STD_LOGIC_VECTOR((GW-30),4);
									GJ<=3;
							ELSE IF GW>=20 THEN
										BCD1<=CONV_STD_LOGIC_VECTOR((GW-20),4);
											GJ<=2;
									ELSE IF GW>=10 THEN
												BCD1<=CONV_STD_LOGIC_VECTOR((GW-10),4);
													GJ<=1;
										ELSE  
											BCD1<=CONV_STD_LOGIC_VECTOR(GW,4);
											GJ<=0;
										END IF;
								END IF;
						END IF;
				END IF;
		END IF;
END IF;
IF SW>=40 THEN
BCD2<=CONV_STD_LOGIC_VECTOR((SW-40),4);

	SJ<=4;
	ELSE IF SW>=30 THEN
							BCD2<=CONV_STD_LOGIC_VECTOR((SW-30),4);
								SJ<=3;
			ELSE IF SW>=20 THEN
								BCD2<=CONV_STD_LOGIC_VECTOR((SW-20),4);
								SW<=2;
					ELSE IF SW>=10 THEN
								BCD2<=CONV_STD_LOGIC_VECTOR((SW-10),4);
									SJ<=1;
							ELSE 
								BCD2<=CONV_STD_LOGIC_VECTOR(SW,4);
								SJ<=0;
								

						END IF;
				END IF;
		END IF;
END IF;
IF BW>=10 THEN
	BCD3<=CONV_STD_LOGIC_VECTOR((BW-10),4);
	BJ<=1;
	ELSE 								
		BCD3<=CONV_STD_LOGIC_VECTOR(BW,4);
		BJ<=0;
END IF;
IF QW>=10 THEN
		BCD4<=CONV_STD_LOGIC_VECTOR((QW-10),4);
		QJ<=1;
ELSE 
	BCD4<=CONV_STD_LOGIC_VECTOR(QW,4);
	QJ<=0;
END IF;
--A<=CONV_STD_LOGIC_VECTOR(WW,4);		
End PROCESS;
END;
	

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?