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