Переодически (с завидным постоянством) возникает следующая ошибка:
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
Dec 29 2004, 14:31
Странно, я ничего криминального не вижу. может на более высоком уровне проблема? А чем синтезите, если не секрет?
Использую ISE 6.3i
В дополнение к вопросу: сигнал txDataRdy используется только в этом процессе.
Может подскажите как можно реализовать следующую задачу:
после приема очередного байта по ps2, я хочу передать его по rs232 (записываю этот байт в FIFO).
В приведенном выше примере используется положительный фронт асинхронного сигнала ps2chng - как флаг, что принят очередной байт. Теперь, что бы записать этот байт в FIFO, мне необходимо по отрицательному перепаду clk50 разрешить запись, а по следующему отриц.перепаду - запретить (сигнал txWriteEn).
Elresearch
Dec 29 2004, 15:06
Если сигнал 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. Да... после микроконтроллеров придется радикально перестраивать мышление!
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.