AlexRayne 7 11 июня Опубликовано 11 июня (изменено) · Жалоба Здравствуйте! Имею борду 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 в портам плисы? Кто побеил такое, памагите! Изменено 11 июня пользователем AlexRayne очепятка Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexRayne 7 11 июня Опубликовано 11 июня (изменено) · Жалоба почемуто он на остальные порты 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 чтото тут нетак Изменено 11 июня пользователем AlexRayne Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexRayne 7 12 июня Опубликовано 12 июня (изменено) · Жалоба добавил 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. Изменено 12 июня пользователем AlexRayne Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexRayne 7 13 июня Опубликовано 13 июня (изменено) · Жалоба 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 так и осталась Изменено 13 июня пользователем AlexRayne Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться