VHDL:十进制整数的第n位

时间:2013-05-26 17:14:44

标签: vhdl

我有一个整数信号(范围0到9999)。我试图在一组7段显示器上显示它。我已经实现了多路复用器(一次显示一位数)。现在我需要将整数分成单个数字。

理论上它非常简单:只需使用mod(ex NUM / 100 mod 10给出第二位数字)。问题是,当我使用mod(使用4次)编译解决方案时,我的代码使用超过9000个单元格仅用于mod。这太多了(但有效)。

然后我尝试转换为较小的整数,但它不起作用。整数范围0到9使用4位,所以它实际上是0到15的范围。

我确信在明显的解决方案上有更简单但我无法找到它。请注意我是初学者:)。

编辑:代码:

此部分设置适当的输出以显示给定数字

process (clk)
begin
    if rising_edge(clk) then
        case number1 is
            -- od prawej: a b c d e f g
            when 0 => segment <="1000000";  -- '0'
            when 1 => segment <="1111001";  -- '1'
            when 2 => segment <="0100100";  -- '2'
            when 3 => segment <="0110000";  -- '3'
            when 4 => segment <="0011001";  -- '4'
            when 5 => segment <="0010010";  -- '5'
            when 6 => segment <="0000010";  -- '6'
            when 7 => segment <="1111000";  -- '7'
            when 8 => segment <="0000000";  -- '8'
            when 9 => segment <="0010000";  -- '9'
            when others=> segment <="1111111";  
        end case;
    end if;
end process;

此部分选择显示(4个中的1个)并设置数字值

process (clk)
begin
    if rising_edge(clk) then
        case number1 is
            -- od prawej: a b c d e f g
            when 0 => segment <="1000000";  -- '0'
            when 1 => segment <="1111001";  -- '1'
            when 2 => segment <="0100100";  -- '2'
            when 3 => segment <="0110000";  -- '3'
            when 4 => segment <="0011001";  -- '4'
            when 5 => segment <="0010010";  -- '5'
            when 6 => segment <="0000010";  -- '6'
            when 7 => segment <="1111000";  -- '7'
            when 8 => segment <="0000000";  -- '8'
            when 9 => segment <="0010000";  -- '9'
            when others=> segment <="1111111";  
        end case;
    end if;
end process;

1 个答案:

答案 0 :(得分:0)

通常,当一个数字需要以十进制形式表示时,该数字的选择编码是二进制编码十进制(BCD),其中基数为10的数字的每个数字都使用4位二进制编码。 / p>

当然这意味着您将无法将整个数字视为一个二进制整数,因为每个4位数字的有效范围仅为0-9(A-F是非法的)。因此,十进制值12将被编码为“0001 0010”。

不是简单地添加两个VHDL无符号值(或std_logic_vectors),而是对数字进行的任何操作(通常是加法和减法)都必须使用为BCD定制的逻辑。有大量的在线资源可用示例(例如,搜索BCD加法器),所以我不会在这里详细介绍。