VHDL - Сигнальные хх не могут быть синтезированы, плохая синхронных убыванию

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;
 
Привет,
Я думаю, 'другой' стороны, если (clk'event и CLK ='1 ') вызывает проблемы, еще на "событие не synthesizable.Изменение кода соответственно.

 
ПРОЦЕСС (S, CLK) IS

Это синхронное описание в АСЮ.Что у вас, если вы используете:

ПРОЦЕСС (CLK) ISДобавлено через 15 секунд:ПРОЦЕСС (S, CLK) IS

Это асинхронное описание в АСЮ.Что у вас, если вы используете:

ПРОЦЕСС (CLK) IS

 
Я до сих пор получить проблема, когда я удалить ELSE заявление.Если изменения в процесс (CLK) ошибка все еще существует ...

Очень странно.Я переехала кода под ELSE к началу страницы, где ввод / вывод инициализации есть и doesn't работу, но когда я прокомментировать этот код я могу обобщать.какую-либо идею, то почему?

Код:

F <= "XXXX";

C <= 'X';

V <= 'X';

N <= 'X';

Z <= 'X';

 
Вы настраиваете C (и других сигналов) до 1, если copndition происходит, но вы не resseting них.

В любом случае, если заявление, включать и другое заявление установить бит в 0, если условие не выполнено.

Это может исправить проблему (и должно быть сделано в любом случае).

 
Какие средства являются U используя для синтеза?

 
Сигналы все инициализированные 0 после начаться в процессе заявлением.этого не достаточно?если ELSE заявление в "выходных уступки раздел тогда?Я использую Xilinx ISE 9.2i, установка Кью (на) rtus 7.2 прямо сейчас также.

Код:Если S (3) ='0 ', затем - только рассмотреть CCR в арифметических режиме- Определить негативные бит, N

ЕСЛИ Temp (3) ='1 'THEN

N <='1 ';

ELSE

N <='0 ';

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 ';

ELSE

V <='0 ';

END IF;- Установить нулевой бит, Z

ЕСЛИ Temp (3 downto 0) = "0000", а затем

Z <='1 ';

ELSE

Z <='0 ';

END IF;- Определить нести бит, C

IF ((суб ='1 'И Y> X) или (суб ='0' И Temp (4) ='1 ')) THEN

C <='1 ';

ELSE

C <='0 ';

END IF;END IF;

 
Не нужно сбросить их к нулю, если вы не имеете о том, что в ваш код, ваша перевозка будет оставаться 1 после того, как она устанавливается на первое время.Я предполагаю, что вы не хотите этого.

Без экспериментов с кодом мне это трудно сказать, что точная ошибка.Хотя, видя как она является "плохим синхронное описание ', то это ошибка сужает его до, если заявление с описанием C.

IF ((суб ='1 'И Y> X) или (суб ='0' И Temp (4) ='1 ')) THEN

Я думаю, что Существуют условия, в которых там не может быть решена точно.

попробуйте изменить его на
IF ((J) ИЛИ (K)) THEN

с J и K обрабатывается synchounously других регионах, с
IF (CLK ='1 'И CLK'event) THEN
IF ((суб ='1 'И Y> X)
J: = 1;
еще
J: = 0;
и
т.д.
или аналогичные.

, что будет по крайней мере, поможет вам отфильтровать сигнал, который вызывает ошибку.

 
что часть кода я не думаю, что это создает проблемы.его, когда я выступаю в государстве, где CLK находится на низком уровне, я хочу, чтобы все мероприятия как X. я поставил еще и я получаю "плохих синхронное описание".Я пользуюсь еще и инициализировать все выходы, как X до IF (CLK = 1 и clk'event) и еще получить "плохих синхронное описание".Dont Я знаю, что является причиной этого.

 
Если у вас делать то, что выше, я предлагаю вам выяснить, что причиной его, или вы
будете знать, какой из этих двух выражений дает вам эта проблема (если это тоже, но я
бы заложить хорошие деньги на его там!) .Это до хотя сами.

 
Я последовал Вашему предложению и по-прежнему получаю ошибку.

Код:

библиотека 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: ='0 ';

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); - позволяет ввода и может быть изменен

VARIABLE к югу: STD_LOGIC; - счетчик и указание операцию вычитания, соответственно,

VARIABLE t1, t2: BOOLEAN;

BEGIN- Инициализация переменных и выходы

F <= "0000";

C <='0 ';

V <='0 ';

N <='0 ';

Z <='0 ';

к югу: ='0 ';

A: = X;

B: = Y;

перевозки (4 downto 0): = "00000" - магазин нести битов, необходимых для определения переполнения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) THEN

t1: = TRUE;

ELSE

t1: = FALSE;

END IF;

IF (югу ='0 'И Temp (4) ='1') THEN

t2: = TRUE;

ELSE

t2: = FALSE;

END IF;IF (T1 или t2) THEN

C <='1 ';

END IF;ELSE

C <='0 ';

Z <='0 ';

N <='0 ';

V <='0 ';

END IF;- Определить вывод, FF <= Temp (3 downto 0);ELSE

F <= "XXXX";

C <= 'X';

V <= 'X';

N <= 'X';

Z <= 'X';

END IF;Завершить процесс;

Поведенческая END;
 
положить в каждый из своих ownprocess, если (clk'event и CLK = 1), и передавать их на текущий является то, что я имел в виду, вам предстоит сделать.Я предполагаю, что это legel, она была несколько лет с тех пор я запрограммирован VHDL, но я не думаю, что не должно быть проблемой, что делать.

то ошибка будет указывать на один с синхронной проблему, тем самым сужения когда фактическая ошибка.Поскольку я полагаю, он все еще указывает на ту же линию, как это было вначале.

Это, безусловно, ошибка с часами, а также с установлением C, поэтому он должен быть где-то в этом заявлении.Вы собираетесь должны найти способ переписывания, но сначала нужно знать, какая часть сосредоточить ваше внимание на.Там может быть лучше способ найти ошибку, но я не думаю, одного из них.Добавлено через 2 минуты:попробуйте сделать их сигналы, а затем переменных.

Я лишь заметил, что другое заявление, проблема существует, что она не собирается давать мусора (хотя может), он намерен дать вам 1 или 0, вероятно, последнее значение, и он не может написать X, поэтому она не может быть синтезированы.

 
Ну в testbench он дает X низким CLK.Я думаю, что основная проблема заключается в том, что, хотя этот код правильный syntactially и работает в симулятор, нет такой ресурс), либо набор ресурсов), который соответствует поведение моделируется в коде поэтому не могут быть синтезированы.Я делаю некоторые перестройки и реорганизации Теперь, надеюсь он будет работать ...

 
Тарек-писал:

Ну в testbench он дает X низким CLK.
Я думаю, что основная проблема заключается в том, что, хотя этот код правильный syntactially и работает в симулятор, нет такой ресурс), либо набор ресурсов), который соответствует поведение моделируется в коде поэтому не могут быть синтезированы.
Я делаю некоторые перестройки и реорганизации Теперь, надеюсь он будет работать ...
 
Это заявление фактически пытается писать на обоих краях часы, которые также не представляется возможным в VHDL.
Ты придется перестроить свой код несколько.

 
Сигнализирует о том, что изменения на часы случае моделируются с регистрами.Регистры на Xilinx FPGA оставаться стабильной до тех пор, пока часы событие, или более высокий приоритет, установить или сбросить состояние.Неопределенного состояния недопустимом состоянии - она не может быть синтезированы.Ваш процесс должен отражать эту реальность.

Отрицание часы событие является "nonevent".В ELSE в часы случае, вы в основном просят схемы для поддержания определенного вывода государственной когда сигнал является стабильным, - и сигнал стабилен между часами краев (события).Это полностью исключает какие-либо попытки на изменение состояния производства.

 

Welcome to EDABoard.com

Sponsor

Back
Top