#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 не оцениваются (считываются) в этом процессе. У вас нет времени моделирования, которое обычно исключает отображение формы сигнала. Как вы получаете результаты моделирования?