Здравствуйте.
Имеется проект на шестом виртексе с параллельными АЦП на 400 МГц.
Выходная шина АЦП 10 бит, сопровождаются тактом 200 МГц с привязкой к центру UI. Сигналы дифференциальные. Передача идет с удвоенной скоростью. tsu, th относительно переднего фронта синхросигнала 1нс
В проекте, соответственно реализован приемник.
Дифференциальная шина пропускается сначала через IBUFDS.
С выхода IBUFDS она идет на IDDR и далее на синхронизатор на FIFO.
Клок от АЦП пропускается через IBUFDS и далее идет на клок IDDR, на котором защелкивается входная шина.
В .ucf описаны констрейны:
Код
NET InputAdcClockPos TNM_NET = TnmAdcClockPos;
TIMESPEC TsAdcClockPos = PERIOD TnmAdcClockPos 200 Mhz HIGH 50%;
TIMEGRP GrpRiseAdcClockPos = RISING TnmAdcClockPos;
TIMEGRP GrpFallAdcClockPos = FALLING TnmAdcClockPos;
OFFSET = IN 750 ps VALID 1500 ps BEFORE InputAdcClockPos TIMEGRP GrpRiseAdcClockPos;
OFFSET = IN 750 ps VALID 1500 ps BEFORE InputAdcClockPos TIMEGRP GrpFallAdcClockPos;
Описал с запасом на разбег в длинах проводников, хотя он там настолько влиять не должен.
При этом PAR долго разводит, а потом фейлит констрейны.
После этого клок стал пропускать не через IBUFDS, а IBUFGDS, и стало намного лучше в части скорости работы, но фейл с констрейнами остался.
Например.
Код
Slack (setup path): -1.144ns (requirement - (data path - clock path - clock arrival + uncertainty))
Source: InputAdcDataPos<3> (PAD)
Destination: GenDdr[3].IDDR_inst (FF)
Destination Clock: AdcClock rising at 0.000ns
Requirement: 0.750ns
Data Path Delay: 5.235ns (Levels of Logic = 1)
Clock Path Delay: 3.366ns (Levels of Logic = 2)
Clock Uncertainty: 0.025ns
где AdcClock - это клок на выходе IBUFGDS.
Tsu всей шины на переднем фронте болтается в районе 1.86нс. Th в районе минус 0.1.
Не подскажете, чем можно вылечить данную проблему?
Заранее спасибо.
SystemVerilog - язык, заточенный Альтерой под свои кристаллы теми же приемами использования примитивов, что и AHDL. ©