Я пытаюсь создать код БЧХ как регистр сдвига, поэтому у меня есть эта схема:Design сдвиговый регистр в VHDL
И я сделал код VHDL в Altera Quartus для создания этого сдвигового регистра с циклами, компиляция работает, но не дает ожидаемого результата во время моделирования в ModelSim (без вывода). У меня могут быть некоторые ошибки в моем коде:
-- Library declaration
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.std_logic_arith.ALL;
USE IEEE.std_logic_unsigned.ALL;
-- Entity declaration
ENTITY bchcode_implementation_top IS
PORT(clk : IN std_logic;
Q : OUT std_logic_vector(7 downto 0));
END bchcode_implementation_top;
-- Architecture declaration
ARCHITECTURE arch_bchcode_implementation_top OF bchcode_implementation_top IS
SIGNAL M: std_logic_vector(7 downto 0) := "10000000";
BEGIN
PROCESS(clk)
VARIABLE W: std_logic;
VARIABLE D: std_logic_vector(7 downto 0) := "00000000";
BEGIN
loop_bchcode: FOR I IN 7 TO 0 LOOP
IF rising_edge(clk) THEN
W := D(0) XOR M(I);
D(7) := W;
D(6) := D(7);
D(5) := D(6);
D(4) := D(5);
D(3) := D(4) XOR W;
D(2) := D(3);
D(1) := D(2) XOR W;
D(0) := D(1) XOR W;
END IF;
Q <= D;
END LOOP loop_bchcode;
END PROCESS;
END arch_bchcode_implementation_top;
Если у кого-то есть идея, пожалуйста. Благодарю вас за ваш ответ.
Переменные присваиваются немедленно. Например, если 'D (6): = D (7)', а затем 'D (5): = D (6)', 'D (5)' будет равно 'D (7)'. Это означает, что значение 'D (6)' было уничтожено, и вы должны изменить порядок присвоений. Поэтому, если вы хотите использовать переменные, порядок назначения должен быть 'D (0)', 'D (1)', ..., 'D (7)'. – Amir
Спасибо за ваш ответ, я изменил для всех D, но у меня все еще нет ожидаемого результата. Если кто-то скажет мне, есть ли другие ошибки в моем коде, пожалуйста, спасибо – Gilstaills