dak 0 February 10, 2016 Posted February 10, 2016 · Report post Здравствуйте. Думаю, все знают, что такое "исключающее или" (оно же "сложение по модулю 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? Quote Share this post Link to post Share on other sites More sharing options...
Maverick_ 17 February 10, 2016 Posted February 10, 2016 · Report post Здравствуйте. Думаю, все знают, что такое "исключающее или" (оно же "сложение по модулю 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; Quote Share this post Link to post Share on other sites More sharing options...
dak 0 February 10, 2016 Posted February 10, 2016 · Report post пример 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 . Quote Share this post Link to post Share on other sites More sharing options...
Maverick_ 17 February 10, 2016 Posted February 10, 2016 · Report post Спасибо. Но это немного не то,о чем я спрашивал. У Вас здесь один 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 почитайте например Бибило и/или другую базовую литературу... Quote Share this post Link to post Share on other sites More sharing options...
andrew_b 23 February 11, 2016 Posted February 11, 2016 · Report post А я спрашивал, что если у нас 2 std_logic_vector'a .Читайте код библиотек. Благо он открыт. Quote Share this post Link to post Share on other sites More sharing options...
Maverick_ 17 February 11, 2016 Posted February 11, 2016 · Report post насчет базовой/начальной литературы рекомендую Hdl Chip Design: A Practical Guide for Designing, Synthesizing & Simulating Asics & Fpgas Using Vhdl or Verilog by Douglas J. Smith и/или Поляков А.К. Языки VHDL и Verilog в проектировании цифровой аппаратуры подборка Quote Share this post Link to post Share on other sites More sharing options...
ConstHw 0 February 15, 2016 Posted February 15, 2016 · Report post Подключайте 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; Quote Share this post Link to post Share on other sites More sharing options...
andrew_b 23 February 15, 2016 Posted February 15, 2016 · Report post Подключайте std_logic_misc http://eda.org/rassp/vhdl/models/standards..._logic_misc.vhd Это неправильный совет. Правильный совет: используйте reduce_pack: http://www.vhdl.org/vhdlsynth/vhdl/reduce_pack.vhd Quote Share this post Link to post Share on other sites More sharing options...
ConstHw 0 February 17, 2016 Posted February 17, 2016 · Report post Могли бы вы пояснить что в нем неправильного, если ISE, Vivado, Aldec и Modelsim уже имеют этот пак? Quote Share this post Link to post Share on other sites More sharing options...