什么是VHDL中的位向量的否定(非)

时间:2011-02-03 03:22:46

标签: vector vhdl bit

在VHDL中对位向量进行否定是什么意思?例如,如果我有10100111这是一个名为temp的位向量,我会做一些像temp:= not temp我的输出是什么?

3 个答案:

答案 0 :(得分:8)

逐位反转。

通常在VHDL(LRM 7.2.1)中:“对于在一维数组类型上定义的一元运算not,对操作数的每个元素执行操作,结果是一个数组与操作数相同的索引范围。“

答案 1 :(得分:3)

你可以在矢量上使用“not”。只需使用ModelSim或ISim运行下面的程序,并在控制台中打印反转/反转位向量。

LIBRARY ieee;
USE ieee.numeric_bit.ALL;

entity test is
end entity test;

architecture beh of test is

    function vec_image(arg : bit_vector) return string is
        -- original author Mike Treseler (http://mysite.ncnetwork.net/reszotzl/)
        -- recursive function call turns ('1','0','1') into "101"
        -------------------------------------------------------------------------------
        constant arg_norm        : bit_vector(1 to arg'length) := arg;
        constant center          : natural := 2;     --  123
        variable bit_image       : string(1 to 3);   --  '0'
        variable just_the_number : character;
    begin
        if (arg'length > 0) then
            bit_image       := bit'image(arg_norm(1));   -- 3 chars: '0'
            just_the_number := bit_image(center);              -- 1 char    0
            return just_the_number                          -- first digit
            & vec_image(arg_norm(2 to arg_norm'length)); -- rest the same way
            else
            return ""; -- until "the rest" is nothing
        end if;
    end function vec_image;
begin

    demo:process is
        variable bitvec : bit_vector (7 downto 0) := "10100111";
    begin
        report vec_image(bitvec);
        report vec_image(not bitvec); -- not bit vector
        wait;
    end process demo;

end architecture beh;

答案 2 :(得分:1)

如果你真的想要否定一个向量,你需要使用一个为它定义了某些属性的向量。具体做法是:

  • 一些数值概念(所以你不能使用bit_vectorstd_logic_vector,它们只是位的集合)
  • “签名”的一些概念

ieee.numeric_std包中,您应该使用signed类型:

use ieee.numeric_std.all;
...
variable a,b:signed(8 downto 0);
...
a := "000000001";
b := -a;