ВЫВОД UUUUUU, и я ожидаю обычного 128-битного числа в шестнадцатеричном формате. Что я делаю не так?

#vhdl #xor #xilinx #vivado

#vhdl #xor #xilinx #вивадо

Вопрос:

Итак, я в своем уме, и я перепробовал все, чтобы понять, почему этот вывод не будет обработан должным образом. Я чувствую, что решение может быть чем-то простым, но я не понимаю, почему. Результат вывода составляет 128 бит «UUU..UUU», если я попытаюсь выполнить XOR сигнала txt_sig и KEY1, но обычно выводится, когда я выполняю XOR сигнала TXT и KEY2.

Я использовал точки останова, и txt_sig получает значение, поэтому я не понимаю, почему следующая строка txt_sig XOR KEY2 не работает. есть ли что-то неправильное в том, как сигнал xor связан с key2?

Пожалуйста, помогите!

 library IEEE; use IEEE.STD_LOGIC_1164.ALL;  entity encryptoor is  Port ( TXT : in STD_LOGIC_VECTOR (127 downto 0);  KEY1 : in STD_LOGIC_VECTOR (127 downto 0);  KEY2 : in STD_LOGIC_VECTOR (127 downto 0);  OUTPUT : out STD_LOGIC_VECTOR (127 downto 0)); end encryptoor;  architecture Behavioral of encryptoor is  type block16 is array(0 to 15) of STD_LOGIC_VECTOR (7 downto 0); signal txt_sig: STD_LOGIC_VECTOR (127 downto 0); signal input_matrix, input_matrix2: block16; signal k: integer;  begin  encrypt: process (TXT, KEY1, KEY2, txt_sig, input_matrix, input_matrix2, k) begin  --addition-modular arithmetic  txt_sig lt;= TXT XOR KEY1; -- this line now gives uninitialized too  -- arrange 128bits in 4*4 matrix of bytes   for n in 15 downto 0 loop  input_matrix(15-n) lt;= txt_sig(8*n 7 downto 8*n); -- this line gives UUUUU  end loop;  --OUTPUT lt;= TXT XOR KEY2;   OUTPUT lt;= (txt_sig XOR KEY2);  end process; end Behavioral;  

Это код тестовой среды

 entity encryptoor_tb is -- Port ( ); end encryptoor_tb;  architecture Behavioral of encryptoor_tb is  component encryptoor is  Port ( TXT : in STD_LOGIC_VECTOR (127 downto 0);  KEY1 : in STD_LOGIC_VECTOR (127 downto 0);  KEY2 : in STD_LOGIC_VECTOR (127 downto 0);  OUTPUT : out STD_LOGIC_VECTOR (127 downto 0)); end component; signal key1: STD_LOGIC_VECTOR (127 downto 0) := x"6ed92c01d932e11b00b4e23cb10cf40e"; signal key2: STD_LOGIC_VECTOR (127 downto 0) := x"a80920f1790de01a39a466050c55d002"; signal txt: STD_LOGIC_VECTOR (127 downto 0) := x"5d0c1be5c5075b15c341c3a82c094b3c"; signal output: STD_LOGIC_VECTOR (127 downto 0);   begin wiring: encryptoor port map(TXT =gt; txt, KEY1 =gt; key1, KEY2 =gt; key2, OUTPUT =gt; output); end Behavioral;  

Комментарии:

1. Сигналы обновляются в начале цикла моделирования. Процессы возобновляются и впоследствии приостанавливаются после любых обновлений сигнала. Процессы приостанавливаются в операторах ожидания (процесс со списком чувствительности имеет неявный оператор ожидания в качестве последнего оператора.) Между назначением txt_sig и назначением вывода нет операторов ожидания. Выражение в правой части выходного задания будет видеть txt_sig как все «U». Поместите два назначения в отдельные процессы (например, в виде операторов параллельного назначения сигналов, которые представляют процессы).

2. Добавьте txt_sig в список чувствительности процесса.

3. Итак, я обновил код и добавил свои сигналы в список чувствительности процесса. Я пытаюсь сделать больше, даже несмотря на то, что добавление txt_sig в список чувствительности процесса помогло решить базовую проблему, теперь это не так. Таким образом, в обновленном коде input_matrix также не говорит UUUUU.

4. input_matrix, input_matrix2, k не оцениваются (считываются) в этом процессе. У вас нет времени моделирования, которое обычно исключает отображение формы сигнала. Как вы получаете результаты моделирования?