Цитата(Kolya @ Nov 29 2015, 11:53)

Не всегда ФИФО ставят на разные клоковые домены. Иногда можно разрулить обычными регистрами + синхронизаторами. И у меня действительно были проблемы со слаками при использовании очень больших ФИФО (+разные клоковые домены были).
И кстати просто законстрейнить разные клоки будет достаточным условием для разводки проекта.
ИМХО даже при больших рахмерах (до 65536) и при больших частотах (400MHz@Kintex) читаться хрень из FIFO не должна. Но на PAR могут возникать timing errors, и как их избежать, написано в AR# 43210.
Timing - How do I disable expected setup and hold time violations that are due to data synchronization between clock domains while using CORE Generator FIFO?http://www.xilinx.com/support/answers/43210.htmlПомогает.
Цитата(Anton1990 @ Nov 28 2015, 08:47)

Все добрый день.
Понимаю что тема избитая, но тем не менее.
Есть фифо. По одному порту пишу на частоте порядка 200 МГц. По другому порту читаю на частоте порядка 1 МГц. Причем читаю только после того как вся фифо забилась и запись останавливаю. Все прочитал - запускаю запись и т.д. Как правильно законстрейнить такую фифо и сигналы записи и чтения?
А вот если Ваши 200МГц и 1МГц происходят от независимых источников тактирования (иными словами Implementation tool не имеет данных о фазовом соотношении между клоками), то для кросс-клоковых цепей проверка на тайминг не производится. Тут подстерегает опасность - может считываться ерунда. Идем в Language templates и берем constraining asynchronous clock domain paths.
Код
#-----------------------------------------------------------------------------
# When constraining asynchronous clock domain paths, it is sometimes desired
# to limit the maximum delay between the two clock domains. Because the clock
# domains are asynchronous, the timing relationship between the two clock
# signals is not known, and should not be included in delay calculations. for
# these paths, the FROM-TO DATAPATHONLY constraint can be used.
#
# An example design situation is shown below:
#
# ----- -----
# |REG|===Asynch Data Path===|REG|
# | | | |
# --^-- --^--
# O---WriteClk-----------------| |
# |
# O---ReadClk----------------------------------------------
#
#-----------------------------------------------------------------------------
# Defining the Asynchronous Domain Path Timing Groups
# NET <clock_net> TNM_NET = "<clock_net_timegroup>";
NET "WriteClk" TNM_NET = "WriteClkGrp";
NET "ReadClk" TNM_NET = "ReadClkGrp";
# TIMESPEC <TS_name> = FROM <group1> TO <group2> <time> <units> DATAPATHONLY;
TIMESPEC TS_AsynchPath = FROM WriteClkGrp TO ReadClkGrp 10 ns DATAPATHONLY;