Перейти к содержанию
    

Signal txDataRdy cannot be synthesized! Почему?

Переодически (с завидным постоянством) возникает следующая ошибка:

 

Signal txDataRdy cannot be synthesized, bad synchronous description.

 

Вот процесс:

process(clk50, ps2chng)

begin

if rising_edge(ps2chng) then

txDout <= ps2scan;

txDataRdy <= '1';

elsif falling_edge(clk50) then

if txFull = '0' and txWriteEn = '0' and txDataRdy = '1' then

txWriteEn <= '1';

txDataRdy <= '0';

else

txWriteEn <= '0';

end if;

end if;

end process;

 

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

 

Прошу сильно не пинать, я только осваиваю этот язык. После ассемблера для микроконтроллеров, VHDL имеет несколько иные принципы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Странно, я ничего криминального не вижу. может на более высоком уровне проблема? А чем синтезите, если не секрет?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Использую ISE 6.3i

В дополнение к вопросу: сигнал txDataRdy используется только в этом процессе.

 

Может подскажите как можно реализовать следующую задачу:

после приема очередного байта по ps2, я хочу передать его по rs232 (записываю этот байт в FIFO).

 

В приведенном выше примере используется положительный фронт асинхронного сигнала ps2chng - как флаг, что принят очередной байт. Теперь, что бы записать этот байт в FIFO, мне необходимо по отрицательному перепаду clk50 разрешить запись, а по следующему отриц.перепаду - запретить (сигнал txWriteEn).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если сигнал ps2chng асинхронен clk50 и его частота намного меньше clk50, то предлагаю следующее (возможны ляпы :-) ):

 

process(clk50)

begin

 

if falling_edge(clk50) then

-- для перехода сигнала ps2chngв домен clk50

ps2chng_old<=ps2chng;

ps2chng_syn<=ps2chng_old;

 

if txFull = '0' and txWriteEn = '0' and ps2chng_old = '1' and ps2chng_syn = '0' then

txWriteEn <= '1';

txDout <= ps2scan;

else

txWriteEn <= '0';

end if;

 

end if;

end process;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Идею уловил. Сейчас попробую.

 

Все прекрасно работает! Спасибо за помощь! :)

 

 

P.S. Да... после микроконтроллеров придется радикально перестраивать мышление!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...