Нарезать STD_LOGIC_VECTOR и собрать обратно? - PullRequest
0 голосов
/ 05 ноября 2018

Я разделил 16-битный STD_LOGIC_VECTOR на 3 части. Я хочу оставить первые 8 старших разрядов нетронутыми и разбить 8 младших разрядов на две части, чтобы немного поработать над ними. Я могу сделать все это, и обработка все в порядке, но когда я пытаюсь собрать их все вместе в 16-битный вывод STD_LOGIC_VECTOR, он просто остается UUUU. Есть ли какой-то особый путь, чтобы собрать его обратно?

    signal fullout : std_logic_vector(15 downto 0);
    signal Sbox1 : integer;
    signal Sbox2 : integer;
    signal tophalf : std_logic_vector(7 downto 0);
    signal secondnibble, firstnibble : std_logic_vector(3 downto 0); --break the LSH into 2 nibbles

  begin
   tophalf(7 downto 0) <= LUTin(15 downto 8);
   secondnibble(3 downto 0) <= LUTin(7 downto 4);
   -- Sbox1 <= to_integer(unsigned(secondnibble));
   firstnibble(3 downto 0) <= LUTin(3 downto 0);
   -- Sbox2 <= to_integer(unsigned(firstnibble));

  p1: process(LUTin)
  begin
  fullout(15 downto 8) <= tophalf(7 downto 0);
  fullout(7 downto 4) <= secondnibble(3 downto 0);
  fullout(3 downto 0) <= firstnibble(3 downto 0);

1 Ответ

0 голосов
/ 07 ноября 2018

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

architecture xyz of zyx is
    signal fullout : std_logic_vector(15 downto 0) := (others =>'0');
    signal tophalf : std_logic_vector(7 downto 0):= (others =>'0');
    signal secondnibble, firstnibble : std_logic_vector(3 downto 0):= (others =>'0');
    .....
    begin
    ....
    end xyz;
...