Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Signal txDataRdy cannot be synthesized! Почему?
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
TriD
Переодически (с завидным постоянством) возникает следующая ошибка:

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 имеет несколько иные принципы.
Elresearch
Странно, я ничего криминального не вижу. может на более высоком уровне проблема? А чем синтезите, если не секрет?
TriD
Использую ISE 6.3i
В дополнение к вопросу: сигнал txDataRdy используется только в этом процессе.

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

В приведенном выше примере используется положительный фронт асинхронного сигнала ps2chng - как флаг, что принят очередной байт. Теперь, что бы записать этот байт в FIFO, мне необходимо по отрицательному перепаду clk50 разрешить запись, а по следующему отриц.перепаду - запретить (сигнал txWriteEn).
Elresearch
Если сигнал 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;
TriD
Идею уловил. Сейчас попробую.

Все прекрасно работает! Спасибо за помощь! smile.gif


P.S. Да... после микроконтроллеров придется радикально перестраивать мышление!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.