VHDL语言实现32位二进制数转BCD码

使用FPGA开发板上的数码管显示数值,需要将数值转换成对应的BCD码,再通过七段译码器将数值显示在数码管上。我用除十取余的方法,用VHDL写了32位二进制数转BCD码代码。

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;

ENTITY BIN32_TO_BCD1 IS
	PORT(
		BIN: IN STD_LOGIC_VECTOR(31 DOWNTO 0);
		BCD: OUT STD_LOGIC_VECTOR(39 DOWNTO 0)
	);
END ENTITY BIN32_TO_BCD1;

ARCHITECTURE RTL OF BIN32_TO_BCD1 IS
BEGIN
	PROCESS(BIN)
		VARIABLE TEMP: INTEGER;
		VARIABLE BIN_TEMP: INTEGER;
		VARIABLE BCD_TEMP: STD_LOGIC_VECTOR(39 DOWNTO 0);
	BEGIN
	        BCD_TEMP:=X"0000000000";
	        BIN_TEMP:=CONV_INTEGER(BIN);
		FOR K IN 0 TO 9 LOOP
			TEMP:=BIN_TEMP REM 10;
			BCD_TEMP(3+4*K DOWNTO K*4):=CONV_STD_LOGIC_VECTOR(TEMP,4);
			BIN_TEMP:=(BIN_TEMP-TEMP)/10;
			IF BIN_TEMP=0 THEN
				EXIT;
			END IF;
		END LOOP;
		BCD<=BCD_TEMP;
	END PROCESS;
END RTL;

本来想用左移加3的算法,但没有成功。上面这个除十取余的方法是将STD_LOGIC_VECTOR转换成INTEGER,然后除十取余提出逐个十进制位。限于VHDL的INTEGER为有符号整型,以上代码其实只能实现31位无符号二进制转BCD码。

发布了8 篇原创文章 · 获赞 18 · 访问量 5232

猜你喜欢

转载自blog.csdn.net/QDchenxr/article/details/91348999
今日推荐