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

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值