• 有关conv_std_logic_vector和conv_integer


    std_logic_arith
    This is the library that defines some types and basic arithmetic operations for representing integers in standard ways. This is a Synopsys extention. The source code is instd_logic_arith.vhd and is freely redistributable.

    The unsigned type
    The signed type
    The arithmetic functions: +, -, *
    The comparison functions: <, <=, >, >=, =, /=
    The shift functions: shl, shr
    The conv_integer function
    The conv_unsigned function
    The conv_signed function
    The conv_std_logic_vector function

    -------------------------------------------------------------------------------------------------------------------------------

    The conv_integer function
    function conv_integer(arg: integer) return integer;
    function conv_integer(arg: unsigned) return integer;
    function conv_integer(arg: signed) return integer;
    function conv_integer(arg: std_ulogic) return small_int;
    These functions convert the arg argument to an integer. If the argument contains any undefined elements, a runtime warning is produced and 0 is returned.

    The function provided by the std_logic_arith library can't convert a std_logic_vector to an integer because it is impossible to determine if it represents an unsigned or signed value.Functions that do this are included in the std_logic_unsigned and std_logic_signed libraries.

    Examples
    signal b : std_logic;
    signal u1 : unsigned (3 downto 0);
    signal s1 : signed (3 downto 0);
    signal i1, i2, i3 : integer;
    ...
    u1 <= "1001";
    s1 <= "1001";
    b <= 'X';
    wait for 10 ns;
    i1 <= conv_integer(u1); --     9
    i2 <= conv_integer(s1); --     -7
    i3 <= conv_integer(b);   -- warning produced in simulator

    以上蓝字说明了一切

    1.前一个包含在std_logic_arith.all程序包中

    2.后一个在std_logic_unsigned 和std_logic_signed 中都有包含

      计算机中的运算都是用2进制补码的,本人总结,在做算法时候,包含std_logic_signed 这个包比较好,这样conv_integer 就把需要转换的数据变成了带符号的整数,然而std_logic_unsigned就把需要转换的数据变成了无符号的整数。

    3. conv_std_logic_vector 函数的转换结果是将被转换的数据先转换成2进制补码形式,然后取其低“位长”,作为输出。

      如:a<=conv_std_logic_vector(-79,6)----(-79)2c=(10110001)

      b<=conv_std_logic_vector(-2,6)-----(-2)2c=(11111110)

      c<=conv_std_logic_vector(100,6)-----(100)2c=(01100100)

      输出结果:a=110001,b=111110,c=100100

    4.本人做了这样的转换conv_std_logic_vector (conv_integer (data),16),data是16范围内的有符号数,但是接口是32位的标准矢量形式(std_logic_vector(31 downto 0)刚开始包括的是std_logic_unsigned 包,发现数据变得面目全非了,想来想去,认为conv_integer (data)的原因,就该了下包,结果就正确了。

  • 相关阅读:
    实现对象属性的lazy-loading(延迟加载)
    Scikit-Learn机器学习入门
    实现后门程序以及相应的rootkits,实现对后门程序的隐藏
    关于iptables命令
    基于netfilter和LVM的密码窃取
    实验一:网络嗅探器
    实验二:ICMP重定向攻击
    第八节课、第九节
    第六、七课
    python读取excel文件
  • 原文地址:https://www.cnblogs.com/dlx1996/p/5826384.html
Copyright © 2020-2023  润新知