Перейти к содержанию
    

Клоки в Altera Arria V

Добрый день! Собрал проект на ПЛИС из IP-блоков:

post-83540-1473845663_thumb.jpg

После компиляции TimeQuest показывает, что максимальная скорость около 90 МГц, что для Arria V является очень низкой.

post-83540-1473845689_thumb.jpg

В информационных сообщениях появляются Warnings:

post-83540-1473845718_thumb.jpg

1) 1 input pin(s) will use non-dedicated clock routing.

Как я понял, мой клок использует путь(пин) не предназначенный для клока. В Connection Guidelines есть два типа клока - clk и pll.

post-83540-1473845746_thumb.jpg

Логично предположить, что только ко второму можно подключить pll.

Но в pin assignment pll является дополнительной опцией:

post-83540-1473845775_thumb.jpg

Следовательно делаю вывод, что в любому clk я могу подключить pll.

Верны ли мои предположения?

2) Node: clk was determinated to be a clock but was found without an associated clock assignment.

Warning требует от меня где-то (может быть в assignment editor?) указать что этот пин используется как клок(так как клок может быть и клоком и обычным I/O)? Не могу найти, где это указать. Буду благодарен за наводку.

3) PLL cross checking found inconsistent PLL clock settings: was found missing 1 generated clock that corresponds to be a base clock with a period of: 10.000

Тут warning мне говорит, что я не подключил(потерял) клок, который идет на вход ФАПЧ, хотя из первого вложения видно, что внешний клок идет напрямую на ФАПЧ. Сразу скажу - внешний клок 100 МГц идет на ФАПЧ и выходят все те же 100 МГц. В институте так советовал делать преподаватель, ссылаясь на то, что увеличивается надежность всей системы, из-за того, что внешний клок может быть зашумленным, а выход ФАПЧ является чуть ли не прецизионным.

4)В TimeQuest есть так называемый altera_reserved_clock. Что это такое и почему его частота 33 МГц? Связан ли он какие-либо образом с SignalTap?

post-83540-1473846037_thumb.jpg

post-83540-1473845942_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2) Node: clk was determinated to be a clock but was found without an associated clock assignment.

Warning требует от меня где-то (может быть в assignment editor?) указать что этот пин используется как клок(так как клок может быть и клоком и обычным I/O)? Не могу найти, где это указать. Буду благодарен за наводку.

Этот варнинг говорит о том, что ваш слок не описан должным образом: не указана частота вашего клока и всё, что связано с PLL. Что у вас в sdc?

 

Если вы используете PLL, то в качестве сброса для всех блоков используйте её выход Locked, а не входной reset_n.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Этот варнинг говорит о том, что ваш слок не описан должным образом: не указана частота вашего клока и всё, что связано с PLL. Что у вас в sdc?

Сейчас описал sdc (ранее был не знаком с тем, что надо описывать клоки) - warning пропали. Посмотрите пожалуйста, все ли я описал в sdc.

Листинг моего sdc:

#**************************************************************
# Time Information
#**************************************************************

set_time_format -unit ns -decimal_places 3



#**************************************************************
# Create Clock
#**************************************************************

create_clock -name {altera_reserved_tck} -period 33.333 -waveform { 0.000 16.666 } [get_ports {altera_reserved_tck}]
create_clock -name {clk} -period 10.000 -waveform { 0.000 5.000 } [get_ports {clk clk(n)}]


#**************************************************************
# Create Generated Clock
#**************************************************************

create_generated_clock -name {pll_user|pll_duc_inst|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|vcoph[0]} -source [get_pins {pll_user|pll_duc_inst|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|refclkin}] -duty_cycle 50.000 -multiply_by 6 -divide_by 2 -master_clock {clk} [get_pins {pll_user|pll_duc_inst|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|vcoph[0]}] 
create_generated_clock -name {pll_user|pll_duc_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk} -source [get_pins {pll_user|pll_duc_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|vco0ph[0]
}] -duty_cycle 50.000 -multiply_by 1 -divide_by 3 -master_clock {pll_user|pll_duc_inst|altera_pll_i|general[0].gpll~FRACTIONAL_PLL|vcoph[0]} [get_pins {pll_user|pll_duc_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] 


#**************************************************************
# Set Clock Latency
#**************************************************************



#**************************************************************
# Set Clock Uncertainty
#**************************************************************

set_clock_uncertainty -rise_from [get_clocks {clk}] -rise_to [get_clocks {clk}] -setup 0.050  
set_clock_uncertainty -rise_from [get_clocks {clk}] -rise_to [get_clocks {clk}] -hold 0.030  
set_clock_uncertainty -rise_from [get_clocks {clk}] -fall_to [get_clocks {clk}] -setup 0.050  
set_clock_uncertainty -rise_from [get_clocks {clk}] -fall_to [get_clocks {clk}] -hold 0.030  
set_clock_uncertainty -fall_from [get_clocks {clk}] -rise_to [get_clocks {clk}] -setup 0.050  
set_clock_uncertainty -fall_from [get_clocks {clk}] -rise_to [get_clocks {clk}] -hold 0.030  
set_clock_uncertainty -fall_from [get_clocks {clk}] -fall_to [get_clocks {clk}] -setup 0.050  
set_clock_uncertainty -fall_from [get_clocks {clk}] -fall_to [get_clocks {clk}] -hold 0.030  
set_clock_uncertainty -rise_from [get_clocks {altera_reserved_tck}] -rise_to [get_clocks {altera_reserved_tck}] -setup 0.050  
set_clock_uncertainty -rise_from [get_clocks {altera_reserved_tck}] -fall_to [get_clocks {altera_reserved_tck}] -setup 0.050  
set_clock_uncertainty -fall_from [get_clocks {altera_reserved_tck}] -rise_to [get_clocks {altera_reserved_tck}] -setup 0.050  
set_clock_uncertainty -fall_from [get_clocks {altera_reserved_tck}] -fall_to [get_clocks {altera_reserved_tck}] -setup 0.050  


#**************************************************************
# Set Input Delay
#**************************************************************



#**************************************************************
# Set Output Delay
#**************************************************************



#**************************************************************
# Set Clock Groups
#**************************************************************

set_clock_groups -asynchronous -group [get_clocks {altera_reserved_tck}] 


#**************************************************************
# Set False Path
#**************************************************************

set_false_path -from [get_keepers {altera_reserved_tdi}] -to [get_keepers {pzdyqx*}]


#**************************************************************
# Set Multicycle Path
#**************************************************************



#**************************************************************
# Set Maximum Delay
#**************************************************************



#**************************************************************
# Set Minimum Delay
#**************************************************************



#**************************************************************
# Set Input Transition
#**************************************************************

 

Если вы используете PLL, то в качестве сброса для всех блоков используйте её выход Locked, а не входной reset_n.

Спасибо за совет. Как я понимаю locked используется для синхронизации внешнего сброса с выходной частотой pll?

 

В TimeQuest Timing Analyzer появились три частоты.

1)altera_reserved_tck

2)clk

3)pll_user

Максимальные частоты 78, 195 и 262 соответственно.Правильно ли я понимаю, что в зависимости от того, чем я буду тактировать внутреннюю логику ПЛИС (без/с pll) меняется максимальная частота работы ПЛИС?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сейчас описал sdc (ранее был не знаком с тем, что надо описывать клоки) - warning пропали. Посмотрите пожалуйста, все ли я описал в sdc.
Я не вижу в вашем дизайне altera_reserved_tck. Уберите его и всё, что с ним связано, из sdc.

У вас в дизайне нет других входов кроме клока и сброса. Поэтому sdc будет простейшим:

 set_time_format -unit ns -decimal_places 3

create_clock -name {clk} -period 10.000 [get_ports {clk clk(n)}]

derive_pll_clocks -create_base_clocks

derive_clock_uncertainty

 

Как я понимаю locked используется для синхронизации внешнего сброса с выходной частотой pll?

Locked используется для того, чтобы использовать правильный клок с выхода PLL. Она же не мгновенно начинает входит в режим захвата. Пока она не в захвате, выходной клок использовать нельзя.

 

Правильно ли я понимаю, что в зависимости от того, чем я буду тактировать внутреннюю логику ПЛИС (без/с pll) меняется максимальная частота работы ПЛИС?
Вас должно волновать, выполняются ли ваши временные ограничения, а не максимальная частота.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...