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

RGMII к Cyclone4 - IO не тащит Port Rate

Здравствуйте!

Имею борду alinx AC4075 c плисой EP4CE75F23C8, на несущей плате AV6045 c Phy RTL8211EG подключеным по RGMII интерфейсу.

Уровни питания интерфейса RTL8211 сконфигурированы в 3,3В (перемычкой производителя)

вот распиновка интерфейса обмена:
 

set_location_assignment PIN_B3 -to rgmii_txd[3]
set_location_assignment PIN_A7 -to rgmii_txd[2]
set_location_assignment PIN_B1 -to rgmii_txd[1]
set_location_assignment PIN_B2 -to rgmii_txd[0]
set_location_assignment PIN_A9 -to rgmii_gtxc
set_location_assignment PIN_C8 -to rgmii_tx_ctl

set_location_assignment PIN_F2 -to rgmii_rxd[3]
set_location_assignment PIN_A6 -to rgmii_rxd[2]
set_location_assignment PIN_F1 -to rgmii_rxd[1]
set_location_assignment PIN_A5 -to rgmii_rxd[0]
set_location_assignment PIN_B6 -to rgmii_rxc
set_location_assignment PIN_B10 -to rgmii_rx_ctl

set_location_assignment PIN_A3 -to gmii_rx_er

проект выдает такой ошику:
 

Report Minimum Pulse Width: Found 1 results (1 violated).  Worst case slack is -5.445

Tcl Command:
  report_min_pulse_width -multi_corner -panel_name {Minimum Pulse Width: rgmii_tx_clk_125m} -detail full_path -nworst 100 [get_clocks {rgmii_tx_clk_125m}]

Delay Model:
  Slow 1200mV 85C Model

Node	rgmii_gtxc
Clock	rgmii_tx_clk_125m	
Type	Port Rate	
Actual Width	8.000	
Required Width	13.445	
Slack	-5.445 (VIOLATED)

ЧЯНДТ? Насколько я понимаю он гворит мне что порт не умеет в мои частоты?
Как правильно подключать RGMII в портам плисы?

Кто побеил такое, памагите!

Изменено пользователем AlexRayne
очепятка

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


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

почемуто он на остальные порты  rgmii_tx_ctl, rgmii_txd* не сагрился, 

это может както связано с тем что  rgmii_gtxc с отдельного клока (задержаного) берется:

rgmii_rxc -> IO_BUF:rgmii_rxc~input -> LCELL:rgmii_tx_clk_d -> CLKCTRL: gmii_tx_clk_d~clkctrl -> ALTDDIO_OUT -> rgmii_gtxc

констрейны взял у Форенчича:
 

create_clock -period 8.000 -add -name rgmii_clk_125m [get_pins {rgmii_rxc~input|o}]

#proc constrain_rgmii_input_pins { name clk_pin data_pins }
#								("rgmii" "rgmii_rxc" "rgmii_rx_ctl rgmii_rxd*") 

create_clock -name "virt_${name}_rx_clk_125m" -period 8.000
    create_clock -name "${name}_rx_clk_125m" -period 8.000 "$clk_pin" -waveform {2 6}
    set_input_delay -add_delay -clock "virt_${name}_rx_clk_125m" -max 1.25 [get_ports "$data_pins"]
    set_input_delay -add_delay -clock "virt_${name}_rx_clk_125m" -min -0.25 [get_ports "$data_pins"]
    set_input_delay -add_delay -clock "virt_${name}_rx_clk_125m" -clock_fall -max 1.25 [get_ports "$data_pins"]
    set_input_delay -add_delay -clock "virt_${name}_rx_clk_125m" -clock_fall -min -0.25 [get_ports "$data_pins"]
    set_false_path -rise_from [get_clocks "virt_${name}_rx_clk_125m"] -fall_to [get_clocks "${name}_rx_clk_125m"] -setup
    set_false_path -fall_from [get_clocks "virt_${name}_rx_clk_125m"] -rise_to [get_clocks "${name}_rx_clk_125m"] -setup
    set_false_path -rise_from [get_clocks "virt_${name}_rx_clk_125m"] -rise_to [get_clocks "${name}_rx_clk_125m"] -hold
    set_false_path -fall_from [get_clocks "virt_${name}_rx_clk_125m"] -fall_to [get_clocks "${name}_rx_clk_125m"] -hold

#proc constrain_rgmii_output_pins { name src_clk clk_src clk_pin data_pins }
#								  ("rgmii" "rgmii_clk_125m" "rgmii_rxc~input|o" "rgmii_gtxc" "rgmii_tx_ctl rgmii_txd*")
    create_generated_clock -name "${name}_tx_clk_125m" -source [get_pins "$clk_src"] [get_ports "$clk_pin"]
    set_output_delay -add_delay -clock [get_clocks "${name}_tx_clk_125m"] -max 1 [get_ports "$data_pins"]
    set_output_delay -add_delay -clock [get_clocks "${name}_tx_clk_125m"] -min -1 [get_ports "$data_pins"]
    set_output_delay -add_delay -clock [get_clocks "${name}_tx_clk_125m"] -max 1 -clock_fall [get_ports "$data_pins"]
    set_output_delay -add_delay -clock [get_clocks "${name}_tx_clk_125m"] -min -1 -clock_fall [get_ports "$data_pins"]
    set_false_path -rise_from [get_clocks "$src_clk"] -fall_to [get_clocks "${name}_tx_clk_125m"] -setup
    set_false_path -fall_from [get_clocks "$src_clk"] -rise_to [get_clocks "${name}_tx_clk_125m"] -setup
    set_false_path -rise_from [get_clocks "$src_clk"] -rise_to [get_clocks "${name}_tx_clk_125m"] -hold
    set_false_path -fall_from [get_clocks "$src_clk"] -fall_to [get_clocks "${name}_tx_clk_125m"] -hold

чтото тут нетак

Изменено пользователем AlexRayne

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


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

добавил

set_false_path -from rgmii_rx_clk_125m -to [get_ports {rgmii_tx* rgmii_gtxc}]
set_clock_groups -asynchronous -group {rgmii_rx_clk_125m} 
set_clock_groups -asynchronous -group {rgmii_clk_125m rgmii_tx_clk_125m}

это не убрало проблему с Port Rate.

Изменено пользователем AlexRayne

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


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

RGMII интерфейс делается в 2х вариантах:

1) Center-aligned - когда надо формировать клок TX запаздывающий на 90* 

2) Edge-aligned - клок нужен синхронный с данными, приемник сам задерживает этот клок

У меня 2й случай. Поэтому убрал задержку клока.

Взял от интела рекомендованые констрейны для него:

proc constrain_rgmii_output_pins_edgealigned { name src_clk clk_src clk_pin data_pins } {
    puts "Inserting timing constraints for RGMII edge-aligned output pins $name"
    puts "RGMII clock       : $src_clk"
    puts "RGMII clock source: $clk_src"
    puts "RGMII clock pin: $clk_pin"
    puts "RGMII data pins: $data_pins"
    
    ##1ns setup time and 1ns hold time
    ##
    create_generated_clock -name "${name}_tx_clk_125m" -source [get_pins "$clk_src"] [get_ports "$clk_pin"]

    set_output_delay -add_delay -clock [get_clocks "${name}_tx_clk_125m"] -max -1 [get_ports "$data_pins"]
    set_output_delay -add_delay -clock [get_clocks "${name}_tx_clk_125m"] -min -3 [get_ports "$data_pins"]
    set_output_delay -add_delay -clock [get_clocks "${name}_tx_clk_125m"] -max -1 -clock_fall [get_ports "$data_pins"]
    set_output_delay -add_delay -clock [get_clocks "${name}_tx_clk_125m"] -min -3 -clock_fall [get_ports "$data_pins"]

    set_output_delay -add_delay -clock [get_clocks "${name}_tx_clk_125m"] -max -1 [get_ports "$clk_pin"]
    set_output_delay -add_delay -clock [get_clocks "${name}_tx_clk_125m"] -min -3 [get_ports "$clk_pin"]
    set_output_delay -add_delay -clock [get_clocks "${name}_tx_clk_125m"] -max -1 -clock_fall [get_ports "$clk_pin"]
    set_output_delay -add_delay -clock [get_clocks "${name}_tx_clk_125m"] -min -3 -clock_fall [get_ports "$clk_pin"]

    # set_clock_groups \
    #     -exclusive \
    #     -group [get_clocks "$src_clk" "${name}_tx_clk_125m"]

    # Set multicycle paths to align the launch edge with the latch edge
    set_multicycle_path 0 -setup -end -rise_from [get_clocks "$src_clk"] -rise_to [get_clocks "${name}_tx_clk_125m"]
    set_multicycle_path 0 -setup -end -fall_from [get_clocks "$src_clk"] -fall_to [get_clocks "${name}_tx_clk_125m"]

    ## edge-aligned output
    ## Set false paths to remove irrelevant setup and hold analysis
    ##setup time, set false path, rise-->fall, fall-->rise
    set_false_path -rise_from [get_clocks "$src_clk"] -fall_to [get_clocks "${name}_tx_clk_125m"] -setup
    set_false_path -fall_from [get_clocks "$src_clk"] -rise_to [get_clocks "${name}_tx_clk_125m"] -setup

    ##hold time, set false path, rise-->rise, fall-->fall
    set_false_path -rise_from [get_clocks "$src_clk"] -rise_to [get_clocks "${name}_tx_clk_125m"] -hold
    set_false_path -fall_from [get_clocks "$src_clk"] -fall_to [get_clocks "${name}_tx_clk_125m"] -hold

}

времянка setup-hold теперь ожидаемая - выровнены совпадающие перепады клоков.
но ошибка Port Rate так и осталась

Изменено пользователем AlexRayne

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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