VDHL sfixed decoding code does not work properly

后端 未结 2 1986
情书的邮戳
情书的邮戳 2021-01-26 10:58

I am using David bishop\'s fixed point library to do some math in vhdl. and i need to decode the final value into integers. the method i have followed as below,

2条回答
  •  执笔经年
    2021-01-26 11:54

    Your divisions should be integer divisions; they are not (fixed point divisions). And I do not even imagine what the modulus operator is supposed to return when applied to non integer (fixed point) arguments. Anyway, this fixed point representation is quite simple, so, if you just want the digits of the integer part of a positive fixed point number, you could first convert it to natural, and then compute the digits:

    library ieee;
    use ieee.numeric_std.all;
    use ieee.std_logic_1164.all;
    ...
    variable n: natural;
    subtype digit is natural range 0 to 9;
    type digit_vector is array(natural range <>) of digits;
    variable digits: digit_vector(5 downto 0);
    ...
    n := to_integer(u_unsigned(cp(20 downto 0)));
    for i in 0 to 5 loop
      digits(i) := n mod 10;
      n := n / 10;
    end loop;
    

    Or, if you simply want to print the decimal representation of cp:

    use std.textio.all;
    ...
    variable l: line;
    ...
    write(l, to_integer(u_unsigned(cp(20 downto 0)));
    writeline(output, n);
    

    Or, even simpler, use the write procedure from the library itself:

    variable tmp: sfixed(20 downto 0);
    ...
    tmp := cp(20 downto 0);
    write(l, tmp);
    writeline(output, l);
    

提交回复
热议问题