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碼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章