реклама на сайте
подробности

 
 
> Signal txDataRdy cannot be synthesized! Почему?, Вопрос по слилю программированияна VHDL
TriD
сообщение Dec 29 2004, 14:21
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 252
Регистрация: 29-12-04
Пользователь №: 1 728



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

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 имеет несколько иные принципы.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 4)
Elresearch
сообщение Dec 29 2004, 14:31
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 214
Регистрация: 29-12-04
Пользователь №: 1 730



Странно, я ничего криминального не вижу. может на более высоком уровне проблема? А чем синтезите, если не секрет?
Go to the top of the page
 
+Quote Post
TriD
сообщение Dec 29 2004, 14:43
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 252
Регистрация: 29-12-04
Пользователь №: 1 728



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

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

В приведенном выше примере используется положительный фронт асинхронного сигнала ps2chng - как флаг, что принят очередной байт. Теперь, что бы записать этот байт в FIFO, мне необходимо по отрицательному перепаду clk50 разрешить запись, а по следующему отриц.перепаду - запретить (сигнал txWriteEn).
Go to the top of the page
 
+Quote Post
Elresearch
сообщение Dec 29 2004, 15:06
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 214
Регистрация: 29-12-04
Пользователь №: 1 730



Если сигнал 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;
Go to the top of the page
 
+Quote Post
TriD
сообщение Dec 29 2004, 15:16
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 252
Регистрация: 29-12-04
Пользователь №: 1 728



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

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


P.S. Да... после микроконтроллеров придется радикально перестраивать мышление!
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 16:46
Рейтинг@Mail.ru


Страница сгенерированна за 0.01357 секунд с 7
ELECTRONIX ©2004-2016