Jump to content
    

VHDL xor применительно к std_logic_vector

Здравствуйте.

 

Думаю, все знают, что такое "исключающее или" (оно же "сложение по модулю 2", оно же xor).

 

Применительно к языку VHDL понятно,что произойдет,если мы a и b (оба объявлены как std_logic) сложим по модулю 2: c <= a xor b.

 

Но если складывать по модулю 2 не 1 бит с другим, а вектора битов (то есть, сигналы std_logic_vector)? Тогда, если вектора одинаковой длины, то xor будет применена побитово?

 

Например:

 

а := 0000;

b := 0001;

 

c <= a xor b;

 

c == 0001?

Share this post


Link to post
Share on other sites

Здравствуйте.

 

Думаю, все знают, что такое "исключающее или" (оно же "сложение по модулю 2", оно же xor).

 

Применительно к языку VHDL понятно,что произойдет,если мы a и b (оба объявлены как std_logic) сложим по модулю 2: c <= a xor b.

 

Но если складывать по модулю 2 не 1 бит с другим, а вектора битов (то есть, сигналы std_logic_vector)? Тогда, если вектора одинаковой длины, то xor будет применена побитово?

 

Например:

 

а := 0000;

b := 0001;

 

c <= a xor b;

 

c == 0001?

примеры для and - xor по аналогии...

 

entity unary_AND IS
    generic (N: positive := 8); --array size
    port (
        inp: in bit_vector(N-1 downto 0);
        outp: out bit);
end entity;
-------------------------------------------
architecture unary_AND of unary_AND is
    signal temp: bit_vector(N-1 downto 0);
begin
    temp(0) <= inp(0);
    gen: for i in 1 to N-1 generate
        temp(i) <= temp(i-1) and inp(i);
    end generate; 
    outp <= temp(N-1); 
end architecture;

 

лучше такие операции оформить в виде функций

 

function and_reduct(slv : in std_logic_vector) return std_logic is
  variable res_v : std_logic := '1';  -- Null slv vector will also return '1'
begin
  for i in slv'range loop
    res_v := res_v and slv(i);
  end loop;
  return res_v;
end function;function and_reduct(slv : in std_logic_vector) return std_logic is
  variable res_v : std_logic := '1';  -- Null slv vector will also return '1'
begin
  for i in slv'range loop
    res_v := res_v and slv(i);
  end loop;
  return res_v;
end function;

Share this post


Link to post
Share on other sites

пример

function and_reduct(slv : in std_logic_vector) return std_logic is
  variable res_v : std_logic := '1';  -- Null slv vector will also return '1'
begin
  for i in slv'range loop
    res_v := res_v and slv(i);
  end loop;
  return res_v;
end function;

операцию and замените на xor

Спасибо.

 

Но это немного не то,о чем я спрашивал. У Вас здесь один std_logic и один std_logic_vector. А я спрашивал, что если у нас 2 std_logic_vector'a .

Share this post


Link to post
Share on other sites

Спасибо.

 

Но это немного не то,о чем я спрашивал. У Вас здесь один std_logic и один std_logic_vector. А я спрашивал, что если у нас 2 std_logic_vector'a .

напишите

 

signal c, s1, s2 : std_logic_vector(3 downto 0);

c <= s1 xor s2;

 

и промоделируйте или посмотрите схему в RTL Viewer

 

upd

схема в RTL Viewer во вложении для

 

outp : out std_logic_vector(4 downto 0);

а, b : in std_logic_vector(4 downto 0);

 

outp <= a xor b;

 

PS почитайте например Бибило и/или другую базовую литературу...

post-24839-1455136834_thumb.jpg

Share this post


Link to post
Share on other sites

насчет базовой/начальной литературы рекомендую

Hdl Chip Design: A Practical Guide for Designing, Synthesizing & Simulating Asics & Fpgas Using Vhdl or Verilog

by Douglas J. Smith

и/или

Поляков А.К. Языки VHDL и Verilog в проектировании цифровой аппаратуры

 

подборка

Share this post


Link to post
Share on other sites

Подключайте std_logic_misc

 

http://eda.org/rassp/vhdl/models/standards..._logic_misc.vhd

        function AND_REDUCE(ARG: STD_LOGIC_VECTOR) return UX01;
        function NAND_REDUCE(ARG: STD_LOGIC_VECTOR) return UX01;
        function OR_REDUCE(ARG: STD_LOGIC_VECTOR) return UX01;
        function NOR_REDUCE(ARG: STD_LOGIC_VECTOR) return UX01;
        function XOR_REDUCE(ARG: STD_LOGIC_VECTOR) return UX01;
        function XNOR_REDUCE(ARG: STD_LOGIC_VECTOR) return UX01;

Share this post


Link to post
Share on other sites

Подключайте std_logic_misc

 

http://eda.org/rassp/vhdl/models/standards..._logic_misc.vhd

Это неправильный совет.

Правильный совет: используйте reduce_pack: http://www.vhdl.org/vhdlsynth/vhdl/reduce_pack.vhd

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...