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

 
 
> Прием данных с Marvell'a в режиме GMII
ovs_pavel
сообщение Sep 26 2012, 17:56
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 275
Регистрация: 19-05-06
Пользователь №: 17 249



Вечер добрый. Не поделитесь опытом приема данных с Marvell'a. Суть проблемы в следующем. Персоналка подключается к плате на которой стоит Marvel в режиме 1Гбит (GMII).
В режиме GMII идет нестабильный прием данных, т.е. например с персоналки подаю пакет с MAK-адресом 122334455667, а на приемной стороне (сделал тестовое ФИФО в которое все пишу по RX_En) получаю 162334455667. Вообщем биты "вылетают" при приеме. Зависимость получается и от раскладки проекта (меняю тестовые сигналы - переназначаю, также меняется и положение вылетающих битов). Хотя весь проект сделан абсолютно синхронно от тактовой частоты приемопередатчика RX_CLK. Привязываю к ней и данные и соответствующие управляющие сигналы на входе и после этого начинаю их анализ, ну все как полагается.

Возникает несколько вопросов: необходимо ли вводить констрейны на входную шину данных? Двигали ли вы входную частоту по фазе относительного входной шины данных (где то уже по моему проскальзывало упоминание про нестабильный режим работы марвела)? Ну и какие могут быть еще подводные камни?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Flood
сообщение Sep 26 2012, 21:28
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 702
Регистрация: 8-06-06
Пользователь №: 17 871



Цитата(ovs_pavel @ Sep 26 2012, 21:56) *
Возникает несколько вопросов: необходимо ли вводить констрейны на входную шину данных?


В общем случае, на внешние шины нужно задавать констрейны серии OFFSET (Xilinx) для явного указания времен setup/hold согласно спецификации на внешнюю шину.
Go to the top of the page
 
+Quote Post
ovs_pavel
сообщение Sep 27 2012, 07:05
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 275
Регистрация: 19-05-06
Пользователь №: 17 249



Цитата(Flood @ Sep 27 2012, 01:28) *
В общем случае, на внешние шины нужно задавать констрейны серии OFFSET (Xilinx) для явного указания времен setup/hold согласно спецификации на внешнюю шину.


Нашел доку UG138. В нем приводят пример подключения как раз marvell'a к спартану. Прописаны констрейны. Сейчас буду пробовать.


Опираясь на эту доку, прописал для своих сигналов (Phy_RxClk - тактовая; Phy_RxD[7:0], Phy_RxDv, Phy_RxEr - сигналы интерфейса GMII):

INST "Phy_RxD<?>" TNM = IN_GMII;
INST "Phy_RxDv" TNM = IN_GMII;
INST "Phy_RxEr" TNM = IN_GMII;

TIMEGRP "IN_GMII" OFFSET = IN 2 ns VALID 2 ns BEFORE "Phy_RxClk";

Компилятор выдал такое:
----------------------------------------------------------------------------------------------------------
Constraint | Check | Worst Case | Best Case | Timing | Timing
| | Slack | Achievable | Errors | Score
----------------------------------------------------------------------------------------------------------
TIMEGRP "IN_GMII" OFFSET = IN 2 ns VALID | SETUP | 0.081ns| 1.919ns | 0| 0
2 ns BEFORE COMP "Phy_RxClk" | HOLD | 0.117ns| | 0| 0
----------------------------------------------------------------------------------------------------------

Вроде все констрейны прошли.





Хотя вот тут нашел еще один пример:

"We must tell the ISE tools that the Data input has a setup time of 8 ns and a hold time of 7 ns with the following syntax:
NET "Data" OFFSET = IN 8ns VALID 15 ns BEFORE "Clk" HIGH;"

Для нашего случая: setup - 2,5ns и hold - 0,5ns, получаем
NET "Data" OFFSET = IN 2500 ps VALID 500 ps BEFORE "Clk" HIGH;

Вроде так.

Попробовал ввести констрейны с помощью оператора OFFSET.

ISE выдал следующее:

----------------------------------------------------------------------------------------------------------
Constraint | Check | Worst Case | Best Case | Timing | Timing
| | Slack | Achievable | Errors | Score
----------------------------------------------------------------------------------------------------------
* COMP "Phy_RxD<4>" OFFSET = IN 2.5 ns VALI | SETUP | 0.901ns| 1.599ns| 0| 0
D 0.5 ns BEFORE COMP "Phy_RxClk" | HOLD | -1.187ns| | 1| 1187
HIGH | | | | |
----------------------------------------------------------------------------------------------------------
* COMP "Phy_RxD<7>" OFFSET = IN 2.5 ns VALI | SETUP | 0.763ns| 1.737ns| 0| 0
D 0.5 ns BEFORE COMP "Phy_RxClk" | HOLD | -1.112ns| | 1| 1112
HIGH | | | | |
----------------------------------------------------------------------------------------------------------
* COMP "Phy_RxEr" OFFSET = IN 2.5 ns VALID | SETUP | 0.776ns| 1.724ns| 0| 0
0.5 ns BEFORE COMP "Phy_RxClk" HIGH | HOLD | -1.102ns| | 1| 1102
----------------------------------------------------------------------------------------------------------
* COMP "Phy_RxDv" OFFSET = IN 2.5 ns VALID | SETUP | 0.835ns| 1.665ns| 0| 0
0.5 ns BEFORE COMP "Phy_RxClk" HIGH | HOLD | -1.090ns| | 1| 1090
----------------------------------------------------------------------------------------------------------
* COMP "Phy_RxD<0>" OFFSET = IN 2.5 ns VALI | SETUP | 0.702ns| 1.798ns| 0| 0
D 0.5 ns BEFORE COMP "Phy_RxClk" | HOLD | -1.030ns| | 1| 1030
HIGH | | | | |
----------------------------------------------------------------------------------------------------------
* COMP "Phy_RxD<1>" OFFSET = IN 2.5 ns VALI | SETUP | 0.686ns| 1.814ns| 0| 0
D 0.5 ns BEFORE COMP "Phy_RxClk" | HOLD | -1.013ns| | 1| 1013
HIGH | | | | |
----------------------------------------------------------------------------------------------------------
* COMP "Phy_RxD<5>" OFFSET = IN 2.5 ns VALI | SETUP | 0.393ns| 2.107ns| 0| 0
D 0.5 ns BEFORE COMP "Phy_RxClk" | HOLD | -0.886ns| | 1| 886
HIGH | | | | |
----------------------------------------------------------------------------------------------------------
* COMP "Phy_RxD<3>" OFFSET = IN 2.5 ns VALI | SETUP | 0.391ns| 2.109ns| 0| 0
D 0.5 ns BEFORE COMP "Phy_RxClk" | HOLD | -0.883ns| | 1| 883
HIGH | | | | |
----------------------------------------------------------------------------------------------------------
* COMP "Phy_RxD<6>" OFFSET = IN 2.5 ns VALI | SETUP | 0.400ns| 2.100ns| 0| 0
D 0.5 ns BEFORE COMP "Phy_RxClk" | HOLD | -0.882ns| | 1| 882
HIGH | | | | |
----------------------------------------------------------------------------------------------------------
* COMP "Phy_RxD<2>" OFFSET = IN 2.5 ns VALI | SETUP | 0.434ns| 2.066ns| 0| 0
D 0.5 ns BEFORE COMP "Phy_RxClk" | HOLD | -0.848ns| | 1| 848
HIGH | | | | |
----------------------------------------------------------------------------------------------------------

Т.е. по всем 10-ти сигналам есть предупреждение по HOLD. А что означает отрицательное время удержания?


Немного ошибся в записи. Вроде как нужно записать так:

NET "Phy_RxD[7]" OFFSET = IN 2500 ps VALID 3000 ps BEFORE "Phy_RxClk" HIGH;

Надо к 2500 (setup) прибавить 500 псек (hold).

А не подскажите в чем разница описания констрейнов и какой способ лучше (1-ый это через TNM, а 2-ой через OFFSET)?
Go to the top of the page
 
+Quote Post



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

 


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


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