【问题标题】:VHDL : how to transform a Binary number into a decimal numberVHDL:如何将二进制数转换为十进制数
【发布时间】:2018-02-24 18:18:36
【问题描述】:

我正在通过一个项目学习 VHDL,我想将二进制数转换为十进制数(也以二进制表示)。我需要这样做,因为我以十进制打印数字,如果我尝试在不转换的情况下打印它,我会获得一个十六进制数字......

例如 我有 0010 1010 1111 0001 (2AF1) 我想要 0001 0000 1001 1001 0011 (10993)

我必须确定我的二进制数是 32 位的

这一定很简单,因为我在网上找不到解决方案...

编辑:此代码正在工作并将二进制数转换为以二进制表示的十进制数 (d'10 = b'0001 0000)

    signal val0 : std_logic_vector(31 downto 0);
    signal val1 : std_logic_vector(31 downto 0);
    signal val2 : std_logic_vector(31 downto 0);
    signal val_Mux : std_logic_vector(31 downto 0);

            val_MUX <= std_logic_vector(unsigned(val0)+1) when cpt50M_Comp = '1' else val0;


    val1(3 downto 0)<= val_MUX(3 downto 0);
    loopA:
        for i in 0 to 6 generate
            val1(4*i+7 downto 4*i+4) <= std_logic_vector(unsigned(val_MUX(4*i+7 downto 4*i+4))+1) when val1(4*i+3 downto 4*i) > "1001" 
                    else val_MUX(4*i+7 downto 4*i+4);
            val2(4*i+3 downto 4*i) <= "0000" when val1(4*i+3 downto 4*i) > "1001" 
                    else val1(4*i+3 downto 4*i); 

    end generate loopA;
    val2(31 downto 28)<= val1(31 downto 28);


    val0 <= (others => '0') when reset='1' else 
        val2 when rising_edge(clk50);

【问题讨论】:

  • 让我们看看你的打印代码2AF1
  • 我必须精确这部分代码是我们教授给出的
  • 这是合成还是仿真?在模拟中,我会使用 natural'image(my_natural) 并打印产生的字符串。或者natural'image(to_integer(unsigned(my_std_logic_vector)),如果你喜欢选择最糟糕的类型声明,那么你可以使用更多的类型转换。
  • 合成用
  • 你在接近你的标题时实际上并没有问问题。您的代码看起来不相关,也没有表现出努力。二进制到 ASCII 可以使用二进制到 BCD 转换(例如双打)来完成有符号幅度二进制值,按顺序获取每个 BCD 数字并添加 x"30。二进制补码负数希望首先转换为有符号幅度,任何符号前置。删除前导零可能很有用。除了二进制大小之外,您还不够具体。

标签: vhdl


【解决方案1】:

解决方案是在分配一个显示器之前通过其他 2 个信号,并将计数器分配给一个显示器,如下所示:

signal val0 : std_logic_vector(31 downto 0);
signal val1 : std_logic_vector(31 downto 0);
signal val2 : std_logic_vector(31 downto 0);
signal val_Mux : std_logic_vector(31 downto 0);

        val_MUX <= std_logic_vector(unsigned(val0)+1) when cpt50M_Comp = '1' else val0;


val1(3 downto 0)<= val_MUX(3 downto 0);
loopA:
    for i in 0 to 6 generate
        val1(4*i+7 downto 4*i+4) <= std_logic_vector(unsigned(val_MUX(4*i+7 downto 4*i+4))+1) when val1(4*i+3 downto 4*i) > "1001" 
                else val_MUX(4*i+7 downto 4*i+4);
        val2(4*i+3 downto 4*i) <= "0000" when val1(4*i+3 downto 4*i) > "1001" 
                else val1(4*i+3 downto 4*i); 

end generate loopA;
val2(31 downto 28)<= val1(31 downto 28);


val0 <= (others => '0') when reset='1' else 
    val2 when rising_edge(clk50);

【讨论】:

    猜你喜欢
    • 2011-01-08
    • 2010-12-08
    • 2017-02-18
    • 2016-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多