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

 
 
 
Reply to this topicStart new topic
> Virtex4 + ISE Foundation тактирование по двум клокам, создание проекта с тактированием по двум клокам
MarkII
сообщение Aug 10 2009, 15:51
Сообщение #1





Группа: Участник
Сообщений: 4
Регистрация: 28-01-09
Пользователь №: 44 091



Помогите! Возникла проблема с синтезом проекта в ISE Foundation 10.1i Тактирование осуществляется по двум тактовым сигналам. Синтаксически проект компилируется в ModelSim'e. Проект представляет из себя организацию двунаправленного последовательного порта с записью/чтением данных в память, организованную внутри ПЛИС. Необходимо синхронизировать схему по обоим фронтам. При приеме данных синхронизация происходит от сигнала передатчика (50 МГц) плюс вспомогательный внутренний клок удвоенной частоты, а при передаче данных - от внутреннего клока (50 МГц). Подскажите, пожалуйста, как стоить подобный проект?
Go to the top of the page
 
+Quote Post
Shtirlits
сообщение Aug 10 2009, 16:45
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905



Цитата(MarkII @ Aug 10 2009, 19:51) *
Подскажите, пожалуйста, как стоить подобный проект?

Стоить будет баксов 65-66 за час работы.
Извините, не удержался smile.gif

Посмотрите вот этот документ, не смущайтесь, что он от altera
http://www.altera.com/literature/wp/wp-010...tastability.pdf

Еще обратите внимание на аппаратные FIFO с двумя клоками, которые есть в Virtex-4.
Go to the top of the page
 
+Quote Post
MarkII
сообщение Aug 18 2009, 05:19
Сообщение #3





Группа: Участник
Сообщений: 4
Регистрация: 28-01-09
Пользователь №: 44 091



Shtirlits, благодарю за подсказку. Теперь возникла новая проблема. Использую буферы FIFO, сгенерированные при помощи IP Core в ISE. Теперь проблемы с синхронизацией нет, но при синтезе вываливается Failure. Как с этим бороться?
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Aug 18 2009, 06:13
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(MarkII @ Aug 18 2009, 09:19) *
при синтезе вываливается Failure. Как с этим бороться?
Телепаты всё ещё в отпусках.
Go to the top of the page
 
+Quote Post
MarkII
сообщение Aug 19 2009, 11:36
Сообщение #5





Группа: Участник
Сообщений: 4
Регистрация: 28-01-09
Пользователь №: 44 091



Цитата(andrew_b @ Aug 18 2009, 10:13) *
Телепаты всё ещё в отпусках.

В том то и дело что конкретной ошибки не пишет. Выдает следующее:
=========================================================================
* Advanced HDL Synthesis *
=========================================================================

FATAL_ERROR:Xst:Portability/export/Port_Main.h:143:1.17 - This application has discovered an exceptional condition from which it cannot recover. Process will terminate. For technical support on this issue, please open a WebCase with this project attached at http://www.xilinx.com/support.

Так что, andrew_b, требуются телепаты.
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Aug 19 2009, 12:20
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(MarkII @ Aug 19 2009, 15:36) *
FATAL_ERROR:Xst:Portability/export/Port_Main.h:143:1.17

Так что, andrew_b, требуются телепаты.
А вы не пробовали поместить текст ошибки в поисковую строку Гугла и посмотреть результаты поиска?

http://www.google.ru/search?q=FATAL_ERROR%....h%3A143%3A1.17
Go to the top of the page
 
+Quote Post
MarkII
сообщение Aug 20 2009, 10:35
Сообщение #7





Группа: Участник
Сообщений: 4
Регистрация: 28-01-09
Пользователь №: 44 091



Нашел строку кода, из за которой выдается такое сообщение об ошибке. Закоментировал строку и синтез прошел удачно. Строка кода следующая:
flag <= clk_link_out'stable(12 ns);
busy <= '0' when flag else '1';

Если в двух словах, есть внешний тактовый сигнал, по которому принимаются данные, и требуется сделать сигнал (в данном случае busy), который бы устанавливался в "1" при наличии тактового сигнала "clk_link_out" на входе и падал в "0" при его отсутствии.
У кого какие идеи?
Go to the top of the page
 
+Quote Post
axalay
сообщение Aug 20 2009, 13:19
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 388
Регистрация: 27-02-06
Из: Москва
Пользователь №: 14 759



Цитата(MarkII @ Aug 20 2009, 14:35) *
Нашел строку кода, из за которой выдается такое сообщение об ошибке. Закоментировал строку и синтез прошел удачно. Строка кода следующая:
flag <= clk_link_out'stable(12 ns);
busy <= '0' when flag else '1';

Если в двух словах, есть внешний тактовый сигнал, по которому принимаются данные, и требуется сделать сигнал (в данном случае busy), который бы устанавливался в "1" при наличии тактового сигнала "clk_link_out" на входе и падал в "0" при его отсутствии.
У кого какие идеи?


Если есть уверенность что когда клока снаружи нет-то 0 есть простое решение:
Запускаешь счетчик с внутреннего такта, который будет +1 пока не больше константы. На асинхронный его сброс (активный 1) заводишь внешний клок. Пока счетчик не досчитал до константы - внешняя частота есть, иначе-частоте кердык. Если нет уверенности что если клока нет то либо 0 либо 1-чуток сложнее.
Go to the top of the page
 
+Quote Post
Boris_TS
сообщение Aug 20 2009, 14:18
Сообщение #9


Злополезный
****

Группа: Свой
Сообщений: 608
Регистрация: 19-06-06
Из: Russia Taganrog
Пользователь №: 18 188



Цитата(MarkII @ Aug 20 2009, 14:35) *
Если в двух словах, есть внешний тактовый сигнал, по которому принимаются данные, и требуется сделать сигнал (в данном случае busy), который бы устанавливался в "1" при наличии тактового сигнала "clk_link_out" на входе и падал в "0" при его отсутствии.
У кого какие идеи?

С наскоку, могу предложить только тривиальный вариант. Предположим (ибо это не прозвучало явно), что:
1. Busy должен быть простробирован с некоей частотой, обзовём этот сигнал CLK_BUSY.
2. clk_link_out и CLK_BUSY имеют разные частоты, и частота CLK_BUSY выше раза в 2, чем у clk_link_out.

Тогда, решение представляется таким образом:
1. clk_link_out последовательно проходит пару триггеров, тактируемых CLK_BUSY (примитивный вариант clock domain перехода), с последнего триггера выходит сигнал BUSY_CB_RST.
2. делаем маленький счетчик: синхронный сброс BUSY_CB_RST (active high), тактируется CLK_BUSY, перенос BUSY_CB_CY, разрешение счета not(BUSY_CB_CY).

Как только clk_link_out замрёт в состонянии '0', то на счетчик перестанут подаваться сбросы, соответственно через некоторое время он досчитает до предельного значения, на выходе появиться перенос BUSY_CB_CY (блокирующий дальнейший счёт), который и можно использовать, как busy.
Go to the top of the page
 
+Quote Post

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

 


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


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