Цитата(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)?