G
Guest
Guest
Я написал 4-битный ALU с CCR в VHDL, но когда я пытаюсь получить сводный отчет в Xilinx ISE 9.2i я получаю эту ошибку:
строка 39: Signal C не могут быть синтезированы, плохая синхронное описание.
Строка 39: "Процесс (S, CLK) ЕСТЬ"
Код:
библиотека IEEE;
Использование IEEE.STD_LOGIC_1164.ALL;
Использование IEEE.STD_LOGIC_ARITH.ALL;
Использование IEEE.STD_LOGIC_UNSIGNED.ALL;организация является ALU4bit
Порт (X: в STD_LOGIC_VECTOR (3 downto 0);
Y: в STD_LOGIC_VECTOR (3 downto 0);
S: В STD_LOGIC_VECTOR (3 downto 0);
CLK: в STD_LOGIC;
V, N, Z, C: из STD_LOGIC;
F: из STD_LOGIC_VECTOR (3 downto 0));
- SEV_SEG: из STD_LOGIC_VECTOR (7 downto 1));
конец ALU4bit;Поведенческая в архитектуре является ALU4bitначинатьПРОЦЕСС (S, CLK) IS
VARIABLE Temp, нести: STD_LOGIC_VECTOR (4 DOWNTO 0) - дополнительный бит для суда в арифметических операций
VARIABLE A: STD_LOGIC_VECTOR (3 DOWNTO 0): = X;
VARIABLE B: STD_LOGIC_VECTOR (3 DOWNTO 0): = Y;
VARIABLE к югу: STD_LOGIC: ='0 ';
BEGIN- Инициализация переменных и выходы
C <='0 ';
V <='0 ';
N <='0 ';
Z <='0 ';
к югу: ='0 ';
перевозки (4 downto 0): = "XXXXX";IF (CLK ='1 'И CLK'event) THENCASE S IS- Арифметические операции: S (3) = 0Если "0000" =>
Temp: = ('0 'И А); - передачу х до температуры
Если "0001" =>
Temp: = ('0 'И А) 1; - приращение х 1
Если "0010" =>
Temp: = ('0 'И A) B; - добавляет г-Х
Если "0011" =>
Temp: = ('0 'И A) B 1; - добавляет г и Cin-Х
Если "0100" =>
B: = НЕ B;
Temp: = ('0 'И A) B; - вычитание Y из X (одна в дополнять вычитание)
к югу: ='1 ';
Если "0101" =>
B: = НЕ B;
Temp: = ('0 'И A) B 1; - вычитание Y из X и прирост (в два дополнения вычитание)
к югу: ='1 ';
Если "0110" =>
Temp: = ('0 'И А) - 1; - декремента X
к югу: ='1 ';
Если "0111" =>
Temp: = ('0 'И B) - для передачи и температура- Логические операции: S (3) = 1Если "1000" =>
Temp: = NOT ('0 'И B) - инвертирование Y
Если "1001" =>
Temp: = ('0 'И (A NAND B)); - логическое NAND Х и Y.
Если "1010" =>
Temp: = ('0 'И (A NOR B)); - логическое ни X и Y.
Если "1011" =>
Temp: = ('0 'И (A XNOR B)); - логическое xnor Х и Y.
Если "1100" =>
Temp: = ('0 'И (A XOR B)); - логическое XOR Х и Y.
Если "1101" =>
Temp: = ('0 'И (А или В)); - логическое или X и Y.
Если "1110" =>
Temp: = ('0 'И (A И B)); - логичный и Х и Y.
Когда другие =>
Temp: = NOT ('0 'И A) - инвертирование X
END CASE;- Вывод заданияЕсли S (3) ='0 ', затем - только рассмотреть CCR в арифметических режиме- Определить негативные бит, N
ЕСЛИ Temp (3) ='1 'THEN
N <='1 ';
END IF;- Определить переполнения бит, V
перевозки (0): ='0 ';
Для K 1 по 4 петли
нести (K): = (A (K-1) и B (K-1)) или (перенос (K-1) и (A (K-1) XOR B (K-1)));
конец петли;IF (перевозки (4) XOR перевозки (3)) ='1 'THEN
V <='1 ';
END IF;- Установить нулевой бит, Z
ЕСЛИ Temp (3 downto 0) = "0000", а затем
Z <='1 ';
END IF;- Определить нести бит, C
IF ((суб ='1 'И Y> X) или (суб ='0' И Temp (4) ='1 ')) THEN
C <='1 ';
END IF;END IF;- Определить вывод, FF <= Temp (3 downto 0);ELSE - Когда CLK низок, дают вывод мусора
F <= "XXXX";
C <= 'X';
V <= 'X';
N <= 'X';
Z <= 'X';
END IF;Завершить процесс;
Поведенческая END;
строка 39: Signal C не могут быть синтезированы, плохая синхронное описание.
Строка 39: "Процесс (S, CLK) ЕСТЬ"
Код:
библиотека IEEE;
Использование IEEE.STD_LOGIC_1164.ALL;
Использование IEEE.STD_LOGIC_ARITH.ALL;
Использование IEEE.STD_LOGIC_UNSIGNED.ALL;организация является ALU4bit
Порт (X: в STD_LOGIC_VECTOR (3 downto 0);
Y: в STD_LOGIC_VECTOR (3 downto 0);
S: В STD_LOGIC_VECTOR (3 downto 0);
CLK: в STD_LOGIC;
V, N, Z, C: из STD_LOGIC;
F: из STD_LOGIC_VECTOR (3 downto 0));
- SEV_SEG: из STD_LOGIC_VECTOR (7 downto 1));
конец ALU4bit;Поведенческая в архитектуре является ALU4bitначинатьПРОЦЕСС (S, CLK) IS
VARIABLE Temp, нести: STD_LOGIC_VECTOR (4 DOWNTO 0) - дополнительный бит для суда в арифметических операций
VARIABLE A: STD_LOGIC_VECTOR (3 DOWNTO 0): = X;
VARIABLE B: STD_LOGIC_VECTOR (3 DOWNTO 0): = Y;
VARIABLE к югу: STD_LOGIC: ='0 ';
BEGIN- Инициализация переменных и выходы
C <='0 ';
V <='0 ';
N <='0 ';
Z <='0 ';
к югу: ='0 ';
перевозки (4 downto 0): = "XXXXX";IF (CLK ='1 'И CLK'event) THENCASE S IS- Арифметические операции: S (3) = 0Если "0000" =>
Temp: = ('0 'И А); - передачу х до температуры
Если "0001" =>
Temp: = ('0 'И А) 1; - приращение х 1
Если "0010" =>
Temp: = ('0 'И A) B; - добавляет г-Х
Если "0011" =>
Temp: = ('0 'И A) B 1; - добавляет г и Cin-Х
Если "0100" =>
B: = НЕ B;
Temp: = ('0 'И A) B; - вычитание Y из X (одна в дополнять вычитание)
к югу: ='1 ';
Если "0101" =>
B: = НЕ B;
Temp: = ('0 'И A) B 1; - вычитание Y из X и прирост (в два дополнения вычитание)
к югу: ='1 ';
Если "0110" =>
Temp: = ('0 'И А) - 1; - декремента X
к югу: ='1 ';
Если "0111" =>
Temp: = ('0 'И B) - для передачи и температура- Логические операции: S (3) = 1Если "1000" =>
Temp: = NOT ('0 'И B) - инвертирование Y
Если "1001" =>
Temp: = ('0 'И (A NAND B)); - логическое NAND Х и Y.
Если "1010" =>
Temp: = ('0 'И (A NOR B)); - логическое ни X и Y.
Если "1011" =>
Temp: = ('0 'И (A XNOR B)); - логическое xnor Х и Y.
Если "1100" =>
Temp: = ('0 'И (A XOR B)); - логическое XOR Х и Y.
Если "1101" =>
Temp: = ('0 'И (А или В)); - логическое или X и Y.
Если "1110" =>
Temp: = ('0 'И (A И B)); - логичный и Х и Y.
Когда другие =>
Temp: = NOT ('0 'И A) - инвертирование X
END CASE;- Вывод заданияЕсли S (3) ='0 ', затем - только рассмотреть CCR в арифметических режиме- Определить негативные бит, N
ЕСЛИ Temp (3) ='1 'THEN
N <='1 ';
END IF;- Определить переполнения бит, V
перевозки (0): ='0 ';
Для K 1 по 4 петли
нести (K): = (A (K-1) и B (K-1)) или (перенос (K-1) и (A (K-1) XOR B (K-1)));
конец петли;IF (перевозки (4) XOR перевозки (3)) ='1 'THEN
V <='1 ';
END IF;- Установить нулевой бит, Z
ЕСЛИ Temp (3 downto 0) = "0000", а затем
Z <='1 ';
END IF;- Определить нести бит, C
IF ((суб ='1 'И Y> X) или (суб ='0' И Temp (4) ='1 ')) THEN
C <='1 ';
END IF;END IF;- Определить вывод, FF <= Temp (3 downto 0);ELSE - Когда CLK низок, дают вывод мусора
F <= "XXXX";
C <= 'X';
V <= 'X';
N <= 'X';
Z <= 'X';
END IF;Завершить процесс;
Поведенческая END;