![](https://electronix.ru/forum/uploads/set_resources_23/84c1e40ea0e759e3f1505eb1788ddf3c_pattern.png)
![](https://electronix.ru/forum/uploads/set_resources_23/84c1e40ea0e759e3f1505eb1788ddf3c_default_photo.png)
AlexRayne
Участник-
Постов
678 -
Зарегистрирован
-
Посещение
-
Победитель дней
1
AlexRayne стал победителем дня 11 апреля 2023
AlexRayne имел наиболее популярный контент!
Репутация
7 ОбычныйИнформация о AlexRayne
-
Звание
Знающий
Старые поля
-
skype
Array
Информация
-
Город
Array
Контакты
-
Skype
Array
-
Подскажите полосовой фильтр
AlexRayne ответил RR2021 тема в RF & Microwave Design
А полагаете в аналогой части, до фильтра, он не насытит канал? -
AlexRayne подписался на Массив указателей на массив char , Подскажите полосовой фильтр , RGMII к Cyclone4 - IO не тащит Port Rate и 3 других
-
Подскажите полосовой фильтр
AlexRayne ответил RR2021 тема в RF & Microwave Design
кажется он думает шта разрабатывать аналоговые фильтры Nго-порядка проще чем цифровые ))) -
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 так и осталась
-
добавил 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.
-
почемуто он на остальные порты 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 чтото тут нетак
-
Здравствуйте! Имею борду 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 в портам плисы? Кто побеил такое, памагите!
-
вот поэтому их надо перекладывать в другой объект, чтоб компилятор не мог заинлайнить. И по моей практике - не инлайнит он на АРМах, надо особенно его еще уговорить заинлайнить, особенно с ключом Os
-
по картинке которую вы положили - вам не понравилось что он сделал гото раньше чем чтото посчитал. А с какого перепугу вы решили что этого нелья делать? Что у Вас там вобще делается? вот поэтому народ и пишет что вам надо обращаться на канал рен-тв, к экстрасенсам. ну или в чат-ЖПТ песатъ Есть такой способ, но не понравится - раскидайте код по функциям глобальным (не конст), и для гарантии в другой объект их переложите, не там где вызываете. последовательность таких вызовов он не имеет права менять
-
А собсно что вам не нравится то? Вы не потрудились привести исходник, описать что ожидаете получить, и что ломается. в чем проблема. Вы так долго будете свои картинки тут постить
-
помойка с кучей "стандартных библиотек". линуксы свои навороты давно пропихивают в стандарт, но он на то и стандарт чтоб как в палате мер и весов неприксновенно лежать
-
а какой буффер вы ожидаете переполнить от itoa? но так таки да, если функция неудобно, лучше свое наколхозить - из того же printf надергать
-
тогда зачем вам printf в 16К кода? достаточно itoa, puts
-
Ну вот я поработал с A7682 - не встретил этого дна. Так что не у всех производителей таки.
-
а можно засветить эти модули? кто такое дно делает?
-
Массив указателей на массив char
AlexRayne ответил ViKo тема в Программирование
Если инициализация будет кодом - то никак компилятор не соптимизирует. А если константами - то может чего то и выгорело, если бы это была не единая структура а набор.