{"id":327675,"date":"2022-01-10T08:59:12","date_gmt":"2022-01-10T08:59:12","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=327675"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=327675","title":{"rendered":"<span>\u041f\u0435\u0440\u0432\u044b\u0435 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b \u0441\u043e \u0441\u043c\u0435\u0448\u0430\u043d\u043d\u044b\u043c Litex+Verilog \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c \u0434\u043b\u044f \u041f\u041b\u0418\u0421<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\" class=\"article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412 <a href=\"https:\/\/habr.com\/ru\/post\/594817\/\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a> \u043c\u044b \u043d\u0430\u0447\u0430\u043b\u0438 \u043e\u0441\u0432\u0430\u0438\u0432\u0430\u0442\u044c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u0448\u0438\u043d\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u043d\u0430 \u0431\u0430\u0437\u0435 \u0441\u0440\u0435\u0434\u044b Litex (\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u0441\u0451 \u0434\u0435\u043b\u0430\u0435\u0442 \u043d\u0430 \u041f\u0438\u0442\u043e\u043d\u0435) \u0441 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435\u043c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u043d\u0430 \u0412\u0435\u0440\u0438\u043b\u043e\u0433\u0435. \u0421\u0442\u0430\u0442\u044c\u044f \u0442\u0430\u043a \u0440\u0430\u0437\u0440\u043e\u0441\u043b\u0430\u0441\u044c, \u0447\u0442\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u043f\u044b\u0442\u044b \u043c\u044b \u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u043d\u0430 \u043f\u043e\u0442\u043e\u043c. \u041f\u0440\u0438\u0448\u043b\u0430 \u043f\u043e\u0440\u0430 \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0438\u0445. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c\u0441\u044f \u043a VGA-\u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0443 \u0438 \u043f\u043e\u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u044b\u0434\u0430\u0451\u0442 \u043c\u043e\u0434\u0443\u043b\u044c <strong>gpu<\/strong>, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0432 \u0444\u0430\u0439\u043b\u0435 <strong>gpu.v<\/strong>, \u0442\u043e \u0435\u0441\u0442\u044c, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Verilog. \u0423\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043c\u044b \u0438\u043c \u0431\u0443\u0434\u0435\u043c \u0447\u0435\u0440\u0435\u0437 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u043a\u043e\u043c\u0430\u043d\u0434, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u0432 \u0431\u043b\u043e\u043a\u0435 CSR, \u0441\u043f\u0440\u043e\u0435\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u043d\u0430 \u0448\u0438\u043d\u0443 Wishbone. \u0412\u0441\u0435 \u044d\u0442\u0438 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a \u0441\u0440\u0435\u0434\u0435 Litex. \u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u043e\u043f\u044b\u0442\u043e\u0432 \u043c\u044b \u0442\u043e\u0436\u0435 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0448\u0442\u0430\u0442\u043d\u044b\u0435, Litex-\u043e\u0432\u0441\u043a\u0438\u0435. \u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0435\u043c!<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" height=\"600\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3d2\/828\/7ae\/3d28287ae1885be39c31a823db54a1c6.png\" data-width=\"700\"\/><figcaption><\/figcaption><\/figure>\n<h2>\u041b\u0443\u0447 \u0441\u043f\u0438\u0442 \u2013 \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u043a\u0430 \u0438\u0434\u0451\u0442<\/h2>\n<p>\u0418\u0442\u0430\u043a, \u043c\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 \u0448\u043d\u0443\u0440 VGA. \u041d\u043e \u0447\u0442\u043e \u0437\u0430 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0432 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u043e\u043c \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0440\u0430\u0445 \u0441\u0435\u0442\u0438 \u043a\u043e\u0434\u0435? \u041e\u043d\u0438 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0435. \u041c\u043d\u043e\u0433\u0438\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0441\u044b\u043b\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b&#8230; \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435, \u043e\u0442\u043a\u0443\u0434\u0430 \u043e\u043d\u0438 \u0432\u0437\u044f\u043b\u0438\u0441\u044c.\u00a0\u0415\u0441\u043b\u0438 \u044f \u0441\u043f\u0440\u043e\u0448\u0443, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u043e\u043a \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u0432 \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u043a\u0435 VGA, \u043c\u043d\u043e\u0433\u0438\u0435 \u043e\u0442\u0432\u0435\u0442\u044f\u0442, \u0447\u0442\u043e 480. \u0410 \u0435\u0441\u043b\u0438 \u044f \u0441\u043f\u0440\u043e\u0448\u0443, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u043e\u043a \u0431\u044b\u043b\u043e \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u043e\u0442\u0435\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u0430, \u043c\u043d\u043e\u0433\u0438\u0435 \u0442\u0430\u043a\u0436\u0435 \u043e\u0442\u0432\u0435\u0442\u044f\u0442, \u0447\u0442\u043e 625. \u0421\u0435\u0439\u0447\u0430\u0441 \u043c\u044b \u0443\u0437\u043d\u0430\u0435\u043c \u0441\u0442\u0440\u0430\u0448\u043d\u0443\u044e \u0442\u0430\u0439\u043d\u0443. \u0425\u043e\u0442\u044c \u044d\u0442\u0438 \u0446\u0438\u0444\u0440\u044b \u0438 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c (\u043f\u0435\u0440\u0432\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u0440\u043e\u0434\u043e\u043c \u0438\u0437 \u0448\u0435\u0441\u0442\u0438\u0434\u0435\u0441\u044f\u0442\u0438\u0433\u0435\u0440\u0446\u043e\u0432\u043e\u0439 NTSC, \u0430 \u0432\u0442\u043e\u0440\u043e\u0439 \u2013 \u0438\u0437 \u043d\u0430\u0448\u0435\u0439 \u043f\u044f\u0442\u0438\u0434\u0435\u0441\u044f\u0442\u0438\u0433\u0435\u0440\u0446\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b), \u043d\u043e \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0440\u0430\u0437\u043d\u044b\u043c \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f\u043c.<\/p>\n<p>\u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e 480 \u0441\u0442\u0440\u043e\u043a \u0432 VGA \u2013 \u044d\u0442\u043e \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u0432\u0438\u0434\u0438\u043c\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438. \u0410 625 \u0441\u0442\u0440\u043e\u043a \u0432 \u043e\u0442\u0435\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u043a\u0435 \u2013 \u044d\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u0442\u0440\u043e\u043a\u0438, \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0435 \u0432 \u0441\u0438\u0433\u043d\u0430\u043b\u0435. \u0412 \u0447\u0451\u043c \u0440\u0430\u0437\u043d\u0438\u0446\u0430?<\/p>\n<p>\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0432 \u043a\u0438\u043d\u0435\u0441\u043a\u043e\u043f\u0435 \u043b\u0443\u0447\u0443 \u043d\u0443\u0436\u043d\u043e \u0432\u0440\u0435\u043c\u044f \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0445\u043e\u0434\u0430. \u0414\u043e\u0439\u0434\u044f \u0434\u043e \u043d\u0438\u0436\u043d\u0435\u0439 \u0442\u043e\u0447\u043a\u0438 \u044d\u043a\u0440\u0430\u043d\u0430, \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u043e\u043b\u0435\u0442\u0435\u0442\u044c \u043d\u0430\u0437\u0430\u0434. \u0418 \u0435\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0432\u0440\u0435\u043c\u044f, \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0435, \u0447\u0435\u043c \u0432\u0440\u0435\u043c\u044f \u0445\u043e\u0434\u0430 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438. \u0423 \u043e\u0447\u0435\u043d\u044c \u0441\u0442\u0430\u0440\u044b\u0445 \u0447\u0451\u0440\u043d\u043e-\u0431\u0435\u043b\u044b\u0445 \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u043e\u0432 \u043f\u0440\u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u044f\u0440\u043a\u043e\u0441\u0442\u0438 \u044d\u0442\u0438 \u043b\u0438\u043d\u0438\u0438 \u0434\u0430\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0440\u0430\u0437\u0433\u043b\u044f\u0434\u0435\u0442\u044c. \u042f \u0432 \u0434\u0435\u0442\u0441\u0442\u0432\u0435 \u0442\u0430\u043a \u043b\u044e\u0431\u0438\u043b \u0431\u0430\u043b\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u0412\u043e\u0442 \u044f \u043d\u0430\u0448\u0451\u043b \u043d\u0430 \u0413\u0443\u0433\u043b\u0435 \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0439 \u0440\u0438\u0441\u0443\u043d\u043e\u043a:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" height=\"288\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8b7\/934\/6eb\/8b79346ebaf482f2a55a2bf0882afba9.png\" data-width=\"400\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0432 \u0441\u0438\u0433\u043d\u0430\u043b\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441. \u0427\u0442\u043e \u0432 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u2013 \u043d\u0435 \u0432\u0430\u0436\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u043b\u0443\u0447 \u0437\u0434\u043e\u0440\u043e\u0432\u043e\u0433\u043e \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u0430 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u043e\u0433\u0430\u0448\u0435\u043d. \u041d\u043e \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u0441\u0430\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043e \u0431\u044b\u0442\u044c \u0434\u043e\u043b\u0436\u043d\u043e.<\/p>\n<p>\u0422\u043e \u0436\u0435 \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0438 \u0441\u0442\u0440\u043e\u0447\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0445\u043e\u0434\u0430, \u0445\u043e\u0442\u044c \u0442\u0430\u043c \u0432\u0440\u0435\u043c\u044f \u0438 \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u044c\u0448\u0435.<\/p>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435, \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0434\u0430 \u0435\u0449\u0451 \u0438 \u0434\u043e\u043a\u0432\u0430\u0440\u0446\u0435\u0432\u044b\u0445 \u0432\u0440\u0435\u043c\u0451\u043d, \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u0439\u043a\u0438. \u0412\u043e\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0423\u042d\u0418\u0422:<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" height=\"499\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/fc6\/dec\/95a\/fc6dec95a320e4bc8b26a020f2bfb2d6.png\" data-width=\"624\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0411\u0435\u043b\u044b\u0435 \u0442\u043e\u043d\u043a\u0438\u0435 \u043b\u0438\u043d\u0438\u0438 \u043d\u0430 \u0440\u0435\u043f\u0435\u0440\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043f\u043e \u043a\u0440\u0430\u044f\u043c \u044d\u043a\u0440\u0430\u043d\u0430, \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u043b\u0438 \u0441\u043e\u0432\u043c\u0435\u0449\u0430\u0442\u044c\u0441\u044f \u0441 \u0435\u0433\u043e \u0433\u0440\u0430\u043d\u0438\u0446\u0430\u043c\u0438. \u0427\u0442\u043e \u0437\u0430 \u043b\u0438\u043d\u0438\u0435\u0439 \u2013 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0432\u0438\u0434\u043d\u043e. \u041d\u0443, \u044d\u0442\u043e \u043d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439, \u0435\u0441\u043b\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043b\u0430\u0432\u0430\u0442\u044c. \u0410 \u0432 \u0441\u0438\u0433\u043d\u0430\u043b\u0435 \u044d\u0442\u0438 \u0442\u043e\u0447\u043a\u0438 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0434\u043e\u043b\u0436\u043d\u044b!<\/p>\n<p>\u0412\u043e\u0442 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043d\u0435 \u0432\u0441\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 (\u0434\u0430 \u0438 \u0442\u043e\u0447\u043a\u0438 \u0441\u0442\u0440\u043e\u043a) \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432\u0438\u0434\u0438\u043c\u044b\u043c\u0438. \u0418\u0437 \u043e\u0442\u0435\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 625 \u0441\u0442\u0440\u043e\u043a, \u0432\u0438\u0434\u0438\u043c\u044b\u043c\u0438 \u044f\u0432\u043b\u044f\u043b\u0438\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e 576. \u0410 \u0432 \u0430\u043c\u0435\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u043e\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0435, 480 \u0441\u0442\u0440\u043e\u043a \u2013 \u044d\u0442\u043e \u0432\u0438\u0434\u0438\u043c\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u044d\u043a\u0440\u0430\u043d\u0430 \u043f\u0440\u0438 525 \u0441\u0442\u0440\u043e\u043a\u0430\u0445 \u0432 \u0441\u0438\u0433\u043d\u0430\u043b\u0435. <\/p>\n<p>\u0428\u043b\u043e \u0432\u0440\u0435\u043c\u044f. \u0423\u0448\u043b\u0438 \u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u0435 \u043a\u0438\u043d\u0435\u0441\u043a\u043e\u043f\u044b. \u0418\u0445 \u0437\u0430\u043c\u0435\u043d\u0438\u043b\u0438 \u043c\u0430\u0442\u0440\u0438\u0446\u044b, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435\u0442 \u043d\u0438 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0433\u043e \u043b\u0443\u0447\u0430, \u043d\u0438 \u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0445\u043e\u0434\u0430, \u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0434\u043b\u044f \u043d\u0438\u0445 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u041e\u0417\u0423, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u043a\u0438 \u0443\u0436\u0435 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f. \u041d\u043e \u0434\u043b\u044f \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438 \u0441\u0438\u0433\u043d\u0430\u043b \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u043f\u0440\u0435\u0436\u043d\u0438\u043c. \u041c\u0430\u043b\u043e \u0442\u043e\u0433\u043e, \u0435\u0441\u043b\u0438 \u0446\u0438\u043a\u043b \u0441\u0442\u0430\u0442\u0435\u0439 \u043d\u0435 \u043f\u0440\u0435\u0440\u0432\u0451\u0442\u0441\u044f \u0438\u0437-\u0437\u0430 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u0441\u043f\u0440\u043e\u0441\u0430, \u0438 \u043c\u044b \u0434\u043e\u0439\u0434\u0451\u043c \u0434\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0433\u043e HDMI, \u0442\u043e \u0443\u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0434\u0430\u0436\u0435 \u0442\u0430\u043c \u0435\u0441\u0442\u044c \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u044b\u0435 \u0443\u0447\u0430\u0441\u0442\u043a\u0438 \u0440\u0430\u0441\u0442\u0440\u0430! \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 640\u0445480 \u0442\u043e\u0447\u0435\u043a, \u043c\u044b \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u043e \u043f\u0440\u043e\u0432\u043e\u0434\u0430\u043c \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430.<\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u044f \u043e\u043f\u0443\u0441\u0442\u0438\u043b \u043c\u0430\u0441\u0441\u0443 \u044d\u0444\u0438\u0440\u043d\u044b\u0445 \u0448\u0442\u0443\u0447\u0435\u043a: \u0437\u0430\u043c\u0435\u0448\u0438\u0432\u0430\u043d\u0438\u0435 \u0441\u0438\u043d\u0445\u0440\u043e\u0438\u043c\u043f\u0443\u043b\u044c\u0441\u043e\u0432 \u0432 \u0441\u0430\u043c \u0441\u0438\u0433\u043d\u0430\u043b, \u0447\u0435\u0440\u0435\u0441\u0441\u0442\u0440\u043e\u0447\u043d\u0443\u044e \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u043a\u0443 \u0438 \u043f\u0440\u043e\u0447\u0435\u0435, \u043f\u0440\u043e\u0447\u0435\u0435, \u043f\u0440\u043e\u0447\u0435\u0435. \u041c\u044b \u0441\u0435\u0439\u0447\u0430\u0441 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u0441\u0430\u043c\u0443 \u0438\u0434\u0435\u044e, \u043e\u0442\u043a\u0443\u0434\u0430 \u0432\u0437\u044f\u043b\u0438\u0441\u044c \u044d\u0442\u0438 \u043b\u0438\u0448\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438 \u0442\u043e\u0447\u043a\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0442\u0440\u043e\u043a, \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u0432 \u0438\u0445 \u043a \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u043d\u044b\u043c \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u043c. \u0427\u0442\u043e \u0436\u0435 \u0434\u043e \u0442\u043e\u0447\u043d\u044b\u0445 \u0446\u0438\u0444\u0440, \u0442\u043e \u043c\u044b \u0438\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b, \u0442\u0430\u043a \u0447\u0442\u043e \u0432\u0441\u0435 \u043d\u044e\u0430\u043d\u0441\u044b \u043d\u0430\u043c \u043d\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f. \u0415\u0441\u0442\u044c \u043c\u0430\u0441\u0441\u0430 \u0441\u0442\u0430\u0442\u0435\u0439, \u0433\u0434\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0447\u0435\u043a \u043d\u0430\u0434\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435. \u041f\u0440\u0438\u0447\u0451\u043c \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437\u043c\u0435\u0440\u044f\u044e\u0442\u0441\u044f \u0432 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445, \u043d\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u041f\u041b\u0418\u0421 \u043c\u044b \u043e\u043f\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u043f\u043e\u043d\u044f\u0442\u0438\u044f\u043c\u0438 \u00ab\u0442\u043e\u0447\u043a\u0430\u00bb \u0438 \u00ab\u0441\u0442\u0440\u043e\u043a\u0430\u00bb. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043b\u0438\u0431\u043e \u043a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0442 \u043d\u0430\u043c \u0443\u0437\u043d\u0430\u0442\u044c \u0438\u043b\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u044d\u0442\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u0442\u0430\u043a\u0438\u0445 \u0435\u0434\u0438\u043d\u0438\u0446\u0430\u0445 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 \u043a\u0430\u0434\u0440\u043e\u0432. <\/p>\n<p>\u0412\u043e\u0442 \u0445\u043e\u0440\u043e\u0448\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u0441 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u044f\u0441\u043d\u044f\u0435\u0442 \u0441\u0443\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043e\u043a \u043a \u0441\u0438\u0433\u043d\u0430\u043b\u0443 \u0441 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u043e\u0439 \u043a \u041f\u041b\u0418\u0421 (\u043d\u043e \u0431\u0435\u0437 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u044f \u043e\u043f\u0438\u0441\u0430\u043b \u0432\u044b\u0448\u0435): <a href=\"https:\/\/eax.me\/fpga-vga\/\" rel=\"noopener noreferrer nofollow\">\u0423\u0447\u0438\u043c iCEstick \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0432\u0438\u0434\u0435\u043e-\u0441\u0438\u0433\u043d\u0430\u043b \u043f\u043e VGA | \u0417\u0430\u043f\u0438\u0441\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430 (eax.me)<\/a><\/p>\n<p>\u041e\u0442\u0442\u0443\u0434\u0430 \u0435\u0441\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b <a href=\"http:\/\/martin.hinner.info\/vga\/timing.html\" rel=\"noopener noreferrer nofollow\">martin.hinner.info\/vga\/timing.html<\/a><\/p>\n<p>\u0410 \u0432\u043e\u0442 \u2013 \u0437\u0430\u0431\u0430\u0432\u043d\u044b\u0439 \u043e\u043d\u043b\u0430\u0439\u043d-\u043a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440: <a href=\"https:\/\/tomverbeure.github.io\/video_timings_calculator\" rel=\"noopener noreferrer nofollow\">Video Timings Calculator (tomverbeure.github.io)<\/a><\/p>\n<p>\u0423\u0444\u0444\u0444!\u00a0\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0430\u0442 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0432 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u043e\u043c \u043d\u0430\u043c\u0438 \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0440\u0430\u0445 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u0444\u0430\u0439\u043b\u0435 <strong>hvsync_generator.v<\/strong>. \u0421\u0440\u0430\u0432\u043d\u0438\u0442\u0435 \u0441\u0430\u043c\u0438:<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" height=\"546\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/401\/7f0\/b11\/4017f0b1134a80583edbd2b7fcf4e591.png\" data-width=\"598\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041a\u043e\u0435-\u0447\u0442\u043e \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u043b\u043e, \u043d\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u043e\u043d\u043b\u0430\u0439\u043d-\u043a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440\u0430, \u043a\u0441\u0442\u0430\u0442\u0438, \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442 \u0442\u043e\u0447\u043d\u0435\u0435:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b55\/e1f\/9fe\/b55e1f9fe22543e2315a4006597edd67.PNG\" width=\"738\" height=\"699\"\/><figcaption><\/figcaption><\/figure>\n<h2>\u041f\u0430\u0440\u0430 \u0441\u043b\u043e\u0432 \u043f\u0440\u043e \u0444\u0430\u0439\u043b hvsync_generator.v<\/h2>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0435\u0441\u043b\u0438 \u043c\u044b \u0443\u0436 \u0437\u0430\u0433\u043e\u0432\u043e\u0440\u0438\u043b\u0438 \u043f\u0440\u043e \u0444\u0430\u0439\u043b <strong>hvsync_generator.v<\/strong>, \u0442\u043e \u0441 \u043d\u0438\u043c \u0432\u0441\u0451 \u043f\u0440\u043e\u0441\u0442\u043e. \u041e\u043d \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u043a\u0430\u0434\u0440\u043e\u0432\u044b\u0439 \u0438 \u0441\u0442\u0440\u043e\u0447\u043d\u044b\u0439 \u0441\u0438\u043d\u0445\u0440\u043e\u0438\u043c\u043f\u0443\u043b\u044c\u0441\u044b, \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c. \u0427\u0442\u043e\u0431\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043d\u0430\u0434\u043e \u044d\u0442\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0437\u0430\u0434\u0430\u0442\u044c \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435 \u0437\u0430\u0431\u044b\u0442\u044c \u0441\u043c\u0435\u043d\u0438\u0442\u044c \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u043e\u0447\u0435\u043a, \u043e \u0447\u0451\u043c \u043c\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435. \u0410 \u0432\u043e\u0442 \u0442\u0430\u043a \u0438\u0437 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0440\u0430\u0431\u043e\u0447\u0438\u0435:<\/p>\n<pre><code>  \/\/ derived constants   parameter H_SYNC_START    = H_DISPLAY + H_FRONT;   parameter H_SYNC_END      = H_DISPLAY + H_FRONT + H_SYNC - 1;   parameter H_MAX           = H_DISPLAY + H_BACK + H_FRONT + H_SYNC - 1;   parameter V_SYNC_START    = V_DISPLAY + V_BOTTOM;   parameter V_SYNC_END      = V_DISPLAY + V_BOTTOM + V_SYNC - 1;   parameter V_MAX           = V_DISPLAY + V_TOP + V_BOTTOM + V_SYNC - 1;<\/code><\/pre>\n<p>\u0412\u043e\u0442 \u0442\u0430\u043a \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f:<\/p>\n<pre><code>  wire hmaxxed = (hpos == H_MAX) || reset;  \/\/ set when hpos is maximum   wire vmaxxed = (vpos == V_MAX) || reset;  \/\/ set when vpos is maximum<\/code><\/pre>\n<p>\u041d\u0443, \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0438 \u0441\u0442\u0440\u043e\u043a \u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u0438\u043c\u043f\u0443\u043b\u044c\u0441\u043e\u0432. <\/p>\n<pre><code>  \/\/ horizontal position counter   always @(posedge clk)   begin     hsync &lt;= (hpos>=H_SYNC_START &amp;&amp; hpos&lt;=H_SYNC_END);     if(hmaxxed)       hpos &lt;= 0;     else       hpos &lt;= hpos + 1;   end    \/\/ vertical position counter   always @(posedge clk)   begin     vsync &lt;= (vpos>=V_SYNC_START &amp;&amp; vpos&lt;=V_SYNC_END);     if(hmaxxed)       if (vmaxxed)         vpos &lt;= 0;       else         vpos &lt;= vpos + 1;   end    \/\/ display_on is set when beam is in \"safe\" visible frame   assign display_on = (hpos&lt;H_DISPLAY) &amp;&amp; (vpos&lt;V_DISPLAY);<\/code><\/pre>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043e\u0442\u0441\u044e\u0434\u0430 \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u044b \u0432\u044b\u0445\u043e\u0434\u044f\u0442 \u0432\u0441\u0435\u0433\u0434\u0430 \u0432 \u043f\u0440\u044f\u043c\u043e\u0439 \u043f\u043e\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u0438. \u041a\u0430\u0436\u0435\u0442\u0441\u044f, \u043a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440 \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u044d\u0442\u043e \u0434\u0435\u043b\u043e:  <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/030\/ed4\/5eb\/030ed45eba35e1914906e50331eccd36.PNG\" width=\"777\" height=\"55\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0440\u043e\u0441\u0442\u043e \u0442\u043e\u0442 \u0436\u0435 \u0440\u0435\u0436\u0438\u043c 640\u0445480 \u043f\u0440\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0447\u0430\u0441\u0442\u043e\u0442\u0430\u0445 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u043e\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u0438\u043c\u043f\u0443\u043b\u044c\u0441\u043e\u0432. \u041d\u043e \u0437\u0434\u0435\u0441\u044c \u2013 \u043d\u0443\u0436\u043d\u0430 \u0442\u0430\u043a\u0430\u044f. \u042f \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.\u00a0 \u0410 \u0433\u0434\u0435 \u0431\u0440\u0430\u0442\u044c \u0446\u0438\u0444\u0440\u044b \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u0432\u0438\u0434\u0435\u043e\u0440\u0435\u0436\u0438\u043c\u043e\u0432 &#8212; \u0432\u044b \u0442\u0435\u043f\u0435\u0440\u044c \u0437\u043d\u0430\u0435\u0442\u0435.<\/p>\n<h2>\u0427\u0442\u043e \u0443 \u043d\u0430\u0441 \u0441 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439<\/h2>\n<p>\u0412 \u043f\u0440\u043e\u0448\u043b\u044b\u0439 \u0440\u0430\u0437 \u044f \u0443\u0436\u0435 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b, \u0447\u0442\u043e \u043d\u0430\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u0438\u0442 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439. \u0422\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446 \u043c\u044b \u043f\u043e\u043d\u044f\u043b\u0438, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u0430, \u0431\u043b\u0438\u0437\u043a\u0430\u044f \u043a 25 \u041c\u0413\u0446. \u0410 \u0432 \u043a\u043e\u0434\u0435 \u043d\u0430 \u041f\u0438\u0442\u043e\u043d\u0435 \u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u043b\u00a0\u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/18e\/98d\/f65\/18e98df650d12f792c06342600a36d0a.PNG\" width=\"772\" height=\"53\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412\u0440\u043e\u0434\u0435, \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c <strong>clk<\/strong>. \u041d\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0434\u043e\u043b\u0433\u043e \u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0430\u0442\u044c, \u0430 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0412\u0435\u0440\u0438\u043b\u043e\u0433\u043e\u0432\u0441\u043a\u0438\u0439 \u0444\u0430\u0439\u043b:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/420\/cb0\/aa3\/420cb0aa32a7299b75b0463a4084b8f0.PNG\" width=\"767\" height=\"231\"\/><figcaption><\/figcaption><\/figure>\n<details class=\"spoiler\">\n<summary>\u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u043c.<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>gpu gpu( .clk(sys_clk), .x0(main_x0_storage), .x1(main_x1_storage), .y0(main_y0_storage), .y1(main_y1_storage), .color(gpio0), .hsync(gpio2), .vsync(gpio3) );<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u041f\u043e\u0433\u043e\u0434\u0438\u0442\u0435, \u043a\u0430\u043a\u043e\u0439 \u0435\u0449\u0451 <strong>sys_clk<\/strong>? \u041c\u044b \u0436\u0435 \u043f\u0440\u043e\u0441\u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e <strong>clk<\/strong>\u2026 \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0430\u043c \u043f\u043e\u0432\u0435\u0437\u043b\u043e, \u0443 \u043d\u0430\u0441 \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 \u043f\u0440\u0438\u043f\u0430\u044f\u043d \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043d\u0430 25 \u041c\u0413\u0446. \u041d\u043e \u0435\u0449\u0451 \u0435\u0441\u0442\u044c \u0448\u0430\u043d\u0441, \u0447\u0442\u043e \u044d\u0442\u043e \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0445\u0438\u0442\u0440\u043e\u0435 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435\u2026 \u041d\u0443-\u043a\u0430\u2026 \u0418\u0449\u0435\u043c, \u0433\u0434\u0435 \u044d\u0442\u043e\u0442 \u0441\u0438\u0433\u043d\u0430\u043b \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f\u2026<\/p>\n<p><code>assign sys_clk = basesoc_crg_clkout0;<\/code><\/p>\n<p>\u0433\u0434\u0435:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/11e\/0f9\/525\/11e0f9525e14a9ecdf40b0624afa9ef6.PNG\" width=\"770\" height=\"579\"\/><figcaption><\/figcaption><\/figure>\n<details class=\"spoiler\">\n<summary>\u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u043c.<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>(* FREQUENCY_PIN_CLKI = \"25.0\", FREQUENCY_PIN_CLKOP = \"60.0\", FREQUENCY_PIN_CLKOS = \"60.0\", ICP_CURRENT = \"6\", LPF_RESISTOR = \"16\", MFG_ENABLE_FILTEROPAMP = \"1\", MFG_GMCREF_SEL = \"2\" *) EHXPLLL #( .CLKFB_DIV(5'd24), .CLKI_DIV(1'd1), .CLKOP_CPHASE(4'd9), .CLKOP_DIV(4'd10), .CLKOP_ENABLE(\"ENABLED\"), .CLKOP_FPHASE(1'd0), .CLKOS2_CPHASE(1'd0), .CLKOS2_DIV(1'd1), .CLKOS2_ENABLE(\"ENABLED\"), .CLKOS2_FPHASE(1'd0), .CLKOS_CPHASE(4'd14), .CLKOS_DIV(4'd10), .CLKOS_ENABLE(\"ENABLED\"), .CLKOS_FPHASE(1'd0), .FEEDBK_PATH(\"INT_OS2\") ) EHXPLLL ( .CLKI(basesoc_crg_clkin), .RST(basesoc_crg_reset), .STDBY(basesoc_crg_stdby), .CLKOP(basesoc_crg_clkout0), .CLKOS(basesoc_crg_clkout1), .CLKOS2(builder_subfragments_crg_ecp5pll), .LOCK(builder_subfragments_crg_locked) );<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0441\u043e\u043c\u043d\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u0432\u0435\u044f\u043d\u044b! \u041f\u0435\u0440\u0435\u0434 \u043d\u0430\u043c\u0438 \u0441\u0430\u043c\u044b\u0435 \u0447\u0442\u043e \u043d\u0438 \u043d\u0430 \u0435\u0441\u0442\u044c 60 \u043c\u0435\u0433\u0430\u0433\u0435\u0440\u0446. \u0410 \u043d\u0430\u043c \u043d\u0430\u0434\u043e 25! \u0418 \u043e\u043d\u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0435\u0441\u0442\u044c, \u043d\u0430\u0434\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u041f\u0438\u0442\u043e\u043d\u043e\u0432\u0441\u043a\u0438\u0439 \u0441\u043a\u0440\u0438\u043f\u0442. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u044f \u0441\u0443\u043d\u0443 \u043d\u043e\u0441 \u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0432 \u0443\u0436\u0435 \u0445\u043e\u0440\u043e\u0448\u043e \u043d\u0430\u043c \u0437\u043d\u0430\u043a\u043e\u043c\u043e\u043c \u0444\u0430\u0439\u043b\u0435 <strong>Litex\\litex-boards\\litex_boards\\targets\\colorlight_5a_75x.py.<\/strong><\/p>\n<pre><code># Clk \/ Rst         if not use_internal_osc:             clk = platform.request(\"clk25\")             clk_freq = 25e6         else:             clk = Signal()             div = 5             self.specials += Instance(\"OSCG\",                                 p_DIV = div,                                 o_OSC = clk)             clk_freq = 310e6\/div          rst_n = 1 if not with_rst else platform.request(\"user_btn_n\", 0)          # PLL         self.submodules.pll = pll = ECP5PLL()         self.comb += pll.reset.eq(~rst_n | self.rst)         pll.register_clkin(clk, clk_freq)         pll.create_clkout(self.cd_sys,    sys_clk_freq)         if sdram_rate == \"1:2\":             pll.create_clkout(self.cd_sys2x,    2*sys_clk_freq)             pll.create_clkout(self.cd_sys2x_ps, 2*sys_clk_freq, phase=180) # Idealy 90\u00b0 but needs to be increased.         else:            pll.create_clkout(self.cd_sys_ps, sys_clk_freq, phase=180) # Idealy 90\u00b0 but needs to be increased.<\/code><\/pre>\n<p>\u0414\u0435\u043b\u043e \u044f\u0441\u043d\u043e\u0435, \u0447\u0442\u043e \u0434\u0435\u043b\u043e \u0442\u0451\u043c\u043d\u043e\u0435. \u0412\u043e\u0442 \u044f \u0432\u0438\u0436\u0443 <strong>clk<\/strong>. \u0412\u0440\u043e\u0434\u0435 \u043a\u0430\u043a, \u044d\u0442\u043e \u0432\u0445\u043e\u0434\u2026 \u041a\u043e\u0440\u043e\u0447\u0435, \u043a\u043e\u043d\u0447\u0430\u0435\u043c \u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u043f\u043e-\u0441\u0443\u0445\u043e\u043c\u0443! \u0417\u0440\u044f \u044f \u0447\u0442\u043e \u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 Visual Studio? \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0442\u0440\u0430\u0441\u0441\u0435\u0440\u043d\u0443\u0442\u044c \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0433\u0434\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u0441\u0438\u0433\u043d\u0430\u043b, \u043d\u0435 \u0434\u043e\u0436\u0438\u0434\u0430\u044f\u0441\u044c \u043c\u0438\u043b\u043e\u0441\u0442\u0438 \u043e\u0442 \u043f\u0440\u0438\u0440\u043e\u0434\u044b! \u0418\u0434\u0451\u043c \u0432 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u0432 \u043f\u0440\u043e\u0448\u043b\u044b\u0439 \u0440\u0430\u0437, \u0438 \u0441\u0442\u0430\u0432\u0438\u043c \u0442\u043e\u0447\u043a\u0443 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430 \u0437\u0434\u0435\u0441\u044c:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" height=\"250\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/63b\/eb9\/22d\/63beb922de1aa50d5224685264bd4e14.png\" data-width=\"487\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435, \u0438 \u0441\u043d\u0430\u0447\u0430\u043b\u0430, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0433\u043b\u0430\u0437\u043e\u043c\u0435\u0440, \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0442\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u0441\u0435\u0439\u0447\u0430\u0441:<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" height=\"191\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9c9\/992\/770\/9c99927709a903ee3022ab053370accc.png\" data-width=\"623\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u044f \u043d\u0430\u0445\u0430\u043b\u044c\u043d\u043e \u0441\u0442\u0430\u0432\u043b\u044e \u043a\u0443\u0440\u0441\u043e\u0440 \u043d\u0430 \u043f\u043e\u043b\u0435 <strong>cd_sys<\/strong> \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u044e \u0435\u0437\u0434\u0438\u0442\u044c \u043f\u043e \u0432\u0441\u0435\u043c \u043f\u043e\u043b\u044f\u043c \u044d\u0442\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439, \u043f\u044b\u0442\u0430\u044f\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u0447\u0442\u043e-\u0442\u043e, \u043f\u043e\u0445\u043e\u0436\u0435\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u044f \u0443\u0436\u0435 \u0432\u0438\u0434\u0435\u043b, \u043d\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0435 \u0447\u0442\u043e-\u0442\u043e, \u043f\u043e\u0445\u043e\u0436\u0435\u0435 \u043d\u0430 \u0432\u0445\u043e\u0434 PLL. \u041d\u0435 \u043d\u0430\u0439\u0434\u044f \u043d\u0438\u0447\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u0438\u0447\u043d\u043e\u0433\u043e, \u0441\u0434\u0432\u0438\u043d\u0443\u0441\u044c \u043b\u0435\u0432\u0435\u0435\u2026 \u0418 \u0442\u0430\u043a, \u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d\u0430 \u0443\u0436\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u0430, \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u043d\u0430\u0445\u043e\u0436\u0443 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0438\u0439 \u043f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e.\u00a0\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u044f \u0434\u0430\u0436\u0435 \u0441\u0434\u0435\u043b\u0430\u044e \u0430\u043d\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 gif.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" height=\"443\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3c7\/29c\/a41\/3c729ca41caa622ab0f0a7394e0aba0e.gif\" data-width=\"864\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u043e\u0431\u0449\u0435\u043c, \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <strong>soc.crg.pll<\/strong> \u0435\u0441\u0442\u044c \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043f\u043e\u043b\u0435 <strong>clkin_freq<\/strong>, \u0440\u0430\u0432\u043d\u043e\u0435 25000000 (\u044d\u0442\u043e \u043d\u0430\u0448\u0438 25 \u043c\u0435\u0433\u0430\u0433\u0435\u0440\u0446, \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0433\u0435\u0440\u0446\u0430\u0445), \u0430 \u043f\u043e\u043b\u0435 <strong>clkin<\/strong> \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043d\u043e\u0436\u043a\u0438\u2026 \u0412\u043e\u0442 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u043c \u0441\u0442\u0440\u043e\u043a\u0443: <\/p>\n<p><code>clk = soc.crg.cd_sys.clk<\/code><\/p>\n<p>\u043d\u0430:<\/p>\n<p><code>clk = soc.crg.pll.clkin<\/code><\/p>\n<p>\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u2013 \u043d\u0430\u043c \u043f\u043e\u0432\u0435\u0437\u043b\u043e! \u041c\u044b \u0443\u0433\u0430\u0434\u0430\u043b\u0438 \u0441 \u043f\u0435\u0440\u0432\u043e\u0439 \u043f\u043e\u043f\u044b\u0442\u043a\u0438. \u0422\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0430 \u2013 \u0432\u0435\u043b\u0438\u043a\u0430\u044f \u0432\u0435\u0449\u044c! \u0410 \u043a\u0442\u043e \u0442\u044f\u043d\u0435\u0442\u0441\u044f \u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043c\u0438\u043d\u0443\u0441 \u0437\u0430 &#171;\u043d\u0438\u0437\u043a\u0438\u0439 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c&#187;, \u043f\u0440\u0438\u0433\u043e\u0432\u0430\u0440\u0438\u0432\u0430\u044f, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u043d\u0430\u0434\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u0432 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430\u0445 \u2013 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435, \u043d\u0430\u0439\u0434\u0438\u0442\u0435 \u0438 \u0434\u0430\u0439\u0442\u0435 \u0441\u0441\u044b\u043b\u043e\u0447\u043a\u0443, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0443\u0442\u044c, \u043a\u0430\u043a \u043d\u0430\u0448\u043b\u0438. \u0410 \u043f\u043e\u0442\u043e\u043c \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c. \u042f \u0434\u043e\u043b\u0433\u043e \u0438\u0441\u043a\u0430\u043b. \u0422\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0430 \u0436\u0435 \u0432\u0441\u0451 \u0432\u044b\u044f\u0432\u0438\u043b\u0430 \u0437\u0430 5 \u043c\u0438\u043d\u0443\u0442. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438 \u043f\u0440\u043e\u043f\u0430\u0433\u0430\u043d\u0434\u0438\u0440\u0443\u044e \u0435\u0451 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/447\/822\/bab\/447822bab9e7bb254bb76bb6c87d9068.PNG\" width=\"778\" height=\"240\"\/><figcaption><\/figcaption><\/figure>\n<details class=\"spoiler\">\n<summary>\u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u043c.<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>gpu gpu( .clk(basesoc_crg_clkin), .x0(main_x0_storage), .x1(main_x1_storage), .y0(main_y0_storage), .y1(main_y1_storage), .color(gpio0), .hsync(gpio2), .vsync(gpio3) ); <\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0433\u0434\u0435:<\/p>\n<p><code>assign basesoc_crg_clkin = clk25;<\/code><\/p>\n<p>\u0423\u0444\u0444\u0444. \u0421 \u044d\u0442\u0438\u043c \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c! \u0414\u0430 \u0437\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0435\u0442 \u0436\u0438\u0432\u0430\u044f \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0430! \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043d\u0430 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0435? \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0442\u043e\u0440\u043e\u043f\u0438\u0442\u044c\u0441\u044f. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c\u0441\u044f \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043a \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0443 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u0442\u0430\u043c.<\/p>\n<h2>\u0412\u044b\u044f\u0432\u043b\u044f\u0435\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0442\u0430\u043c, \u0433\u0434\u0435 \u043d\u0435 \u0436\u0434\u0430\u043b\u0438<\/h2>\n<p>\u0418\u0442\u0430\u043a. \u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0439\u0441\u044f \u043f\u0440\u043e\u0435\u043a\u0442, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0435\u0433\u043e \u0432 \u043f\u043b\u0430\u0442\u0443, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c, \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0435. \u0421 \u0432\u0438\u0434\u0443 \u2014 \u0432\u0441\u0451 \u043a\u0440\u0430\u0441\u0438\u0432\u043e. \u0412\u0438\u0434\u043d\u044b \u043a\u0430\u0434\u0440\u043e\u0432\u044b\u0435 \u0441\u0438\u043d\u0445\u0440\u043e\u0438\u043c\u043f\u0443\u043b\u044c\u0441\u044b, \u0432\u0438\u0434\u043d\u044b \u0441\u0442\u0440\u043e\u0447\u043d\u044b\u0435 \u0441\u0438\u043d\u0445\u0440\u043e\u0438\u043c\u043f\u0443\u043b\u044c\u0441\u044b, \u0432\u0438\u0434\u043d\u044b \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u044b\u0435 \u0442\u043e\u0447\u043a\u0438:<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" height=\"227\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/515\/297\/059\/5152970590fdb5a027bf79d4897cc275.png\" data-width=\"624\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412\u0441\u0451? \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043d\u0430 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0435? \u041d\u0435 \u0441\u043f\u0435\u0448\u0438\u0442\u0435! \u0418\u0437\u043c\u0435\u0440\u044f\u0435\u043c \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u043a\u0430\u0434\u0440\u043e\u0432\u044b\u0445 \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u043e\u0432 (\u043d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0435 \u0432\u044b\u0448\u0435 \u0432\u0438\u0434\u043d\u0430 \u0441\u0442\u0440\u0435\u043b\u043e\u0447\u043a\u0430 \u043c\u0435\u0436\u0434\u0443 \u043f\u0430\u0440\u043e\u0439 \u0438\u0437 \u043d\u0438\u0445). \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 120 \u0413\u0446.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a5e\/0eb\/c98\/a5e0ebc984bf399eaa93d559ec8bbdda.PNG\" width=\"284\" height=\"173\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0421\u0442\u0440\u043e\u0447\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0442\u043e\u0436\u0435 \u0443\u0434\u0432\u043e\u0435\u043d\u043d\u0430\u044f. \u041e\u0445, \u0438 \u043f\u043e\u0441\u0438\u0434\u0435\u043b \u044f \u0441 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043c\u0438. \u041d\u0443 \u0440\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u0432\u043e \u0432\u0441\u0451\u043c \u0431\u044b\u043b\u0430 \u043e\u0431\u0432\u0438\u043d\u0435\u043d\u0430 \u043d\u0435\u0432\u0435\u0440\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u0430! \u041d\u043e \u043d\u0435 \u0442\u0443\u0442-\u0442\u043e \u0431\u044b\u043b\u043e! \u0412\u0435\u0440\u043d\u0430\u044f \u043e\u043d\u0430! 25 \u041c\u0413\u0446 \u0447\u0435\u0441\u0442\u043d\u044b\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442. \u041b\u0430\u0440\u0447\u0438\u043a \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u043b\u0441\u044f. \u0424\u0430\u0439\u043b <strong>gpu.v<\/strong> \u044f \u043d\u0430\u0448\u0451\u043b \u0432 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u0439, \u0434\u043e\u0432\u0435\u0440\u044f\u043b \u0435\u043c\u0443 \u0432\u0441\u0435\u0446\u0435\u043b\u043e. \u0410 \u0437\u0440\u044f. \u0412\u043e\u0442 \u043a\u0430\u043a \u043e\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c11\/84c\/15a\/c1184c15afeb71a9a78e6875a61b3cec.PNG\" width=\"843\" height=\"516\"\/><figcaption><\/figcaption><\/figure>\n<details class=\"spoiler\">\n<summary>\u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u043c.<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>\/\/ VGA 640x480 @60Hz needs a 25.175MHz pixel clock   \/\/ but the PLL is already in use   \/\/ I split the horizontal resolution in half and use the existing 12MHz clock instead   \/\/ front and back porch are manually adjusted until VSYNC reaches the expected 60Hz   hvsync_generator #(       .H_DISPLAY(320), \/\/ horizontal display width       .H_BACK(12), \/\/ horizontal left border (back porch)       .H_FRONT(8), \/\/ horizontal right border (front porch)       .H_SYNC(48), \/\/ horizontal sync width              .V_DISPLAY(480), \/\/ vertical display height       .V_TOP(33), \/\/ vertical top border       .V_BOTTOM(8), \/\/ vertical bottom border       .V_SYNC(2), \/\/ vertical s     ) hvsync_gen (     .clk(clk),     .reset(0),     .hsync(hsync),     .vsync(vsync),     .display_on(display_on),     .hpos(hpos),     .vpos(vpos),   );<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u041a\u043b\u0430\u0441\u0441\u043d\u043e, \u0434\u0430? \u041e\u0431\u0435\u0449\u0430\u0435\u043c 640 \u0442\u043e\u0447\u0435\u043a \u043f\u043e \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u0438, \u0430 \u0432 \u043c\u043e\u0434\u0443\u043b\u044c \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u043e\u043a \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u0432\u0441\u0435\u0433\u043e 320. \u0412\u043e\u0442 \u043e\u043d \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442! \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0443 \u0430\u0432\u0442\u043e\u0440\u0430 \u043a\u0432\u0430\u0440\u0446 \u0431\u044b\u043b \u043d\u0430 12 \u041c\u0413\u0446, \u0432\u043e\u0442 \u043e\u043d \u0432\u0441\u0451 \u0438 \u043f\u0435\u0440\u0435\u0441\u0447\u0438\u0442\u0430\u043b \u043f\u043e\u0434 \u0442\u0430\u043a\u0443\u044e \u0447\u0430\u0441\u0442\u043e\u0442\u0443. \u041a\u043e\u0440\u043e\u0447\u0435, \u0443\u0434\u0430\u043b\u044f\u0435\u043c \u0432\u0441\u0435 \u044d\u0442\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u0431\u043b\u0430\u0433\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u043e\u0434\u0443\u043b\u044f \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u043e\u043a \u0435\u0441\u0442\u044c \u0445\u043e\u0440\u043e\u0448\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435! \u041e\u0441\u0442\u0430\u0451\u0442\u0441\u044f:<\/p>\n<pre><code>  hvsync_generator hvsync_gen (     .clk(clk),     .reset(0),     .hsync(hsync),     .vsync(vsync),     .display_on(display_on),     .hpos(hpos),     .vpos(vpos),   );        assign color = display_on &amp;&amp; (hpos >= x0 &amp;&amp; hpos &lt; x1 &amp;&amp; vpos >= y0 &amp;&amp; vpos &lt; y1);<\/code><\/pre>\n<p>\u0412\u043e\u0442 \u0438 \u0432\u0435\u0440\u044c \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043b\u044e\u0434\u044f\u043c! \u0414\u043e\u0432\u0435\u0440\u044f\u0439, \u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0439! <\/p>\n<p>\u0423\u0444\u0444\u0444. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u043e\u043c. \u041a\u0430\u043a \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043a \u043d\u0435\u043c\u0443 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f?<\/p>\n<h2>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c VGA \u0440\u0430\u0437\u044a\u0451\u043c \u043a \u043f\u043b\u0430\u0442\u0435<\/h2>\n<p>\u0412\u0434\u043e\u0445\u043d\u043e\u0432\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u0438\u0437\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u0440\u0430\u0437\u044a\u0451\u043c\u0430 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0447\u0435\u0440\u043f\u0430\u0442\u044c \u0442\u0443\u0442: <a href=\"https:\/\/www.fpga4fun.com\/PongGame.html\" rel=\"noopener noreferrer nofollow\">fpga4fun.com &#8212; Pong Game<\/a><\/p>\n<p>\u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0447\u0442\u043e \u0443 \u043d\u0430\u0448\u0435\u0439 \u043f\u043b\u0430\u0442\u044b \u0432\u044b\u0445\u043e\u0434\u044b \u043f\u044f\u0442\u0438\u0432\u043e\u043b\u044c\u0442\u043e\u0432\u044b\u0435, \u0442\u0430\u043a \u0447\u0442\u043e \u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440\u044b \u0432 \u0438\u0445 \u0441\u0445\u0435\u043c\u0435 \u043d\u0430\u0434\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430 470 \u041e\u043c. \u0410 \u0442\u0430\u043a \u2013 \u044f \u0441\u043a\u043e\u043f\u0438\u0440\u0443\u044e \u0441\u0445\u0435\u043c\u0443 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043e\u0442\u0442\u0443\u0434\u0430:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" height=\"253\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/beb\/9c3\/75c\/beb9c375c49e81581d563e755ee8e238.png\" data-width=\"384\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041d\u043e \u0441\u0430\u043c\u043e\u0435 \u0446\u0435\u043d\u043d\u043e\u0435 \u0442\u0430\u043c \u2013 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u0438\u0432. \u0412\u043e\u0442 \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u043d\u0430 \u0442\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435:<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" height=\"615\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a3d\/97d\/7ca\/a3d97d7cab6f03e4064eb25990538d19.png\" data-width=\"936\"\/><figcaption><\/figcaption><\/figure>\n<p>\u042d\u0442\u043e \u0436\u0435 \u0433\u0435\u043d\u0438\u0430\u043b\u044c\u043d\u043e! \u0410 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437\u044a\u0451\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0410\u0440\u0434\u0443\u0438\u043d\u043e\u0432\u0441\u043a\u0438\u043c\u0438 \u043f\u0440\u043e\u0432\u043e\u0434\u043e\u0447\u043a\u0430\u043c\u0438 \u043a \u043d\u0430\u0448\u0435\u0439 \u043c\u0430\u043a\u0435\u0442\u043a\u0435. \u041a\u0440\u0430\u0441\u043d\u044b\u0439 \u0438 \u0441\u0438\u043d\u0438\u0439 \u043f\u0440\u043e\u0432\u043e\u0434\u0430 \u2013 \u0437\u0430\u0437\u0435\u043c\u043b\u0438\u0442\u044c (\u0431\u043b\u0430\u0433\u043e \u0437\u0435\u043c\u043b\u044f\u043d\u044b\u0445 \u043d\u043e\u0436\u0435\u043a \u0443 \u043d\u0430\u0441 \u043c\u043d\u043e\u0433\u043e), \u0430 \u0437\u0435\u043b\u0451\u043d\u044b\u0439 \u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u0441\u0438\u0433\u043d\u0430\u043b\u044b \u2013 \u043f\u043e\u0434\u0430\u0442\u044c \u043d\u0430 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u043b\u0438. \u041a\u0441\u0442\u0430\u0442\u0438, \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u043a\u0430\u043a \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e \u0438\u0445 \u0438\u0441\u043a\u0430\u0442\u044c! \u0412\u043e\u0442 \u043d\u0430\u0448 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 <strong>gpio<\/strong> \u043b\u0438\u043d\u0438\u0439:<\/p>\n<pre><code>    touch_pins = [            soc.platform.request(\"gpio\", 0),            soc.platform.request(\"gpio\", 1),            soc.platform.request(\"gpio\", 2),            soc.platform.request(\"gpio\", 3)        ]<\/code><\/pre>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u0434\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a \u043a\u0430\u043a\u0438\u043c \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430\u043c \u0440\u0430\u0437\u044a\u0451\u043c\u0430 \u043e\u043d\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u044b:<\/p>\n<pre><code>_gpios = [     # Attn. Jx\/pin descriptions are 1-based, but zero based defs. used!      # J1     (\"gpio\", 0, Pins(\"j1:0\"), IOStandard(\"LVCMOS33\")), # Input now     (\"gpio\", 1, Pins(\"j1:1\"), IOStandard(\"LVCMOS33\")), # Input now     (\"gpio\", 2, Pins(\"j1:2\"), IOStandard(\"LVCMOS33\")), # Input now        # GND     (\"gpio\", 3, Pins(\"j1:4\"), IOStandard(\"LVCMOS33\")), # Input now<\/code><\/pre>\n<p>\u0417\u0430\u0442\u0435\u043c \u2013 \u043a\u0430\u043a\u0438\u043c \u0446\u0435\u043f\u044f\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6ee\/8c4\/7e1\/6ee8c47e16fbb587278c89b4c0bb7703.PNG\" width=\"834\" height=\"312\"\/><figcaption><\/figcaption><\/figure>\n<details class=\"spoiler\">\n<summary>\u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u043c.<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>        self.comb += [             pins[1].eq(0),         ]         self.specials += Instance(             'gpu',             i_clk=clk,             i_x0=self.x0.storage,             i_x1=self.x1.storage,             i_y0=self.y0.storage,             i_y1=self.y1.storage,             o_hsync=pins[2],             o_vsync=pins[3],             o_color=pins[0]         )<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u044f\u0437\u044b\u043a \u041f\u0438\u0442\u043e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u0441\u0451 \u044d\u0442\u043e \u043e\u0444\u043e\u0440\u043c\u0438\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e. \u0422\u0430\u043a \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c \u0442\u0435\u043c\u0443, \u0442\u043e \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u043a\u0430\u043a \u0440\u0430\u0437 \u043d\u0430\u0432\u0435\u0434\u0451\u043c \u043a\u0440\u0430\u0441\u043e\u0442\u0443. \u041f\u043e\u043a\u0430 \u0436\u0435 \u2013 \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0442\u0435\u043c, \u0447\u0442\u043e \u043d\u0430\u0439\u0434\u0435\u043d\u043e \u0432 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445.<\/p>\n<p>\u0421 \u043c\u043e\u0438\u043c\u0438 \u043a\u0440\u0438\u0432\u044b\u043c\u0438 \u0440\u0443\u043a\u0430\u043c\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u0432\u043e\u0442 \u0442\u0430\u043a\u0430\u044f \u0448\u0442\u0443\u043a\u0430:<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" height=\"595\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/93a\/381\/a4b\/93a381a4bcfee30d4d8b05e475d76dde.png\" data-width=\"624\"\/><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" height=\"545\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2c6\/03f\/bfc\/2c603fbfc2bde43f13f10247588e7b86.png\" data-width=\"624\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043f\u043b\u0430\u0442\u0443 \u043a \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0443, \u0437\u0430\u043b\u0438\u0432\u0430\u0435\u043c \u0432 \u043d\u0435\u0451 \u00ab\u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443\u00bb \u0438 \u0432\u0438\u0434\u0438\u043c \u0442\u0430\u043a\u0443\u044e \u043a\u0440\u0430\u0441\u043e\u0442\u0443:<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" height=\"446\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/86e\/b7f\/5ff\/86eb7f5ff962c19c4828daaef975ad94.png\" data-width=\"715\"\/><figcaption><\/figcaption><\/figure>\n<h2>\u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b<\/h2>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e \u043c\u044b \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043b\u0438 \u0432\u0441\u044e \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u043b\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430. \u041c\u044b \u0436\u0435 \u0432\u0441\u0435\u0433\u043e-\u043d\u0430\u0432\u0441\u0435\u0433\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0438\u0441\u044c \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0432 \u043f\u043e\u0440\u0442\u044b Verilog \u043c\u043e\u0434\u0443\u043b\u044f, \u043f\u043e\u043b\u044c\u0437\u0443\u044f\u0441\u044c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u043c CSR. \u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0435\u043c! <\/p>\n<p>\u0414\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u0441 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u043e\u043c PyTest2\\build\\colorlight_5a_75b\\gateware. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u0432 PyTest2\\build\\colorlight_5a_75b\\software. \u0422\u0430\u043c \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u0444\u0430\u0439\u043b \u0441 \u0433\u043e\u0432\u043e\u0440\u044f\u0449\u0438\u043c \u0438\u043c\u0435\u043d\u0435\u043c<\/p>\n<p>\\PyTest2\\build\\colorlight_5a_75b\\software\\include\\generated\\csr.h<\/p>\n<p>\u0412 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043d\u0430\u0448\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0442\u0430\u043c \u0441\u0430\u043c\u044b\u0439 \u043c\u0438\u043d\u0438\u043c\u0443\u043c. \u0421\u043c\u043e\u0442\u0440\u0438\u043c:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b83\/613\/cac\/b83613cac2dc4fd5cca8b145505b5d15.PNG\" width=\"838\" height=\"727\"\/><figcaption><\/figcaption><\/figure>\n<details class=\"spoiler\">\n<summary>\u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u043c<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>\/* gpu *\/ #define CSR_GPU_BASE (CSR_BASE + 0x0L) #define CSR_GPU_X0_ADDR (CSR_BASE + 0x0L) #define CSR_GPU_X0_SIZE 1 static inline uint32_t gpu_x0_read(void) { return csr_read_simple(CSR_BASE + 0x0L); } static inline void gpu_x0_write(uint32_t v) { csr_write_simple(v, CSR_BASE + 0x0L); } #define CSR_GPU_X1_ADDR (CSR_BASE + 0x4L) #define CSR_GPU_X1_SIZE 1 static inline uint32_t gpu_x1_read(void) { return csr_read_simple(CSR_BASE + 0x4L); } static inline void gpu_x1_write(uint32_t v) { csr_write_simple(v, CSR_BASE + 0x4L); } #define CSR_GPU_Y0_ADDR (CSR_BASE + 0x8L) #define CSR_GPU_Y0_SIZE 1 static inline uint32_t gpu_y0_read(void) { return csr_read_simple(CSR_BASE + 0x8L); } static inline void gpu_y0_write(uint32_t v) { csr_write_simple(v, CSR_BASE + 0x8L); } #define CSR_GPU_Y1_ADDR (CSR_BASE + 0xcL) #define CSR_GPU_Y1_SIZE 1 static inline uint32_t gpu_y1_read(void) { return csr_read_simple(CSR_BASE + 0xcL); } static inline void gpu_y1_write(uint32_t v) { csr_write_simple(v, CSR_BASE + 0xcL); }<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0418\u0442\u0430\u043a, \u043d\u0430\u043c\u0438 \u0431\u044b\u043b\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u043e \u0447\u0435\u0442\u044b\u0440\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430, \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u043e 16 \u0431\u0438\u0442, \u0430 16 \u0431\u0438\u0442 \u2013 \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u044b. \u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043e\u0434\u043d\u043e\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435, \u0430 \u0435\u0441\u043b\u0438 \u0434\u0430, \u0442\u043e \u043a\u0430\u043a \u2013 \u0442\u0435\u043c\u0430 \u0434\u043b\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438. \u0422\u0430\u043a\u0436\u0435 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043e\u0434 \u043d\u0430 \u041f\u0438\u0442\u043e\u043d\u0435 \u0441\u0430\u043c\u043e\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u043c\u0441\u044f. \u0427\u0442\u043e\u0431\u044b \u0438\u0437 \u043d\u0435\u0433\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u043b\u0438\u0441\u044c \u0431\u044b \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0432 \u044d\u0442\u043e\u0442 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b. \u041f\u043e\u043a\u0430 \u2013 \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u043b\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b. \u0414\u0430 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0445\u0432\u0430\u0442\u0438\u0442, X1. \u0423 \u043d\u0435\u0433\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 +4. \u0410 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0447\u0435\u0433\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435? \u042d\u0442\u043e \u043d\u0430\u043c \u043f\u043e\u0434\u0441\u043a\u0430\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u0430 <strong>mem.h<\/strong>:<\/p>\n<pre><code>#ifndef CSR_BASE #define CSR_BASE 0x00000000L #define CSR_SIZE 0x00010000 #endif<\/code><\/pre>\n<p>\u041a\u0430\u043a \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e! \u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 CSR \u0440\u0430\u0432\u0435\u043d \u043d\u0443\u043b\u044e.<\/p>\n<p>\u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u043b \u043e\u043f\u0446\u0438\u0438 \u0441\u0431\u043e\u0440\u043a\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b:<\/p>\n<p><code>--with-etherbone --eth-ip=192.168.2.128<\/code><\/p>\n<p>\u0414\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0448\u0438\u043d\u0435 \u0447\u0435\u0440\u0435\u0437 \u0441\u0435\u0442\u044c, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u0443\u0442\u0438\u043b\u0438\u0442\u0430 <strong>wishbone-tool<\/strong>. \u0413\u043e\u0442\u043e\u0432\u0443\u044e \u0441\u0431\u043e\u0440\u043a\u0443 \u043f\u043e\u0434 \u0441\u0432\u043e\u044e \u041e\u0421 \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0437\u0434\u0435\u0441\u044c:<\/p>\n<p><a href=\"https:\/\/github.com\/litex-hub\/wishbone-utils\/releases?page=1\" rel=\"noopener noreferrer nofollow\">Releases \u00b7 litex-hub\/wishbone-utils (github.com)<\/a><\/p>\n<p>\u0420\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u0438 \u043f\u0438\u0448\u0435\u043c \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 \u0448\u0438\u043d\u044b 4 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 600 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<\/p>\n<p><code>wishbone-tool.exe --ethernet-host 192.168.2.128 4\u00a0600<\/code><\/p>\n<p>\u042d\u0442\u043e \u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 X2 \u0441\u0434\u0435\u043b\u0430\u043b \u0440\u0430\u0432\u043d\u044b\u043c \u0448\u0435\u0441\u0442\u0438\u0441\u0442\u0430\u043c (\u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u044d\u043a\u0440\u0430\u043d\u0430 640\u0445480). \u041f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a \u0441\u0442\u0430\u043b \u0442\u0430\u043a\u0438\u043c:<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" height=\"422\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/47e\/eb2\/ae9\/47eeb2ae9eb94302b70dc38b7d9530dc.png\" data-width=\"715\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0418, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0432\u0441\u0451. \u041c\u044b \u0443\u0431\u0435\u0434\u0438\u043b\u0438\u0441\u044c, \u0447\u0442\u043e \u0432\u0441\u0451 \u043f\u0440\u043e\u0435\u0446\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u0448\u0438\u043d\u0443, \u0430 \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0447\u0435\u0440\u0435\u0437 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u043a\u043e\u043c\u0430\u043d\u0434\u2026<\/p>\n<h2>\u0423\u043f\u0440\u043e\u0449\u0430\u0435\u043c \u0441\u0435\u0431\u0435 \u0436\u0438\u0437\u043d\u044c<\/h2>\n<p>\u041a\u0430\u043a-\u0442\u043e \u0434\u0430\u0436\u0435 \u043e\u0431\u0438\u0434\u043d\u043e, \u0442\u0430\u043a \u043c\u043d\u043e\u0433\u043e \u0433\u043e\u0442\u043e\u0432\u0438\u043b\u0438\u0441\u044c \u0438 \u0442\u0430\u043a \u043c\u0430\u043b\u043e \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438. \u0414\u0430\u0432\u0430\u0439\u0442\u0435, \u0447\u0442\u043e \u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0434\u0451\u043c \u043e\u0434\u0438\u043d \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 \u043f\u043e \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044e \u0441\u0435\u0431\u0435 \u0436\u0438\u0437\u043d\u0438.<\/p>\n<p>\u0412 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435,\u00a0\u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0434\u0435\u043b\u0430\u043b\u0438 \u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u0430\u0442\u0430\u043b\u043e\u0433 scripts<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" height=\"236\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f90\/ea1\/47a\/f90ea147a70ac319dd77ecf1b2312a2f.png\" data-width=\"356\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0410 \u0432 \u0441\u0430\u043c \u043d\u0430\u0448 \u043c\u043d\u043e\u0433\u043e\u0441\u0442\u0440\u0430\u0434\u0430\u043b\u044c\u043d\u044b\u0439 \u041f\u0438\u0442\u043e\u043d\u043e\u0432\u0441\u043a\u0438\u0439\u00a0\u0441\u043a\u0440\u0438\u043f\u0442 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u0447\u043a\u0443. \u042f \u043f\u043e\u043a\u0430\u0436\u0443 \u0435\u0451 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0442\u0435\u043c\u0438, \u043c\u0435\u0436\u0434\u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043e\u043d\u0430 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0430:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/749\/7ec\/01c\/7497ec01cdac1419723c7fd747eb41ef.PNG\" width=\"836\" height=\"162\"\/><figcaption><\/figcaption><\/figure>\n<details class=\"spoiler\">\n<summary>\u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u043c.<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>    soc.platform.add_source(\"hvsync_generator.v\")     soc.platform.add_source(\"gpu.v\")      args.csr_csv = \"scripts\/csr.csv\"      builder = Builder(soc, **builder_argdict(args))     builder.build(**trellis_argdict(args), run=args.build)<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u041f\u0440\u043e\u0433\u043e\u043d\u044f\u0435\u043c \u0441\u043a\u0440\u0438\u043f\u0442, \u0438 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 Scripts \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b <strong>csr.csv<\/strong>. \u0412\u043e\u0442 \u0435\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u043e:<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" height=\"561\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f9d\/06b\/704\/f9d06b704c6110dea0d35bec4525ca11.png\" data-width=\"603\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u043d\u0435 \u043d\u0430\u0434\u043e \u043d\u0438 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0438\u043a\u0430\u043a\u0438\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438, \u043d\u0438 \u0434\u0430\u0436\u0435 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0442\u044c wishbone-tool. \u041f\u043e\u043c\u0435\u0441\u0442\u0438\u043c \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 <strong>scripts<\/strong> \u0444\u0430\u0439\u043b <strong>moverect.py<\/strong> \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c:<\/p>\n<pre><code>#!\/usr\/bin\/env python3  import time  from litex import RemoteClient  wb = RemoteClient() wb.open()  # # #  wb.regs.gpu_y0.write (200) wb.regs.gpu_y1.write (240)  for i in range(100):     for j in range (600):          wb.regs.gpu_x1.write (j+39)          wb.regs.gpu_x0.write (j)          time.sleep(0.001)  wb.close()<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 \u0438\u0434\u0451\u043c \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 <strong>Litex\\litex\\litex\\tools<\/strong>\u2026 \u0412\u043e\u0442 \u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0434\u043b\u044f \u0441\u043f\u0440\u0430\u0432\u043a\u0438:<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" height=\"441\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b08\/eaf\/592\/b08eaf5922a578b0912f14171c6ac569.png\" data-width=\"546\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0418 \u0442\u0430\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0441\u0442\u0440\u043e\u043a\u043e\u0439: <\/p>\n<p><code>python litex_server.py --udp --udp-ip=192.168.2.128<\/code><\/p>\n<p>\u041e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u044d\u0442\u043e\u0442 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b. \u041e\u043d \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0442\u044c \u043d\u0430\u043c \u0441\u0435\u0440\u0432\u0435\u0440, \u0434\u0430\u044e\u0449\u0438\u0439 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0448\u0438\u043d\u0435 Wishbone \u0438\u0437 \u043b\u044e\u0431\u044b\u0445 \u041f\u0438\u0442\u043e\u043d\u043e\u0432\u0441\u043a\u0438\u0445 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432. \u041d\u0435 \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0439\u0442\u0435, \u0437\u0430\u0447\u0435\u043c \u0442\u0430\u043a \u0441\u043b\u043e\u0436\u043d\u043e. \u042f \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e \u044d\u0442\u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u0430 \u0443\u0447\u0443, \u043a\u0430\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0433\u043e\u0442\u043e\u0432\u043e\u0439. <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442. \u041e\u043d \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u044d\u0442\u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440. \u0418\u0442\u0430\u043a, \u043f\u0438\u0448\u0435\u043c:<\/p>\n<p><code>python moverect.py localhost<\/code><\/p>\n<p>\u0418 \u0433\u0438\u043f\u043d\u043e\u0442\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u044d\u043a\u0440\u0430\u043d, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0441\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e \u0435\u0437\u0434\u0438\u0442 \u043a\u0432\u0430\u0434\u0440\u0430\u0442. \u0412 \u044d\u0442\u043e\u043c \u043e\u043f\u044b\u0442\u0435 \u043c\u044b \u043d\u0435 \u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442. \u041c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0441\u0438\u043c\u0432\u043e\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0438\u043c\u0435\u043d\u0430\u043c\u0438, \u0432\u0437\u044f\u0442\u044b\u043c\u0438 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 <strong>csr.csv<\/strong>. \u041f\u043b\u044e\u0441 \u043a \u0442\u043e\u043c\u0443, \u043c\u044b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u043d\u0435 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0432 \u043f\u043e\u0441\u0442\u0430\u0432\u043a\u0443 Litex. \u041f\u0440\u0430\u0432\u0434\u0430, \u0441\u0435\u0440\u0432\u0435\u0440 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u043e\u043a\u043d\u0435 \u043d\u0430\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c.\u00a0 \u041d\u043e \u044d\u0442\u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u043d \u043d\u0430 \u041f\u0438\u0442\u043e\u043d\u043e\u0432\u0441\u043a\u043e\u043c \u0441\u043a\u0440\u0438\u043f\u0442\u0435, \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u043c \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442 Litex. <\/p>\n<h2>\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u0444\u0438\u043b\u043e\u0441\u043e\u0444\u0438\u0438<\/h2>\n<p>\u0414\u0430\u0432\u043d\u044b\u043c-\u0434\u0430\u0432\u043d\u043e, \u0443 \u043c\u0435\u043d\u044f \u0411\u041a-\u0448\u043a\u0430 \u0431\u044b\u043b\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u043a \u043b\u0430\u043c\u043f\u043e\u0432\u043e\u043c\u0443 \u0447\u0451\u0440\u043d\u043e-\u0431\u0435\u043b\u043e\u043c\u0443 \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u0443. \u041f\u043e\u0442\u043e\u043c \u043c\u043d\u0435 \u0432\u044b\u0434\u0430\u043b\u0438 \u043b\u0430\u043c\u043f\u043e\u0432\u044b\u0439 \u0446\u0432\u0435\u0442\u043d\u043e\u0439, \u0441 \u0431\u043e\u043b\u0435\u0435 \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u043c \u0440\u0430\u0441\u0442\u0440\u043e\u043c. \u0418 \u044f \u0441\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e \u0441\u0442\u0430\u043b\u043e \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043b\u0443\u0447\u0448\u0435. \u041f\u043e\u0442\u043e\u043c \u044f \u0440\u0430\u0437\u0434\u043e\u0431\u044b\u043b \u043c\u043e\u043d\u0438\u0442\u043e\u0440 \u041c\u04216105 \u0441 \u0430\u043d\u0442\u0438\u0431\u043b\u0438\u043a\u043e\u0432\u044b\u043c \u043a\u0438\u043d\u0435\u0441\u043a\u043e\u043f\u043e\u043c. \u0418 \u0441\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e \u0441\u0442\u0430\u043b\u043e \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043b\u0443\u0447\u0448\u0435. \u0428\u043b\u043e \u0432\u0440\u0435\u043c\u044f. \u041f\u0440\u0438 \u0441\u043c\u0435\u043d\u0435 \u042d\u0412\u041c \u041c\u04216105 \u0441\u043c\u0435\u043d\u0438\u043b\u0441\u044f \u043d\u0430 Samsung SyncMaster 3NE. \u0418 \u044f \u0441\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e \u0441\u0442\u0430\u043b\u043e \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043b\u0443\u0447\u0448\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0435\u0442 \u0442\u043e\u0433\u043e \u043f\u044f\u0442\u0438\u0434\u0435\u0441\u044f\u0442\u0438\u0433\u0435\u0440\u0446\u043e\u0432\u043e\u0433\u043e \u043c\u0435\u0440\u0446\u0430\u043d\u0438\u044f \u0432 \u0433\u043b\u0430\u0437\u0430\u0445, \u0434\u0430\u0436\u0435 \u043a\u043e\u0433\u0434\u0430 \u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0445\u043e\u0447\u0443 \u0437\u0430\u0441\u043d\u0443\u0442\u044c. \u041f\u043e\u0442\u043e\u043c \u0431\u044b\u043b\u0430 \u0447\u0440\u0435\u0434\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u043e\u0432 \u0441 \u043a\u0438\u043d\u0435\u0441\u043a\u043e\u043f\u0430\u043c\u0438, \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b \u0441\u0432\u043e\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0430\u0441\u044c \u043f\u043e\u043a\u0443\u043f\u043a\u043e\u0439 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0416\u041a \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0430. \u0418 \u044f \u0441\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e \u0441\u0442\u0430\u043b\u043e \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043b\u0443\u0447\u0448\u0435. \u041d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u043c\u0435\u0440\u0446\u0430\u043d\u0438\u044f! <\/p>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u043c\u043e\u043d\u0438\u0442\u043e\u0440 \u0441\u043c\u0435\u043d\u0438\u043b\u0441\u044f \u043d\u0430 \u043d\u043e\u0432\u044b\u0439, \u0438\u043c\u0435\u044e\u0449\u0438\u0439 \u043a\u0430\u0431\u0435\u043b\u044c DVI. \u0418 \u044f \u0431\u044b \u0434\u0430\u0436\u0435 \u043d\u0435 \u0441\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e \u0441\u0442\u0430\u043b\u043e \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043b\u0443\u0447\u0448\u0435. \u041d\u043e \u043a\u043e\u0433\u0434\u0430 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 VGA \u043a\u0430\u0431\u0435\u043b\u0435\u043c \u2013 \u044f \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u043a \u0445\u043e\u0440\u043e\u0448\u0435\u043c\u0443 \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u0440\u0438\u0432\u044b\u043a\u0430\u0435\u0448\u044c. \u0412 \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u043e\u043c \u043a\u0430\u0431\u0435\u043b\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0433\u0443\u043b\u044f\u044e\u0442 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043b\u0438\u043d\u0438\u0438, \u0432 \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u043e\u043c \u043a\u0430\u0431\u0435\u043b\u0435 \u00ab\u043a\u0438\u043f\u0438\u0442\u00bb \u043e\u0434\u043d\u043e\u0442\u043e\u043d\u043d\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435. \u042d\u0442\u043e \u0434\u0438\u043a\u043e \u0440\u0430\u0437\u0434\u0440\u0430\u0436\u0430\u0435\u0442. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u0432\u044b\u043a \u043a \u0447\u0451\u0442\u043a\u043e\u0439 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435.<\/p>\n<p>\u041a\u0442\u043e \u0441\u043a\u0430\u0436\u0435\u0442, \u0447\u0442\u043e \u0432\u0438\u043d\u043e\u0439 \u0432\u0441\u0435\u043c\u0443 \u0442\u043e\u0442 \u043c\u043e\u043d\u0442\u0430\u0436, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u044f \u0441\u043e\u0431\u0440\u0430\u043b \u0441\u0432\u043e\u044e \u043f\u043b\u0430\u0442\u043e\u0447\u043a\u0443, \u0442\u043e\u0442 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043f\u0440\u0430\u0432. \u042f \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043f\u043b\u0430\u0442\u044b, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0439 \u043d\u0430 \u0441\u0435\u0431\u0435 \u0432\u0438\u0434\u0435\u043e \u0426\u0410\u041f \u0438 \u0448\u0442\u0430\u0442\u043d\u044b\u0439 \u0440\u0430\u0437\u044a\u0451\u043c VGA. \u0411\u044b\u043b\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0445\u0443\u0436\u0435. \u041d\u0443, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0442\u0430\u043c \u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043c <a href=\"https:\/\/www.fpga4fun.com\/PongGame.html\" rel=\"noopener noreferrer nofollow\">fpga4fun.com &#8212; Pong Game<\/a> (\u0443\u0441\u0442\u0440\u0430\u043d\u0438\u0432 \u0432 \u043d\u0451\u043c \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0435 \u0441\u0438\u043d\u0445\u0440\u043e\u0438\u043c\u043f\u0443\u043b\u044c\u0441\u043e\u0432: \u0442\u0430\u043c \u043d\u0430\u0434\u043e \u043d\u0435 768, \u0430 800 \u0442\u043e\u0447\u0435\u043a \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c). \u0422\u0430\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u0438\u0437\u044f\u0449\u043d\u044b\u0435 \u0446\u0432\u0435\u0442\u0430, \u043e\u043d\u0438, \u0438\u043c\u0435\u044f \u0431\u043e\u043b\u044c\u0448\u0435 \u0443\u0440\u043e\u0432\u043d\u0435\u0439,\u00a0\u043a\u0438\u043f\u044f\u0442 \u0435\u0449\u0451 \u0441\u0438\u043b\u044c\u043d\u0435\u0435, \u0447\u0435\u043c \u043d\u0430\u0448 \u0432\u0435\u0441\u044c\u043c\u0430 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u00ab\u043b\u0438\u0431\u043e \u0437\u0435\u043b\u0451\u043d\u044b\u0439, \u043b\u0438\u0431\u043e \u0447\u0451\u0440\u043d\u044b\u0439\u00bb. \u0410 \u0435\u0449\u0451 \u0442\u0430\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0442\u043e\u043d\u043a\u0438\u0435 \u043b\u0438\u043d\u0438\u0438. \u041e\u043d\u0438 \u043f\u043b\u0430\u0432\u0430\u044e\u0442 \u0435\u0449\u0451 \u0441\u0438\u043b\u044c\u043d\u0435\u0435, \u0447\u0435\u043c \u043d\u0430\u0448\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0430 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430.<\/p>\n<p>\u0426\u0438\u0444\u0440\u0430 \u2013 \u044d\u0442\u043e \u0446\u0438\u0444\u0440\u0430, \u0430\u043d\u0430\u043b\u043e\u0433 \u2013 \u044d\u0442\u043e \u0430\u043d\u0430\u043b\u043e\u0433. \u0414\u043e \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u0440\u0435\u0432\u043e\u043b\u044e\u0446\u0438\u0438 \u0435\u043c\u0443 \u043d\u0435 \u0431\u044b\u043b\u043e \u0437\u0430\u043c\u0435\u043d\u044b. \u0421\u0435\u0439\u0447\u0430\u0441 \u2013 \u0435\u0441\u0442\u044c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0443\u043a\u0443 \u0441 VGA \u043c\u044b \u043d\u0430\u0431\u0438\u043b\u0438, \u0430 \u0432\u043e\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u044d\u0442\u0438\u043c \u2013 \u043b\u0438\u0447\u043d\u043e \u044f \u043d\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0441\u044c. \u041c\u043d\u0435 \u043d\u0435\u0440\u0432\u043d\u043e\u0435 \u0441\u043f\u043e\u043a\u043e\u0439\u0441\u0442\u0432\u0438\u0435 \u0434\u043e\u0440\u043e\u0436\u0435. \u0415\u0441\u043b\u0438 \u0446\u0438\u043a\u043b \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0441\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d \u2013 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0438 HDMI \u0432\u044b\u0445\u043e\u0434, \u0431\u043b\u0430\u0433\u043e \u044f \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b \u043c\u0430\u043a\u0435\u0442\u043a\u0443 \u0441 \u041f\u041b\u0418\u0421 Lattice, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0443\u044e \u0442\u0430\u043a\u043e\u0439 \u0440\u0430\u0437\u044a\u0451\u043c. \u0410 VGA \u2013 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440, \u0433\u0434\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0443\u0440\u0443 \u0438 \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u044b\u0445, \u0443\u0434\u043e\u0431\u043d\u044b\u0445 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u0445 \u043e\u0441\u0432\u043e\u0438\u0442\u044c \u0432\u044b\u0432\u043e\u0434 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u043a\u043e\u043c\u0430\u043d\u0434. <\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u041c\u044b \u0438\u0441\u043f\u044b\u0442\u0430\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c\u0438 \u043a\u043e\u043c\u0430\u043d\u0434 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u044b wishbone-tool (\u043f\u043e \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u043c \u0430\u0434\u0440\u0435\u0441\u0430\u043c) \u0438 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0448\u0442\u0430\u0442\u043d\u044b\u0445 \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u0438\u0437 \u043f\u043e\u0441\u0442\u0430\u0432\u043a\u0438 Litex (\u0434\u043b\u044f \u0447\u0435\u0433\u043e \u043d\u0430\u043c \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0438\u043c\u0432\u043e\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0444\u0430\u0439\u043b\u00a0<strong>csr.csv<\/strong>).\u00a0<\/p>\n<p>\u0424\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440, \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c <a href=\"https:\/\/github.com\/MIR-LLC\/LitexSamples\/tree\/main\/PyTest2\" rel=\"noopener noreferrer nofollow\">\u0442\u0443\u0442<\/a>.<\/p>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f (\u0442\u043e \u0435\u0441\u0442\u044c, \u0447\u0442\u0435\u043d\u0438\u0435 \u0438\u0437 Verilog \u043c\u043e\u0434\u0443\u043b\u0435\u0439). \u0422\u0430\u043a\u0436\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0441\u0430\u043c\u043e\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u043e\u043c\u0443 \u043a\u043e\u0434\u0443, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0434\u043e\u043b\u0433\u043e \u0435\u043b\u043e\u0437\u0438\u0442\u044c, \u0432\u044b\u044f\u0432\u043b\u044f\u044f \u0441\u0432\u044f\u0437\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0438 \u043f\u043e\u0440\u0442\u043e\u0432 CSR. \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u044d\u0442\u0430\u043f &#8212; \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u043d\u0435 \u0447\u0435\u0440\u0435\u0437 CSR, \u0430 \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u044f\u043c\u0443\u044e \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u044e \u043d\u0430 \u0448\u0438\u043d\u0443 (Wishbone \u0438\u043b\u0438 AXI). \u042d\u0442\u043e \u0441\u0430\u043c\u044b\u0439 \u043c\u0438\u043d\u0438\u043c\u0443\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0432\u043b\u0430\u0434\u0435\u0442\u044c. \u041d\u043e, \u0433\u043b\u044f\u0434\u044f \u043d\u0430 \u0440\u0435\u0439\u0442\u0438\u043d\u0433 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0438, \u044f \u0434\u0435\u043b\u0430\u044e \u0432\u044b\u0432\u043e\u0434, \u0447\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435-\u0442\u043e \u044d\u0442\u043e \u043c\u0430\u043b\u043e \u043a\u043e\u043c\u0443 \u043d\u0443\u0436\u043d\u043e. \u041f\u0440\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438 \u0442\u0435\u043d\u0434\u0435\u043d\u0446\u0438\u0438, \u0442\u0435\u043c\u0430 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043a\u0440\u044b\u0442\u0430. \u041d\u043e \u0442\u0435, \u043a\u043e\u043c\u0443 \u044d\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0441\u043c\u043e\u0433\u0443\u0442 \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u0432\u0441\u0451 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u044d\u0442\u0443 \u043f\u0430\u0440\u0443 \u0441\u0442\u0430\u0442\u0435\u0439 \u043a\u0430\u043a \u0442\u0440\u0430\u043c\u043f\u043b\u0438\u043d, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432\u0435\u0437\u0434\u0435, \u0433\u0434\u0435 \u044f \u0447\u0438\u0442\u0430\u043b, \u0431\u044b\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0438\u0437\u044b\u0441\u043a\u0438, \u0430 \u0442\u0443\u0442 \u044f \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u043b\u0441\u044f \u0438\u0437\u043b\u043e\u0436\u0438\u0442\u044c \u0432\u0441\u0451 \u0432 \u043a\u043b\u044e\u0447\u0435, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u0435\u0440\u0432\u0443\u044e \u0440\u0430\u0431\u043e\u0447\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043e\u0442 \u0438 \u0434\u043e.\u00a0<\/p>\n<\/div>\n<\/div>\n<p> <!----> <!----><br \/> \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\/post\/596321\/\"> https:\/\/habr.com\/ru\/post\/596321\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\" class=\"article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412 <a href=\"https:\/\/habr.com\/ru\/post\/594817\/\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a> \u043c\u044b \u043d\u0430\u0447\u0430\u043b\u0438 \u043e\u0441\u0432\u0430\u0438\u0432\u0430\u0442\u044c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u0448\u0438\u043d\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u043d\u0430 \u0431\u0430\u0437\u0435 \u0441\u0440\u0435\u0434\u044b Litex (\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u0441\u0451 \u0434\u0435\u043b\u0430\u0435\u0442 \u043d\u0430 \u041f\u0438\u0442\u043e\u043d\u0435) \u0441 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435\u043c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u043d\u0430 \u0412\u0435\u0440\u0438\u043b\u043e\u0433\u0435. \u0421\u0442\u0430\u0442\u044c\u044f \u0442\u0430\u043a \u0440\u0430\u0437\u0440\u043e\u0441\u043b\u0430\u0441\u044c, \u0447\u0442\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u043f\u044b\u0442\u044b \u043c\u044b \u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u043d\u0430 \u043f\u043e\u0442\u043e\u043c. \u041f\u0440\u0438\u0448\u043b\u0430 \u043f\u043e\u0440\u0430 \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0438\u0445. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c\u0441\u044f \u043a VGA-\u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0443 \u0438 \u043f\u043e\u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u044b\u0434\u0430\u0451\u0442 \u043c\u043e\u0434\u0443\u043b\u044c <strong>gpu<\/strong>, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0432 \u0444\u0430\u0439\u043b\u0435 <strong>gpu.v<\/strong>, \u0442\u043e \u0435\u0441\u0442\u044c, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Verilog. \u0423\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043c\u044b \u0438\u043c \u0431\u0443\u0434\u0435\u043c \u0447\u0435\u0440\u0435\u0437 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u043a\u043e\u043c\u0430\u043d\u0434, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u0432 \u0431\u043b\u043e\u043a\u0435 CSR, \u0441\u043f\u0440\u043e\u0435\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u043d\u0430 \u0448\u0438\u043d\u0443 Wishbone. \u0412\u0441\u0435 \u044d\u0442\u0438 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a \u0441\u0440\u0435\u0434\u0435 Litex. \u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u043e\u043f\u044b\u0442\u043e\u0432 \u043c\u044b \u0442\u043e\u0436\u0435 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0448\u0442\u0430\u0442\u043d\u044b\u0435, Litex-\u043e\u0432\u0441\u043a\u0438\u0435. \u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0435\u043c!<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<h2>\u041b\u0443\u0447 \u0441\u043f\u0438\u0442 \u2013 \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u043a\u0430 \u0438\u0434\u0451\u0442<\/h2>\n<p>\u0418\u0442\u0430\u043a, \u043c\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 \u0448\u043d\u0443\u0440 VGA. \u041d\u043e \u0447\u0442\u043e \u0437\u0430 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0432 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u043e\u043c \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0440\u0430\u0445 \u0441\u0435\u0442\u0438 \u043a\u043e\u0434\u0435? \u041e\u043d\u0438 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0435. \u041c\u043d\u043e\u0433\u0438\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0441\u044b\u043b\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b&#8230; \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435, \u043e\u0442\u043a\u0443\u0434\u0430 \u043e\u043d\u0438 \u0432\u0437\u044f\u043b\u0438\u0441\u044c.\u00a0\u0415\u0441\u043b\u0438 \u044f \u0441\u043f\u0440\u043e\u0448\u0443, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u043e\u043a \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u0432 \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u043a\u0435 VGA, \u043c\u043d\u043e\u0433\u0438\u0435 \u043e\u0442\u0432\u0435\u0442\u044f\u0442, \u0447\u0442\u043e 480. \u0410 \u0435\u0441\u043b\u0438 \u044f \u0441\u043f\u0440\u043e\u0448\u0443, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u043e\u043a \u0431\u044b\u043b\u043e \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u043e\u0442\u0435\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u0430, \u043c\u043d\u043e\u0433\u0438\u0435 \u0442\u0430\u043a\u0436\u0435 \u043e\u0442\u0432\u0435\u0442\u044f\u0442, \u0447\u0442\u043e 625. \u0421\u0435\u0439\u0447\u0430\u0441 \u043c\u044b \u0443\u0437\u043d\u0430\u0435\u043c \u0441\u0442\u0440\u0430\u0448\u043d\u0443\u044e \u0442\u0430\u0439\u043d\u0443. \u0425\u043e\u0442\u044c \u044d\u0442\u0438 \u0446\u0438\u0444\u0440\u044b \u0438 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c (\u043f\u0435\u0440\u0432\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u0440\u043e\u0434\u043e\u043c \u0438\u0437 \u0448\u0435\u0441\u0442\u0438\u0434\u0435\u0441\u044f\u0442\u0438\u0433\u0435\u0440\u0446\u043e\u0432\u043e\u0439 NTSC, \u0430 \u0432\u0442\u043e\u0440\u043e\u0439 \u2013 \u0438\u0437 \u043d\u0430\u0448\u0435\u0439 \u043f\u044f\u0442\u0438\u0434\u0435\u0441\u044f\u0442\u0438\u0433\u0435\u0440\u0446\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b), \u043d\u043e \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0440\u0430\u0437\u043d\u044b\u043c \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f\u043c.<\/p>\n<p>\u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e 480 \u0441\u0442\u0440\u043e\u043a \u0432 VGA \u2013 \u044d\u0442\u043e \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u0432\u0438\u0434\u0438\u043c\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438. \u0410 625 \u0441\u0442\u0440\u043e\u043a \u0432 \u043e\u0442\u0435\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u043a\u0435 \u2013 \u044d\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u0442\u0440\u043e\u043a\u0438, \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0435 \u0432 \u0441\u0438\u0433\u043d\u0430\u043b\u0435. \u0412 \u0447\u0451\u043c \u0440\u0430\u0437\u043d\u0438\u0446\u0430?<\/p>\n<p>\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0432 \u043a\u0438\u043d\u0435\u0441\u043a\u043e\u043f\u0435 \u043b\u0443\u0447\u0443 \u043d\u0443\u0436\u043d\u043e \u0432\u0440\u0435\u043c\u044f \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0445\u043e\u0434\u0430. \u0414\u043e\u0439\u0434\u044f \u0434\u043e \u043d\u0438\u0436\u043d\u0435\u0439 \u0442\u043e\u0447\u043a\u0438 \u044d\u043a\u0440\u0430\u043d\u0430, \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u043e\u043b\u0435\u0442\u0435\u0442\u044c \u043d\u0430\u0437\u0430\u0434. \u0418 \u0435\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0432\u0440\u0435\u043c\u044f, \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0435, \u0447\u0435\u043c \u0432\u0440\u0435\u043c\u044f \u0445\u043e\u0434\u0430 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438. \u0423 \u043e\u0447\u0435\u043d\u044c \u0441\u0442\u0430\u0440\u044b\u0445 \u0447\u0451\u0440\u043d\u043e-\u0431\u0435\u043b\u044b\u0445 \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u043e\u0432 \u043f\u0440\u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u044f\u0440\u043a\u043e\u0441\u0442\u0438 \u044d\u0442\u0438 \u043b\u0438\u043d\u0438\u0438 \u0434\u0430\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0440\u0430\u0437\u0433\u043b\u044f\u0434\u0435\u0442\u044c. \u042f \u0432 \u0434\u0435\u0442\u0441\u0442\u0432\u0435 \u0442\u0430\u043a \u043b\u044e\u0431\u0438\u043b \u0431\u0430\u043b\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u0412\u043e\u0442 \u044f \u043d\u0430\u0448\u0451\u043b \u043d\u0430 \u0413\u0443\u0433\u043b\u0435 \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0439 \u0440\u0438\u0441\u0443\u043d\u043e\u043a:<\/p>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0432 \u0441\u0438\u0433\u043d\u0430\u043b\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441. \u0427\u0442\u043e \u0432 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u2013 \u043d\u0435 \u0432\u0430\u0436\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u043b\u0443\u0447 \u0437\u0434\u043e\u0440\u043e\u0432\u043e\u0433\u043e \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u0430 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u043e\u0433\u0430\u0448\u0435\u043d. \u041d\u043e \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u0441\u0430\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043e \u0431\u044b\u0442\u044c \u0434\u043e\u043b\u0436\u043d\u043e.<\/p>\n<p>\u0422\u043e \u0436\u0435 \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0438 \u0441\u0442\u0440\u043e\u0447\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0445\u043e\u0434\u0430, \u0445\u043e\u0442\u044c \u0442\u0430\u043c \u0432\u0440\u0435\u043c\u044f \u0438 \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u044c\u0448\u0435.<\/p>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435, \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0434\u0430 \u0435\u0449\u0451 \u0438 \u0434\u043e\u043a\u0432\u0430\u0440\u0446\u0435\u0432\u044b\u0445 \u0432\u0440\u0435\u043c\u0451\u043d, \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u0439\u043a\u0438. \u0412\u043e\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0423\u042d\u0418\u0422:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0411\u0435\u043b\u044b\u0435 \u0442\u043e\u043d\u043a\u0438\u0435 \u043b\u0438\u043d\u0438\u0438 \u043d\u0430 \u0440\u0435\u043f\u0435\u0440\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043f\u043e \u043a\u0440\u0430\u044f\u043c \u044d\u043a\u0440\u0430\u043d\u0430, \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u043b\u0438 \u0441\u043e\u0432\u043c\u0435\u0449\u0430\u0442\u044c\u0441\u044f \u0441 \u0435\u0433\u043e \u0433\u0440\u0430\u043d\u0438\u0446\u0430\u043c\u0438. \u0427\u0442\u043e \u0437\u0430 \u043b\u0438\u043d\u0438\u0435\u0439 \u2013 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0432\u0438\u0434\u043d\u043e. \u041d\u0443, \u044d\u0442\u043e \u043d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439, \u0435\u0441\u043b\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043b\u0430\u0432\u0430\u0442\u044c. \u0410 \u0432 \u0441\u0438\u0433\u043d\u0430\u043b\u0435 \u044d\u0442\u0438 \u0442\u043e\u0447\u043a\u0438 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0434\u043e\u043b\u0436\u043d\u044b!<\/p>\n<p>\u0412\u043e\u0442 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043d\u0435 \u0432\u0441\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 (\u0434\u0430 \u0438 \u0442\u043e\u0447\u043a\u0438 \u0441\u0442\u0440\u043e\u043a) \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432\u0438\u0434\u0438\u043c\u044b\u043c\u0438. \u0418\u0437 \u043e\u0442\u0435\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 625 \u0441\u0442\u0440\u043e\u043a, \u0432\u0438\u0434\u0438\u043c\u044b\u043c\u0438 \u044f\u0432\u043b\u044f\u043b\u0438\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e 576. \u0410 \u0432 \u0430\u043c\u0435\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u043e\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0435, 480 \u0441\u0442\u0440\u043e\u043a \u2013 \u044d\u0442\u043e \u0432\u0438\u0434\u0438\u043c\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u044d\u043a\u0440\u0430\u043d\u0430 \u043f\u0440\u0438 525 \u0441\u0442\u0440\u043e\u043a\u0430\u0445 \u0432 \u0441\u0438\u0433\u043d\u0430\u043b\u0435. <\/p>\n<p>\u0428\u043b\u043e \u0432\u0440\u0435\u043c\u044f. \u0423\u0448\u043b\u0438 \u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u0435 \u043a\u0438\u043d\u0435\u0441\u043a\u043e\u043f\u044b. \u0418\u0445 \u0437\u0430\u043c\u0435\u043d\u0438\u043b\u0438 \u043c\u0430\u0442\u0440\u0438\u0446\u044b, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435\u0442 \u043d\u0438 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0433\u043e \u043b\u0443\u0447\u0430, \u043d\u0438 \u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0445\u043e\u0434\u0430, \u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0434\u043b\u044f \u043d\u0438\u0445 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u041e\u0417\u0423, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u043a\u0438 \u0443\u0436\u0435 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f. \u041d\u043e \u0434\u043b\u044f \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438 \u0441\u0438\u0433\u043d\u0430\u043b \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u043f\u0440\u0435\u0436\u043d\u0438\u043c. \u041c\u0430\u043b\u043e \u0442\u043e\u0433\u043e, \u0435\u0441\u043b\u0438 \u0446\u0438\u043a\u043b \u0441\u0442\u0430\u0442\u0435\u0439 \u043d\u0435 \u043f\u0440\u0435\u0440\u0432\u0451\u0442\u0441\u044f \u0438\u0437-\u0437\u0430 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u0441\u043f\u0440\u043e\u0441\u0430, \u0438 \u043c\u044b \u0434\u043e\u0439\u0434\u0451\u043c \u0434\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0433\u043e HDMI, \u0442\u043e \u0443\u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0434\u0430\u0436\u0435 \u0442\u0430\u043c \u0435\u0441\u0442\u044c \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u044b\u0435 \u0443\u0447\u0430\u0441\u0442\u043a\u0438 \u0440\u0430\u0441\u0442\u0440\u0430! \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 640\u0445480 \u0442\u043e\u0447\u0435\u043a, \u043c\u044b \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u043e \u043f\u0440\u043e\u0432\u043e\u0434\u0430\u043c \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430.<\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u044f \u043e\u043f\u0443\u0441\u0442\u0438\u043b \u043c\u0430\u0441\u0441\u0443 \u044d\u0444\u0438\u0440\u043d\u044b\u0445 \u0448\u0442\u0443\u0447\u0435\u043a: \u0437\u0430\u043c\u0435\u0448\u0438\u0432\u0430\u043d\u0438\u0435 \u0441\u0438\u043d\u0445\u0440\u043e\u0438\u043c\u043f\u0443\u043b\u044c\u0441\u043e\u0432 \u0432 \u0441\u0430\u043c \u0441\u0438\u0433\u043d\u0430\u043b, \u0447\u0435\u0440\u0435\u0441\u0441\u0442\u0440\u043e\u0447\u043d\u0443\u044e \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u043a\u0443 \u0438 \u043f\u0440\u043e\u0447\u0435\u0435, \u043f\u0440\u043e\u0447\u0435\u0435, \u043f\u0440\u043e\u0447\u0435\u0435. \u041c\u044b \u0441\u0435\u0439\u0447\u0430\u0441 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u0441\u0430\u043c\u0443 \u0438\u0434\u0435\u044e, \u043e\u0442\u043a\u0443\u0434\u0430 \u0432\u0437\u044f\u043b\u0438\u0441\u044c \u044d\u0442\u0438 \u043b\u0438\u0448\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438 \u0442\u043e\u0447\u043a\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0442\u0440\u043e\u043a, \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u0432 \u0438\u0445 \u043a \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u043d\u044b\u043c \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u043c. \u0427\u0442\u043e \u0436\u0435 \u0434\u043e \u0442\u043e\u0447\u043d\u044b\u0445 \u0446\u0438\u0444\u0440, \u0442\u043e \u043c\u044b \u0438\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b, \u0442\u0430\u043a \u0447\u0442\u043e \u0432\u0441\u0435 \u043d\u044e\u0430\u043d\u0441\u044b \u043d\u0430\u043c \u043d\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f. \u0415\u0441\u0442\u044c \u043c\u0430\u0441\u0441\u0430 \u0441\u0442\u0430\u0442\u0435\u0439, \u0433\u0434\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0447\u0435\u043a \u043d\u0430\u0434\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435. \u041f\u0440\u0438\u0447\u0451\u043c \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437\u043c\u0435\u0440\u044f\u044e\u0442\u0441\u044f \u0432 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445, \u043d\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u041f\u041b\u0418\u0421 \u043c\u044b \u043e\u043f\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u043f\u043e\u043d\u044f\u0442\u0438\u044f\u043c\u0438 \u00ab\u0442\u043e\u0447\u043a\u0430\u00bb \u0438 \u00ab\u0441\u0442\u0440\u043e\u043a\u0430\u00bb. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043b\u0438\u0431\u043e \u043a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0442 \u043d\u0430\u043c \u0443\u0437\u043d\u0430\u0442\u044c \u0438\u043b\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u044d\u0442\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u0442\u0430\u043a\u0438\u0445 \u0435\u0434\u0438\u043d\u0438\u0446\u0430\u0445 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 \u043a\u0430\u0434\u0440\u043e\u0432. <\/p>\n<p>\u0412\u043e\u0442 \u0445\u043e\u0440\u043e\u0448\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u0441 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u044f\u0441\u043d\u044f\u0435\u0442 \u0441\u0443\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043e\u043a \u043a \u0441\u0438\u0433\u043d\u0430\u043b\u0443 \u0441 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u043e\u0439 \u043a \u041f\u041b\u0418\u0421 (\u043d\u043e \u0431\u0435\u0437 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u044f \u043e\u043f\u0438\u0441\u0430\u043b \u0432\u044b\u0448\u0435): <a href=\"https:\/\/eax.me\/fpga-vga\/\" rel=\"noopener noreferrer nofollow\">\u0423\u0447\u0438\u043c iCEstick \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0432\u0438\u0434\u0435\u043e-\u0441\u0438\u0433\u043d\u0430\u043b \u043f\u043e VGA | \u0417\u0430\u043f\u0438\u0441\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430 (eax.me)<\/a><\/p>\n<p>\u041e\u0442\u0442\u0443\u0434\u0430 \u0435\u0441\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b <a href=\"http:\/\/martin.hinner.info\/vga\/timing.html\" rel=\"noopener noreferrer nofollow\">martin.hinner.info\/vga\/timing.html<\/a><\/p>\n<p>\u0410 \u0432\u043e\u0442 \u2013 \u0437\u0430\u0431\u0430\u0432\u043d\u044b\u0439 \u043e\u043d\u043b\u0430\u0439\u043d-\u043a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440: <a href=\"https:\/\/tomverbeure.github.io\/video_timings_calculator\" rel=\"noopener noreferrer nofollow\">Video Timings Calculator (tomverbeure.github.io)<\/a><\/p>\n<p>\u0423\u0444\u0444\u0444!\u00a0\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0430\u0442 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0432 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u043e\u043c \u043d\u0430\u043c\u0438 \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0440\u0430\u0445 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u0444\u0430\u0439\u043b\u0435 <strong>hvsync_generator.v<\/strong>. \u0421\u0440\u0430\u0432\u043d\u0438\u0442\u0435 \u0441\u0430\u043c\u0438:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041a\u043e\u0435-\u0447\u0442\u043e \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u043b\u043e, \u043d\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u043e\u043d\u043b\u0430\u0439\u043d-\u043a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440\u0430, \u043a\u0441\u0442\u0430\u0442\u0438, \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442 \u0442\u043e\u0447\u043d\u0435\u0435:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<h2>\u041f\u0430\u0440\u0430 \u0441\u043b\u043e\u0432 \u043f\u0440\u043e \u0444\u0430\u0439\u043b hvsync_generator.v<\/h2>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0435\u0441\u043b\u0438 \u043c\u044b \u0443\u0436 \u0437\u0430\u0433\u043e\u0432\u043e\u0440\u0438\u043b\u0438 \u043f\u0440\u043e \u0444\u0430\u0439\u043b <strong>hvsync_generator.v<\/strong>, \u0442\u043e \u0441 \u043d\u0438\u043c \u0432\u0441\u0451 \u043f\u0440\u043e\u0441\u0442\u043e. \u041e\u043d \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u043a\u0430\u0434\u0440\u043e\u0432\u044b\u0439 \u0438 \u0441\u0442\u0440\u043e\u0447\u043d\u044b\u0439 \u0441\u0438\u043d\u0445\u0440\u043e\u0438\u043c\u043f\u0443\u043b\u044c\u0441\u044b, \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c. \u0427\u0442\u043e\u0431\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043d\u0430\u0434\u043e \u044d\u0442\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0437\u0430\u0434\u0430\u0442\u044c \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435 \u0437\u0430\u0431\u044b\u0442\u044c \u0441\u043c\u0435\u043d\u0438\u0442\u044c \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u043e\u0447\u0435\u043a, \u043e \u0447\u0451\u043c \u043c\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435. \u0410 \u0432\u043e\u0442 \u0442\u0430\u043a \u0438\u0437 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0440\u0430\u0431\u043e\u0447\u0438\u0435:<\/p>\n<pre><code>  \/\/ derived constants   parameter H_SYNC_START    = H_DISPLAY + H_FRONT;   parameter H_SYNC_END      = H_DISPLAY + H_FRONT + H_SYNC - 1;   parameter H_MAX           = H_DISPLAY + H_BACK + H_FRONT + H_SYNC - 1;   parameter V_SYNC_START    = V_DISPLAY + V_BOTTOM;   parameter V_SYNC_END      = V_DISPLAY + V_BOTTOM + V_SYNC - 1;   parameter V_MAX           = V_DISPLAY + V_TOP + V_BOTTOM + V_SYNC - 1;<\/code><\/pre>\n<p>\u0412\u043e\u0442 \u0442\u0430\u043a \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f:<\/p>\n<pre><code>  wire hmaxxed = (hpos == H_MAX) || reset;  \/\/ set when hpos is maximum   wire vmaxxed = (vpos == V_MAX) || reset;  \/\/ set when vpos is maximum<\/code><\/pre>\n<p>\u041d\u0443, \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0438 \u0441\u0442\u0440\u043e\u043a \u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u0438\u043c\u043f\u0443\u043b\u044c\u0441\u043e\u0432. <\/p>\n<pre><code>  \/\/ horizontal position counter   always @(posedge clk)   begin     hsync &lt;= (hpos>=H_SYNC_START &amp;&amp; hpos&lt;=H_SYNC_END);     if(hmaxxed)       hpos &lt;= 0;     else       hpos &lt;= hpos + 1;   end    \/\/ vertical position counter   always @(posedge clk)   begin     vsync &lt;= (vpos>=V_SYNC_START &amp;&amp; vpos&lt;=V_SYNC_END);     if(hmaxxed)       if (vmaxxed)         vpos &lt;= 0;       else         vpos &lt;= vpos + 1;   end    \/\/ display_on is set when beam is in \"safe\" visible frame   assign display_on = (hpos&lt;H_DISPLAY) &amp;&amp; (vpos&lt;V_DISPLAY);<\/code><\/pre>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043e\u0442\u0441\u044e\u0434\u0430 \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u044b \u0432\u044b\u0445\u043e\u0434\u044f\u0442 \u0432\u0441\u0435\u0433\u0434\u0430 \u0432 \u043f\u0440\u044f\u043c\u043e\u0439 \u043f\u043e\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u0438. \u041a\u0430\u0436\u0435\u0442\u0441\u044f, \u043a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440 \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u044d\u0442\u043e \u0434\u0435\u043b\u043e:  <\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0440\u043e\u0441\u0442\u043e \u0442\u043e\u0442 \u0436\u0435 \u0440\u0435\u0436\u0438\u043c 640\u0445480 \u043f\u0440\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0447\u0430\u0441\u0442\u043e\u0442\u0430\u0445 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u043e\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u0438\u043c\u043f\u0443\u043b\u044c\u0441\u043e\u0432. \u041d\u043e \u0437\u0434\u0435\u0441\u044c \u2013 \u043d\u0443\u0436\u043d\u0430 \u0442\u0430\u043a\u0430\u044f. \u042f \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.\u00a0 \u0410 \u0433\u0434\u0435 \u0431\u0440\u0430\u0442\u044c \u0446\u0438\u0444\u0440\u044b \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u0432\u0438\u0434\u0435\u043e\u0440\u0435\u0436\u0438\u043c\u043e\u0432 &#8212; \u0432\u044b \u0442\u0435\u043f\u0435\u0440\u044c \u0437\u043d\u0430\u0435\u0442\u0435.<\/p>\n<h2>\u0427\u0442\u043e \u0443 \u043d\u0430\u0441 \u0441 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439<\/h2>\n<p>\u0412 \u043f\u0440\u043e\u0448\u043b\u044b\u0439 \u0440\u0430\u0437 \u044f \u0443\u0436\u0435 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b, \u0447\u0442\u043e \u043d\u0430\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u0438\u0442 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439. \u0422\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446 \u043c\u044b \u043f\u043e\u043d\u044f\u043b\u0438, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u0430, \u0431\u043b\u0438\u0437\u043a\u0430\u044f \u043a 25 \u041c\u0413\u0446. \u0410 \u0432 \u043a\u043e\u0434\u0435 \u043d\u0430 \u041f\u0438\u0442\u043e\u043d\u0435 \u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u043b\u00a0\u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0412\u0440\u043e\u0434\u0435, \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c <strong>clk<\/strong>. \u041d\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0434\u043e\u043b\u0433\u043e \u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0430\u0442\u044c, \u0430 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0412\u0435\u0440\u0438\u043b\u043e\u0433\u043e\u0432\u0441\u043a\u0438\u0439 \u0444\u0430\u0439\u043b:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<details class=\"spoiler\">\n<summary>\u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u043c.<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>gpu gpu( .clk(sys_clk), .x0(main_x0_storage), .x1(main_x1_storage), .y0(main_y0_storage), .y1(main_y1_storage), .color(gpio0), .hsync(gpio2), .vsync(gpio3) );<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u041f\u043e\u0433\u043e\u0434\u0438\u0442\u0435, \u043a\u0430\u043a\u043e\u0439 \u0435\u0449\u0451 <strong>sys_clk<\/strong>? \u041c\u044b \u0436\u0435 \u043f\u0440\u043e\u0441\u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e <strong>clk<\/strong>\u2026 \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0430\u043c \u043f\u043e\u0432\u0435\u0437\u043b\u043e, \u0443 \u043d\u0430\u0441 \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 \u043f\u0440\u0438\u043f\u0430\u044f\u043d \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043d\u0430 25 \u041c\u0413\u0446. \u041d\u043e \u0435\u0449\u0451 \u0435\u0441\u0442\u044c \u0448\u0430\u043d\u0441, \u0447\u0442\u043e \u044d\u0442\u043e \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0445\u0438\u0442\u0440\u043e\u0435 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435\u2026 \u041d\u0443-\u043a\u0430\u2026 \u0418\u0449\u0435\u043c, \u0433\u0434\u0435 \u044d\u0442\u043e\u0442 \u0441\u0438\u0433\u043d\u0430\u043b \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f\u2026<\/p>\n<p><code>assign sys_clk = basesoc_crg_clkout0;<\/code><\/p>\n<p>\u0433\u0434\u0435:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<details class=\"spoiler\">\n<summary>\u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u043c.<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>(* FREQUENCY_PIN_CLKI = \"25.0\", FREQUENCY_PIN_CLKOP = \"60.0\", FREQUENCY_PIN_CLKOS = \"60.0\", ICP_CURRENT = \"6\", LPF_RESISTOR = \"16\", MFG_ENABLE_FILTEROPAMP = \"1\", MFG_GMCREF_SEL = \"2\" *) EHXPLLL #( .CLKFB_DIV(5'd24), .CLKI_DIV(1'd1), .CLKOP_CPHASE(4'd9), .CLKOP_DIV(4'd10), .CLKOP_ENABLE(\"ENABLED\"), .CLKOP_FPHASE(1'd0), .CLKOS2_CPHASE(1'd0), .CLKOS2_DIV(1'd1), .CLKOS2_ENABLE(\"ENABLED\"), .CLKOS2_FPHASE(1'd0), .CLKOS_CPHASE(4'd14), .CLKOS_DIV(4'd10), .CLKOS_ENABLE(\"ENABLED\"), .CLKOS_FPHASE(1'd0), .FEEDBK_PATH(\"INT_OS2\") ) EHXPLLL ( .CLKI(basesoc_crg_clkin), .RST(basesoc_crg_reset), .STDBY(basesoc_crg_stdby), .CLKOP(basesoc_crg_clkout0), .CLKOS(basesoc_crg_clkout1), .CLKOS2(builder_subfragments_crg_ecp5pll), .LOCK(builder_subfragments_crg_locked) );<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0441\u043e\u043c\u043d\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u0432\u0435\u044f\u043d\u044b! \u041f\u0435\u0440\u0435\u0434 \u043d\u0430\u043c\u0438 \u0441\u0430\u043c\u044b\u0435 \u0447\u0442\u043e \u043d\u0438 \u043d\u0430 \u0435\u0441\u0442\u044c 60 \u043c\u0435\u0433\u0430\u0433\u0435\u0440\u0446. \u0410 \u043d\u0430\u043c \u043d\u0430\u0434\u043e 25! \u0418 \u043e\u043d\u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0435\u0441\u0442\u044c, \u043d\u0430\u0434\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u041f\u0438\u0442\u043e\u043d\u043e\u0432\u0441\u043a\u0438\u0439 \u0441\u043a\u0440\u0438\u043f\u0442. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u044f \u0441\u0443\u043d\u0443 \u043d\u043e\u0441 \u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0432 \u0443\u0436\u0435 \u0445\u043e\u0440\u043e\u0448\u043e \u043d\u0430\u043c \u0437\u043d\u0430\u043a\u043e\u043c\u043e\u043c \u0444\u0430\u0439\u043b\u0435 <strong>Litex\\litex-boards\\litex_boards\\targets\\colorlight_5a_75x.py.<\/strong><\/p>\n<pre><code># Clk \/ Rst         if not use_internal_osc:             clk = platform.request(\"clk25\")             clk_freq = 25e6         else:             clk = Signal()             div = 5             self.specials += Instance(\"OSCG\",                                 p_DIV = div,                                 o_OSC = clk)             clk_freq = 310e6\/div          rst_n = 1 if not with_rst else platform.request(\"user_btn_n\", 0)          # PLL         self.submodules.pll = pll = ECP5PLL()         self.comb += pll.reset.eq(~rst_n | self.rst)         pll.register_clkin(clk, clk_freq)         pll.create_clkout(self.cd_sys,    sys_clk_freq)         if sdram_rate == \"1:2\":             pll.create_clkout(self.cd_sys2x,    2*sys_clk_freq)             pll.create_clkout(self.cd_sys2x_ps, 2*sys_clk_freq, phase=180) # Idealy 90\u00b0 but needs to be increased.         else:            pll.create_clkout(self.cd_sys_ps, sys_clk_freq, phase=180) # Idealy 90\u00b0 but needs to be increased.<\/code><\/pre>\n<p>\u0414\u0435\u043b\u043e \u044f\u0441\u043d\u043e\u0435, \u0447\u0442\u043e \u0434\u0435\u043b\u043e \u0442\u0451\u043c\u043d\u043e\u0435. \u0412\u043e\u0442 \u044f \u0432\u0438\u0436\u0443 <strong>clk<\/strong>. \u0412\u0440\u043e\u0434\u0435 \u043a\u0430\u043a, \u044d\u0442\u043e \u0432\u0445\u043e\u0434\u2026 \u041a\u043e\u0440\u043e\u0447\u0435, \u043a\u043e\u043d\u0447\u0430\u0435\u043c \u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u043f\u043e-\u0441\u0443\u0445\u043e\u043c\u0443! \u0417\u0440\u044f \u044f \u0447\u0442\u043e \u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 Visual Studio? \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0442\u0440\u0430\u0441\u0441\u0435\u0440\u043d\u0443\u0442\u044c \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0433\u0434\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u0441\u0438\u0433\u043d\u0430\u043b, \u043d\u0435 \u0434\u043e\u0436\u0438\u0434\u0430\u044f\u0441\u044c \u043c\u0438\u043b\u043e\u0441\u0442\u0438 \u043e\u0442 \u043f\u0440\u0438\u0440\u043e\u0434\u044b! \u0418\u0434\u0451\u043c \u0432 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u0432 \u043f\u0440\u043e\u0448\u043b\u044b\u0439 \u0440\u0430\u0437, \u0438 \u0441\u0442\u0430\u0432\u0438\u043c \u0442\u043e\u0447\u043a\u0443 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430 \u0437\u0434\u0435\u0441\u044c:<\/p>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435, \u0438 \u0441\u043d\u0430\u0447\u0430\u043b\u0430, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0433\u043b\u0430\u0437\u043e\u043c\u0435\u0440, \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0442\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u0441\u0435\u0439\u0447\u0430\u0441:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u044f \u043d\u0430\u0445\u0430\u043b\u044c\u043d\u043e \u0441\u0442\u0430\u0432\u043b\u044e \u043a\u0443\u0440\u0441\u043e\u0440 \u043d\u0430 \u043f\u043e\u043b\u0435 <strong>cd_sys<\/strong> \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u044e \u0435\u0437\u0434\u0438\u0442\u044c \u043f\u043e \u0432\u0441\u0435\u043c<\/p>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-327675","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/327675","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=327675"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/327675\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=327675"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=327675"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=327675"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}