{"id":499394,"date":"2026-10-20T12:30:07","date_gmt":"2026-10-20T09:30:07","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=499394"},"modified":"2026-10-20T12:30:07","modified_gmt":"2026-10-20T09:30:07","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=499394","title":{"rendered":"FPGA as USB Self-Powered device"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041c\u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u043b\u0430\u0441\u044c \u043f\u043b\u0430\u0442\u0430: FPGA Artix-7, \u0440\u044f\u0434\u043e\u043c \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0430 USB3300 \u2014 USB PHY (\u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0430 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f USB) \u0441 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c ULPI (UTMI+ Low Pin Interface) \u2014 \u0438 \u0440\u0430\u0437\u044a\u0451\u043c USB. \u041f\u043b\u0430\u0442\u0430 \u043f\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430. \u0412\u043e\u043f\u0440\u043e\u0441 \u043f\u0440\u043e\u0441\u0442\u043e\u0439: \u0443\u043c\u0435\u0435\u0442 \u043b\u0438 FPGA \u043d\u0430 \u044d\u0442\u043e\u0439 \u043f\u043b\u0430\u0442\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c USB-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c?<\/p>\n<p>\u0413\u043e\u0442\u043e\u0432\u043e\u0435 \u044f\u0434\u0440\u043e AXI USB2 Device \u043e\u0442 Xilinx (\u0441\u0435\u0439\u0447\u0430\u0441 AMD), \u043f\u0440\u0438\u043c\u0435\u0440 USB-\u0444\u043b\u0435\u0448\u043a\u0438 \u0438\u0437 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430, \u0441\u0431\u043e\u0440\u043a\u0430, \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u2014 \u0438 \u0445\u043e\u0441\u0442 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0435 \u0432\u0438\u0434\u0438\u0442. \u041e\u0448\u0438\u0431\u043e\u043a \u043d\u0435\u0442, \u044f\u0434\u0440\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043c\u043e\u043b\u0447\u0438\u0442. \u041f\u0440\u0438\u0447\u0438\u043d\u0430 \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u0432 \u043e\u0434\u043d\u043e\u0439 \u043b\u0438\u043d\u0438\u0438 \u043f\u0438\u0442\u0430\u043d\u0438\u044f USB, \u0430 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e \u0437\u0430\u043b\u0435\u0437\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u044c Xilinx IP \u0438 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u043a\u0430\u043a Vivado \u0445\u0440\u0430\u043d\u0438\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u044f\u0434\u0440\u0430.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/a4\/2e\/63\/a42e634c18955c9a1c8b9cee5a4bcb57.png\" alt=\"FPGA, ULPI, USB3300: VBUS \u043d\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/a4\/2e\/63\/a42e634c18955c9a1c8b9cee5a4bcb57.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/a4\/2e\/63\/a42e634c18955c9a1c8b9cee5a4bcb57.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>FPGA, ULPI, USB3300: VBUS \u043d\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d<\/figcaption><\/div>\n<\/figure>\n<p>\u0412\u0441\u0451 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\u043e\u0441\u044c \u0432 Vivado \u0438 Vitis 2024.1 \u043f\u043e\u0434 Linux. \u0418\u0434\u0435\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0442\u0430\u043a\u0430\u044f: \u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u043c\u0435\u0440 USB Mass Storage \u043d\u0430 \u0445\u043e\u0441\u0442\u0435 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0431\u044b\u0447\u043d\u0443\u044e \u0444\u043b\u0435\u0448\u043a\u0443, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0438\u0445 \u043e\u0431\u0440\u0430\u0442\u043d\u043e, \u0437\u043d\u0430\u0447\u0438\u0442, \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0441 PHY, \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0440\u0430\u0437\u0432\u043e\u0434\u043a\u0430 \u043f\u043b\u0430\u0442\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442.<\/p>\n<h3>\u0414\u0438\u0437\u0430\u0439\u043d FPGA<\/h3>\n<p>\u0411\u043b\u043e\u043a-\u0434\u0438\u0437\u0430\u0439\u043d \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439:<\/p>\n<ul>\n<li>\n<p>MicroBlaze \u0441\u043e 128 \u041a\u0411 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438: \u0431\u043b\u043e\u0447\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c FPGA (BRAM), \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u0430\u044f \u043f\u043e \u0448\u0438\u043d\u0435 LMB (Local Memory Bus);<\/p>\n<\/li>\n<li>\n<p>AXI Interconnect \u0441 \u0434\u0432\u0443\u043c\u044f \u0432\u0435\u0434\u043e\u043c\u044b\u043c\u0438: \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 AXI INTC \u0438 AXI USB2 Device;<\/p>\n<\/li>\n<li>\n<p>Clocking Wizard \u043d\u0430 MMCM (Mixed-Mode Clock Manager): \u0438\u0437 50 \u041c\u0413\u0446 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u043f\u043b\u0430\u0442\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c 100 \u041c\u0413\u0446 \u0434\u043b\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438 24 \u041c\u0413\u0446 \u043e\u043f\u043e\u0440\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0434\u043b\u044f USB3300;<\/p>\n<\/li>\n<li>\n<p>Processor System Reset \u0438 MicroBlaze Debug Module (MDM) \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u043f\u043e JTAG;<\/p>\n<\/li>\n<li>\n<p>System ILA (Integrated Logic Analyzer, \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440) \u043d\u0430 \u0448\u0438\u043d\u0435 AXI \u0438 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0438 USB \u2014 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0440\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0435.<\/p>\n<\/li>\n<\/ul>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/1f\/af\/63\/1faf63d801f5abe5742154f18e7c2601.png\" alt=\"\u0411\u043b\u043e\u043a-\u0434\u0438\u0437\u0430\u0439\u043d \u0432 Vivado IP Integrator\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/1f\/af\/63\/1faf63d801f5abe5742154f18e7c2601.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/1f\/af\/63\/1faf63d801f5abe5742154f18e7c2601.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0411\u043b\u043e\u043a-\u0434\u0438\u0437\u0430\u0439\u043d \u0432 Vivado IP Integrator<\/figcaption><\/div>\n<\/figure>\n<p>USB3300 \u0442\u0430\u043a\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043e\u0442 FPGA: 24 \u041c\u0413\u0446 \u0441 MMCM \u0432\u044b\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u043d\u0430 \u0432\u0445\u043e\u0434 \u043a\u0432\u0430\u0440\u0446\u0430 PHY \u0447\u0435\u0440\u0435\u0437 <code>ODDR<\/code>. \u042d\u0442\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u044b\u0439 \u043f\u0440\u0438\u0451\u043c \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043d\u0430 \u043f\u0438\u043d \u0432 7-\u0439 \u0441\u0435\u0440\u0438\u0438: \u0442\u0430\u043a\u0442\u043e\u0432\u0430\u044f \u0441\u0435\u0442\u044c \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0438\u0434\u0442\u0438 \u0432 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0431\u0443\u0444\u0435\u0440. \u041e\u0431\u0440\u0430\u0442\u043d\u043e PHY \u043e\u0442\u0434\u0430\u0451\u0442 \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b ULPI 60 \u041c\u0413\u0446, \u043d\u0430 \u043d\u0451\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u044f\u0434\u0440\u043e USB.<\/p>\n<p>\u0412\u0435\u0440\u0445\u043d\u0438\u0439 \u043c\u043e\u0434\u0443\u043b\u044c (<code>wrap.sv<\/code>) \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0438\u043d\u044b \u043f\u043b\u0430\u0442\u044b \u0441 \u0431\u043b\u043e\u043a-\u0434\u0438\u0437\u0430\u0439\u043d\u043e\u043c. \u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0438\u043d\u043e\u0432 \u0437\u0430\u0434\u0430\u043d\u044b \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c\u0438 \u043f\u0440\u044f\u043c\u043e \u0432 \u043f\u043e\u0440\u0442\u0443:<\/p>\n<pre><code class=\"cpp\">module wrap(    (* IOSTANDARD = \"LVCMOS33\", LOC=\"M21\" *) input  logic gen50_i,    \/\/ USB3300    (* IOSTANDARD = \"LVCMOS33\", LOC=\"N2\" *)  output logic ulpi_xtail_in_o,    (* IOSTANDARD = \"LVCMOS33\", LOC=\"D18\" *) input  logic ulpi_clkout_i,    (* IOSTANDARD = \"LVCMOS33\", LOC=\"F15\" *) input  logic ulpi_nxt_i,    (* IOSTANDARD = \"LVCMOS33\", LOC=\"G19\" *) input  logic ulpi_dir_i,    (* IOSTANDARD = \"LVCMOS33\", SLEW = \"FAST\", LOC=\"F20\" *) output logic ulpi_stp_o,    (* IOSTANDARD = \"LVCMOS33\", SLEW = \"FAST\", LOC=\"J14\" *) inout  logic ulpi_data0_io,    \/\/ ... ulpi_data1_io .. ulpi_data7_io);logic clk_24;ODDR #(    .DDR_CLK_EDGE(\"OPPOSITE_EDGE\"),    .INIT        (1'b0),    .SRTYPE      (\"SYNC\")) u_oddr_0 (    .Q (ulpi_xtail_in_o),    .C (clk_24),    .CE('1), .D1('0), .D2('1), .R('0), .S('0));design_1_wrapper u_design_1_wrapper_0 (    .clk_50MHz     (gen50_i),    .clk_24_o      (clk_24),    .ext_reset_in  ('0),    .ULPI_0_clk    (ulpi_clkout_i),    .ULPI_0_data_io({ulpi_data7_io, \/* ... *\/ ulpi_data0_io}),    .ULPI_0_dir    (ulpi_dir_i),    .ULPI_0_next   (ulpi_nxt_i),    .ULPI_0_rst    (),    .ULPI_0_stop   (ulpi_stp_o));endmodule<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper\"><\/span><\/a><\/div><\/pre>\n<p>\u0412\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442 \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b ULPI (60 \u041c\u0413\u0446, \u043f\u0435\u0440\u0438\u043e\u0434 16,667 \u043d\u0441) \u0438 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 PHY \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f\u043c \u0432\u0435\u043d\u0434\u043e\u0440\u0430 IP:<\/p>\n<pre><code class=\"bash\">create_clock -name ulpi_clock -period 16.667 [get_nets ulpi_clkout_i]set_input_delay  -max 4.5 -clock ulpi_clock {ulpi_dir_i ulpi_nxt_i}set_output_delay -max 7   -clock ulpi_clock {ulpi_stp_o}set_max_delay 24 -from [get_ports ulpi_dir_i] \\  -to [get_ports {ulpi_data0_io ulpi_data1_io ulpi_data2_io ulpi_data3_io \\                  ulpi_data4_io ulpi_data5_io ulpi_data6_io ulpi_data7_io}] -datapath_only<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p><code>set_max_delay<\/code> \u043e\u0442 <code>dir<\/code> \u043a \u043b\u0438\u043d\u0438\u044f\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0443\u0436\u0435\u043d \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043f\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0443 <code>dir<\/code> PHY \u0437\u0430\u0431\u0438\u0440\u0430\u0435\u0442 \u0448\u0438\u043d\u0443 \u0441\u0435\u0431\u0435, \u0438 FPGA \u0434\u043e\u043b\u0436\u043d\u0430 \u0443\u0441\u043f\u0435\u0442\u044c \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u0431\u0443\u0444\u0435\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 Z-\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435.<\/p>\n<h3>\u041f\u043e\u0447\u0435\u043c\u0443 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f: VBUS \u0438 self-powered<\/h3>\n<p>VBUS \u2014 \u043b\u0438\u043d\u0438\u044f \u043f\u0438\u0442\u0430\u043d\u0438\u044f +5 \u0412 \u0432 \u043a\u0430\u0431\u0435\u043b\u0435 USB. USB-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u0445\u043e\u0441\u0442\u0443, \u043e\u0442\u043a\u0443\u0434\u0430 \u0431\u0435\u0440\u0451\u0442 \u043f\u0438\u0442\u0430\u043d\u0438\u0435, \u0434\u0432\u0443\u043c\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438:<\/p>\n<ul>\n<li>\n<p>\u0432 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u043f\u043e\u043b\u0435 <code>bmAttributes<\/code>: \u0431\u0438\u0442 6 \u2014 Self Powered;<\/p>\n<\/li>\n<li>\n<p>\u0432 \u043e\u0442\u0432\u0435\u0442\u0435 \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441 <code>GET_STATUS<\/code> \u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443: \u0431\u0438\u0442 0 \u2014 Self Powered.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 <code>xusb_storage<\/code> \u0438\u0437 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0443\u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d \u043a\u0430\u043a self-powered: \u0432 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 <code>bmAttributes = 0xC0<\/code>, <code>bMaxPower = 1<\/code> (2 \u043c\u0410), \u0430 <code>GET_STATUS<\/code> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <code>0x0001<\/code>. \u0421 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0432\u0441\u0451 \u0433\u043e\u0442\u043e\u0432\u043e.<\/p>\n<p>\u0410\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u0430\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435. ULPI \u2014 12-\u043f\u0440\u043e\u0432\u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043c\u0435\u0436\u0434\u0443 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c USB \u0438 PHY. \u0427\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e PHY \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0443 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043b\u0438\u043d\u0438\u0439 \u0432 \u0431\u0430\u0439\u0442\u0435 RX CMD: \u0431\u0438\u0442\u044b <code>[1:0]<\/code> \u2014 LineState, \u0431\u0438\u0442\u044b <code>[3:2]<\/code> \u2014 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 VBUS. \u042f\u0434\u0440\u043e AXI USB2 Device \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u044d\u0442\u0438 \u0431\u0438\u0442\u044b \u0432\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 \u0438 \u043e\u043f\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043d\u0438\u0445 \u0432\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u043c\u0435\u0441\u0442\u0430\u0445 \u0441\u0432\u043e\u0435\u0439 \u043b\u043e\u0433\u0438\u043a\u0438. \u041f\u043e\u043a\u0430 PHY \u043d\u0435 \u0441\u043e\u043e\u0431\u0449\u0438\u0442, \u0447\u0442\u043e VBUS \u0432 \u043d\u043e\u0440\u043c\u0435, \u044f\u0434\u0440\u043e \u0441\u0447\u0438\u0442\u0430\u0435\u0442, \u0447\u0442\u043e \u043a\u0430\u0431\u0435\u043b\u044c \u043d\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d, \u0438 \u043d\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043a \u0448\u0438\u043d\u0435.<\/p>\n<p>\u041d\u0430 \u044d\u0442\u043e\u0439 \u043f\u043b\u0430\u0442\u0435 \u0432\u044b\u0432\u043e\u0434 VBUS \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b USB3300 \u043d\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0451\u043d \u0441 \u043b\u0438\u043d\u0438\u0435\u0439 VBUS \u0440\u0430\u0437\u044a\u0451\u043c\u0430. \u0412 \u0442\u0438\u043f\u043e\u0432\u043e\u0439 \u0441\u0445\u0435\u043c\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043d\u0430 USB3300 \u044d\u0442\u0430 \u0446\u0435\u043f\u044c \u0435\u0441\u0442\u044c \u2014 \u043d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0435 \u043e\u043d\u0430 \u0437\u0430\u0447\u0451\u0440\u043a\u043d\u0443\u0442\u0430:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/52\/95\/9a\/52959a0801a8ee9a814bd5c34a5e6269.png\" alt=\"\u0421\u0445\u0435\u043c\u0430 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f USB3300, \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a: USB3300 Data Sheet, Figure 7-1, \u00a9 Microchip Technology Inc.\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/52\/95\/9a\/52959a0801a8ee9a814bd5c34a5e6269.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/52\/95\/9a\/52959a0801a8ee9a814bd5c34a5e6269.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0421\u0445\u0435\u043c\u0430 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f USB3300, \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a: USB3300 Data Sheet, Figure 7-1, \u00a9 Microchip Technology Inc.<\/figcaption><\/div>\n<\/figure>\n<p>PHY \u0438\u0437\u043c\u0435\u0440\u044f\u0435\u0442 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 \u0441\u0432\u043e\u0451\u043c \u0432\u044b\u0432\u043e\u0434\u0435 VBUS \u0438 \u043f\u043e \u043d\u0435\u043c\u0443 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u0431\u0438\u0442\u044b VBUS \u0432 RX CMD. \u0420\u0430\u0437 \u043d\u0430 \u0432\u044b\u0432\u043e\u0434\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435\u0442, PHY \u0447\u0435\u0441\u0442\u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442, \u0447\u0442\u043e VBUS \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442.<\/p>\n<p>\u041d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u0441 \u043f\u0438\u0442\u0430\u043d\u0438\u0435\u043c \u043e\u0442 \u0448\u0438\u043d\u044b VBUS \u0435\u0441\u0442\u044c \u0432\u0441\u0435\u0433\u0434\u0430, \u0438\u043d\u0430\u0447\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u0431\u044b. \u041d\u0430 self-powered \u043f\u043b\u0430\u0442\u0435 \u044d\u0442\u043e \u043d\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043e, \u0438 \u044f\u0434\u0440\u043e \u00ab\u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438\u00bb \u043a \u0445\u043e\u0441\u0442\u0443 \u043d\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f.<\/p>\n<p>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u2014 \u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u044f\u0434\u0440\u0430 <code>SELF_POWERED<\/code>. \u041a\u043e\u0433\u0434\u0430 \u043e\u043d \u0440\u0430\u0432\u0435\u043d 1, \u044f\u0434\u0440\u043e \u043f\u0440\u0438 \u0441\u0431\u0440\u043e\u0441\u0435 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0432\u043e\u0451 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 VBUS \u0432 \u00abVBUS \u0432 \u043d\u043e\u0440\u043c\u0435\u00bb \u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u0435\u0433\u043e \u0438\u0437 \u0431\u0438\u0442\u043e\u0432 VBUS \u0432 RX CMD. \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u044f\u0434\u0440\u0430 \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f: \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043b\u0438\u043d\u0438\u0439, \u043f\u0440\u0438\u0451\u043c \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043a\u0430\u043a \u0440\u0430\u043d\u044c\u0448\u0435.<\/p>\n<p>RTL \u044f\u0434\u0440\u0430 AXI USB2 Device \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c (IEEE 1735), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0430\u043a\u0430\u044f \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0430, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0435\u0433\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c\u0443 \u043a\u043e\u0434\u0443.<\/p>\n<p>\u0420\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u044f\u0434\u0440\u0430 \u2014 \u044d\u0442\u043e \u0434\u0432\u0430 \u0444\u0430\u0439\u043b\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043f\u043e 10 \u0442\u044b\u0441\u044f\u0447 \u0441\u0442\u0440\u043e\u043a: \u0432 Verilog-\u0444\u0430\u0439\u043b\u0435 23 \u043c\u043e\u0434\u0443\u043b\u044f, \u0432 VHDL-\u0444\u0430\u0439\u043b\u0435 12 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439. \u0418\u0435\u0440\u0430\u0440\u0445\u0438\u044f \u0441\u043c\u0435\u0448\u0430\u043d\u043d\u0430\u044f: \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u0441\u0430\u043c <code>usbcore<\/code> \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 Verilog, \u0430 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 VHDL-\u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439.<\/p>\n<p>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0432\u0441\u044e \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u044e \u044f\u0434\u0440\u0430: \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u0432 \u043c\u043e\u0434\u0443\u043b\u044c <code>usbcore<\/code> (\u0438 \u0432 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0434\u043b\u044f HSIC \u2014 High-Speed Inter-Chip), \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u043e \u0432\u0441\u0435\u0445 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430\u0445 \u0438 \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c \u0432 \u043c\u043e\u0434\u0443\u043b\u0435 \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f <code>axi_usb2_device<\/code>. \u0414\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0440\u0443\u043a\u0430\u043c\u0438 \u0432 \u0442\u0430\u043a\u0438\u0445 \u0444\u0430\u0439\u043b\u0430\u0445 \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0443\u0442\u0438\u043b\u0438\u0442\u0443 <a href=\"https:\/\/github.com\/johny-lemonade\/hdl-param-propagate\" rel=\"noopener nofollow\">hdl-param-propagate<\/a>: \u043e\u043d\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0432 \u043c\u043e\u0434\u0443\u043b\u044c, \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u0432\u0441\u0435 \u0435\u0433\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0432 \u043d\u0438\u0445 \u0438 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0432\u0432\u0435\u0440\u0445 \u043f\u043e \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438, \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u044f \u0442\u0438\u043f \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043c\u0435\u0436\u0434\u0443 Verilog \u0438 VHDL.<\/p>\n<pre><code class=\"bash\">python3 hdl-param-propagate.py hdl axi_usb2_device_v5_0_32_usbcore SELF_POWERED integer 0 --stop-at axi_usb2_devicepython3 hdl-param-propagate.py hdl axi_usb2_device_v5_0_32_hsic_usbcore SELF_POWERED integer 0 --stop-at axi_usb2_device<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p><code>--stop-at<\/code> \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u0434\u044a\u0451\u043c \u043d\u0430 \u043c\u043e\u0434\u0443\u043b\u0435 \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u044f\u0434\u0440\u0430, \u0430 \u0441 \u0444\u043b\u0430\u0433\u043e\u043c <code>-n<\/code> \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 diff.<\/p>\n<p>\u0412\u0430\u0436\u043d\u0430\u044f \u043e\u0433\u043e\u0432\u043e\u0440\u043a\u0430. \u041f\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 USB 2.0 (\u0440\u0430\u0437\u0434\u0435\u043b 7.1.5) \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043f\u043e\u0434\u0442\u044f\u0436\u043a\u0438 D+ \u0434\u043e\u043b\u0436\u0435\u043d \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c \u043e\u0442 VBUS \u043a\u0430\u0431\u0435\u043b\u044f: \u0435\u0441\u043b\u0438 VBUS \u043d\u0435\u0442, \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u043e\u0434\u0430\u0432\u0430\u0442\u044c \u0442\u043e\u043a \u0432 \u043b\u0438\u043d\u0438\u044e \u0434\u0430\u043d\u043d\u044b\u0445. \u0421 <code>SELF_POWERED = 1<\/code> \u044f\u0434\u0440\u043e \u0441\u0447\u0438\u0442\u0430\u0435\u0442 VBUS \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u0432\u0441\u0435\u0433\u0434\u0430 \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043f\u043e\u0434\u0442\u044f\u0436\u043a\u0443 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u043a\u0430\u0431\u0435\u043b\u044f.<\/p>\n<p>\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c VBUS \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e, \u043a\u043e\u0433\u0434\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0438 \u0445\u043e\u0441\u0442 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u0435 \u0438\u043b\u0438 \u043a\u0430\u0431\u0435\u043b\u044c \u043d\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0440\u0430\u0431\u043e\u0442\u0435:<\/p>\n<ul>\n<li>\n<p>\u0441\u0442\u0435\u043d\u0434\u043e\u0432\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u043b\u0430\u0442\u044b, \u043a\u0430\u043a \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435;<\/p>\n<\/li>\n<li>\n<p>USB-\u0441\u0432\u044f\u0437\u044c \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0440\u043f\u0443\u0441\u0430: \u043f\u043b\u0430\u0442\u0430 \u0441 FPGA \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u043a \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u043c\u0443 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0443 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u043c \u043a\u0430\u0431\u0435\u043b\u0435\u043c \u0438\u043b\u0438 \u0448\u043b\u0435\u0439\u0444\u043e\u043c;<\/p>\n<\/li>\n<li>\n<p>\u043f\u043b\u0430\u0442\u044b, \u0433\u0434\u0435 VBUS \u0440\u0430\u0437\u044a\u0451\u043c\u0430 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435 \u0437\u0430\u0432\u0435\u0434\u0451\u043d \u043d\u0430 PHY \u0438 \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u043a\u0430 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0430, \u0430 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d \u0437\u0430\u0440\u0430\u043d\u0435\u0435.<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c VBUS \u043f\u043e-\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c\u0443 \u043d\u0443\u0436\u043d\u043e, \u0435\u0441\u043b\u0438 \u043f\u043b\u0430\u0442\u0430 \u043f\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u0430, \u0430 \u043a\u0430\u0431\u0435\u043b\u044c \u043a \u0445\u043e\u0441\u0442\u0443 \u043c\u043e\u0433\u0443\u0442 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0438\u043b\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u2014 \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u043e\u0447\u0442\u0438 \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u0438\u0437\u0434\u0435\u043b\u0438\u0438. \u0411\u0435\u0437 \u044d\u0442\u043e\u0433\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u0434\u0432\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b:<\/p>\n<ul>\n<li>\n<p>\u043a\u043e\u0433\u0434\u0430 \u0445\u043e\u0441\u0442 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d, \u0430 \u043f\u043b\u0430\u0442\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043f\u043e\u0434\u0442\u044f\u0436\u043a\u0430 D+ \u043f\u043e\u0434\u0430\u0451\u0442 \u0442\u043e\u043a \u0432 \u043f\u043e\u0440\u0442 \u0445\u043e\u0441\u0442\u0430 \u0447\u0435\u0440\u0435\u0437 \u0435\u0433\u043e \u0437\u0430\u0449\u0438\u0442\u043d\u044b\u0435 \u0434\u0438\u043e\u0434\u044b \u2014 \u044d\u0442\u043e \u043f\u0440\u044f\u043c\u043e \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0435\u0439;<\/p>\n<\/li>\n<li>\n<p>\u044f\u0434\u0440\u043e \u043d\u0435 \u0443\u0437\u043d\u0430\u0451\u0442 \u043e\u0431 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043a\u0430\u0431\u0435\u043b\u044f: \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u0448\u0438\u043d\u044b \u0432 \u0440\u0435\u0436\u0438\u043c suspend, \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u0438\u0442\u044c \u00ab\u043a\u0430\u0431\u0435\u043b\u044c \u0432\u044b\u043d\u0443\u043b\u0438\u00bb \u043e\u0442 \u00ab\u0445\u043e\u0441\u0442 \u0443\u0441\u043d\u0443\u043b\u00bb.<\/p>\n<\/li>\n<\/ul>\n<h3>\u041a\u0430\u043a \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0432 Xilinx IP<\/h3>\n<p>\u041f\u043e\u043c\u0435\u043d\u044f\u0442\u044c HDL \u043c\u0430\u043b\u043e. \u0427\u0442\u043e\u0431\u044b \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0432 \u043e\u043a\u043d\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u044f\u0434\u0440\u0430 \u0432 IP Integrator \u0438 \u0434\u043e\u0448\u0451\u043b \u0434\u043e generic, \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0442\u0440\u0438 \u0432\u0435\u0449\u0438.<\/p>\n<h4>1. XGUI-\u0441\u043a\u0440\u0438\u043f\u0442<\/h4>\n<p>XGUI \u2014 Tcl-\u0441\u043a\u0440\u0438\u043f\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 Vivado \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u0440\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438 \u043e\u043a\u043d\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u044f\u0434\u0440\u0430. \u0414\u043b\u044f AXI USB2 Device \u044d\u0442\u043e <code>xgui\/axi_usb2_device_v5_0.tcl<\/code>. \u0412 <code>init_gui<\/code> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0444\u043b\u0430\u0436\u043e\u043a, \u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 GUI \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043c\u043e\u0434\u0435\u043b\u0438 (\u0442\u043e \u0435\u0441\u0442\u044c \u0432 generic HDL):<\/p>\n<pre><code class=\"bash\">proc init_gui { IPINST } {    # ... \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b ...    set SELF_POWERED [ipgui::add_param $IPINST -parent $Page0 -name SELF_POWERED -widget checkBox]    set_property display_name \"Self Powered\" $SELF_POWERED    set_property tooltip \"Ignore VBUS state reported by the ULPI PHY\" $SELF_POWERED}proc update_MODELPARAM_VALUE.SELF_POWERED {MODELPARAM_VALUE.SELF_POWERED PARAM_VALUE.SELF_POWERED} {    set_property value [get_property value ${PARAM_VALUE.SELF_POWERED}] ${MODELPARAM_VALUE.SELF_POWERED}}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e, Vivado \u043f\u0440\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u044f\u0434\u0440\u0430 \u0432\u044b\u0434\u0430\u0441\u0442:<\/p>\n<pre><code>WARNING: [IP_Flow 19-469] Gui parameter('SELF_POWERED') creation is incomplete. Corresponding component parameter does not existERROR: [Ipptcl 7-17] Invalid Parameter 'SELF_POWERED'.<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>GUI \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0435\u0442 \u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430.<\/p>\n<h4>2. component.xml<\/h4>\n<p><code>component.xml<\/code> \u2014 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u044f\u0434\u0440\u0430 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 IP-XACT (\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 IEEE 1685). \u0412 \u043d\u0451\u043c \u043d\u0443\u0436\u043d\u044b \u0434\u0432\u0435 \u0437\u0430\u043f\u0438\u0441\u0438. \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u2014 \u0442\u043e, \u0447\u0442\u043e \u0432\u0438\u0434\u043d\u043e \u0432 GUI \u0438 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430:<\/p>\n<pre><code class=\"xml\">&lt;spirit:parameter&gt;  &lt;spirit:name&gt;SELF_POWERED&lt;\/spirit:name&gt;  &lt;spirit:displayName&gt;Self Powered&lt;\/spirit:displayName&gt;  &lt;spirit:value spirit:format=\"long\" spirit:resolve=\"user\"                spirit:id=\"PARAM_VALUE.SELF_POWERED\"                spirit:choiceRef=\"choice_pairs_4873554b\" spirit:order=\"18\"&gt;0&lt;\/spirit:value&gt;  &lt;spirit:vendorExtensions&gt;    &lt;xilinx:parameterInfo&gt;      &lt;xilinx:enablement&gt;        &lt;xilinx:isEnabled xilinx:resolve=\"generated\"                          xilinx:id=\"PARAM_ENABLEMENT.SELF_POWERED\"&gt;true&lt;\/xilinx:isEnabled&gt;      &lt;\/xilinx:enablement&gt;    &lt;\/xilinx:parameterInfo&gt;  &lt;\/spirit:vendorExtensions&gt;&lt;\/spirit:parameter&gt;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p><code>choiceRef<\/code> \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0432 \u044d\u0442\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u0441\u043f\u0438\u0441\u043e\u043a \u00abfalse = 0, true = 1\u00bb, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u043b\u0430\u0436\u043a\u0438 \u044f\u0434\u0440\u0430.<\/p>\n<p>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043c\u043e\u0434\u0435\u043b\u0438 \u2014 \u0442\u043e, \u0447\u0442\u043e Vivado \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u0442 \u0432 generic \u043f\u0440\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u0431\u0451\u0440\u0442\u043a\u0438:<\/p>\n<pre><code class=\"xml\">&lt;spirit:modelParameter spirit:dataType=\"integer\"&gt;  &lt;spirit:name&gt;SELF_POWERED&lt;\/spirit:name&gt;  &lt;spirit:value spirit:format=\"long\" spirit:resolve=\"generated\"                spirit:id=\"MODELPARAM_VALUE.SELF_POWERED\"                spirit:minimum=\"0\" spirit:maximum=\"1\" spirit:rangeType=\"long\"&gt;0&lt;\/spirit:value&gt;&lt;\/spirit:modelParameter&gt;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<h4>3. \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0435 \u0441\u0443\u043c\u043c\u044b<\/h4>\n<p>\u0412 <code>component.xml<\/code> \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0435 \u0441\u0443\u043c\u043c\u044b \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f (<code>viewChecksum<\/code>) \u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u043e\u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f (<code>xilinx:checksum<\/code> \u0432 <code>packagingInfo<\/code>). \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043d\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0441\u0443\u043c\u043c\u044b \u043f\u0440\u043e\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0441\u0430\u043c\u0438\u043c Vivado:<\/p>\n<pre><code class=\"bash\">ipx::open_core \/path\/to\/Vivado\/2024.1\/data\/ip\/xilinx\/axi_usb2_device_v5_0\/component.xmlipx::update_checksums [ipx::current_core]ipx::save_core [ipx::current_core]ipx::unload_core [ipx::current_core]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p><code>ipx::save_core<\/code> \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0444\u0430\u0439\u043b \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u0434\u0430\u0442\u0443 <code>coreCreationDateTime<\/code>, \u043d\u043e\u043c\u0435\u0440 \u0440\u0435\u0432\u0438\u0437\u0438\u0438 \u044f\u0434\u0440\u0430 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f.<\/p>\n<p>\u041d\u043e\u0432\u044b\u0435 \u0441\u0443\u043c\u043c\u044b \u2014 \u044d\u0442\u043e \u0441\u0438\u0433\u043d\u0430\u043b \u0434\u043b\u044f Vivado, \u0447\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u044f\u0434\u0440\u0430 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c. \u042d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u0432 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c \u0431\u043b\u043e\u043a-\u0434\u0438\u0437\u0430\u0439\u043d\u0435 \u043f\u043e\u043c\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a locked, \u0438 \u0435\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c:<\/p>\n<pre><code class=\"bash\">upgrade_ip [get_ips design_1_axi_usb2_device_0_0]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0444\u043b\u0430\u0436\u043e\u043a \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u044f\u0447\u0435\u0439\u043a\u0438, \u0430 \u0435\u0441\u043b\u0438 \u0435\u0433\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c, \u0432 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043e\u0431\u0451\u0440\u0442\u043a\u0435 \u044f\u0434\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 <code>SELF_POWERED =&gt; 1<\/code>.<\/p>\n<h3>\u041f\u0440\u043e\u0435\u043a\u0442 \u043e\u0434\u043d\u0438\u043c Tcl-\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u043c<\/h3>\n<p>\u041f\u0440\u043e\u0435\u043a\u0442 \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u043c <code>create_project.tcl<\/code>. \u041e\u0441\u043d\u043e\u0432\u0443 \u0434\u0430\u043b\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 <code>write_bd_tcl<\/code>, \u043d\u043e \u0435\u0451 \u0432\u044b\u0432\u043e\u0434 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u043f\u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c.<\/p>\n<p>\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, <code>write_bd_tcl<\/code> \u0436\u0451\u0441\u0442\u043a\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u0438 \u0432\u0441\u0435\u0445 \u044f\u0434\u0435\u0440 (<code>xilinx.com:ip:microblaze:11.0<\/code>) \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u044e Vivado. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0432\u0435\u0440\u0441\u0438\u044f \u0438\u0449\u0435\u0442\u0441\u044f \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435:<\/p>\n<pre><code class=\"bash\">proc ip_vlnv {name} {  set defs [get_ipdefs -all xilinx.com:ip:${name}:*]  if {$defs eq \"\"} {    error \"IP xilinx.com:ip:${name} not found in the IP catalog\"  }  return [lindex [lsort -dictionary $defs] end]}set axi_usb2_device_0 [create_bd_cell -type ip -vlnv [ip_vlnv axi_usb2_device] axi_usb2_device_0]if {[lsearch -exact [list_property $axi_usb2_device_0] CONFIG.SELF_POWERED] &gt;= 0} {  set_property CONFIG.SELF_POWERED {1} $axi_usb2_device_0} else {  puts \"WARNING: axi_usb2_device has no SELF_POWERED parameter, the core will wait for VBUS from the PHY\"}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>SELF_POWERED<\/code> \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043e\u043d \u0435\u0441\u0442\u044c \u0443 \u044f\u0434\u0440\u0430. \u041d\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c, \u043d\u0435\u0434\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u043e\u043c \u044f\u0434\u0440\u0435 \u0441\u043a\u0440\u0438\u043f\u0442 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 \u0434\u0430\u043b\u044c\u0448\u0435 \u2014 \u043d\u043e \u0442\u0430\u043a\u043e\u0435 \u044f\u0434\u0440\u043e \u0431\u0443\u0434\u0435\u0442 \u0436\u0434\u0430\u0442\u044c VBUS \u043e\u0442 PHY.<\/p>\n<p><code>lsort -dictionary<\/code> \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442 \u0447\u0438\u0441\u043b\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0442\u0440\u043e\u043a, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 <code>11.0<\/code> \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 <code>9.0<\/code>. \u041e\u0433\u043e\u0432\u043e\u0440\u043a\u0430: \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 Vivado \u0443 \u044f\u0434\u0440\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u043d\u0430\u0431\u043e\u0440 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u0438 \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c <code>set_property CONFIG.\u2026<\/code> \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c. \u0412\u0435\u0440\u0441\u0438\u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 (<code>xilinx.com:interface:ulpi_rtl:1.0<\/code>) \u044f \u043e\u0441\u0442\u0430\u0432\u0438\u043b \u2014 \u043e\u043d\u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435 \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f.<\/p>\n<p>\u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, <code>wrap.sv<\/code> \u0438 <code>constraint.xdc<\/code> \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u044b \u043f\u0440\u044f\u043c\u043e \u0432 \u0441\u043a\u0440\u0438\u043f\u0442: \u043e\u043d \u0441\u0430\u043c \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0438\u0445 \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0442\u0430\u043a \u0447\u0442\u043e \u0432\u0435\u0441\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u2014 \u044d\u0442\u043e \u043e\u0434\u0438\u043d \u0444\u0430\u0439\u043b.<\/p>\n<p>\u0412-\u0442\u0440\u0435\u0442\u044c\u0438\u0445, \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u043a\u0440\u0438\u043f\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0441\u0438\u043d\u0442\u0435\u0437, \u0440\u0430\u0437\u0432\u043e\u0434\u043a\u0443 \u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u0431\u0438\u0442\u0441\u0442\u0440\u0438\u043c\u0430, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u0443\u044e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 \u0434\u043b\u044f Vitis \u2014 \u0444\u0430\u0439\u043b XSA (Xilinx Support Archive) \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0443\u0440\u044b \u0438 \u0431\u0438\u0442\u0441\u0442\u0440\u0438\u043c\u043e\u043c:<\/p>\n<pre><code class=\"bash\">proc run_and_check {run} {  wait_on_run $run  if {[get_property PROGRESS [get_runs $run]] ne \"100%\"} {    error \"$run failed: [get_property STATUS [get_runs $run]]\"  }  puts \"$run: [get_property STATUS [get_runs $run]]\"}launch_runs synth_1 -jobs $jobsrun_and_check synth_1launch_runs impl_1 -to_step write_bitstream -jobs $jobsrun_and_check impl_1open_run impl_1write_hw_platform -fixed -include_bit -force $proj_dir\/wrap.xsa<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a:<\/p>\n<pre><code class=\"bash\">\/path\/to\/Vivado\/2024.1\/bin\/vivado -mode batch -source create_project.tcl<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043e\u043a\u043e\u043b\u043e 10 \u043c\u0438\u043d\u0443\u0442. \u0412\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f: \u0432 \u043c\u043e\u0438\u0445 \u043f\u0440\u043e\u0433\u043e\u043d\u0430\u0445 \u0445\u0443\u0434\u0448\u0438\u0439 \u0437\u0430\u043f\u0430\u0441 \u043f\u043e setup (WNS, Worst Negative Slack) \u0431\u044b\u043b \u043e\u043a\u043e\u043b\u043e +0,9 \u043d\u0441, \u043f\u043e hold (WHS) \u2014 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439, \u043d\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439, +0,03\u20260,06 \u043d\u0441.<\/p>\n<details class=\"spoiler\">\n<summary>create_project.tcl \u0446\u0435\u043b\u0438\u043a\u043e\u043c<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"bash\">set proj_name exampleset proj_dir [file normalize .\/$proj_name]if {[llength $argv] &gt; 0} {  set proj_dir [file normalize [lindex $argv 0]]}create_project $proj_name $proj_dir -part xc7a200tfbg676-2set_property -dict [list \\  default_lib        xil_defaultlib \\  target_language    Verilog \\  simulator_language Mixed \\  enable_vhdl_2008   1 \\] [current_project]proc ip_vlnv {name} {  set defs [get_ipdefs -all xilinx.com:ip:${name}:*]  if {$defs eq \"\"} {    error \"IP xilinx.com:ip:${name} not found in the IP catalog\"  }  return [lindex [lsort -dictionary $defs] end]}proc create_local_memory {name} {  set old_inst [current_bd_instance .]  current_bd_instance [create_bd_cell -type hier $name]  create_bd_intf_pin -mode MirroredMaster -vlnv xilinx.com:interface:lmb_rtl:1.0 DLMB  create_bd_intf_pin -mode MirroredMaster -vlnv xilinx.com:interface:lmb_rtl:1.0 ILMB  create_bd_pin -dir I -type clk LMB_Clk  create_bd_pin -dir I -type rst SYS_Rst  create_bd_cell -type ip -vlnv [ip_vlnv lmb_v10] dlmb_v10  create_bd_cell -type ip -vlnv [ip_vlnv lmb_v10] ilmb_v10  set dlmb_bram_if_cntlr [create_bd_cell -type ip -vlnv [ip_vlnv lmb_bram_if_cntlr] dlmb_bram_if_cntlr]  set_property CONFIG.C_ECC {0} $dlmb_bram_if_cntlr  set ilmb_bram_if_cntlr [create_bd_cell -type ip -vlnv [ip_vlnv lmb_bram_if_cntlr] ilmb_bram_if_cntlr]  set_property CONFIG.C_ECC {0} $ilmb_bram_if_cntlr  set lmb_bram [create_bd_cell -type ip -vlnv [ip_vlnv blk_mem_gen] lmb_bram]  set_property -dict [list \\    CONFIG.Memory_Type    {True_Dual_Port_RAM} \\    CONFIG.use_bram_block {BRAM_Controller} \\  ] $lmb_bram  connect_bd_intf_net -intf_net microblaze_0_dlmb \\    [get_bd_intf_pins dlmb_v10\/LMB_M] \\    [get_bd_intf_pins DLMB]  connect_bd_intf_net -intf_net microblaze_0_dlmb_bus \\    [get_bd_intf_pins dlmb_v10\/LMB_Sl_0] \\    [get_bd_intf_pins dlmb_bram_if_cntlr\/SLMB]  connect_bd_intf_net -intf_net microblaze_0_dlmb_cntlr \\    [get_bd_intf_pins dlmb_bram_if_cntlr\/BRAM_PORT] \\    [get_bd_intf_pins lmb_bram\/BRAM_PORTA]  connect_bd_intf_net -intf_net microblaze_0_ilmb \\    [get_bd_intf_pins ilmb_v10\/LMB_M] \\    [get_bd_intf_pins ILMB]  connect_bd_intf_net -intf_net microblaze_0_ilmb_bus \\    [get_bd_intf_pins ilmb_v10\/LMB_Sl_0] \\    [get_bd_intf_pins ilmb_bram_if_cntlr\/SLMB]  connect_bd_intf_net -intf_net microblaze_0_ilmb_cntlr \\    [get_bd_intf_pins ilmb_bram_if_cntlr\/BRAM_PORT] \\    [get_bd_intf_pins lmb_bram\/BRAM_PORTB]  connect_bd_net -net SYS_Rst_1 \\    [get_bd_pins SYS_Rst] \\    [get_bd_pins dlmb_v10\/SYS_Rst] \\    [get_bd_pins dlmb_bram_if_cntlr\/LMB_Rst] \\    [get_bd_pins ilmb_v10\/SYS_Rst] \\    [get_bd_pins ilmb_bram_if_cntlr\/LMB_Rst]  connect_bd_net -net microblaze_0_Clk \\    [get_bd_pins LMB_Clk] \\    [get_bd_pins dlmb_v10\/LMB_Clk] \\    [get_bd_pins dlmb_bram_if_cntlr\/LMB_Clk] \\    [get_bd_pins ilmb_v10\/LMB_Clk] \\    [get_bd_pins ilmb_bram_if_cntlr\/LMB_Clk]  current_bd_instance $old_inst}create_bd_design design_1current_bd_design design_1create_bd_intf_port -mode Slave -vlnv xilinx.com:interface:ulpi_rtl:1.0 ULPI_0create_bd_port -dir I -type clk -freq_hz 50000000 clk_50MHzset ext_reset_in [create_bd_port -dir I -type rst ext_reset_in]set_property CONFIG.POLARITY {ACTIVE_HIGH} $ext_reset_increate_bd_port -dir O -type clk clk_24_oset microblaze_0 [create_bd_cell -type ip -vlnv [ip_vlnv microblaze] microblaze_0]set_property -dict [list \\  CONFIG.C_DEBUG_ENABLED     {1} \\  CONFIG.C_D_AXI             {1} \\  CONFIG.C_D_LMB             {1} \\  CONFIG.C_ENABLE_CONVERSION {0} \\  CONFIG.C_I_LMB             {1} \\] $microblaze_0set clk_wiz_0 [create_bd_cell -type ip -vlnv [ip_vlnv clk_wiz] clk_wiz_0]set_property -dict [list \\  CONFIG.CLKOUT1_JITTER             {139.128} \\  CONFIG.CLKOUT1_PHASE_ERROR        {154.678} \\  CONFIG.CLKOUT2_JITTER             {202.151} \\  CONFIG.CLKOUT2_PHASE_ERROR        {154.678} \\  CONFIG.CLKOUT2_REQUESTED_OUT_FREQ {24.000} \\  CONFIG.CLKOUT2_USED               {true} \\  CONFIG.MMCM_CLKFBOUT_MULT_F       {24.000} \\  CONFIG.MMCM_CLKOUT0_DIVIDE_F      {12.000} \\  CONFIG.MMCM_CLKOUT1_DIVIDE        {50} \\  CONFIG.NUM_OUT_CLKS               {2} \\  CONFIG.USE_RESET                  {false} \\] $clk_wiz_0create_local_memory microblaze_0_local_memoryset microblaze_0_axi_periph [create_bd_cell -type ip -vlnv [ip_vlnv axi_interconnect] microblaze_0_axi_periph]set_property CONFIG.NUM_MI {2} $microblaze_0_axi_periphset microblaze_0_axi_intc [create_bd_cell -type ip -vlnv [ip_vlnv axi_intc] microblaze_0_axi_intc]set_property CONFIG.C_HAS_FAST {1} $microblaze_0_axi_intcset microblaze_0_xlconcat [create_bd_cell -type ip -vlnv [ip_vlnv xlconcat] microblaze_0_xlconcat]set_property CONFIG.NUM_PORTS {1} $microblaze_0_xlconcatcreate_bd_cell -type ip -vlnv [ip_vlnv mdm] mdm_1create_bd_cell -type ip -vlnv [ip_vlnv proc_sys_reset] rst_clk_wiz_0_100Mset system_ila_0 [create_bd_cell -type ip -vlnv [ip_vlnv system_ila] system_ila_0]set_property -dict [list \\  CONFIG.C_ADV_TRIGGER  {true} \\  CONFIG.C_DATA_DEPTH   {4096} \\  CONFIG.C_EN_STRG_QUAL {1} \\  CONFIG.C_MON_TYPE     {MIX} \\  CONFIG.C_TRIGIN_EN    {false} \\  CONFIG.C_TRIGOUT_EN   {false} \\] $system_ila_0set axi_usb2_device_0 [create_bd_cell -type ip -vlnv [ip_vlnv axi_usb2_device] axi_usb2_device_0]if {[lsearch -exact [list_property $axi_usb2_device_0] CONFIG.SELF_POWERED] &gt;= 0} {  set_property CONFIG.SELF_POWERED {1} $axi_usb2_device_0} else {  puts \"WARNING: axi_usb2_device has no SELF_POWERED parameter, the core will wait for VBUS from the PHY\"}connect_bd_intf_net -intf_net ULPI_0_1 \\  [get_bd_intf_ports ULPI_0] \\  [get_bd_intf_pins axi_usb2_device_0\/ULPI]connect_bd_intf_net -intf_net microblaze_0_axi_dp \\  [get_bd_intf_pins microblaze_0_axi_periph\/S00_AXI] \\  [get_bd_intf_pins microblaze_0\/M_AXI_DP]connect_bd_intf_net -intf_net [get_bd_intf_nets microblaze_0_axi_dp] \\  [get_bd_intf_pins microblaze_0_axi_periph\/S00_AXI] \\  [get_bd_intf_pins system_ila_0\/SLOT_0_AXI]connect_bd_intf_net -intf_net microblaze_0_axi_periph_M01_AXI \\  [get_bd_intf_pins axi_usb2_device_0\/S_AXI] \\  [get_bd_intf_pins microblaze_0_axi_periph\/M01_AXI]connect_bd_intf_net -intf_net microblaze_0_debug \\  [get_bd_intf_pins mdm_1\/MBDEBUG_0] \\  [get_bd_intf_pins microblaze_0\/DEBUG]connect_bd_intf_net -intf_net microblaze_0_dlmb_1 \\  [get_bd_intf_pins microblaze_0\/DLMB] \\  [get_bd_intf_pins microblaze_0_local_memory\/DLMB]connect_bd_intf_net -intf_net microblaze_0_ilmb_1 \\  [get_bd_intf_pins microblaze_0\/ILMB] \\  [get_bd_intf_pins microblaze_0_local_memory\/ILMB]connect_bd_intf_net -intf_net microblaze_0_intc_axi \\  [get_bd_intf_pins microblaze_0_axi_periph\/M00_AXI] \\  [get_bd_intf_pins microblaze_0_axi_intc\/s_axi]connect_bd_intf_net -intf_net microblaze_0_interrupt \\  [get_bd_intf_pins microblaze_0_axi_intc\/interrupt] \\  [get_bd_intf_pins microblaze_0\/INTERRUPT]connect_bd_net -net axi_usb2_device_0_usb_irpt \\  [get_bd_pins axi_usb2_device_0\/usb_irpt] \\  [get_bd_pins microblaze_0_xlconcat\/In0] \\  [get_bd_pins system_ila_0\/probe0]connect_bd_net -net clk_100MHz_1 \\  [get_bd_ports clk_50MHz] \\  [get_bd_pins clk_wiz_0\/clk_in1]connect_bd_net -net clk_wiz_0_clk_out2 \\  [get_bd_pins clk_wiz_0\/clk_out2] \\  [get_bd_ports clk_24_o]connect_bd_net -net clk_wiz_0_locked \\  [get_bd_pins clk_wiz_0\/locked] \\  [get_bd_pins rst_clk_wiz_0_100M\/dcm_locked]connect_bd_net -net mdm_1_debug_sys_rst \\  [get_bd_pins mdm_1\/Debug_SYS_Rst] \\  [get_bd_pins rst_clk_wiz_0_100M\/mb_debug_sys_rst]connect_bd_net -net microblaze_0_Clk \\  [get_bd_pins clk_wiz_0\/clk_out1] \\  [get_bd_pins microblaze_0\/Clk] \\  [get_bd_pins microblaze_0_axi_periph\/ACLK] \\  [get_bd_pins microblaze_0_axi_periph\/S00_ACLK] \\  [get_bd_pins microblaze_0_axi_periph\/M00_ACLK] \\  [get_bd_pins microblaze_0_axi_periph\/M01_ACLK] \\  [get_bd_pins microblaze_0_axi_intc\/s_axi_aclk] \\  [get_bd_pins microblaze_0_axi_intc\/processor_clk] \\  [get_bd_pins microblaze_0_local_memory\/LMB_Clk] \\  [get_bd_pins rst_clk_wiz_0_100M\/slowest_sync_clk] \\  [get_bd_pins system_ila_0\/clk] \\  [get_bd_pins axi_usb2_device_0\/s_axi_aclk]connect_bd_net -net microblaze_0_intr \\  [get_bd_pins microblaze_0_xlconcat\/dout] \\  [get_bd_pins microblaze_0_axi_intc\/intr]connect_bd_net -net reset_rtl_0_1 \\  [get_bd_ports ext_reset_in] \\  [get_bd_pins rst_clk_wiz_0_100M\/ext_reset_in]connect_bd_net -net rst_clk_wiz_0_100M_bus_struct_reset \\  [get_bd_pins rst_clk_wiz_0_100M\/bus_struct_reset] \\  [get_bd_pins microblaze_0_local_memory\/SYS_Rst]connect_bd_net -net rst_clk_wiz_0_100M_mb_reset \\  [get_bd_pins rst_clk_wiz_0_100M\/mb_reset] \\  [get_bd_pins microblaze_0\/Reset] \\  [get_bd_pins microblaze_0_axi_intc\/processor_rst]connect_bd_net -net rst_clk_wiz_0_100M_peripheral_aresetn \\  [get_bd_pins rst_clk_wiz_0_100M\/peripheral_aresetn] \\  [get_bd_pins microblaze_0_axi_periph\/ARESETN] \\  [get_bd_pins microblaze_0_axi_periph\/S00_ARESETN] \\  [get_bd_pins microblaze_0_axi_periph\/M00_ARESETN] \\  [get_bd_pins microblaze_0_axi_periph\/M01_ARESETN] \\  [get_bd_pins microblaze_0_axi_intc\/s_axi_aresetn] \\  [get_bd_pins system_ila_0\/resetn] \\  [get_bd_pins axi_usb2_device_0\/s_axi_aresetn]assign_bd_address -force -offset 0x44800000 -range 0x00010000 \\  -target_address_space [get_bd_addr_spaces microblaze_0\/Data] \\  [get_bd_addr_segs axi_usb2_device_0\/S_AXI\/Reg]assign_bd_address -force -offset 0x00000000 -range 0x00020000 \\  -target_address_space [get_bd_addr_spaces microblaze_0\/Data] \\  [get_bd_addr_segs microblaze_0_local_memory\/dlmb_bram_if_cntlr\/SLMB\/Mem]assign_bd_address -force -offset 0x41200000 -range 0x00010000 \\  -target_address_space [get_bd_addr_spaces microblaze_0\/Data] \\  [get_bd_addr_segs microblaze_0_axi_intc\/S_AXI\/Reg]assign_bd_address -force -offset 0x00000000 -range 0x00020000 \\  -target_address_space [get_bd_addr_spaces microblaze_0\/Instruction] \\  [get_bd_addr_segs microblaze_0_local_memory\/ilmb_bram_if_cntlr\/SLMB\/Mem]validate_bd_designsave_bd_designset wrapper_path [make_wrapper -fileset sources_1 -files [get_files -norecurse design_1.bd] -top]add_files -norecurse -fileset sources_1 $wrapper_pathproc write_file {path content} {  file mkdir [file dirname $path]  set f [open $path w]  puts -nonewline $f [string trimleft $content \"\\n\"]  close $f}set src_dir $proj_dir\/srcwrite_file $src_dir\/wrap.sv {module wrap (    (* IOSTANDARD = \"LVCMOS33\", LOC=\"M21\" *) input logic gen50_i,    \/\/ USB3300    (* IOSTANDARD = \"LVCMOS33\", LOC=\"N2\" *) output logic ulpi_xtail_in_o,    (* IOSTANDARD = \"LVCMOS33\", LOC=\"D18\" *) input logic ulpi_clkout_i,    (* IOSTANDARD = \"LVCMOS33\", LOC=\"F15\" *) input logic ulpi_nxt_i,    (* IOSTANDARD = \"LVCMOS33\", LOC=\"G19\" *) input logic ulpi_dir_i,    (* IOSTANDARD = \"LVCMOS33\", SLEW = \"FAST\", LOC=\"F20\" *) output logic ulpi_stp_o,    (* IOSTANDARD = \"LVCMOS33\", SLEW = \"FAST\", LOC=\"J14\" *) inout logic ulpi_data0_io,    (* IOSTANDARD = \"LVCMOS33\", SLEW = \"FAST\", LOC=\"J15\" *) inout logic ulpi_data1_io,    (* IOSTANDARD = \"LVCMOS33\", SLEW = \"FAST\", LOC=\"J16\" *) inout logic ulpi_data2_io,    (* IOSTANDARD = \"LVCMOS33\", SLEW = \"FAST\", LOC=\"H14\" *) inout logic ulpi_data3_io,    (* IOSTANDARD = \"LVCMOS33\", SLEW = \"FAST\", LOC=\"H15\" *) inout logic ulpi_data4_io,    (* IOSTANDARD = \"LVCMOS33\", SLEW = \"FAST\", LOC=\"H16\" *) inout logic ulpi_data5_io,    (* IOSTANDARD = \"LVCMOS33\", SLEW = \"FAST\", LOC=\"G15\" *) inout logic ulpi_data6_io,    (* IOSTANDARD = \"LVCMOS33\", SLEW = \"FAST\", LOC=\"G16\" *) inout logic ulpi_data7_io);  logic clk_24;  ODDR #(      .DDR_CLK_EDGE(\"OPPOSITE_EDGE\"),      .INIT        (1'b0),      .SRTYPE      (\"SYNC\")  ) u_oddr_0 (      .Q (ulpi_xtail_in_o),      .C (clk_24),      .CE('1),      .D1('0),      .D2('1),      .R ('0),      .S ('0)  );  design_1_wrapper u_design_1_wrapper_0 (      .clk_50MHz     (gen50_i),      .clk_24_o      (clk_24),      .ext_reset_in  ('0),      .ULPI_0_clk    (ulpi_clkout_i),      .ULPI_0_data_io({ulpi_data7_io, ulpi_data6_io,                       ulpi_data5_io, ulpi_data4_io,                       ulpi_data3_io, ulpi_data2_io,                       ulpi_data1_io, ulpi_data0_io}),      .ULPI_0_dir    (ulpi_dir_i),      .ULPI_0_next   (ulpi_nxt_i),      .ULPI_0_rst    (),      .ULPI_0_stop   (ulpi_stp_o)  );endmodule}write_file $src_dir\/constraint.xdc {set_property BITSTREAM.CONFIG.CONFIGRATE 40 [current_design]set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 4 [current_design]set_property CONFIG_VOLTAGE 3.3 [current_design]set_property CFGBVS VCCO [current_design]create_clock -name ulpi_clock -period 16.667 [get_nets ulpi_clkout_i]set ulpi_input {ulpi_dir_i ulpi_nxt_i}set ulpi_output {ulpi_stp_o}set_input_delay -max 4.5 -clock ulpi_clock $ulpi_inputset_output_delay -max 7 -clock ulpi_clock $ulpi_outputset_max_delay 24 -from [get_ports ulpi_dir_i] -to [get_ports {ulpi_data0_io ulpi_data1_io ulpi_data2_io ulpi_data3_io ulpi_data4_io ulpi_data5_io ulpi_data6_io ulpi_data7_io}] -datapath_only}add_files -norecurse -fileset sources_1 $src_dir\/wrap.svadd_files -norecurse -fileset constrs_1 $src_dir\/constraint.xdcset_property top wrap [get_filesets sources_1]update_compile_order -fileset sources_1set jobs 4catch {set jobs [exec nproc]}proc run_and_check {run} {  wait_on_run $run  if {[get_property PROGRESS [get_runs $run]] ne \"100%\"} {    error \"$run failed: [get_property STATUS [get_runs $run]]\"  }  puts \"$run: [get_property STATUS [get_runs $run]]\"}launch_runs synth_1 -jobs $jobsrun_and_check synth_1launch_runs impl_1 -to_step write_bitstream -jobs $jobsrun_and_check impl_1set impl [get_runs impl_1]puts \"WNS=[get_property STATS.WNS $impl] TNS=[get_property STATS.TNS $impl]\\ WHS=[get_property STATS.WHS $impl] THS=[get_property STATS.THS $impl]\"open_run impl_1write_hw_platform -fixed -include_bit -force $proj_dir\/wrap.xsaputs \"XSA: $proj_dir\/wrap.xsa\"<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h3>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0434\u043b\u044f MicroBlaze<\/h3>\n<p>Vitis 2024.1 \u0435\u0449\u0451 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u043c XSCT (Xilinx Software Command-line Tool), \u0438\u043c \u0438 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f. \u0421\u043a\u0440\u0438\u043f\u0442 <code>create_vitis.tcl<\/code>:<\/p>\n<ol>\n<li>\n<p>\u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 \u0438\u0437 XSA: \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 <code>microblaze_0<\/code>, standalone;<\/p>\n<\/li>\n<li>\n<p>\u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043f\u0443\u0441\u0442\u043e\u0435 C-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0432 \u043d\u0435\u0433\u043e \u0444\u0430\u0439\u043b\u044b \u043f\u0440\u0438\u043c\u0435\u0440\u0430 USB Mass Storage \u0438\u0437 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 <code>usb_v*<\/code> (\u0432\u0435\u0440\u0441\u0438\u044f \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0438\u0437 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438);<\/p>\n<\/li>\n<li>\n<p>\u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442 RAM-\u0434\u0438\u0441\u043a;<\/p>\n<\/li>\n<li>\n<p>\u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e Release;<\/p>\n<\/li>\n<li>\n<p>\u0432\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 ELF \u0432 \u0431\u0438\u0442\u0441\u0442\u0440\u0438\u043c (<code>updatemem<\/code>) \u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u043e\u0431\u0440\u0430\u0437 <code>boot.mcs<\/code> \u0434\u043b\u044f SPI-\u0444\u043b\u0435\u0448\u0430 (<code>write_cfgmem<\/code>).<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"bash\">set drivers $::env(XILINX_VITIS)\/data\/embeddedsw\/XilinxProcessorIPLib\/driversset usb_drv [lindex [lsort -dictionary [glob -directory $drivers -type d usb_v*]] end]set examples $usb_drv\/examplessetws $wsplatform create -name board -hw $xsa -proc microblaze_0 -os standalone -out $wsplatform writeplatform generateapp create -name xusb_storage -platform board -template {Empty Application(C)}foreach f {xusb_storage.c xusb_storage.h xusb_cp9.c xusb_cp9.h xusb_types.h} {  importsources -name xusb_storage -path $examples\/$f}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041f\u0440\u043e RAM-\u0434\u0438\u0441\u043a. \u0412 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043e\u043d \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d \u043a\u0430\u043a <code>u32 RamDisk[RAMDISKSECTORS][RAMBLOCKS]<\/code> \u0441 <code>RAMDISKSECTORS = 0x400<\/code> \u0438 <code>RAMBLOCKS = 128<\/code>, \u0442\u043e \u0435\u0441\u0442\u044c 1024 \u0431\u043b\u043e\u043a\u0430 \u043f\u043e 512 \u0431\u0430\u0439\u0442 \u2014 512 \u041a\u0411. \u0412 128 \u041a\u0411 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 MicroBlaze \u044d\u0442\u043e \u043d\u0435 \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f.<\/p>\n<p>\u0423\u043c\u0435\u043d\u044c\u0448\u0430\u0442\u044c \u0437\u0434\u0435\u0441\u044c \u043d\u0443\u0436\u043d\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0447\u0438\u0441\u043b\u043e \u0431\u043b\u043e\u043a\u043e\u0432, \u0430 \u043d\u0435 <code>RAMBLOCKS<\/code>. \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0447\u0438\u0442\u0430\u0435\u0442 \u0438 \u043f\u0438\u0448\u0435\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 \u0431\u043b\u043e\u043a \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <code>&amp;RamDisk[LBA][0]<\/code> \u0440\u043e\u0432\u043d\u043e \u043f\u043e 512 \u0431\u0430\u0439\u0442, \u0430 \u0445\u043e\u0441\u0442\u0443 \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u0442 \u0451\u043c\u043a\u043e\u0441\u0442\u044c \u0432 <code>RAMDISKSECTORS<\/code> \u0431\u043b\u043e\u043a\u043e\u0432. \u0415\u0441\u043b\u0438 \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c <code>RAMBLOCKS<\/code>, \u0441\u0442\u0440\u043e\u043a\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0441\u0442\u0430\u043d\u0435\u0442 \u043a\u043e\u0440\u043e\u0447\u0435 512 \u0431\u0430\u0439\u0442: \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0435 \u0431\u043b\u043e\u043a\u0438 \u043d\u0430\u0447\u043d\u0443\u0442 \u0437\u0430\u0442\u0438\u0440\u0430\u0442\u044c \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0430, \u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0431\u043b\u043e\u043a\u0438 \u0443\u0439\u0434\u0451\u0442 \u0437\u0430 \u043a\u043e\u043d\u0435\u0446 \u043c\u0430\u0441\u0441\u0438\u0432\u0430. \u0425\u043e\u0441\u0442 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0443\u0432\u0438\u0434\u0438\u0442 \u0434\u0438\u0441\u043a \u043f\u0440\u0435\u0436\u043d\u0435\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430, \u0438 \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0437\u0430\u043f\u0438\u0441\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c <code>RAMBLOCKS = 128<\/code> \u0438 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u043c <code>RAMDISKSECTORS<\/code> \u0434\u043e <code>0x80<\/code> \u2014 128 \u0431\u043b\u043e\u043a\u043e\u0432, 64 \u041a\u0411. \u0421\u043a\u0440\u0438\u043f\u0442 \u043c\u0435\u043d\u044f\u0435\u0442 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 <code>xusb_storage.h<\/code> \u0441\u0430\u043c.<\/p>\n<p>\u0418\u0442\u043e\u0433\u043e\u0432\u044b\u0439 ELF \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043e\u043a\u043e\u043b\u043e 90 \u041a\u0411, \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u2014 \u0441\u0430\u043c RAM-\u0434\u0438\u0441\u043a \u0432 <code>.bss<\/code>.<\/p>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a:<\/p>\n<pre><code class=\"bash\">\/path\/to\/Vitis\/2024.1\/bin\/xsct create_vitis.tcl .\/example\/wrap.xsa .\/vitis<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<details class=\"spoiler\">\n<summary>create_vitis.tcl \u0446\u0435\u043b\u0438\u043a\u043e\u043c<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"bash\">set xsa [file normalize [expr {[llength $argv] &gt; 0 ? [lindex $argv 0] : \".\/example\/wrap.xsa\"}]]set ws  [file normalize [expr {[llength $argv] &gt; 1 ? [lindex $argv 1] : \".\/vitis\"}]]set platform_name boardset app_name xusb_storageif {![file isfile $xsa]} {  error \"XSA not found: $xsa\"}set drivers $::env(XILINX_VITIS)\/data\/embeddedsw\/XilinxProcessorIPLib\/driversset usb_drv [lindex [lsort -dictionary [glob -directory $drivers -type d usb_v*]] end]set examples $usb_drv\/examplesfile mkdir $wssetws $wsplatform create -name $platform_name -hw $xsa -proc microblaze_0 -os standalone -out $wsplatform writeplatform generateapp create -name $app_name -platform $platform_name -template {Empty Application(C)}foreach f {xusb_storage.c xusb_storage.h xusb_cp9.c xusb_cp9.h xusb_types.h} {  importsources -name $app_name -path $examples\/$f}set hdr $ws\/$app_name\/src\/xusb_storage.hset f [open $hdr r]set text [read $f]close $fif {[regsub {(#define\\s+RAMDISKSECTORS\\s+)0x[0-9A-Fa-f]+} $text {\\10x80} text] != 1} {  error \"RAMDISKSECTORS not found in $hdr\"}set f [open $hdr w]puts -nonewline $f $textclose $fapp config -name $app_name build-config releaseapp build -name $app_nameset elf $ws\/$app_name\/Release\/$app_name.elfputs \"ELF: $elf\"set hw_dir $ws\/$platform_name\/hwset bit [lindex [glob -directory $hw_dir *.bit] 0]set mmi [lindex [glob -directory $hw_dir *.mmi] 0]set f [open $mmi r]set mmi_text [read $f]close $fif {![regexp {&lt;Processor[^&gt;]*InstPath=\"([^\"]+)\"} $mmi_text -&gt; proc_path]} {  error \"processor not found in $mmi\"}set boot_bit $ws\/boot.bitset boot_mcs $ws\/boot.mcsexec $::env(XILINX_VITIS)\/bin\/updatemem -force -meminfo $mmi -bit $bit \\  -data $elf -proc $proc_path -out $boot_bit &gt;@ stdout 2&gt;@ stderrputs \"BIT: $boot_bit\"set vivado_root [file dirname [file dirname $::env(XILINX_VITIS)]]\/Vivado\/[file tail $::env(XILINX_VITIS)]set cfgmem_tcl $ws\/write_cfgmem.tclset f [open $cfgmem_tcl w]puts $f \"write_cfgmem -force -format mcs -interface SPIx4 -size 128 -loadbit {up 0x0 $boot_bit} -file $boot_mcs\"close $fexec $vivado_root\/bin\/vivado -mode batch -nojournal -nolog -source $cfgmem_tcl &gt;@ stdout 2&gt;@ stderrfile delete $cfgmem_tclputs \"MCS: $boot_mcs\"<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h3>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430<\/h3>\n<p>\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c <code>boot.bit<\/code> \u0447\u0435\u0440\u0435\u0437 JTAG \u0438\u043b\u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u0430\u0435\u043c <code>boot.mcs<\/code> \u0432\u043e \u0444\u043b\u0435\u0448 \u0447\u0435\u0440\u0435\u0437 Hardware Manager \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043f\u043b\u0430\u0442\u0443 \u043a \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0443. \u041d\u0430 \u0445\u043e\u0441\u0442\u0435 \u0441 Linux \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u043e\u044f\u0432\u0438\u0442\u044c\u0441\u044f \u0441 VID <code>0x03FD<\/code> (Xilinx) \u0438 PID <code>0x0100<\/code>:<\/p>\n<pre><code class=\"bash\">lsusb -v -d 03fd:0100<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0412 \u0432\u044b\u0432\u043e\u0434\u0435 \u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c:<\/p>\n<ul>\n<li>\n<p>\u0432 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 <code>bmAttributes 0xc0<\/code> \u0441 \u043f\u043e\u043c\u0435\u0442\u043a\u043e\u0439 <code>Self Powered<\/code> \u0438 <code>MaxPower 2mA<\/code>;<\/p>\n<\/li>\n<li>\n<p><code>Device Status: 0x0001<\/code> \u0441 \u043f\u043e\u043c\u0435\u0442\u043a\u043e\u0439 <code>Self Powered<\/code> \u2014 \u044d\u0442\u043e \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 <code>GET_STATUS<\/code>; \u044d\u0442\u0430 \u0441\u0442\u0440\u043e\u043a\u0430 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 <code>lsusb<\/code> \u043e\u0442 root.<\/p>\n<\/li>\n<\/ul>\n<pre><code>Bus 003 Device 012: ID 03fd:0100 Xilinx, Inc. FPGA1Negotiated speed: High Speed (480Mbps)Device Descriptor:  bcdUSB               2.00  idVendor           0x03fd Xilinx, Inc.  idProduct          0x0100 FPGA1  iManufacturer           1 XILINX  iProduct                2 FPGA1  Configuration Descriptor:    bmAttributes         0xc0      Self Powered    MaxPower                2mA    Interface Descriptor:      bInterfaceClass         8 Mass Storage      bInterfaceSubClass      6 SCSI      bInterfaceProtocol     80 Bulk-Only      Endpoint Descriptor:        bEndpointAddress     0x81  EP 1 IN        Transfer Type            Bulk        wMaxPacketSize     0x0200  1x 512 bytes      Endpoint Descriptor:        bEndpointAddress     0x02  EP 2 OUT        Transfer Type            Bulk        wMaxPacketSize     0x0200  1x 512 bytes<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043b\u043e\u0441\u044c \u0441 \u0445\u043e\u0441\u0442\u043e\u043c \u043d\u0430 High Speed (480 \u041c\u0431\u0438\u0442\/\u0441) \u2014 \u0437\u043d\u0430\u0447\u0438\u0442, ULPI \u0438 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 PHY \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043d\u0430 \u043f\u043e\u043b\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438.<\/p>\n<p>\u0412 <code>dmesg<\/code> \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u044f\u0434\u0440\u043e \u043e\u043f\u043e\u0437\u043d\u0430\u043b\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043a\u0430\u043a USB Mass Storage \u0438 \u0441\u043e\u0437\u0434\u0430\u043b\u043e \u0431\u043b\u043e\u0447\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e:<\/p>\n<pre><code>usb 3-1.4: new high-speed USB device number 16 using xhci_hcdusb 3-1.4: New USB device found, idVendor=03fd, idProduct=0100, bcdDevice= 1.00usb 3-1.4: Product: FPGA1usb 3-1.4: Manufacturer: XILINXusb-storage 3-1.4:1.0: USB Mass Storage device detectedscsi host1: usb-storage 3-1.4:1.0scsi 1:0:0:0: Direct-Access     Xilinx   SMSC Flash Demo  0001 PQ: 0 ANSI: 0sd 1:0:0:0: [sdb] 128 512-byte logical blocks: (65.5 kB\/64.0 KiB)sd 1:0:0:0: [sdb] Write Protect is offsd 1:0:0:0: [sdb] Attached SCSI removable disk<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0420\u0430\u0437\u043c\u0435\u0440 \u0434\u0438\u0441\u043a\u0430 \u2014 128 \u0431\u043b\u043e\u043a\u043e\u0432 \u043f\u043e 512 \u0431\u0430\u0439\u0442, \u0440\u043e\u0432\u043d\u043e \u0441\u0442\u043e\u043b\u044c\u043a\u043e, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0434\u0430\u043d\u043e \u0447\u0435\u0440\u0435\u0437 <code>RAMDISKSECTORS<\/code>.<\/p>\n<p>\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043e\u0431\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b. \u0424\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u0430: \u0437\u0430\u043f\u0438\u0448\u0435\u043c \u043d\u0430 \u0434\u0438\u0441\u043a 64 \u041a\u0411 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e, \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0435\u043c \u0438\u0445 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u043c. \u041f\u0435\u0440\u0435\u0434 \u044d\u0442\u0438\u043c \u0441\u0442\u043e\u0438\u0442 \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e <code>\/dev\/sdb<\/code> \u2014 \u044d\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043b\u0430\u0442\u0430 (\u0432 \u043a\u043e\u043b\u043e\u043d\u043a\u0435 MODEL \u2014 <code>SMSC Flash Demo<\/code>), \u0438\u043d\u0430\u0447\u0435 <code>dd<\/code> \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0448\u0435\u0442 \u0434\u0440\u0443\u0433\u043e\u0439 \u0434\u0438\u0441\u043a:<\/p>\n<pre><code class=\"bash\">lsblk -o NAME,SIZE,MODEL \/dev\/sdbhead -c 65536 \/dev\/urandom &gt; \/tmp\/pat.binsudo dd if=\/tmp\/pat.bin of=\/dev\/sdb bs=512 oflag=directsudo dd if=\/dev\/sdb of=\/tmp\/back.bin bs=512 count=128 iflag=directcmp \/tmp\/pat.bin \/tmp\/back.bin &amp;&amp; echo READBACK_OK<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p><code>oflag=direct<\/code> \u0438 <code>iflag=direct<\/code> \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 <code>dd<\/code> \u043e\u0431\u0445\u043e\u0434\u0438\u0442\u044c \u043a\u044d\u0448 \u044f\u0434\u0440\u0430, \u0442\u0430\u043a \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0445\u043e\u0434\u044f\u0442 \u043d\u0430 \u043f\u043b\u0430\u0442\u0443 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u0441 \u043d\u0435\u0451. \u041f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435 65 536 \u0431\u0430\u0439\u0442 \u0441\u043e\u0432\u043f\u0430\u043b\u0438 \u0441 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c\u0438 \u0431\u0430\u0439\u0442 \u0432 \u0431\u0430\u0439\u0442 \u2014 \u0437\u043d\u0430\u0447\u0438\u0442, \u0432\u0441\u0435 \u0447\u0430\u0441\u0442\u0438 \u0442\u0440\u0430\u043a\u0442\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442: ULPI, \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, PHY \u0438 \u0440\u0430\u0437\u0432\u043e\u0434\u043a\u0430 \u043f\u043b\u0430\u0442\u044b.<\/p>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435: RAM-\u0434\u0438\u0441\u043a \u0436\u0438\u0432\u0451\u0442 \u0432 BRAM, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043f\u043b\u0430\u0442\u044b \u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043f\u0440\u043e\u043f\u0430\u0434\u0430\u0435\u0442.<\/p>\n<h3>\u0418\u0442\u043e\u0433<\/h3>\n<p>\u042f\u0434\u0440\u043e AXI USB2 Device \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043e \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e PHY \u0432\u0438\u0434\u0438\u0442 VBUS. \u041d\u0430 self-powered \u043f\u043b\u0430\u0442\u0435 \u044d\u0442\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0442\u0430\u043a, \u0438 \u0442\u043e\u0433\u0434\u0430 \u044f\u0434\u0440\u043e \u043c\u043e\u043b\u0447\u0430 \u0436\u0434\u0451\u0442 \u043a\u0430\u0431\u0435\u043b\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u0430\u0432\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d. \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>SELF_POWERED<\/code> \u0441\u043d\u0438\u043c\u0430\u0435\u0442 \u044d\u0442\u0443 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c, \u0430 \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0441\u0442\u0430\u043b \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c IP, \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u0438\u0441\u044c \u0444\u043b\u0430\u0436\u043e\u043a \u0432 XGUI, \u0434\u0432\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 <code>component.xml<\/code> \u0438 \u043f\u0435\u0440\u0435\u0441\u0447\u0451\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0445 \u0441\u0443\u043c\u043c \u0441\u0438\u043b\u0430\u043c\u0438 \u0441\u0430\u043c\u043e\u0433\u043e Vivado.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1096652\/\">https:\/\/habr.com\/ru\/articles\/1096652\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041c\u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u043b\u0430\u0441\u044c \u043f\u043b\u0430\u0442\u0430: FPGA Artix-7, \u0440\u044f\u0434\u043e\u043c \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0430 USB3300 \u2014 USB PHY (\u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0430 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f USB) \u0441 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c ULPI (UTMI+ Low Pin Interface) \u2014 \u0438 \u0440\u0430\u0437\u044a\u0451\u043c USB. \u041f\u043b\u0430\u0442\u0430 \u043f\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430. \u0412\u043e\u043f\u0440\u043e\u0441 \u043f\u0440\u043e\u0441\u0442\u043e\u0439: \u0443\u043c\u0435\u0435\u0442 \u043b\u0438 FPGA \u043d\u0430 \u044d\u0442\u043e\u0439 \u043f\u043b\u0430\u0442\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c USB-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c?\u0413\u043e\u0442\u043e\u0432\u043e\u0435 \u044f\u0434\u0440\u043e AXI USB2 Device \u043e\u0442 Xilinx (\u0441\u0435\u0439\u0447\u0430\u0441 AMD), \u043f\u0440\u0438\u043c\u0435\u0440 USB-\u0444\u043b\u0435\u0448\u043a\u0438 \u0438\u0437 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430, \u0441\u0431\u043e\u0440\u043a\u0430, \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u2014 \u0438 \u0445\u043e\u0441\u0442 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0435 \u0432\u0438\u0434\u0438\u0442. \u041e\u0448\u0438\u0431\u043e\u043a \u043d\u0435\u0442, \u044f\u0434\u0440\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043c\u043e\u043b\u0447\u0438\u0442. \u041f\u0440\u0438\u0447\u0438\u043d\u0430 \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u0432 \u043e\u0434\u043d\u043e\u0439 \u043b\u0438\u043d\u0438\u0438 \u043f\u0438\u0442\u0430\u043d\u0438\u044f USB, \u0430 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e \u0437\u0430\u043b\u0435\u0437\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u044c Xilinx IP \u0438 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u043a\u0430\u043a Vivado \u0445\u0440\u0430\u043d\u0438\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u044f\u0434\u0440\u0430.FPGA, ULPI, USB3300: VBUS \u043d\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d\u0412\u0441\u0451 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\u043e\u0441\u044c \u0432 Vivado \u0438 Vitis 2024.1 \u043f\u043e\u0434 Linux. \u0418\u0434\u0435\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0442\u0430\u043a\u0430\u044f: \u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u043c\u0435\u0440 USB Mass Storage \u043d\u0430 \u0445\u043e\u0441\u0442\u0435 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0431\u044b\u0447\u043d\u0443\u044e \u0444\u043b\u0435\u0448\u043a\u0443, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0438\u0445 \u043e\u0431\u0440\u0430\u0442\u043d\u043e, \u0437\u043d\u0430\u0447\u0438\u0442, \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0441 PHY, \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0440\u0430\u0437\u0432\u043e\u0434\u043a\u0430 \u043f\u043b\u0430\u0442\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442.\u0414\u0438\u0437\u0430\u0439\u043d FPGA\u0411\u043b\u043e\u043a-\u0434\u0438\u0437\u0430\u0439\u043d \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439:MicroBlaze \u0441\u043e 128 \u041a\u0411 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438: \u0431\u043b\u043e\u0447\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c FPGA (BRAM), \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u0430\u044f \u043f\u043e \u0448\u0438\u043d\u0435 LMB (Local Memory Bus);AXI Interconnect \u0441 \u0434\u0432\u0443\u043c\u044f \u0432\u0435\u0434\u043e\u043c\u044b\u043c\u0438: \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 AXI INTC \u0438 AXI USB2 Device;Clocking Wizard \u043d\u0430 MMCM (Mixed-Mode Clock Manager): \u0438\u0437 50 \u041c\u0413\u0446 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u043f\u043b\u0430\u0442\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c 100 \u041c\u0413\u0446 \u0434\u043b\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438 24 \u041c\u0413\u0446 \u043e\u043f\u043e\u0440\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0434\u043b\u044f USB3300;Processor System Reset \u0438 MicroBlaze Debug Module (MDM) \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u043f\u043e JTAG;System ILA (Integrated Logic Analyzer, \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440) \u043d\u0430 \u0448\u0438\u043d\u0435 AXI \u0438 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0438 USB \u2014 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0440\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0435.\u0411\u043b\u043e\u043a-\u0434\u0438\u0437\u0430\u0439\u043d \u0432 Vivado IP IntegratorUSB3300 \u0442\u0430\u043a\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043e\u0442 FPGA: 24 \u041c\u0413\u0446 \u0441 MMCM \u0432\u044b\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u043d\u0430 \u0432\u0445\u043e\u0434 \u043a\u0432\u0430\u0440\u0446\u0430 PHY \u0447\u0435\u0440\u0435\u0437 ODDR. \u042d\u0442\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u044b\u0439 \u043f\u0440\u0438\u0451\u043c \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043d\u0430 \u043f\u0438\u043d \u0432 7-\u0439 \u0441\u0435\u0440\u0438\u0438: \u0442\u0430\u043a\u0442\u043e\u0432\u0430\u044f \u0441\u0435\u0442\u044c \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0438\u0434\u0442\u0438 \u0432 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0431\u0443\u0444\u0435\u0440. \u041e\u0431\u0440\u0430\u0442\u043d\u043e PHY \u043e\u0442\u0434\u0430\u0451\u0442 \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b ULPI 60 \u041c\u0413\u0446, \u043d\u0430 \u043d\u0451\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u044f\u0434\u0440\u043e USB.\u0412\u0435\u0440\u0445\u043d\u0438\u0439 \u043c\u043e\u0434\u0443\u043b\u044c (wrap.sv) \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0438\u043d\u044b \u043f\u043b\u0430\u0442\u044b \u0441 \u0431\u043b\u043e\u043a-\u0434\u0438\u0437\u0430\u0439\u043d\u043e\u043c. \u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0438\u043d\u043e\u0432 \u0437\u0430\u0434\u0430\u043d\u044b \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c\u0438 \u043f\u0440\u044f\u043c\u043e \u0432 \u043f\u043e\u0440\u0442\u0443:module wrap(    (* IOSTANDARD = &#171;LVCMOS33&#8243;, LOC=&#187;M21&#187; *) input  logic gen50_i,    \/\/ USB3300    (* IOSTANDARD = &#171;LVCMOS33&#8243;, LOC=&#187;N2&#187; *)  output logic ulpi_xtail_in_o,    (* IOSTANDARD = &#171;LVCMOS33&#8243;, LOC=&#187;D18&#187; *) input  logic ulpi_clkout_i,    (* IOSTANDARD = &#171;LVCMOS33&#8243;, LOC=&#187;F15&#187; *) input  logic ulpi_nxt_i,    (* IOSTANDARD = &#171;LVCMOS33&#8243;, LOC=&#187;G19&#187; *) input  logic ulpi_dir_i,    (* IOSTANDARD = &#171;LVCMOS33&#187;, SLEW = &#171;FAST&#187;, LOC=&#187;F20&#8243; *) output logic ulpi_stp_o,    (* IOSTANDARD = &#171;LVCMOS33&#187;, SLEW = &#171;FAST&#187;, LOC=&#187;J14&#8243; *) inout  logic ulpi_data0_io,    \/\/ &#8230; ulpi_data1_io .. ulpi_data7_io);logic clk_24;ODDR #(    .DDR_CLK_EDGE(&#171;OPPOSITE_EDGE&#187;),    .INIT        (1&#8217;b0),    .SRTYPE      (&#171;SYNC&#187;)) u_oddr_0 (    .Q (ulpi_xtail_in_o),    .C (clk_24),    .CE(&#8216;1), .D1(&#8216;0), .D2(&#8216;1), .R(&#8216;0), .S(&#8216;0));design_1_wrapper u_design_1_wrapper_0 (    .clk_50MHz     (gen50_i),    .clk_24_o      (clk_24),    .ext_reset_in  (&#8216;0),    .ULPI_0_clk    (ulpi_clkout_i),    .ULPI_0_data_io({ulpi_data7_io, \/* &#8230; *\/ ulpi_data0_io}),    .ULPI_0_dir    (ulpi_dir_i),    .ULPI_0_next   (ulpi_nxt_i),    .ULPI_0_rst    (),    .ULPI_0_stop   (ulpi_stp_o));endmodule\u0412\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442 \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b ULPI (60 \u041c\u0413\u0446, \u043f\u0435\u0440\u0438\u043e\u0434 16,667 \u043d\u0441) \u0438 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 PHY \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f\u043c \u0432\u0435\u043d\u0434\u043e\u0440\u0430 IP:create_clock -name ulpi_clock -period 16.667 [get_nets ulpi_clkout_i]set_input_delay  -max 4.5 -clock ulpi_clock {ulpi_dir_i ulpi_nxt_i}set_output_delay -max 7   -clock ulpi_clock {ulpi_stp_o}set_max_delay 24 -from [get_ports ulpi_dir_i] \\  -to [get_ports {ulpi_data0_io ulpi_data1_io ulpi_data2_io ulpi_data3_io \\                  ulpi_data4_io ulpi_data5_io ulpi_data6_io ulpi_data7_io}] -datapath_onlyset_max_delay \u043e\u0442 dir \u043a \u043b\u0438\u043d\u0438\u044f\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0443\u0436\u0435\u043d \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043f\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0443 dir PHY \u0437\u0430\u0431\u0438\u0440\u0430\u0435\u0442 \u0448\u0438\u043d\u0443 \u0441\u0435\u0431\u0435, \u0438 FPGA \u0434\u043e\u043b\u0436\u043d\u0430 \u0443\u0441\u043f\u0435\u0442\u044c \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u0431\u0443\u0444\u0435\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 Z-\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435.\u041f\u043e\u0447\u0435\u043c\u0443 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f: VBUS \u0438 self-poweredVBUS \u2014 \u043b\u0438\u043d\u0438\u044f \u043f\u0438\u0442\u0430\u043d\u0438\u044f +5 \u0412 \u0432 \u043a\u0430\u0431\u0435\u043b\u0435 USB. USB-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u0445\u043e\u0441\u0442\u0443, \u043e\u0442\u043a\u0443\u0434\u0430 \u0431\u0435\u0440\u0451\u0442 \u043f\u0438\u0442\u0430\u043d\u0438\u0435, \u0434\u0432\u0443\u043c\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438:\u0432 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u043f\u043e\u043b\u0435 bmAttributes: \u0431\u0438\u0442 6 \u2014 Self Powered;\u0432 \u043e\u0442\u0432\u0435\u0442\u0435 \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441 GET_STATUS \u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443: \u0431\u0438\u0442 0 \u2014 Self Powered.\u041f\u0440\u0438\u043c\u0435\u0440 xusb_storage \u0438\u0437 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0443\u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d \u043a\u0430\u043a self-powered: \u0432 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 bmAttributes = 0xC0, bMaxPower = 1 (2 \u043c\u0410), \u0430 GET_STATUS \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 0x0001. \u0421 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0432\u0441\u0451 \u0433\u043e\u0442\u043e\u0432\u043e.\u0410\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u0430\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435. ULPI \u2014 12-\u043f\u0440\u043e\u0432\u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043c\u0435\u0436\u0434\u0443 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c USB \u0438 PHY. \u0427\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e PHY \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0443 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043b\u0438\u043d\u0438\u0439 \u0432 \u0431\u0430\u0439\u0442\u0435 RX CMD: \u0431\u0438\u0442\u044b [1:0] \u2014 LineState, \u0431\u0438\u0442\u044b [3:2] \u2014 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 VBUS. \u042f\u0434\u0440\u043e AXI USB2 Device \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u044d\u0442\u0438 \u0431\u0438\u0442\u044b \u0432\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 \u0438 \u043e\u043f\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043d\u0438\u0445 \u0432\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u043c\u0435\u0441\u0442\u0430\u0445 \u0441\u0432\u043e\u0435\u0439 \u043b\u043e\u0433\u0438\u043a\u0438. \u041f\u043e\u043a\u0430 PHY \u043d\u0435 \u0441\u043e\u043e\u0431\u0449\u0438\u0442, \u0447\u0442\u043e VBUS \u0432 \u043d\u043e\u0440\u043c\u0435, \u044f\u0434\u0440\u043e \u0441\u0447\u0438\u0442\u0430\u0435\u0442, \u0447\u0442\u043e \u043a\u0430\u0431\u0435\u043b\u044c \u043d\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d, \u0438 \u043d\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043a \u0448\u0438\u043d\u0435.\u041d\u0430 \u044d\u0442\u043e\u0439 \u043f\u043b\u0430\u0442\u0435 \u0432\u044b\u0432\u043e\u0434 VBUS \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b USB3300 \u043d\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0451\u043d \u0441 \u043b\u0438\u043d\u0438\u0435\u0439 VBUS \u0440\u0430\u0437\u044a\u0451\u043c\u0430. \u0412 \u0442\u0438\u043f\u043e\u0432\u043e\u0439 \u0441\u0445\u0435\u043c\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043d\u0430 USB3300 \u044d\u0442\u0430 \u0446\u0435\u043f\u044c \u0435\u0441\u0442\u044c \u2014 \u043d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0435 \u043e\u043d\u0430 \u0437\u0430\u0447\u0451\u0440\u043a\u043d\u0443\u0442\u0430:\u0421\u0445\u0435\u043c\u0430 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f USB3300, \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a: USB3300 Data Sheet, Figure 7-1, \u00a9 Microchip Technology Inc.PHY \u0438\u0437\u043c\u0435\u0440\u044f\u0435\u0442 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 \u0441\u0432\u043e\u0451\u043c \u0432\u044b\u0432\u043e\u0434\u0435 VBUS \u0438 \u043f\u043e \u043d\u0435\u043c\u0443 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u0431\u0438\u0442\u044b VBUS \u0432 RX CMD. \u0420\u0430\u0437 \u043d\u0430 \u0432\u044b\u0432\u043e\u0434\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435\u0442, PHY \u0447\u0435\u0441\u0442\u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442, \u0447\u0442\u043e VBUS \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442.\u041d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u0441 \u043f\u0438\u0442\u0430\u043d\u0438\u0435\u043c \u043e\u0442 \u0448\u0438\u043d\u044b VBUS \u0435\u0441\u0442\u044c \u0432\u0441\u0435\u0433\u0434\u0430, \u0438\u043d\u0430\u0447\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u0431\u044b. \u041d\u0430 self-powered \u043f\u043b\u0430\u0442\u0435 \u044d\u0442\u043e \u043d\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043e, \u0438 \u044f\u0434\u0440\u043e \u00ab\u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438\u00bb \u043a \u0445\u043e\u0441\u0442\u0443 \u043d\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f.\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u2014 \u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u044f\u0434\u0440\u0430 SELF_POWERED. \u041a\u043e\u0433\u0434\u0430 \u043e\u043d \u0440\u0430\u0432\u0435\u043d 1, \u044f\u0434\u0440\u043e \u043f\u0440\u0438 \u0441\u0431\u0440\u043e\u0441\u0435 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0432\u043e\u0451 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 VBUS \u0432 \u00abVBUS \u0432 \u043d\u043e\u0440\u043c\u0435\u00bb \u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u0435\u0433\u043e \u0438\u0437 \u0431\u0438\u0442\u043e\u0432 VBUS \u0432 RX CMD. \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u044f\u0434\u0440\u0430 \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f: \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043b\u0438\u043d\u0438\u0439, \u043f\u0440\u0438\u0451\u043c \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043a\u0430\u043a \u0440\u0430\u043d\u044c\u0448\u0435.RTL \u044f\u0434\u0440\u0430 AXI USB2 Device \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c (IEEE 1735), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0430\u043a\u0430\u044f \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0430, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0435\u0433\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c\u0443 \u043a\u043e\u0434\u0443.\u0420\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u044f\u0434\u0440\u0430 \u2014 \u044d\u0442\u043e \u0434\u0432\u0430 \u0444\u0430\u0439\u043b\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043f\u043e 10 \u0442\u044b\u0441\u044f\u0447 \u0441\u0442\u0440\u043e\u043a: \u0432 Verilog-\u0444\u0430\u0439\u043b\u0435 23 \u043c\u043e\u0434\u0443\u043b\u044f, \u0432 VHDL-\u0444\u0430\u0439\u043b\u0435 12 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439. \u0418\u0435\u0440\u0430\u0440\u0445\u0438\u044f \u0441\u043c\u0435\u0448\u0430\u043d\u043d\u0430\u044f: \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u0441\u0430\u043c usbcore \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 Verilog, \u0430 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 VHDL-\u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439.\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0432\u0441\u044e \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u044e \u044f\u0434\u0440\u0430: \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u0432 \u043c\u043e\u0434\u0443\u043b\u044c usbcore (\u0438 \u0432 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0434\u043b\u044f HSIC \u2014 High-Speed Inter-Chip), \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u043e \u0432\u0441\u0435\u0445 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430\u0445 \u0438 \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c \u0432 \u043c\u043e\u0434\u0443\u043b\u0435 \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f axi_usb2_device. \u0414\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0440\u0443\u043a\u0430\u043c\u0438 \u0432 \u0442\u0430\u043a\u0438\u0445 \u0444\u0430\u0439\u043b\u0430\u0445 \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0443\u0442\u0438\u043b\u0438\u0442\u0443 hdl-param-propagate: \u043e\u043d\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0432 \u043c\u043e\u0434\u0443\u043b\u044c, \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u0432\u0441\u0435 \u0435\u0433\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0432 \u043d\u0438\u0445 \u0438 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0432\u0432\u0435\u0440\u0445 \u043f\u043e \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438, \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u044f \u0442\u0438\u043f \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043c\u0435\u0436\u0434\u0443 Verilog \u0438 VHDL.python3 hdl-param-propagate.py hdl axi_usb2_device_v5_0_32_usbcore SELF_POWERED integer 0 &#8212;stop-at axi_usb2_devicepython3 hdl-param-propagate.py hdl axi_usb2_device_v5_0_32_hsic_usbcore SELF_POWERED integer 0 &#8212;stop-at axi_usb2_device&#8212;stop-at \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u0434\u044a\u0451\u043c \u043d\u0430 \u043c\u043e\u0434\u0443\u043b\u0435 \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u044f\u0434\u0440\u0430, \u0430 \u0441 \u0444\u043b\u0430\u0433\u043e\u043c -n \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 diff.\u0412\u0430\u0436\u043d\u0430\u044f \u043e\u0433\u043e\u0432\u043e\u0440\u043a\u0430. \u041f\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 USB 2.0 (\u0440\u0430\u0437\u0434\u0435\u043b 7.1.5) \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043f\u043e\u0434\u0442\u044f\u0436\u043a\u0438 D+ \u0434\u043e\u043b\u0436\u0435\u043d \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c \u043e\u0442 VBUS \u043a\u0430\u0431\u0435\u043b\u044f: \u0435\u0441\u043b\u0438 VBUS \u043d\u0435\u0442, \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u043e\u0434\u0430\u0432\u0430\u0442\u044c \u0442\u043e\u043a \u0432 \u043b\u0438\u043d\u0438\u044e \u0434\u0430\u043d\u043d\u044b\u0445. \u0421 SELF_POWERED = 1 \u044f\u0434\u0440\u043e \u0441\u0447\u0438\u0442\u0430\u0435\u0442 VBUS \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u0432\u0441\u0435\u0433\u0434\u0430 \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043f\u043e\u0434\u0442\u044f\u0436\u043a\u0443 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u043a\u0430\u0431\u0435\u043b\u044f.\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c VBUS \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e, \u043a\u043e\u0433\u0434\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0438 \u0445\u043e\u0441\u0442 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u0435 \u0438\u043b\u0438 \u043a\u0430\u0431\u0435\u043b\u044c \u043d\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0440\u0430\u0431\u043e\u0442\u0435:\u0441\u0442\u0435\u043d\u0434\u043e\u0432\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u043b\u0430\u0442\u044b, \u043a\u0430\u043a \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435;USB-\u0441\u0432\u044f\u0437\u044c \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0440\u043f\u0443\u0441\u0430: \u043f\u043b\u0430\u0442\u0430 \u0441 FPGA \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u043a \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u043c\u0443 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0443 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u043c \u043a\u0430\u0431\u0435\u043b\u0435\u043c \u0438\u043b\u0438 \u0448\u043b\u0435\u0439\u0444\u043e\u043c;\u043f\u043b\u0430\u0442\u044b, \u0433\u0434\u0435 VBUS \u0440\u0430\u0437\u044a\u0451\u043c\u0430 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435 \u0437\u0430\u0432\u0435\u0434\u0451\u043d \u043d\u0430 PHY \u0438 \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u043a\u0430 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0430, \u0430 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d \u0437\u0430\u0440\u0430\u043d\u0435\u0435.\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c VBUS \u043f\u043e-\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c\u0443 \u043d\u0443\u0436\u043d\u043e, \u0435\u0441\u043b\u0438 \u043f\u043b\u0430\u0442\u0430 \u043f\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u0430, \u0430 \u043a\u0430\u0431\u0435\u043b\u044c \u043a \u0445\u043e\u0441\u0442\u0443 \u043c\u043e\u0433\u0443\u0442 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0438\u043b\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u2014 \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u043e\u0447\u0442\u0438 \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u0438\u0437\u0434\u0435\u043b\u0438\u0438. \u0411\u0435\u0437 \u044d\u0442\u043e\u0433\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u0434\u0432\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b:\u043a\u043e\u0433\u0434\u0430 \u0445\u043e\u0441\u0442 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d, \u0430 \u043f\u043b\u0430\u0442\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043f\u043e\u0434\u0442\u044f\u0436\u043a\u0430 D+ \u043f\u043e\u0434\u0430\u0451\u0442 \u0442\u043e\u043a \u0432 \u043f\u043e\u0440\u0442 \u0445\u043e\u0441\u0442\u0430 \u0447\u0435\u0440\u0435\u0437 \u0435\u0433\u043e \u0437\u0430\u0449\u0438\u0442\u043d\u044b\u0435 \u0434\u0438\u043e\u0434\u044b \u2014 \u044d\u0442\u043e \u043f\u0440\u044f\u043c\u043e \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0435\u0439;\u044f\u0434\u0440\u043e \u043d\u0435 \u0443\u0437\u043d\u0430\u0451\u0442 \u043e\u0431 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043a\u0430\u0431\u0435\u043b\u044f: \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u0448\u0438\u043d\u044b \u0432 \u0440\u0435\u0436\u0438\u043c suspend, \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u0438\u0442\u044c \u00ab\u043a\u0430\u0431\u0435\u043b\u044c \u0432\u044b\u043d\u0443\u043b\u0438\u00bb \u043e\u0442 \u00ab\u0445\u043e\u0441\u0442 \u0443\u0441\u043d\u0443\u043b\u00bb.\u041a\u0430\u043a \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0432 Xilinx IP\u041f\u043e\u043c\u0435\u043d\u044f\u0442\u044c HDL \u043c\u0430\u043b\u043e. \u0427\u0442\u043e\u0431\u044b \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0432 \u043e\u043a\u043d\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u044f\u0434\u0440\u0430 \u0432 IP Integrator \u0438 \u0434\u043e\u0448\u0451\u043b \u0434\u043e generic, \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0442\u0440\u0438 \u0432\u0435\u0449\u0438.1. XGUI-\u0441\u043a\u0440\u0438\u043f\u0442XGUI \u2014 Tcl-\u0441\u043a\u0440\u0438\u043f\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 Vivado \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u0440\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438 \u043e\u043a\u043d\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u044f\u0434\u0440\u0430. \u0414\u043b\u044f AXI USB2 Device \u044d\u0442\u043e xgui\/axi_usb2_device_v5_0.tcl. \u0412 init_gui \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0444\u043b\u0430\u0436\u043e\u043a, \u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 GUI \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043c\u043e\u0434\u0435\u043b\u0438 (\u0442\u043e \u0435\u0441\u0442\u044c \u0432 generic HDL):proc init_gui { IPINST } {    # &#8230; \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b &#8230;    set SELF_POWERED [ipgui::add_param $IPINST -parent $Page0 -name SELF_POWERED -widget checkBox]    set_property display_name &#171;Self Powered&#187; $SELF_POWERED    set_property tooltip &#171;Ignore VBUS state reported by the ULPI PHY&#187; $SELF_POWERED}proc update_MODELPARAM_VALUE.SELF_POWERED {MODELPARAM_VALUE.SELF_POWERED PARAM_VALUE.SELF_POWERED} {    set_property value [get_property value ${PARAM_VALUE.SELF_POWERED}] ${MODELPARAM_VALUE.SELF_POWERED}}\u0415\u0441\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e, Vivado \u043f\u0440\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u044f\u0434\u0440\u0430 \u0432\u044b\u0434\u0430\u0441\u0442:WARNING: [IP_Flow 19-469] Gui parameter(&#8216;SELF_POWERED&#8217;) creation is incomplete. Corresponding component parameter does not existERROR: [Ipptcl 7-17] Invalid Parameter &#8216;SELF_POWERED&#8217;.GUI \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0435\u0442 \u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430.2. component.xmlcomponent.xml \u2014 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u044f\u0434\u0440\u0430 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 IP-XACT (\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 IEEE 1685). \u0412 \u043d\u0451\u043c \u043d\u0443\u0436\u043d\u044b \u0434\u0432\u0435 \u0437\u0430\u043f\u0438\u0441\u0438. \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u2014 \u0442\u043e, \u0447\u0442\u043e \u0432\u0438\u0434\u043d\u043e \u0432 GUI \u0438 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430:&lt;spirit:parameter&gt;  &lt;spirit:name&gt;SELF_POWERED&lt;\/spirit:name&gt;  &lt;spirit:displayName&gt;Self Powered&lt;\/spirit:displayName&gt;  &lt;spirit:value spirit:format=&#187;long&#187; spirit:resolve=&#187;user&#187;                spirit:id=&#187;PARAM_VALUE.SELF_POWERED&#187;                spirit:choiceRef=&#187;choice_pairs_4873554b&#187; spirit:order=&#187;18&#8243;&gt;0&lt;\/spirit:value&gt;  &lt;spirit:vendorExtensions&gt;    &lt;xilinx:parameterInfo&gt;      &lt;xilinx:enablement&gt;        &lt;xilinx:isEnabled xilinx:resolve=&#187;generated&#187;                          xilinx:id=&#187;PARAM_ENABLEMENT.SELF_POWERED&#187;&gt;true&lt;\/xilinx:isEnabled&gt;&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-499394","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/499394","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=499394"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/499394\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=499394"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=499394"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=499394"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}