Что такое отрицание (не) битового вектора в VHDL - PullRequest
5 голосов
/ 03 февраля 2011

Что значит сделать отрицание битового вектора в VHDL? Например, если у меня есть 10100111, который является битовым вектором с именем temp, и я делаю что-то вроде temp: = not temp, каким будет мой вывод?

Ответы [ 3 ]

8 голосов
/ 03 февраля 2011

Побитовая инверсия.

Обычно в VHDL (LRM 7.2.1): «Для унарной операции not, определенной для одномерных типов массивов, операция выполняется для каждого элементаоперанд, и результатом является массив с тем же индексным диапазоном, что и у операнда. "

3 голосов
/ 03 февраля 2011

Вы можете использовать «не» на векторах.Просто запустите программу ниже с 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;
1 голос
/ 03 февраля 2011

Если вы действительно хотите отменить вектор, вам нужно использовать вектор, для которого определены определенные свойства. В частности:

  • некоторое представление о числовом значении (поэтому вы не можете использовать bit_vector или std_logic_vector, которые являются просто наборами битов)
  • некоторое понятие "знак"

Из пакета ieee.numeric_std вы должны использовать для этого тип signed:

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