{"id":312428,"date":"2020-11-02T15:00:48","date_gmt":"2020-11-02T15:00:48","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=312428"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=312428","title":{"rendered":"\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u043f\u044b\u0442\u044b \u0441 USB-\u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u043c \u043d\u0430 \u0431\u0430\u0437\u0435 Redd"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\">\u0422\u0440\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u043d\u0430\u0437\u0430\u0434 \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0433\u043e\u043b\u043e\u0432\u0443 \u0434\u043b\u044f \u0448\u0438\u043d\u043d\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 USB, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u2013 \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u043b\u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0433\u043e\u043d\u044f\u043b\u0438 \u044d\u0442\u0443 \u0433\u043e\u043b\u043e\u0432\u0443 \u043d\u0430 \u043c\u043e\u0434\u0435\u043b\u044f\u0445. \u041f\u0440\u0430\u0432\u0434\u0430, \u0432\u0441\u0451 \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u043d\u0435 \u0437\u0440\u044f. \u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430\u0448\u0451\u043b \u043f\u0430\u0440\u0443 \u0441\u0431\u043e\u0435\u0432 \u043b\u043e\u0433\u0438\u043a\u0438, \u0430 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438\u0445 \u0431\u044b\u043b\u043e \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u043d\u0430\u0447\u043d\u0438 \u044f \u0432\u0441\u0451 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u0432 \u0436\u0435\u043b\u0435\u0437\u0435 \u2014 \u0441\u0438\u0434\u0435\u043b \u0431\u044b \u0438 \u0441\u043e\u043a\u0440\u0443\u0448\u0430\u043b\u0441\u044f: \u00ab\u0410 \u0447\u0435\u0433\u043e \u043e\u043d\u043e \u0442\u0430\u043a \u0441\u0435\u0431\u044f \u0432\u0435\u0434\u0451\u0442?\u00bb \u0422\u0435\u043f\u0435\u0440\u044c \u0436\u0435 \u044f \u0443\u0432\u0435\u0440\u0435\u043d, \u0447\u0442\u043e \u0432 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0447\u0435\u0441\u043a\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432\u0441\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u0434\u0435\u043b\u0430\u0435\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u043e, \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u0437\u0430\u0434\u0443\u043c\u0430\u043d\u043e. \u0427\u0442\u043e \u0434\u0430\u043b\u044c\u0448\u0435? \u0422\u0435, \u043a\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u044b\u0435 \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b, \u0434\u0430\u043b\u044c\u0448\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044f\u0442 \u043a \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438, \u0430 \u0432 \u043a\u043e\u043d\u0446\u0435 \u2014 \u043c\u043e\u0434\u0435\u043b\u0438, \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0439 \u043a \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u0438 \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0438 \u0432 \u041f\u041b\u0418\u0421 (\u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0435 Gate-Level \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435). \u0422\u0430\u043c \u0443\u0436\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u043d\u0430 \u0432\u0441\u0435\u0445 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u0445 \u043f\u0440\u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u041d\u043e \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430\u0448\u0435\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442. \u041d\u0430\u043c \u0431\u044b\u043b\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0432\u0441\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0432\u0435\u0440\u043d\u043e. \u0418 \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0441\u0431\u043e\u0440\u043a\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/w5\/ph\/tm\/w5phtmbpnkderfosmrlhhocw624.jpeg\"><\/p>\n<p>  <a name=\"habracut\"><\/a>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u0446\u0438\u043a\u043b\u0430<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<ol>\n<li><a href=\"https:\/\/habr.com\/ru\/post\/452656\/\">\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u0439 \u00ab\u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438\u00bb \u0434\u043b\u044f \u041f\u041b\u0418\u0421, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0432 Redd, \u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0430 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0442\u0435\u0441\u0442\u0430 \u043f\u0430\u043c\u044f\u0442\u0438<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/post\/453682\/\">\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u0439 \u00ab\u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438\u00bb \u0434\u043b\u044f \u041f\u041b\u0418\u0421, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0432 Redd. \u0427\u0430\u0441\u0442\u044c 2. \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0439 \u043a\u043e\u0434<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/post\/454938\/\">\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u044f\u0434\u0440\u0430 \u0434\u043b\u044f \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043d\u0438\u044f \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043d\u0430 \u0431\u0430\u0437\u0435 \u041f\u041b\u0418\u0421<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/post\/456008\/\">\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0434\u043b\u044f \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 Redd \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u041f\u041b\u0418\u0421<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/post\/462253\/\">\u041f\u0435\u0440\u0432\u044b\u0435 \u043e\u043f\u044b\u0442\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0441\u0432\u044f\u0437\u0438 \u0426\u041f \u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u0432 \u041f\u041b\u0418\u0421 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u0430 Redd<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/post\/464795\/\">\u0412\u0435\u0441\u0435\u043b\u0430\u044f \u041a\u0432\u0430\u0440\u0442\u0443\u0441\u0435\u043b\u044c, \u0438\u043b\u0438 \u043a\u0430\u043a \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0434\u043e\u043a\u0430\u0442\u0438\u043b\u0441\u044f \u0434\u043e \u0442\u0430\u043a\u043e\u0439 \u0436\u0438\u0437\u043d\u0438<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/post\/467353\/\">\u041c\u0435\u0442\u043e\u0434\u044b \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u0434\u0430 \u0434\u043b\u044f Redd. \u0427\u0430\u0441\u0442\u044c 1: \u0432\u043b\u0438\u044f\u043d\u0438\u0435 \u043a\u044d\u0448\u0430<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/post\/468027\/\">\u041c\u0435\u0442\u043e\u0434\u044b \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u0434\u0430 \u0434\u043b\u044f Redd. \u0427\u0430\u0441\u0442\u044c 2: \u043d\u0435\u043a\u044d\u0448\u0438\u0440\u0443\u0435\u043c\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u0438 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0448\u0438\u043d<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/post\/469985\/\">\u042d\u043a\u0441\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043a\u043e\u0434\u0430: \u0437\u0430\u043c\u0435\u043d\u0430 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0434\u043b\u044f \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/post\/477662\/\">\u0414\u043e\u0441\u0442\u0443\u043f \u043a \u0448\u0438\u043d\u0430\u043c \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u0430 Redd, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u043d\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u0445 FTDI<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/post\/483724\/\">\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c\u0438 \u0448\u0438\u043d\u0430\u043c\u0438 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u0430 Redd<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/post\/484706\/\">\u041f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u0432 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c\u0438 \u0448\u0438\u043d\u0430\u043c\u0438 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u0430 Redd<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/post\/493630\/\">\u041f\u0440\u043e\u0431\u0440\u043e\u0441 USB-\u043f\u043e\u0440\u0442\u043e\u0432 \u0438\u0437 Windows 10 \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/post\/496508\/\">\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b Nios II \u0431\u0435\u0437 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u043e\u0433\u043e \u044f\u0434\u0440\u0430 Nios II<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/post\/500016\/\">\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u041f\u041b\u0418\u0421 \u0432 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442\u0435 Redd. \u041e\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u043c DMA \u0434\u043b\u044f \u0448\u0438\u043d\u044b Avalon-ST \u0438 \u043a\u043e\u043c\u043c\u0443\u0442\u0430\u0446\u0438\u044e \u043c\u0435\u0436\u0434\u0443 \u0448\u0438\u043d\u0430\u043c\u0438 Avalon-MM<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/post\/506464\/\">\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u0433\u043e \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u043d\u0430 \u0431\u0430\u0437\u0435 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u0430 Redd<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/post\/508138\/\"> \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u043d\u0430 \u0431\u0430\u0437\u0435 Redd \u2013 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0443 \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/post\/510234\/\"> \u0414\u0435\u043b\u0430\u0435\u043c \u0433\u043e\u043b\u043e\u0432\u0443 \u0448\u0438\u043d\u043d\u043e\u0433\u043e USB-\u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u043d\u0430 \u0431\u0430\u0437\u0435 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u0430 Redd<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/post\/512602\/\"> \u041c\u043e\u0434\u0435\u043b\u0438\u0440\u0443\u0435\u043c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 Quartus-\u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430 Verilog \u0432 \u0441\u0440\u0435\u0434\u0435 ModelSim<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/post\/520702\/\"> \u041c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0432 \u0441\u0440\u0435\u0434\u0435 ModelSim \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 SystemC<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/post\/522678\/\"> \u041f\u0440\u043e\u0432\u043e\u0434\u0438\u043c \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0433\u043e\u043b\u043e\u0432\u044b USB-\u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430<\/a><\/li>\n<\/ol>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <\/p>\n<h2>\u0414\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043a\u043e\u0434\u0430 \u0433\u043e\u043b\u043e\u0432\u044b<\/h2>\n<p>  \u042f \u043e\u043f\u0443\u0449\u0443 \u0447\u0430\u0441\u0442\u044c \u043e\u043f\u044b\u0442\u043e\u0432, \u0441\u043a\u0430\u0436\u0443 \u0442\u043e\u043b\u044c\u043a\u043e, \u0447\u0442\u043e \u043f\u0440\u0438 \u043f\u0440\u0438\u043a\u0438\u0434\u043a\u0430\u0445 \u0431\u043e\u0435\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u0430\u0441\u044c \u0442\u0440\u0438 \u0432\u0435\u0449\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u043d\u0435 \u043c\u043e\u0433 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0437\u0430\u0440\u0430\u043d\u0435\u0435. <\/p>\n<p>  <b>\u041f\u0435\u0440\u0432\u043e\u0435 \u2014 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435.<\/b> \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u044f \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043e\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430, \u0443\u0434\u0432\u043e\u0438\u0432 \u0435\u0433\u043e \u0447\u0430\u0441\u0442\u043e\u0442\u0443 (\u0441 50 \u0434\u043e 100 \u041c\u0413\u0446), \u043a\u0430\u043a \u043c\u044b \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u043b\u0438 \u0434\u043b\u044f \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430, \u0430 \u0433\u043e\u043b\u043e\u0432\u0443 \u2014 \u043e\u0442 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b ULPI (60 \u041c\u0413\u0446). \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u044f \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043b \u0434\u0432\u0430 \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0445 \u0434\u043e\u043c\u0435\u043d\u0430. \u0416\u0438\u0437\u043d\u044c \u0432\u043d\u0435\u0441\u043b\u0430 \u0441\u0432\u043e\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0432\u044b. \u042d\u0442\u0438 \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0435 \u0434\u043e\u043c\u0435\u043d\u044b \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u0438 \u0442\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0445 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0439, \u0447\u0442\u043e \u0441\u0442\u0430\u0442\u044c\u044f \u0441\u0442\u0430\u043b\u0430 \u043d\u0435 \u043f\u0440\u043e USB-\u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440, \u0430 \u043f\u0440\u043e \u043d\u0438\u0445. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0438\u0437\u0431\u0430\u0432\u0438\u043b\u0441\u044f \u043e\u0442 \u0434\u0432\u0443\u0445 \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0445 \u0447\u0430\u0441\u0442\u043e\u0442. \u041d\u043e \u043a\u0430\u043a \u0432\u0441\u0451 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c? \u0420\u0435\u0448\u0435\u043d\u043e \u0431\u044b\u043b\u043e, \u0447\u0442\u043e \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u043c \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0441\u0442\u0430\u043d\u0435\u0442 \u0441\u0430\u043c\u0430 \u0433\u043e\u043b\u043e\u0432\u0430! \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0439 \u0431\u044b\u043b \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u043d\u043e\u0432\u044b\u0439 \u043f\u043e\u0440\u0442:  <\/p>\n<pre><code class=\"plaintext\">   output              clk60, <\/code><\/pre>\n<p>  \u0418 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u043e\u0434\u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0430 \u0442\u0435\u043a\u0441\u0442\u0430:  <\/p>\n<pre><code class=\"plaintext\">assign clk60 = ulpi_clk; <\/code><\/pre>\n<p>  \u0412 \u0432\u0435\u0440\u0438\u043b\u043e\u0433\u043e\u0432\u0441\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u2014 \u0432\u0441\u0451. \u0425\u043e\u0442\u044f, \u043f\u0440\u0438 \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0435 \u0432 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442, \u043c\u044b \u043a \u0442\u0430\u043a\u0442\u0430\u043c \u0435\u0449\u0451 \u0432\u0435\u0440\u043d\u0451\u043c\u0441\u044f.<\/p>\n<p>  <b>\u0412\u0442\u043e\u0440\u0430\u044f \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u2013 \u0441\u0438\u0433\u043d\u0430\u043b GO.<\/b> \u0412 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0435 \u0432 \u0442\u043e\u043c \u0432\u0438\u0434\u0435, \u0432 \u043a\u0430\u043a\u043e\u043c \u043e\u043d \u043f\u043e\u0448\u0451\u043b \u0432 \u0441\u0442\u0430\u0442\u044c\u044e, \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u0430 \u0432\u0435\u0441\u0451\u043b\u0430\u044f \u0432\u0435\u0449\u044c \u2014 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 FIFO. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u044f \u043f\u043e\u043a\u0430\u0436\u0443 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0433\u043e\u0442\u043e\u0432\u043e\u0433\u043e \u0440\u0438\u0441\u0443\u043d\u043a\u0430 \u0438\u0437 \u0441\u0442\u0430\u0442\u044c\u0438, \u0433\u0434\u0435 \u043c\u044b \u0434\u0435\u043b\u0430\u043b\u0438 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 (<a href=\"https:\/\/habr.com\/ru\/post\/506464\/\">\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u0433\u043e \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u043d\u0430 \u0431\u0430\u0437\u0435 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u0430 Redd<\/a>). \u0414\u0435\u0442\u0430\u043b\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 (\u0448\u0438\u0440\u0438\u043d\u0430 \u0448\u0438\u043d\u044b) \u0442\u0430\u043c \u0447\u0443\u0442\u044c \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f, \u043d\u043e \u0441\u0443\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u044f\u0441\u043d\u0430. <\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/u-\/nh\/e6\/u-nhe6v0g58q4udwqkl_fp6r2ee.png\"> <\/p>\n<p>  \u041c\u044b \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c DMA, \u0432 \u0438\u0442\u043e\u0433\u0435 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u043e\u0431\u0435\u0433\u0430\u044e\u0442 \u043d\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0433\u043e\u043b\u043e\u0432\u044b, \u0430 \u0434\u0430\u043d\u043d\u044b\u0435, \u043d\u0430\u043a\u043e\u043f\u0438\u0432\u0448\u0438\u0435\u0441\u044f \u0432 FIFO. \u0410 \u043a\u043e\u0433\u0434\u0430 \u043e\u043d\u0438 \u0442\u0430\u043c \u043a\u043e\u043f\u0438\u043b\u0438\u0441\u044c, \u043a\u0442\u043e \u0436\u0435 \u0437\u043d\u0430\u0435\u0442? \u041d\u0430\u0434\u043e, \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c, \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e Flush. \u0417\u0434\u0435\u0441\u044c \u0436\u0435 \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u0441\u0438\u0433\u043d\u0430\u043b, \u044f\u0432\u043b\u044f\u044e\u0449\u0438\u0439\u0441\u044f \u043a\u043b\u044e\u0447\u043e\u043c, \u0437\u0430\u043f\u0438\u0440\u0430\u044e\u0449\u0438\u043c \u0432\u044b\u0445\u043e\u0434 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0441\u0430\u043c\u043e\u0439 \u0433\u043e\u043b\u043e\u0432\u044b. \u041f\u043e\u043a\u0430 \u043e\u043d \u043d\u0435 \u0432\u0437\u0432\u0435\u0434\u0451\u043d, \u0433\u043e\u043b\u043e\u0432\u0430 \u043d\u0435 \u0432\u044b\u0434\u0430\u0451\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 AVALON_ST, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u043e\u043d\u0438 \u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0443\u0442 \u0438 \u0432 FIFO. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u043c \u0448\u0438\u043d\u044b source_valid \u0435\u0441\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0444\u043b\u0430\u0433 \u044f\u0434\u0440\u0430:  <\/p>\n<pre><code class=\"plaintext\">logic source_valid_priv; <\/code><\/pre>\n<p>  \u0418\u043c\u0435\u043d\u043d\u043e \u0435\u0433\u043e \u0432\u0437\u0432\u043e\u0434\u0438\u0442 \u0438\u043b\u0438 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442. \u0410 \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u0431\u0438\u0442\u0430 GO:  <\/p>\n<pre><code class=\"plaintext\">logic go; assign source_valid = source_valid_priv &amp; go; <\/code><\/pre>\n<p>  \u041d\u0443, \u0438 \u0441\u0430\u043c \u0431\u0438\u0442 Go \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f:  <\/p>\n<pre><code class=\"plaintext\">\/\/ \u041e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0435 AVALON_MM \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c always_ff @(posedge ulpi_clk) begin ...    if (write == 1)     begin       case (address) ...           2 : begin ...                 \/\/ \u0411\u0438\u0442 1 - \u0437\u0430\u043f\u0443\u0441\u043a \u0430\u043d\u0430\u043b\u0438\u0437\u0430,                 \/\/ \u0411\u0435\u0437 \u043d\u0435\u0433\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430\u0440\u0443\u0436\u0443 \u043d\u0435 \u0432\u044b\u0439\u0434\u0443\u0442                 go &lt;= writedata [1]; ... <\/code><\/pre>\n<p>  <b>\u041d\u0443, \u0438 \u0442\u0440\u0435\u0442\u044c\u044f \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u2014 \u0447\u0438\u0441\u0442\u043e \u0434\u043b\u044f \u043a\u0440\u0430\u0441\u043e\u0442\u044b.<\/b> \u041d\u043e \u044d\u0442\u0430 \u043a\u0440\u0430\u0441\u043e\u0442\u0430 \u0431\u044b\u043b\u0430 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043f\u0440\u0438\u0447\u0438\u043d, \u043f\u043e\u0447\u0435\u043c\u0443 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043e\u0442\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0434\u0432\u0443\u0445 \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0445 \u0434\u043e\u043c\u0435\u043d\u043e\u0432. \u042f \u0445\u043e\u0442\u0435\u043b \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0430\u0434\u0440\u0435\u0441 DMA \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 PC \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 TCL-\u0441\u043a\u0440\u0438\u043f\u0442\u0430. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u044d\u0442\u043e \u043a\u0430\u043a-\u0442\u043e \u0434\u0430\u0436\u0435 \u0438 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u043d\u043e \u044f \u043d\u0435 \u043d\u0430\u0448\u0451\u043b \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f. \u041d\u0435 \u0432\u0438\u0436\u0443 \u044f \u043f\u043e\u0440\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0447\u0438\u0442\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0448\u0438\u043d\u0443 AVALON_MM \u043d\u0430 \u043b\u0435\u0442\u0443, \u0447\u0442\u043e\u0431\u044b \u0432\u0438\u0434\u0435\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0430\u0434\u0440\u0435\u0441 \u0437\u0430\u043f\u0438\u0441\u0438, \u0438 \u0432\u0441\u0451 \u0442\u0443\u0442. \u0417\u0430\u043f\u0443\u0442\u0430\u0432\u0448\u0438\u0441\u044c \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0435, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0435\u043c \u0442\u0438\u043f\u043e\u0432\u044b\u0435 AVALON-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 (\u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0438 \u0432\u0441\u0435 \u0432\u0438\u0434\u044b DMA-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432), \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u0434\u043e\u0439\u0442\u0438 \u043a \u0440\u0435\u0448\u0435\u043d\u0438\u044e \u0432\u043e\u043f\u0440\u043e\u0441\u0430 \u043a\u0430\u0440\u0434\u0438\u043d\u0430\u043b\u044c\u043d\u043e. \u0415\u0441\u043b\u0438 \u044f \u043d\u0435 \u043c\u043e\u0433\u0443 \u0443\u0437\u043d\u0430\u0442\u044c, \u043a\u0430\u043a\u043e\u0439 \u0430\u0434\u0440\u0435\u0441 \u0441\u0435\u0439\u0447\u0430\u0441 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0442\u043e \u043a\u0442\u043e \u043c\u043d\u0435 \u043c\u0435\u0448\u0430\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0430\u0442\u044c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e \u0432 \u043d\u0435\u0433\u043e \u0438\u0437 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430? \u041f\u0443\u0441\u0442\u044c \u0431\u0443\u0434\u0435\u0442 \u0442\u0430\u043a (\u044f \u043e\u043f\u044f\u0442\u044c \u0431\u0435\u0440\u0443 \u0441\u0445\u0435\u043c\u0443 \u043e\u0442 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430, \u043d\u043e \u043a\u0440\u043e\u043c\u0435 \u0448\u0438\u0440\u0438\u043d\u044b \u0448\u0438\u043d \u043e\u043d\u0430 \u043d\u0438\u0447\u0435\u043c \u043d\u0435 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f):<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/lc\/jm\/el\/lcjmelr-jth0ebmtcrxk8gcqwbe.png\"> <\/p>\n<p>  \u041d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e, \u0447\u0442\u043e \u0441\u0447\u0451\u0442\u0447\u0438\u043a (cnt) \u0431\u043b\u043e\u043a\u0430 DMA \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0432\u044b\u0445\u043e\u0434\u0430 \u043d\u0430 \u0448\u0438\u043d\u0443 AVALON_MM. \u0410 \u043d\u043e\u0432\u044b\u0439 \u0441\u0447\u0451\u0442\u0447\u0438\u043a (cnt) \u0431\u043b\u043e\u043a\u0430 \u00ab\u0413\u043e\u043b\u043e\u0432\u0430\u00bb \u043f\u043e\u0434\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0447\u0438\u0441\u043b\u043e \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u0448\u0438\u043d\u0443 AVALON_ST \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u0432\u043e\u0451 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 \u0448\u0438\u043d\u0443 AVALON_MM. \u041d\u0443, \u0430 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0435\u043c\u0443 \u0434\u043e\u0441\u0442\u0443\u043f \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u0440\u0442 JTAG \u0438 \u0431\u043b\u043e\u043a Altera HTAG-to-Avalon_MM, \u0430 \u0434\u0430\u043b\u044c\u0448\u0435 \u2013 \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0441\u0447\u0438\u0442\u0430\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u043f\u0443\u0441\u0442\u044c \u0432 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e\u043c \u0432\u0438\u0434\u0435, \u043f\u0443\u0441\u0442\u044c \u0432 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u0430\u0445 \u043e\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0431\u0443\u0444\u0435\u0440\u0430. \u0422\u0430\u043a \u0434\u0435\u043b\u0430\u044e\u0442 \u0432\u0441\u0435 \u043f\u0440\u0438\u043b\u0438\u0447\u043d\u044b\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u044b!<\/p>\n<p>  \u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0435\u043c \u043a \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044e. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u044f\u0434\u0440\u0435 \u0433\u043e\u043b\u043e\u0432\u044b \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u043f\u043e\u0440\u0442. \u041d\u043e \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0448\u0438\u043d\u044b \u0443\u0436\u0435 \u0432\u0441\u0451 \u0437\u0430\u043d\u044f\u0442\u043e \u0447\u0435\u0442\u044b\u0440\u044c\u043c\u044f \u043f\u043e\u0440\u0442\u0430\u043c\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u043b \u0448\u0438\u043d\u0443 \u0430\u0434\u0440\u0435\u0441\u0430. \u0422\u0435\u043f\u0435\u0440\u044c \u043e\u043d\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"plaintext\">input        [2:0]  address, <\/code><\/pre>\n<p>  \u0427\u0438\u0442\u0430\u0435\u043c \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"plaintext\">\/\/ \u041e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0435 AVALON_MM \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 always_comb  begin    case (address) ...       \/\/ \u0421\u0447\u0451\u0442\u0447\u0438\u043a \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043a\u0440\u0430\u0441\u0438\u0432\u043e\u0433\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f       4: readdata &lt;= transfer_cnt; <\/code><\/pre>\n<p>  \u0430 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u043f\u043e \u043f\u0435\u0440\u0435\u043f\u0430\u0434\u0443 GO. \u0422\u0438\u043f\u043e\u0432\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u0441\u043e\u0431\u0440\u0430\u043b\u0441\u044f \u043b\u043e\u0432\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043f\u0430\u0434 \u2013 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043a\u043e\u0434 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443 \u043d\u0430 \u0448\u0430\u0433 \u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u0438 \u0437\u0430\u0434\u0435\u0440\u0436\u0430\u043d\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439. \u0418\u0442\u043e\u0433\u043e:  <\/p>\n<pre><code class=\"plaintext\">\/\/ \u042d\u0442\u043e - \u0434\u043b\u044f \u043a\u0440\u0430\u0441\u043e\u0442\u044b. \u0421\u0447\u0451\u0442\u0447\u0438\u043a \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 logic [31:0] transfer_cnt = 0; \/\/ \u0415\u0433\u043e \u043a\u0440\u0430\u0441\u0438\u0432\u043e\u0435 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435: logic go; logic go_prev; always_ff @(posedge ulpi_clk) begin     \/\/ \u0414\u043b\u044f \u043b\u043e\u0432\u043b\u0438 \u043f\u0435\u0440\u0435\u043f\u0430\u0434\u0430 \u043d\u0430\u043c \u043d\u0430\u0434\u043e \u0437\u043d\u0430\u0442\u044c     \/\/ \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0438\u0442\u0430 &quot;go&quot;     go_prev &lt;= go;     \/\/ \u0415\u0441\u043b\u0438 \u0430\u043d\u0430\u043b\u0438\u0437 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0441\u044f - \u0441\u0431\u0440\u043e\u0441\u0438\u043b\u0438 \u0441\u0447\u0451\u0442\u0447\u0438\u043a     if ((!go_prev) &amp;&amp; (go))          transfer_cnt &lt;= 0;     \/\/ \u0418\u043d\u0430\u0447\u0435 - \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u043a\u0430\u0436\u0434\u044b\u0439 \u0442\u0430\u043a\u0442, \u043a\u043e\u0433\u0434\u0430 \u0434\u0430\u043d\u043d\u044b\u0435 \u0443\u0435\u0445\u0430\u043b\u0438 \u0432 AVALON_ST     else if (go &amp; source_valid_priv)          transfer_cnt &lt;= transfer_cnt + 1; end <\/code><\/pre>\n<p>  \u0423 \u043d\u0430\u0441 \u0435\u0449\u0451 \u0431\u0443\u0434\u0443\u0442 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0433\u043e\u043b\u043e\u0432\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u044b\u0439 \u043f\u043e\u043b\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 \u043c\u043e\u0434\u0443\u043b\u044f \u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<h2>\u0423\u043f\u0430\u043a\u043e\u0432\u043a\u0430 \u0433\u043e\u043b\u043e\u0432\u044b \u0432 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442<\/h2>\n<p>  \u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0441 USB-\u0433\u043e\u043b\u043e\u0432\u043e\u0439 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u043b\u043e\u0436\u0435\u043d. \u0412 \u043d\u0451\u043c \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0446\u0435\u043b\u044b\u0445 \u0434\u0432\u0435 \u0448\u0438\u043d\u044b, \u043f\u043b\u044e\u0441 \u0448\u0438\u043d\u0430 conduit, \u043f\u043b\u044e\u0441 \u0435\u0449\u0451 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0445 \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u043e\u0432. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0442\u0438\u0445\u043e\u043d\u044c\u043a\u0443 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432\u0441\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438. \u041d\u0430\u0447\u043d\u0451\u043c \u0441 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/a-\/si\/cp\/a-sicpbiotpvpfepkzijegyhwbe.png\"> <\/p>\n<p>  \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u044f \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043b \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <b>Clock rate<\/b> \u0438 \u0432\u0437\u0432\u0451\u043b \u0444\u043b\u0430\u0436\u043e\u043a <b>Clock rate known<\/b>. \u0411\u0435\u0437 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u044f\u0434\u0440\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 SDRAM (\u043e\u043d\u043e \u0432\u0435\u0434\u044c \u0442\u043e\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430). \u0410 \u0432\u043e\u0442 \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0435 \u0448\u0438\u043d\u0430, \u0430 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0435\u0451 \u0441\u0438\u0433\u043d\u0430\u043b (\u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0432 \u043b\u0435\u0432\u043e\u043c \u0441\u043f\u0438\u0441\u043a\u0435 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043e\u0434\u0438\u043d \u0443\u0440\u043e\u0432\u0435\u043d\u044c):<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/gu\/ko\/am\/gukoamepibmyggihv7l9ilskcdg.png\"> <\/p>\n<p>  \u0421 \u044d\u0442\u0438\u043c \u043f\u043e\u043d\u044f\u0442\u043d\u043e. \u0422\u0435\u043f\u0435\u0440\u044c \u0448\u0438\u043d\u0430 AVALON_MM. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0432\u0440\u0435\u043c\u044f\u043d\u043a\u0443 \u0447\u0442\u0435\u043d\u0438\u044f. \u0418\u0441\u0445\u043e\u0434\u043d\u043e \u043e\u043d\u0430 \u0431\u044b\u043b\u0430 \u0434\u0440\u0443\u0433\u043e\u0439. \u0415\u0441\u043b\u0438 \u044f \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u0443\u0442\u0430\u044e, \u0438\u0441\u0445\u043e\u0434\u043d\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 Read Wait \u0431\u044b\u043b \u0440\u0430\u0432\u0435\u043d \u0435\u0434\u0438\u043d\u0438\u0446\u0435. \u0412 \u0446\u0435\u043b\u043e\u043c, \u0432\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441 \u043c\u043e\u0438\u043c\u0438 \u0438 \u0434\u043e\u0431\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u0438. \u041d\u0443, \u0438 \u043c\u044b \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u043c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u0442 \u0441\u0430\u043c\u044b\u0439 clock_source, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u043b\u0438.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/zh\/b9\/hm\/zhb9hm-8luabyd5o6wytrb0bxt0.png\"> <\/p>\n<p>  \u0421 AVALON_ST \u0432\u0441\u0451 \u043f\u0440\u043e\u0449\u0435. \u041d\u043e \u043d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439, \u043f\u043e\u043a\u0430\u0436\u0443 \u0434\u0435\u0442\u0430\u043b\u0438 \u0435\u0451 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438. \u0410 \u0442\u0430\u043a, \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0434\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u043a \u044d\u0442\u043e\u0439 \u0448\u0438\u043d\u0435, \u043d\u043e \u043c\u044b \u044d\u0442\u0438\u043c \u0443\u0436\u0435 \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u0437\u0430\u043d\u0438\u043c\u0430\u043b\u0438\u0441\u044c, \u0447\u0442\u043e \u0443\u0436\u0435 \u043d\u0438 \u0434\u043b\u044f \u043a\u043e\u0433\u043e \u044d\u0442\u043e \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u0435\u0439. \u041a\u0442\u043e \u043d\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u043b\u0441\u044f, \u0441\u043e\u0432\u0435\u0442\u0443\u044e \u043d\u0430\u0447\u0430\u0442\u044c \u0441 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0438\u0437 \u0441\u0442\u0430\u0440\u044b\u0445 \u0441\u0442\u0430\u0442\u0435\u0439 \u0446\u0438\u043a\u043b\u0430, \u0442\u0430\u043a \u043a\u0430\u043a \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0438\u0437 \u043d\u0438\u0445 \u043c\u044b \u043d\u0430\u0431\u0438\u0432\u0430\u043b\u0438 \u0440\u0443\u043a\u0443 \u0434\u043b\u044f \u043e\u0441\u0432\u043e\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/hv\/ks\/tr\/hvkstrlq_h0gpbwxswy5_qrgjgi.png\"> <\/p>\n<p>  \u041f\u0440\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0435 \u0448\u0438\u043d\u044b ULPI \u0442\u0438\u043f\u0430 conduit, \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043e\u0434\u043d\u0430 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0442\u0430\u043a\u0436\u0435 \u0443\u0436\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b\u0438 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u043e \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440. \u0412\u043e\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0448\u0438\u043d\u044b \u0432 \u0446\u0435\u043b\u043e\u043c:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/uy\/vc\/qx\/uyvcqxmfyd2onrtnucqqfurrfk4.png\"> <\/p>\n<p>  \u0410 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0435\u0451 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043d\u0430\u0434\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0438\u043c\u044f signal_type. \u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u043b\u044f \u043b\u0438\u043d\u0438\u0438 dir:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/qm\/ti\/s2\/qmtis2dfkclb3n-8yje6jeu9rvg.png\"> <\/p>\n<p>  \u0412\u0440\u043e\u0434\u0435, \u0432\u0441\u0451. \u0412\u0441\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0443\u0447\u0442\u0435\u043d\u044b. \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0438 \u0441\u0442\u0440\u043e\u0438\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0441 \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c.<\/p>\n<h2>\u0412\u043d\u0435\u0448\u043d\u0438\u0439 \u0432\u0438\u0434 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/h2>\n<p>  \u041e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043f\u0440\u044f\u043c\u043e \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 Platform Designer \u043c\u043e\u0436\u043d\u043e \u043c\u0435\u043d\u044f\u0442\u044c \u0446\u0432\u0435\u0442\u0430 \u0441\u0432\u044f\u0437\u0435\u0439. \u0416\u0430\u043b\u044c \u0442\u043e\u043b\u044c\u043a\u043e, \u0447\u0442\u043e \u0447\u0438\u0441\u043b\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u0441\u0442\u043d\u044b\u0445 \u0446\u0432\u0435\u0442\u043e\u0432 \u043d\u0435 \u0442\u0430\u043a \u0432\u0435\u043b\u0438\u043a\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043b\u0438\u043d\u0438\u0438 \u044f \u043f\u043e\u0434\u043a\u0440\u0430\u0441\u0438\u043b \u0432\u043d\u043e\u0432\u044c \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u043c\u0438 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430, \u0430 \u043d\u0430 \u043a\u0430\u043a\u0438\u0435 \u043a\u043e\u043d\u0442\u0440\u0430\u0441\u0442\u043d\u044b\u0445 \u0446\u0432\u0435\u0442\u043e\u0432 \u043d\u0435 \u0445\u0432\u0430\u0442\u0438\u043b\u043e \u2013 \u043f\u043e \u0441\u0442\u0430\u0440\u0438\u043d\u043a\u0435, \u0432\u0440\u0443\u0447\u043d\u0443\u044e.<\/p>\n<p>  \u0421\u0445\u0435\u043c\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0445\u043e\u0436\u0430 \u043d\u0430 \u0442\u0443, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0434\u0435\u043b\u0430\u043b\u0438 \u0434\u043b\u044f \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u043b\u0438\u0447\u0438\u044f. \u041f\u0435\u0440\u0432\u043e\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u2014 \u0432 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438. \u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e, \u0432 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 \u0431\u043b\u043e\u043a <b>clk_60<\/b> \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f. \u0415\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0434\u0430\u0436\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c, \u043d\u043e \u0443 \u043c\u0435\u043d\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0443\u043a\u0430 \u043d\u0435 \u043f\u043e\u0434\u043d\u044f\u043b\u0430\u0441\u044c, \u0432\u0434\u0440\u0443\u0433 \u0435\u0449\u0451 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f. \u0410 \u0442\u0430\u043a, \u043d\u0438 \u043e\u0434\u0438\u043d \u0438\u0437 \u0435\u0433\u043e \u0432\u044b\u0445\u043e\u0434\u043e\u0432 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u0442\u0430\u043a \u0447\u0442\u043e \u0435\u0433\u043e \u0432\u044b\u043a\u0438\u043d\u0435\u0442 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0442\u043e\u0440.<\/p>\n<p>  \u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u043c \u0441\u0431\u0440\u043e\u0441\u0430 (\u043a\u0440\u0430\u0441\u043d\u0430\u044f \u043b\u0438\u043d\u0438\u044f) \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0431\u043b\u043e\u043a JTAG_TO_AVALON_MM. \u0410 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u043c \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 (\u0441\u0438\u043d\u044f\u044f \u043b\u0438\u043d\u0438\u044f) \u2014 \u043d\u0430\u0448\u0430 USB-\u0433\u043e\u043b\u043e\u0432\u0430. <\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/hq\/bc\/dy\/hqbcdy4quax7jcjziglcjoo6yx4.png\"> <\/p>\n<p>  \u0417\u0435\u043b\u0451\u043d\u0430\u044f \u043b\u0438\u043d\u0438\u044f \u2014 \u044d\u0442\u043e AVALON_MM. <\/p>\n<p>  \u0411\u043b\u043e\u043a PLL \u0445\u043e\u0442\u044c \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d \u043d\u0430 \u0434\u0432\u0430 \u0432\u044b\u0445\u043e\u0434\u0430 c0 \u0438 c1, \u043d\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e c0 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f. c1 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0442\u0430\u043a\u0442\u0438\u0440\u0443\u0435\u0442 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0443 SDRAM. \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 PLL \u043f\u0440\u043e\u0441\u0442\u044b: \u0432\u0445\u043e\u0434\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u0430 60 \u041c\u0413\u0446, \u0432\u044b\u0445\u043e\u0434 c0 \u2014 60 \u041c\u0413\u0446, \u0441\u0434\u0432\u0438\u0433 0, \u0432\u044b\u0445\u043e\u0434 c1 \u2014 60 \u041c\u0413\u0446, \u0441\u0434\u0432\u0438\u0433 \u2014 \u043c\u0438\u043d\u0443\u0441 60 \u0433\u0440\u0430\u0434\u0443\u0441\u043e\u0432. \u041f\u0440\u0438\u0432\u0435\u0434\u0443 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442 \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e\u0433\u043e \u0432\u044b\u0445\u043e\u0434\u0430. \u0412\u043e\u043e\u0431\u0449\u0435, \u043f\u0440\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 PLL \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u0443\u0442 <a href=\"https:\/\/habr.com\/ru\/post\/469985\/\">\u0423\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0434\u043b\u044f \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u0430 Redd \u0431\u0435\u0437 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438: \u0437\u0430\u043c\u0435\u043d\u0430 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0433\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430<\/a>. <\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/r4\/ii\/nh\/r4iinhaufuvdzhxgzpx4lq1dzp8.png\"> <\/p>\n<p>  \u0413\u043e\u043b\u043e\u0432\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043d\u0435 \u0438\u043c\u0435\u0435\u0442. \u041e\u0442\u043c\u0435\u0447\u0443 \u0442\u043e\u043b\u044c\u043a\u043e, \u0447\u0442\u043e \u0448\u0438\u043d\u0430 ULPI \u0443 \u043d\u0430\u0441 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f. \u0418\u0437 \u0433\u043e\u043b\u043e\u0432\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0442\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445, \u0438\u0434\u0443\u0449\u0438\u0439 \u043f\u043e \u0436\u0451\u043b\u0442\u044b\u043c \u0441\u0442\u0440\u0435\u043b\u043a\u0430\u043c. \u041f\u043e\u0442\u043e\u043a \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0442\u0435 \u0436\u0435 \u0431\u043b\u043e\u043a\u0438, \u0447\u0442\u043e \u0438 \u0432 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0435. \u041c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0443 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u0432 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b\u0435 \u0442\u0443\u043b\u043e\u0432\u0438\u0449\u0430 \u0441 \u043f\u043e\u043f\u0440\u0430\u0432\u043a\u043e\u0439 \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b.<\/p>\n<p>  FIFO, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430, \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u043d\u0430 16-\u0431\u0438\u0442\u043d\u0443\u044e \u0448\u0438\u043d\u0443 (2 \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u043d\u0430 \u0441\u043b\u043e\u0432\u043e). \u0418\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u0432\u044b\u0445\u043e\u0434 \u0443 \u043d\u0430\u0448\u0435\u0439 \u0433\u043e\u043b\u043e\u0432\u044b. <\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/7o\/mv\/xr\/7omvxr1tlncus9qzuzefgkdiqhk.png\"> <\/p>\n<p>  \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e \u0441\u0445\u0435\u043c\u0435 16-&gt;32 (2 \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u043d\u0430 \u0441\u043b\u043e\u0432\u043e \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 \u0438 4 \u2014 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435):<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ea\/jw\/b_\/eajwb_jd5arnsdjpab1upjfbrvu.png\"> <\/p>\n<p>  \u041d\u0443, \u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 DMA \u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 DSRAM \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b \u0442\u0430\u043a\u043e\u0432\u044b\u043c \u0438\u0437 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u043e \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 <a href=\"https:\/\/habr.com\/ru\/post\/506464\/\">\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u0433\u043e \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u043d\u0430 \u0431\u0430\u0437\u0435 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u0430 Redd<\/a>. \u041d\u0435 \u0431\u0443\u0434\u0435\u043c \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0442\u0435\u043a\u0441\u0442 \u0434\u0443\u0431\u043b\u044f\u043c\u0438 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u043e\u0432.<\/p>\n<h2>\u0427\u0435\u0440\u043d\u043e\u0432\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430<\/h2>\n<p>  <\/p>\n<h3>\u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/h3>\n<p>  \u0427\u0435\u0440\u043d\u043e\u0432\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u043c \u043d\u0430\u0431\u0440\u043e\u0441\u0430\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e \u0431\u0430\u0437\u0443 TCL \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0438 \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043e\u043d \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a DMA \u044f \u0432\u0437\u044f\u043b \u0438\u0437 \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0447\u0442\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u043b \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u043d\u0430 \u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u043b\u0438\u0441\u044c \u0434\u043b\u044f \u043d\u043e\u0432\u043e\u0439 \u0441\u0445\u0435\u043c\u044b:  <\/p>\n<pre><code class=\"plaintext\">variable ULPI_BASE 0x1000020 variable DMA_BASE 0x1000000 variable DMA_DESCR_BASE 0x1000050   # \u0427\u0442\u0435\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0431\u043b\u043e\u043a\u0430 DMA. # proc dma_reg_read { address } {   variable DMA_BASE   variable m_path   set address [expr {$address * 4 + $DMA_BASE}]   return [master_read_32 $m_path $address 1] }  # \u0417\u0430\u043f\u0438\u0441\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0431\u043b\u043e\u043a\u0430 DMA proc dma_reg_write { address data } {   variable DMA_BASE   variable m_path   set address [expr {$address * 4 + $DMA_BASE}]   master_write_32 $m_path $address $data }  # \u0417\u0430\u043f\u0438\u0441\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u0432 \u0431\u043b\u043e\u043a\u0430 DMA proc dma_descr_reg_write { address data } {   variable DMA_DESCR_BASE   variable m_path   set address [expr {$address * 4 + $DMA_DESCR_BASE}]   master_write_32 $m_path $address $data }  proc prepare_dma {sdram_addr sdram_size} { # \u041e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0451 \u043f\u043e\u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c # \u0414\u0430, \u043c\u043d\u0435 \u043b\u0435\u043d\u044c \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b,  # \u044f \u0434\u0435\u043b\u0430\u044e \u0432\u0441\u0451 \u043d\u0430 \u0441\u043a\u043e\u0440\u0443\u044e \u0440\u0443\u043a\u0443 dma_reg_write 1 0x20 # \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0442\u0443\u0442 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438, # \u043d\u043e \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0442\u0435\u0441\u0442\u0430, \u043e\u043d\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u043e. \u0422\u043e\u0447\u043d\u043e \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c\u0441\u044f.  # \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u0432 FIFO # \u0410\u0434\u0440\u0435\u0441 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 (\u0432\u043e\u043e\u0431\u0449\u0435, \u044d\u0442\u043e AVALON_ST, \u043d\u043e \u044f \u0432\u0441\u0451 # \u0441 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0441\u043f\u0438\u0441\u044b\u0432\u0430\u043b, \u0430 \u0442\u0430\u043c \u043e\u043d \u0437\u0430\u043d\u0443\u043b\u044f\u0435\u0442\u0441\u044f) dma_descr_reg_write 0 0 # \u0410\u0434\u0440\u0435\u0441 \u043f\u0440\u0438\u0451\u043c\u043d\u0438\u043a\u0430.  dma_descr_reg_write 1 $sdram_addr # \u0414\u043b\u0438\u043d\u0430 dma_descr_reg_write 2 $sdram_size # \u0423\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 (\u0432\u0437\u0432\u043e\u0434\u0438\u043c \u0431\u0438\u0442 GO) dma_descr_reg_write 3 0x80000000  # \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043d\u0435 \u0437\u0430\u0431\u044b\u0432 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f dma_reg_write 1 4 } <\/code><\/pre>\n<p>  \u041d\u043e\u0432\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u2014 \u044d\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c ULPI. \u0412\u043e\u043e\u0431\u0449\u0435, \u043f\u043e \u0443\u043c\u0443 \u0442\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0436\u0434\u0430\u0442\u044c \u0441\u043d\u044f\u0442\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u0430 BSY. \u041d\u043e \u044f \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u044e, \u0447\u0442\u043e \u0448\u0438\u043d\u0430 JTAG \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0430\u044f, \u0447\u0442\u043e BSY \u043d\u0430 ULPI \u0441\u043d\u0438\u043c\u0435\u0442\u0441\u044f \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435, \u0447\u0435\u043c \u0441\u043a\u0440\u0438\u043f\u0442 \u0443\u0441\u043f\u0435\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0443. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043d\u0435 \u0442\u0440\u0430\u0447\u0443 \u043d\u0430 \u044d\u0442\u0443 \u0437\u0430\u0432\u0435\u0434\u043e\u043c\u043e \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u0441\u0438\u043b\u044b \u0438 \u0432\u0440\u0435\u043c\u044f. \u0422\u0430\u043a \u0447\u0442\u043e \u043f\u0440\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u043b\u0438 \u0430\u0434\u0440\u0435\u0441, \u043f\u043e\u043b\u043e\u0436\u0438\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0435, \u0432\u044b\u0448\u043b\u0438:  <\/p>\n<pre><code class=\"plaintext\">proc ulpi_reg_write {reg_addr reg_data} {   variable ULPI_BASE   variable m_path   set port_addr [expr {$ULPI_BASE + 0}]   set port_data [expr {$ULPI_BASE + 4}]   # \u0417\u0430\u0434\u0430\u043b\u0438 \u0430\u0434\u0440\u0435\u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430   master_write_32 $m_path $port_addr $reg_addr    master_write_32 $m_path $port_data $reg_data    # \u041d\u0430\u0434\u043e \u0431\u044b \u0434\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438, \u043d\u043e JTAG \u0442\u043e\u0447\u043d\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435,   # \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0441\u043c\u044b\u0441\u043b\u0430 \u0432 \u044d\u0442\u043e\u043c \u043d\u0435\u0442. } <\/code><\/pre>\n<p>  \u041f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 \u2014 \u043f\u043e\u043b\u043e\u0436\u0438\u043b\u0438 \u0430\u0434\u0440\u0435\u0441, \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0447\u0442\u0435\u043d\u0438\u044f, \u0441\u0447\u0438\u0442\u0430\u043b\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0431\u0435\u0437 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f:  <\/p>\n<pre><code class=\"plaintext\">proc ulpi_reg_read {reg_addr} {   variable ULPI_BASE   variable m_path   set port_addr [expr {$ULPI_BASE + 0}]   set port_data [expr {$ULPI_BASE + 4}]   set port_ctrl [expr {$ULPI_BASE + 8}]   # \u0417\u0430\u0434\u0430\u043b\u0438 \u0430\u0434\u0440\u0435\u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430   master_write_32 $m_path $port_addr $reg_addr    # \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0447\u0442\u0435\u043d\u0438\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430   master_write_32 $m_path $port_ctrl 1   # \u0416\u0434\u0430\u0442\u044c \u044f \u043d\u0435 \u0431\u0443\u0434\u0443, JTAG \u0441\u0442\u043e\u043f\u0443\u0434\u043e\u0432\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442   return [master_read_32 $m_path $port_data 1] } <\/code><\/pre>\n<p>  \u0412\u0441\u0435 \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0435 \u043c\u043e\u0433\u0443\u0442 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<p>  \u0412 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u0435\u043b\u0430\u044e \u0444\u0430\u0439\u043b\u044b, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0432\u0435\u0440\u0445\u0443 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0430 \u043f\u043e\u0434 \u043d\u0438\u043c\u0438 \u0438\u0434\u0451\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0442\u0435\u043a\u0441\u0442 \u0441\u043a\u0440\u0438\u043f\u0442\u0430. \u041d\u0438\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0442\u0435\u043a\u0441\u0442.<\/p>\n<h3>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438 \u041e\u0417\u0423<\/h3>\n<p>  \u041f\u0435\u0440\u0432\u044b\u0439 \u0442\u0435\u0441\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u041e\u0417\u0423 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e. \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043a\u043e\u0434 \u043f\u0440\u0435\u0434\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442:  <\/p>\n<pre><code class=\"plaintext\">puts &quot;running&quot; set m_path [lindex [get_service_paths master] 0] open_service master $m_path  puts &quot;ID:&quot; master_write_32 $m_path 0x00 0x11111111 master_write_32 $m_path 0x04 0x22222222 master_write_32 $m_path 0x08 0x33333333 master_write_32 $m_path 0x0c 0x44444444 puts [master_read_32 $m_path 0 4] <\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0434\u0430\u0451\u0442 \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u0437\u043d\u0430\u0447\u0438\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043d\u0430\u0447\u0435\u0440\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0412\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0443 \u043c\u0435\u043d\u044f:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/qn\/k_\/_e\/qnk__e2ucx_ot3os86_nim6qiwa.png\"> <\/p>\n<h3>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0447\u0442\u0435\u043d\u0438\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432<\/h3>\n<p>  \u0423\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f, \u0443\u0434\u043e\u0431\u043d\u043e \u043d\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0445 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. \u0412\u043e\u0442 \u0447\u0442\u043e \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043d\u0430 \u044d\u0442\u0443 \u0442\u0435\u043c\u0443 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/bq\/wv\/ax\/bqwvax1he-jwzhtkx_4mr0h67j0.png\"> <\/p>\n<p>  \u0414\u0435\u043b\u0430\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u0441\u043a\u0440\u0438\u043f\u0442:  <\/p>\n<pre><code class=\"plaintext\">puts &quot;running&quot; set m_path [lindex [get_service_paths master] 0] open_service master $m_path  puts &quot;ID:&quot; puts [ulpi_reg_read 0] puts [ulpi_reg_read 1] puts [ulpi_reg_read 2] puts [ulpi_reg_read 3] <\/code><\/pre>\n<p>  \u041f\u0440\u043e\u0433\u043e\u043d\u044f\u0435\u043c, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/f3\/qz\/20\/f3qz20jyyftk3sdz2xi0bxigfrq.png\"> <\/p>\n<p>  \u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442! \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u0432\u0435\u0440\u043d\u043e!<\/p>\n<h3>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0437\u0430\u043f\u0438\u0441\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432<\/h3>\n<p>  \u041f\u0440\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u044f \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0441\u044c \u043e\u0434\u043d\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e\u043c. \u0423 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u0438\u0437 \u043d\u0438\u0445 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043f\u043e \u0447\u0435\u0442\u044b\u0440\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0432 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435: \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f, \u0434\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438, \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0438 \u0434\u043b\u044f \u0441\u0431\u0440\u043e\u0441\u0430 \u0431\u0438\u0442\u043e\u0432. \u0412 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u044d\u0442\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u0442\u0430\u043a:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/zx\/me\/ps\/zxmepsqxkq4o_mbhu5dbxd7xclg.png\"> <\/p>\n<p>  \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0431\u0443\u0434\u0443 \u0447\u0438\u0442\u0430\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440 0x0A, \u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 0x0C, \u0430 \u0432 \u0438\u0442\u043e\u0433\u0435 \u043f\u0440\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u043c \u0447\u0442\u0435\u043d\u0438\u0438 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 0x0A \u0441\u0431\u0440\u043e\u0441\u044f\u0442\u0441\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0438\u0442\u044b!<br \/>  \u0412\u043e\u0442 \u0442\u0435\u043a\u0441\u0442 \u0441\u043a\u0440\u0438\u043f\u0442\u0430:  <\/p>\n<pre><code class=\"plaintext\">puts &quot;running&quot; set m_path [lindex [get_service_paths master] 0] open_service master $m_path  puts &quot;Otg Control Before: [ulpi_reg_read 0x0a]&quot; # \u041d\u0430 \u043f\u0440\u043e\u0431\u0443 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u043c \u043f\u043e\u0434\u0442\u044f\u0436\u043a\u0443 \u043d\u0430\u043f\u0440\u043e\u0447\u044c ulpi_reg_write 0x0c 7 puts &quot;Otg Control After: [ulpi_reg_read 0x0a]&quot; <\/code><\/pre>\n<p>  \u0412\u043e\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ed\/a2\/ti\/eda2tilwd_jtqnwyqpeng-hnvbu.png\"> <\/p>\n<p>  \u0412\u0441\u0435 \u043a\u0443\u0431\u0438\u043a\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442! \u041c\u043e\u0436\u043d\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u0431\u043e\u0435\u0432\u044b\u0435 \u043e\u043f\u044b\u0442\u044b\u2026 <\/p>\n<h2>\u0411\u043e\u0435\u0432\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430<\/h2>\n<p>  <\/p>\n<h3>\u041c\u0430\u0441\u0441\u0430 \u043a\u043e\u043c\u0430\u043d\u0434<\/h3>\n<p>  \u041d\u0443 \u0447\u0442\u043e \u0436. \u041f\u0440\u0438\u0448\u043b\u0430 \u043f\u043e\u0440\u0430 \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0431\u043e\u0435\u0432\u0443\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443. \u0414\u0435\u043b\u0430\u0435\u043c \u0442\u0430\u043a\u043e\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0442\u0435\u043b\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0443 (\u0442\u0430\u043c \u044f \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u044e \u0432\u0441\u0435 \u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440\u044b \u0448\u0438\u043d\u044b, \u043f\u0435\u0440\u0435\u0432\u043e\u0436\u0443 \u0440\u0430\u0431\u043e\u0442\u0443 \u0432 \u0440\u0435\u0436\u0438\u043c FS, \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044e DMA, \u0432\u0437\u0432\u043e\u0436\u0443 GO \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u044e \u0436\u0434\u0430\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0432\u044b\u0441\u0438\u0442 \u0437\u0430\u043f\u0440\u043e\u0448\u0435\u043d\u043d\u044b\u0439 \u043c\u043d\u043e\u044e \u043e\u0431\u044a\u0451\u043c, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0432\u044b\u0432\u043e\u0436\u0443 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d \u043d\u0430\u0447\u0430\u043b\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u043e\u0433\u043e \u0431\u0443\u0444\u0435\u0440\u0430):  <\/p>\n<pre><code class=\"plaintext\">puts &quot;running&quot; set m_path [lindex [get_service_paths master] 0] open_service master $m_path  # \u0413\u043e\u0442\u043e\u0432\u0438\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u043a \u0430\u043d\u0430\u043b\u0438\u0437\u0443 # \u041e\u0442\u043a\u043b\u044e\u0447\u0438\u043c \u043f\u043e\u0434\u0442\u044f\u0436\u043a\u0438 \u043d\u0430\u043f\u0440\u043e\u0447\u044c ulpi_reg_write 0x0c 7 # \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0440\u0435\u0436\u0438\u043c Full Speed (\u0431\u0438\u0442\u044b 1:0 = 01)     # \u0417\u0430\u043d\u0443\u043b\u044f\u0435\u043c TermSelect (\u0431\u0438\u0442 2) # \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0440\u0435\u0436\u0438\u043c Non Driving (\u0431\u0438\u0442\u044b 4:3 = 01) ulpi_reg_write 0x06 0x1f ulpi_reg_write 0x05 0x09  # \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0432\u0441\u0451. \u0422\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c DMA prepare_dma 0x00 0x1000 # \u0412\u0437\u0432\u043e\u0434\u0438\u043c \u0431\u0438\u0442 GO master_write_32 $m_path [expr {$ULPI_BASE + 8}] 2  # \u0418 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0430\u0434\u0440\u0435\u0441\u0430 set cur_dma_addr [master_read_32 $m_path [expr {$ULPI_BASE + 0x10}]  1] while {$cur_dma_addr &lt; 0x100} { puts -nonewline &quot;$cur_dma_addr \\r&quot; after 1000 set cur_dma_addr [master_read_32 $m_path [expr {$ULPI_BASE + 0x10}]  1] } puts -nonewline &quot;$cur_dma_addr \\r&quot; # \u0421\u043d\u044f\u043b\u0438 \u0431\u0438\u0442 GO master_write_32 $m_path [expr {$ULPI_BASE + 8}] 0  puts [master_read_16 $m_path 0 128]  puts &quot;Finished!&quot; <\/code><\/pre>\n<p>  \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0441\u043a\u0440\u0438\u043f\u0442 \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0438\u0433\u0440\u0430\u0442\u044c \u0432 \u043b\u044e\u0431\u0438\u043c\u0443\u044e \u0438\u0433\u0440\u0443 \u043e\u0441\u043b\u0438\u043a\u0430 \u0418\u0430 \u00ab\u0412\u0445\u043e\u0434\u0438\u0442-\u0432\u044b\u0445\u043e\u0434\u0438\u0442\u00bb. \u0410\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043a\u0430\u043a\u043e\u0435-\u043d\u0438\u0431\u0443\u0434\u044c FS-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e. \u041b\u0438\u0447\u043d\u043e \u043c\u043d\u0435 \u043f\u043e\u0434 \u0440\u0443\u043a\u0443 \u043f\u043e\u043f\u0430\u043b\u0441\u044f \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0439 \u043a\u043b\u043e\u043d USB-\u0431\u043b\u0430\u0441\u0442\u0435\u0440\u0430. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043c\u0435\u043d\u044f \u0441\u0438\u043b\u044c\u043d\u043e \u043e\u0437\u0430\u0434\u0430\u0447\u0438\u043b. \u041e\u043d \u0431\u044b\u043b \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u0438\u043c:  <\/p>\n<pre><code class=\"plaintext\">0x4801 0x4c01 0x4801 0x4c01 0x4d01 0x4c01 0x4d01 0x4c01 0x4d01 0x4c01 0x4d01 0x4c01 0x4d01 0x4c01 <\/code><\/pre>\n<p>  \u041a\u043e\u043c\u0430\u043d\u0434\u044b, \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u043a\u043e\u043c\u0430\u043d\u0434\u044b\u2026 \u0410 \u0433\u0434\u0435 \u0434\u0430\u043d\u043d\u044b\u0435? \u041d\u043e \u043f\u0440\u0438 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432, \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u043c\u0435\u043b\u044c\u043a\u043d\u0443\u043b\u0438. \u0420\u043e\u0432\u043d\u043e \u043e\u0434\u043d\u0430 \u043f\u043e\u0441\u044b\u043b\u043a\u0430! \u0422\u043e\u0433\u0434\u0430 \u044f \u0440\u0435\u0448\u0438\u043b, \u0447\u0442\u043e \u043d\u0430\u0434\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043e\u0431\u044a\u0451\u043c\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043b \u0441\u043a\u0440\u0438\u043f\u0442 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b \u0446\u0435\u043b\u044b\u0439 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442 \u0438 \u0441\u043a\u0438\u0434\u044b\u0432\u0430\u043b \u0435\u0433\u043e \u0432 \u0444\u0430\u0439\u043b. \u0422\u0435\u043b\u043e \u0441\u0442\u0430\u043b\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:  <\/p>\n<pre><code class=\"plaintext\">puts &quot;running&quot; set m_path [lindex [get_service_paths master] 0] open_service master $m_path  # \u0413\u043e\u0442\u043e\u0432\u0438\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u043a \u0430\u043d\u0430\u043b\u0438\u0437\u0443 # \u041e\u0442\u043a\u043b\u044e\u0447\u0438\u043c \u043f\u043e\u0434\u0442\u044f\u0436\u043a\u0438 \u043d\u0430\u043f\u0440\u043e\u0447\u044c ulpi_reg_write 0x0c 7 # \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0440\u0435\u0436\u0438\u043c Full Speed (\u0431\u0438\u0442\u044b 1:0 = 01)     # \u0417\u0430\u043d\u0443\u043b\u044f\u0435\u043c TermSelect (\u0431\u0438\u0442 2) # \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0440\u0435\u0436\u0438\u043c Non Driving (\u0431\u0438\u0442\u044b 4:3 = 01) ulpi_reg_write 0x06 0x1f ulpi_reg_write 0x05 0x09  # \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0432\u0441\u0451. \u0422\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c DMA prepare_dma 0x00 0x100000 # \u0412\u0437\u0432\u043e\u0434\u0438\u043c \u0431\u0438\u0442 GO master_write_32 $m_path [expr {$ULPI_BASE + 8}] 2   # \u0418 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0430\u0434\u0440\u0435\u0441\u0430 set cur_dma_addr [master_read_32 $m_path [expr {$ULPI_BASE + 0x10}]  1] while {$cur_dma_addr &lt; 0x100000} { puts -nonewline &quot;$cur_dma_addr \\r&quot; after 1000 set cur_dma_addr [master_read_32 $m_path [expr {$ULPI_BASE + 0x10}]  1] } puts -nonewline &quot;$cur_dma_addr \\r&quot; # \u0421\u043d\u044f\u043b\u0438 \u0431\u0438\u0442 GO master_write_32 $m_path [expr {$ULPI_BASE + 8}] 0  set fileid [open &quot;ShowMe.txt&quot; w]  puts $fileid [master_read_16 $m_path 0 0x40000]  close $fileid  puts &quot;Finished!&quot; <\/code><\/pre>\n<p>  \u0418 \u0432\u043e\u0442 \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0443\u0447\u0430\u0441\u0442\u043a\u0438 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/fa\/l2\/sm\/fal2smqpirbdks9ywfmsdvspmwq.png\">  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u043c.<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"plaintext\">... 0x5e01 0x5e01 0x5e01 0xa500 0x5e01 0x5e01 ... ... 0x5d01 0x5d01 0x5d01 0x8c00 0x5d01 0x5d01 ... ... 0x5c01 0x5c01 0x5c01 0xba00 0x5d01 0x5d01 ... ... 0x5d01 0x5d01 0x5d01 0xa500 0x5d01 0x5d01 ... ... 0x5e01 0x5e01 0x5e01 0x8d00 0x5e01 0x5d01 ... ... 0x5c01 0x5c01 0x5c01 0x4200 0x5c01 0x5d01 ... <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0422\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u044f \u0437\u043d\u0430\u044e \u0441\u0443\u0442\u044c \u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 0xA5. \u042d\u0442\u043e \u043f\u0440\u0438\u0437\u043d\u0430\u043a PID. \u0422\u043e \u0435\u0441\u0442\u044c, \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u0434\u0451\u0442 \u043f\u0430\u043a\u0435\u0442 \u043d\u043e\u043c\u0435\u0440 0x8C, \u0437\u0430\u0442\u0435\u043c \u2014 \u043f\u0430\u043a\u0435\u0442 \u043d\u043e\u043c\u0435\u0440 0x8D\u2026 \u041d\u043e \u0432\u0441\u0435 \u043e\u043d\u0438 \u043d\u0430\u043a\u0440\u044b\u0442\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u0435\u0448\u0435\u043d\u044b\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u043a\u043e\u043c\u0430\u043d\u0434. \u0417\u0430\u0447\u0435\u043c \u044d\u0442\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b?<\/p>\n<p>  \u0418 \u0442\u0443\u0442 \u043c\u0435\u043d\u044f \u043e\u0441\u0435\u043d\u0438\u043b\u043e. \u042f \u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0441 FS-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c. \u041e\u043d\u043e \u0433\u043e\u043d\u0438\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0441\u043c\u0435\u0448\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u0435. \u0410 ULPI \u0432\u044b\u0434\u0430\u0451\u0442 \u0438\u0445 \u0441 \u0442\u043e\u0439 \u0436\u0435 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439, \u0441 \u043a\u0430\u043a\u043e\u0439 \u0431\u044b \u0432\u044b\u0434\u0430\u0432\u0430\u043b \u0438 \u0434\u043b\u044f HS. \u0418 \u0447\u0435\u043c \u0435\u043c\u0443 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u0443\u0441\u0442\u043e\u0442\u044b? \u0412\u043e\u0442 \u043e\u043d \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438 \u0438\u0445 \u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442! \u0425\u043e\u0440\u043e\u0448\u043e, \u0447\u0442\u043e \u044f \u043d\u0430\u0447\u0430\u043b \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0441 FS-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430!<\/p>\n<p>  \u0417\u043d\u0430\u0447\u0438\u0442, \u043d\u0430\u0434\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044e.<\/p>\n<h3>\u0424\u0438\u043b\u044c\u0442\u0440 \u043d\u043e\u043c\u0435\u0440 \u0440\u0430\u0437<\/h3>\n<p>  \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u044f \u0440\u0435\u0448\u0438\u043b, \u0447\u0442\u043e \u043d\u0430\u0434\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0442\u043e\u043a \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0430\u043a\u0435\u0442\u0430. \u0422\u043e \u0435\u0441\u0442\u044c \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442, \u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043f\u0430\u043a\u0435\u0442\u0430 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/g1\/6d\/kt\/g16dktwr-tupdqza19eusbfs3kg.png\"> <\/p>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043e\u0447\u043d\u043e\u0435, \u044f \u043d\u0435 \u0431\u0443\u0434\u0443 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u0437\u0434\u0435\u0441\u044c \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0435\u0433\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442, \u043d\u043e \u043d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u044d\u0442\u043e \u043c\u0435\u0441\u0442\u043e \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u043e\u0442\u043b\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u0432 \u044d\u0442\u043e \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 <b>wait1<\/b>. \u0420\u0430\u0434\u043e\u0441\u0442\u043d\u044b\u0439, \u044f \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0444\u043b\u0430\u0433 \u0438 \u0441\u0442\u0430\u043b \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0433\u0434\u0435 \u043e\u043d \u0432\u0437\u0432\u0435\u0434\u0451\u043d. \u0414\u0430\u043c\u043f \u0441\u0442\u0430\u043b \u043b\u0443\u0447\u0448\u0435, \u043d\u043e \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0432\u0435\u0441\u044c\u043c\u0430 \u043d\u0430\u0441\u044b\u0449\u0435\u043d\u043d\u044b\u0439:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/co\/0x\/gq\/co0xgqlmtvbb2zkv6i-t7bmf3ky.png\">  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u043c.<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"plaintext\">... 0x4e03 0x4d03 0x5d03 0xa500 0xec00 0x6a00... ... 0x4d03 0x4e03 0x5d03 0xa500 0xed00 0x9200... <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0417\u0434\u0435\u0441\u044c \u0432\u0441\u0451 \u043f\u043e\u043d\u044f\u0442\u043d\u043e. \u041c\u043d\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0441\u043e \u0441\u0431\u0440\u043e\u0448\u0435\u043d\u043d\u044b\u043c RxActive, \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0435\u0434 \u0441\u0430\u043c\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 RxActive \u0432\u0437\u043b\u0435\u0442\u0430\u0435\u0442 \u0432 \u0435\u0434\u0438\u043d\u0438\u0446\u0443. \u041a\u043e\u0433\u0434\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0440\u0430\u0432\u043d\u0430 5X, \u0431\u0438\u0442\u044b 5:4 \u0440\u0430\u0432\u043d\u044b 01 (RxActive \u0440\u0430\u0432\u043d\u044b \u0435\u0434\u0438\u043d\u0438\u0446\u0435). 4X \u0436\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e 00 \u0432 \u044d\u0442\u0438\u0445 \u0431\u0438\u0442\u0430\u0445. \u0412\u043e\u0442 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0438\u0437 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ec\/z3\/uy\/ecz3uyjqrl1way0rghi2eb3q7oq.png\"> <\/p>\n<p>  \u041f\u0435\u0440\u0435\u0434\u0435\u043b\u044b\u0432\u0430\u0435\u043c \u0444\u0438\u043b\u044c\u0442\u0440 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0431\u0440\u0430\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0433\u0434\u0435 RxActive \u0440\u0430\u0432\u043d\u043e \u0435\u0434\u0438\u043d\u0438\u0446\u0435. \u0423\u0432\u044b \u0438 \u0430\u0445. \u0412\u043e\u0442 \u043e\u0447\u0435\u043d\u044c \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u043d\u044b\u0439 \u0443\u0447\u0430\u0441\u0442\u043e\u043a \u0434\u0430\u043c\u043f\u0430:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/nq\/au\/_8\/nqau_80vcndb_dgsxasovf5yfzm.png\">  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u043c.<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"plaintext\">0x5d03 0xa500 0x1800 0x7600  0x5d03 0xa500 0x1900 0x8e00  0x5d03 0xa500 0x1a00 0xce00 0xa500 0x1b00 0x3600  0x5d03 0xa500 0x1c00 0x4e00  0x5d03 0xa500 0x1d00 0xb600  0x5d03 0xa500 0x1e00 0xf600 0xa500 0x1f00 0x0e00  0x5d03 0xa500 0x2000 0x6e00  0x5d03 0xa500 0x2100 0x9600 0xa500 0x2200 0xd600  0x5d03 0xa500 0x2300 0x2e00  0x5d03 0xa500 0x2400 0x5600  0x5d03 0xa500 0x2500 0xae00 0xa500 0x2600 0xee00  0x5d03 0x2d00 0x0000 0x1000  0x5e03 0xc300 0x8000 0x0600 0x0000 0x0100 0x0000 ... 0x5e03 0xd200  0x5d03 0x6900 0x0000 0x1000  0x5d03 0x5a00 0x6900 0x0000 0x1000  0x5e03 0x4b00 0x1200 0x0100 0x1000 0x0100 0x0000 ... 0x5e03 0xd200  0x5d03 0xe100 0x0000 0x1000  0x5d03 0x4b00 0x0000 0x0000  0x5e03 0x5a00 <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u041c\u044b \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u0435\u0441\u0442\u0430\u0445 PID\u044b \u0441\u043a\u043b\u0435\u0438\u043b\u0438\u0441\u044c, \u043d\u0435 \u0431\u0443\u0434\u0443\u0447\u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u043c\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 (\u0442\u0430\u043a\u0438\u0435 \u043f\u0440\u0438\u043a\u043b\u0435\u0438\u0432\u0448\u0438\u0435\u0441\u044f \u0432\u0435\u0449\u0438 \u044f \u0432\u044b\u0434\u0435\u043b\u0438\u043b \u0436\u0451\u043b\u0442\u044b\u043c). \u0417\u043d\u0430\u0447\u0438\u0442, \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0431\u043b\u0438\u0437\u043a\u043e\u0435 \u043a \u0432\u0435\u0440\u043d\u043e\u043c\u0443, \u043d\u043e \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c\u2026<\/p>\n<h3>\u0424\u0438\u043b\u044c\u0442\u0440 \u043d\u043e\u043c\u0435\u0440 \u0434\u0432\u0430<\/h3>\n<p>  \u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0444\u0438\u043b\u044c\u0442\u0440 \u044f \u043f\u043e\u0434\u0441\u043c\u043e\u0442\u0440\u0435\u043b \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 usbsniffer. \u042f \u0431\u044b\u043b \u043f\u043e\u0447\u0442\u0438 \u043f\u0440\u0430\u0432. \u041e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430 \u0448\u0438\u043d\u044b ULPI (\u0442\u043e \u0435\u0441\u0442\u044c \u0431\u0435\u0437 \u043f\u0430\u0434\u0435\u043d\u0438\u044f \u043b\u0438\u043d\u0438\u0438 DIR) \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0439\u0442\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e USB-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 <b>wait1<\/b> \u044f \u0437\u0440\u044f \u043f\u0440\u0430\u0432\u0438\u043b. \u041d\u0430\u0434\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0433\u0434\u0435 RxActive \u043f\u0435\u0440\u0435\u0448\u0451\u043b \u0438\u0437 \u043d\u0443\u043b\u044f \u0432 \u0435\u0434\u0438\u043d\u0438\u0446\u0443, \u0432 \u043a\u0430\u043a\u043e\u043c \u0431\u044b \u043c\u0435\u0441\u0442\u0435 \u043f\u0430\u043a\u0435\u0442\u0430 \u044d\u0442\u043e \u043d\u0438 \u0441\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c. \u0417\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e. \u0415\u0441\u043b\u0438 \u043c\u044b \u043b\u043e\u0432\u0438\u043c \u043f\u0435\u0440\u0435\u0445\u043e\u0434, \u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0449\u0451\u043b\u043a\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0448\u043b\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0422\u043e \u0435\u0441\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043a\u043e\u0434 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0435\u0433\u043e \u0437\u0430\u0449\u0451\u043b\u043a\u0438\u0432\u0430\u0435\u0442. \u0412\u0430\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0449\u0451\u043b\u043a\u0438\u0432\u0430\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0438 \u043d\u0435 \u0437\u0430\u0449\u0451\u043b\u043a\u0438\u0432\u0430\u0442\u044c \u0432 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445. \u041f\u0440\u0438\u0437\u043d\u0430\u043a \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0436\u0438\u0432\u0451\u0442 \u0432 source_data[8], \u0437\u0430\u0449\u0451\u043b\u043a\u0438\u0432\u0430\u0435\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u2014 \u0432 source_data[4].  <\/p>\n<pre><code class=\"plaintext\">logic active_prev = 0; always_ff @(posedge ulpi_clk) begin      if (source_data[8])          active_prev &lt;= source_data[4]; end <\/code><\/pre>\n<p>  \u041d\u0443, \u0438 \u0442\u0435\u043f\u0435\u0440\u044c, \u0438\u043c\u0435\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c:  <\/p>\n<pre><code class=\"plaintext\">logic activated; assign activated = (!active_prev) &amp; source_data[4]; <\/code><\/pre>\n<p>  \u041a\u0442\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u043b, \u0447\u0442\u043e \u044f \u0437\u0434\u0435\u0441\u044c \u043d\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e \u0444\u0430\u043a\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u044b? \u0412\u0441\u0451 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u044d\u0442\u043e \u043d\u0435 \u043e\u0448\u0438\u0431\u043a\u0430. \u041f\u0440\u043e\u0441\u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u044c \u0448\u0438\u043d\u044b AVALON_ST \u044f \u0437\u0430\u0434\u0430\u044e \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"plaintext\">assign source_valid = source_data[8]?(source_valid_priv &amp; go &amp; activated):(source_valid_priv &amp; go); <\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430, \u0442\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0444\u043b\u0430\u0433. \u0418\u043d\u0430\u0447\u0435 \u2014 \u043d\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0412 \u0438\u0442\u043e\u0433\u0435, \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u0442\u0430\u043a\u043e\u0439 \u0441\u0438\u043c\u043f\u0430\u0442\u0438\u0447\u043d\u044b\u0439 \u0434\u0430\u043c\u043f, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u0441\u0435 \u043f\u0430\u043a\u0435\u0442\u044b A5 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b (\u0442\u043e \u0435\u0441\u0442\u044c, \u0441 \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0442\u0440\u043e\u043a\u0438):  <\/p>\n<pre><code class=\"plaintext\">0x5d01 0xa500 0x4e00 0x1c00  0x5d01 0xa500 0x4f00 0xe400  0x5d01 0xa500 0x5000 0x0c00  0x5d01 0xa500 0x5100 0xf400  0x5d01 0xa500 0x5200 0xb400  0x5d01 0x2d00 0x0000 0x1000  0x5e01 0xc300 0x8000 0x0600 0x0000 0x0100 0x0000 ... 0x5e01 0xd200  0x5d01 0x6900 0x0000 0x1000  0x5d01 0x5a00  0x5d01 0x6900 0x0000 0x1000  0x5e01 0x4b00 0x1200 0x0100 0x1000 0x0100 0x0000 ... 0x5e01 0xd200 <\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u0447\u0442\u043e:   <\/p>\n<ul>\n<li>A5 \u2014 PID_SOF<\/li>\n<li>2D \u2014 PID_SETUP<\/li>\n<li>C3 \u2014 PID_DATA0<\/li>\n<li>D2 \u2014 PID_ACK<\/li>\n<li>69 \u2014 PID_IN<\/li>\n<li>4B \u2014 PID_DATA1<\/li>\n<\/ul>\n<p>  \u0412\u0440\u043e\u0434\u0435, \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0432\u043f\u043e\u043b\u043d\u0435 \u0441\u0435\u0431\u0435 \u043b\u043e\u0433\u0438\u0447\u043d\u0430\u044f. \u0422\u043e \u0435\u0441\u0442\u044c, \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043d\u0430\u0447\u0435\u0440\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. <\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>  \u041c\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b\u0438 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443 USB-\u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u0438 \u0443\u0431\u0435\u0434\u0438\u043b\u0438\u0441\u044c, \u0447\u0442\u043e \u043e\u043d \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c. \u0414\u0430\u043b\u044c\u0448\u0435 \u043d\u0430\u0434\u043e \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c \u0435\u0433\u043e. \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438, \u0441\u0436\u0430\u0442\u0438\u0435 \u0441\u043e \u0432\u0441\u0442\u0430\u0432\u043a\u043e\u0439 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u043a \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u041d\u043e \u043a\u0430\u043a \u044f \u0443\u0436\u0435 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b \u0440\u0430\u043d\u044c\u0448\u0435, \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u043e, \u0434\u0435\u043b\u0430\u044f \u043a\u043e\u0434 \u0432\u0441\u0451 \u0431\u043e\u043b\u0435\u0435 \u0438 \u0431\u043e\u043b\u0435\u0435 \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c, \u0430 \u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0431\u044b\u043b\u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u044b \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0441\u0442\u0430\u0442\u044c\u0438. \u041e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0443\u0447\u0430\u0441\u0442\u043e\u043a \u044f \u043e\u0444\u043e\u0440\u043c\u043b\u044f\u043b \u0441\u0440\u0430\u0437\u0443 \u0432 \u0432\u0438\u0434\u0435 \u043f\u044f\u0442\u0438 \u0441\u0442\u0430\u0442\u0435\u0439, \u0447\u0442\u043e\u0431\u044b \u043d\u0438\u0447\u0435\u0433\u043e \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u043d\u0435 \u0437\u0430\u0431\u044b\u043b\u043e\u0441\u044c, \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044f (\u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e) \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438 \u043a\u0430\u0440\u0434\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u043a\u0430\u0445.<\/p>\n<p>  \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0446\u0438\u043a\u043b\u0430, \u0437\u0430 \u044d\u0442\u0438 \u043f\u044f\u0442\u044c \u0441\u0442\u0430\u0442\u0435\u0439 \u043c\u044b \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043b\u0438\u0441\u044c \u0441 \u0442\u0438\u043f\u043e\u0432\u043e\u0439 \u043c\u0435\u0442\u043e\u0434\u0438\u043a\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u00ab\u043f\u0440\u043e\u0448\u0438\u0432\u043e\u043a\u00bb \u0434\u043b\u044f Redd. \u041f\u0440\u043e\u0434\u0443\u043c\u0430\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u0432\u044b\u044f\u0432\u0438\u043b\u0438 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u044e\u0449\u0438\u0435 \u0431\u043b\u043e\u043a\u0438, \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u0438\u0445, \u043e\u0442\u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u0438, \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0440\u0435\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0443\u044e \u0431\u043b\u043e\u043a\u0438, \u043e\u0442\u043b\u0430\u0434\u0438\u043b\u0438, \u0432\u044b\u044f\u0432\u0438\u043b\u0438 \u0438 \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u043b\u0438 \u043c\u0435\u043b\u043a\u0438\u0435 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438. \u0412\u0441\u0451. \u0415\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0435 \u2013 \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u044d\u0442\u043e \u0437\u0430\u0434\u0430\u0447\u0430 \u043d\u0435 \u0434\u043b\u044f Redd, \u0438 \u0432\u0430\u043c \u043d\u0430\u0447\u0430\u043b\u044c\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0432\u044b\u0434\u0435\u043b\u0438\u0442 \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442. Redd \u2013 \u044d\u0442\u043e \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u0430 \u00ab\u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438\u00bb \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0442 \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0434\u0440\u0443\u0433\u043e\u0435. \u0422\u0430\u043a \u0447\u0442\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u043e\u0434 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441 \u2013 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a\u0430\u044f.<\/p>\n<p>  \u0427\u0442\u043e \u0436\u0435 \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430, \u0442\u043e \u044d\u0442\u043e\u0442 \u0431\u043b\u043e\u043a \u0441\u0442\u0430\u0442\u0435\u0439, \u043a\u0430\u043a \u044f \u0443\u0436\u0435 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b \u0440\u0430\u043d\u044c\u0448\u0435, \u0431\u044b\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0432 \u0438\u044e\u043d\u0435. \u0414\u0430\u043b\u044c\u0448\u0435 \u0431\u044b\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u043d\u044b \u0437\u0430\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0435\u0449\u0451 \u0434\u043b\u044f \u043f\u0430\u0440\u044b \u0441\u0442\u0430\u0442\u0435\u0439 (\u0440\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u043b\u0441\u044f \u0438 \u0441\u0430\u043c \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440), \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u0431\u0440\u043e\u0441\u0438\u043b\u043e \u043c\u0435\u043d\u044f \u0432 \u0431\u043e\u0439 \u043f\u043e \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0434\u0440\u0443\u0433\u0438\u043c \u0437\u0430\u0434\u0430\u0447\u0430\u043c. \u0418 \u0437\u0430\u0432\u0435\u0440\u0442\u0435\u043b\u043e\u0441\u044c\u2026 \u0422\u0430\u043a \u0447\u0442\u043e \u043f\u043e\u043a\u0430 \u0432 \u0442\u0435\u043c\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u043d\u0430 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043f\u0430\u0443\u0437\u0430. \u041d\u043e, \u0432\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0432 \u043f\u043b\u0430\u043d\u0430\u0445 \u0441\u0442\u043e\u0438\u0442 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430, \u0430 \u0432\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u0440\u0435\u0439\u0442\u0438\u043d\u0433 \u0443 \u0441\u0442\u0430\u0442\u0435\u0439 \u0442\u0430\u043a\u043e\u0439, \u0447\u0442\u043e \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043e\u043d\u0438 \u043a\u043e\u043c\u0443-\u0442\u043e \u043d\u0443\u0436\u043d\u044b (\u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0441\u0442\u0430\u0442\u0435\u0439 \u043f\u0440\u043e \u041b\u0438\u043d\u0443\u043a\u0441, \u043e\u0434\u043d\u0430 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043e\u0431\u0440\u0430\u043b\u0430 \u043e\u0434\u0438\u043d \u0431\u0430\u043b\u043b \u0440\u0435\u0439\u0442\u0438\u043d\u0433\u0430 \u0438 \u0436\u0430\u043b\u043a\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u043e\u0432, \u043d\u043e \u044f \u043f\u0438\u043d\u0433\u0432\u0438\u043d\u043e\u0432 \u0442\u043e\u0436\u0435 \u043d\u0435 \u043b\u044e\u0431\u043b\u044e). \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435. \u041d\u043e \u043f\u043e\u043a\u0430 \u0447\u0442\u043e \u2013 \u043f\u0435\u0440\u0435\u0440\u044b\u0432. \u041e\u0434\u043d\u0430\u043a\u043e, \u0432\u0441\u0435 \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0435 \u043c\u043e\u0433\u0443\u0442 \u043d\u0430\u0447\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f, \u043e\u043f\u0438\u0440\u0430\u044f\u0441\u044c \u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0437\u043d\u0430\u043d\u0438\u044f.<\/p>\n<p>  \u0414\u043b\u044f \u0441\u043f\u0440\u0430\u0432\u043a\u0438. <br \/>  \u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u00ab\u0433\u043e\u043b\u043e\u0432\u044b\u00bb USB \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a.  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0421\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0433\u043e\u043b\u043e\u0432\u044b USB.<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"plaintext\">module ULPIhead (    input               reset,    output              clk60,     \/\/ AVALON_MM    input        [2:0]  address,    input               write,    input        [31:0] writedata,    input               read,    output logic [31:0] readdata = 0,     \/\/ AVALON_ST    input  logic        source_ready,    output logic        source_valid,    output logic [15:0] source_data = 0,     \/\/ ULPI    inout        [7:0]  ulpi_data,    output logic        ulpi_stp = 0,    input               ulpi_nxt,    input               ulpi_dir,    input               ulpi_clk,    output              ulpi_rst );  logic      have_reg = 0; logic      reg_served = 0; logic      reg_request = 0; logic      read_finished = 0; logic [5:0] addr_to_ulpi; logic [7:0] data_to_ulpi; logic [7:0] data_from_ulpi;  logic      write_busy = 0; logic      read_busy = 0;  logic [7:0] ulpi_d = 0;  logic force_reset = 0;  logic active_prev = 0; logic activated; assign activated = (!active_prev) &amp; source_data[4]; always_ff @(posedge ulpi_clk) begin      if (source_data[8])          active_prev &lt;= source_data[4]; end   \/\/ \u042d\u0442\u043e - \u0434\u043b\u044f \u043a\u0440\u0430\u0441\u043e\u0442\u044b. \u0421\u0447\u0451\u0442\u0447\u0438\u043a \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 logic [31:0] transfer_cnt = 0; \/\/ \u0415\u0433\u043e \u043a\u0440\u0430\u0441\u0438\u0432\u043e\u0435 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435: logic go; logic go_prev; logic source_valid_priv; assign source_valid = source_data[8]?(source_valid_priv &amp; go &amp; activated):(source_valid_priv &amp; go);  always_ff @(posedge ulpi_clk) begin     \/\/ \u0414\u043b\u044f \u043b\u043e\u0432\u043b\u0438 \u043f\u0435\u0440\u0435\u043f\u0430\u0434\u0430, \u043d\u0430\u043c \u043d\u0430\u0434\u043e \u0437\u043d\u0430\u0442\u044c     \/\/ \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0438\u0442\u0430 &quot;go&quot;     go_prev &lt;= go;     \/\/ \u0415\u0441\u043b\u0438 \u0430\u043d\u0430\u043b\u0438\u0437 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0441\u044f - \u0441\u0431\u0440\u043e\u0441\u0438\u043b\u0438 \u0441\u0447\u0451\u0442\u0447\u0438\u043a     if ((!go_prev) &amp;&amp; (go))          transfer_cnt &lt;= 0;     \/\/ \u0418\u043d\u0430\u0447\u0435 - \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u043a\u0430\u0436\u0434\u044b\u0439 \u0442\u0430\u043a\u0442, \u043a\u043e\u0433\u0434\u0430 \u0434\u0430\u043d\u043d\u044b\u0435 \u0443\u0435\u0445\u0430\u043b\u0438 \u0432 AVALON_ST     else if (go &amp; source_valid_priv)          transfer_cnt &lt;= transfer_cnt + 1; end   \/\/ \u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0441\u0442\u0430\u0442\u0443\u0441\u0430 always_ff @(posedge ulpi_clk) begin       \/\/ \u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u0443 \u0441\u0431\u0440\u043e\u0441\u0430 \u0432\u044b\u0448\u0435       if  (reg_served)            write_busy &lt;= 0;       else if (have_reg)            write_busy &lt;= 1;        \/\/ \u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u0443 \u0441\u0431\u0440\u043e\u0441\u0430 \u0432\u044b\u0448\u0435       if  (read_finished)            read_busy &lt;= 0;       else if (reg_request)            read_busy &lt;= 1; end  \/\/ \u041e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0435 AVALON_MM \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 always_comb  begin    case (address)       \/\/ \u0420\u0435\u0433\u0438\u0441\u0442\u0440 \u0430\u0434\u0440\u0435\u0441\u0430 (\u0447\u0438\u0441\u0442\u043e \u0434\u043b\u044f \u0441\u0430\u043c\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f)       0 : readdata &lt;= {26'b0, addr_to_ulpi};        \/\/ \u0420\u0435\u0433\u0438\u0441\u0442\u0440 \u0434\u0430\u043d\u043d\u044b\u0445       1 : readdata &lt;= {23'b0, data_from_ulpi};        \/\/ 2 - \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0430 \u043e\u043d - \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c        \/\/ \u0420\u0435\u0433\u0438\u0441\u0442\u0440 \u0441\u0442\u0430\u0442\u0443\u0441\u0430       3 : readdata &lt;= {30'b0, (reg_request | read_busy), (have_reg | write_busy)};        \/\/ \u0421\u0447\u0451\u0442\u0447\u0438\u043a \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043a\u0440\u0430\u0441\u0438\u0432\u043e\u0433\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f       4: readdata &lt;= transfer_cnt;        default: readdata &lt;= 0;    endcase end     \/\/ \u041e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0435 AVALON_MM \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c always_ff @(posedge ulpi_clk) begin    \/\/ \u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u0435\u0449\u0435\u0439 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0442\u044b    \/\/ \u0432\u043d\u0443\u0442\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0441\u0440\u043e\u043a\u043e\u043c \u043d\u0430 \u043e\u0434\u0438\u043d \u0442\u0430\u043a\u0442    have_reg    &lt;= 0;    reg_request &lt;= 0;     if (write == 1)     begin       case (address)           0 : addr_to_ulpi &lt;= writedata [5:0];           \/\/ \u0417\u0430\u043f\u0438\u0441\u044c \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b           1 : begin                 data_to_ulpi &lt;= writedata [7:0];                 have_reg &lt;= 1;               end           2 : begin                 \/\/ \u041c\u043b\u0430\u0434\u0448\u0438\u0439 \u0431\u0438\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0447\u0442\u0435\u043d\u0438\u044f                 reg_request &lt;= writedata[0];                 \/\/ \u0411\u0438\u0442 1 - \u0437\u0430\u043f\u0443\u0441\u043a \u0430\u043d\u0430\u043b\u0438\u0437\u0430,                 \/\/ \u0411\u0435\u0437 \u043d\u0435\u0433\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430\u0440\u0443\u0436\u0443 \u043d\u0435 \u0432\u044b\u0439\u0434\u0443\u0442                 go &lt;= writedata [1]; \t\tforce_reset = writedata [31];               end          default: begin end       endcase    end end     \/\/ \u0421\u0430\u043c\u044b\u0439 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442 enum {idle, wait1,wr_st, wait_nxt_w,hold_w, wait_nxt_r,wait_dir1,latch,wait_dir0  } state = idle; always_ff @ (posedge ulpi_clk) begin    if (reset)    begin        state &lt;= idle;    end else    begin       \/\/ \u041f\u0440\u0438\u0441\u0432\u043e\u0435\u043d\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e       source_valid_priv &lt;= 0;       reg_served  &lt;= 0;       ulpi_stp &lt;= 0;       read_finished &lt;= 0;       case (state)       idle: begin            if (ulpi_dir)                state &lt;= wait1;            else if (have_reg)                  begin                   \/\/ \u041a\u0430\u043a \u044f \u0438 \u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0430\u043b \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0435, \u043a\u043e\u043c\u0430\u043d\u0434\u0443                   \/\/ \u043c\u044b \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u043c \u043f\u0440\u044f\u043c\u043e \u0442\u0443\u0442, \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u043f\u043b\u043e\u0434\u0438\u0442\u044c                   \/\/ \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f                   ulpi_d [7:6] &lt;= 2'b10;                   ulpi_d [5:0] &lt;= addr_to_ulpi;                   state &lt;= wait_nxt_w;                 end            else if (reg_request)                 begin                   \/\/ \u041b\u043e\u0433\u0438\u043a\u0430 - \u043a\u0430\u043a \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438                   ulpi_d [7:6] &lt;= 2'b11;                   ulpi_d [5:0] &lt;= addr_to_ulpi;                   state &lt;= wait_nxt_r;                 end          end       \/\/ \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0442\u0430\u043a\u0442 TURN_AROUND       wait1 : begin             state &lt;= wr_st;             \/\/ \u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0442\u0430\u043a\u0442\u0430, \u043c\u043e\u0436\u043d\u043e \u043b\u043e\u0432\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435             source_valid_priv &lt;= 1;              \/\/ \u0411\u0438\u0442 9 \u0432 \u0435\u0434\u0438\u043d\u0438\u0446\u0435 \u043e\u0442\u043c\u0435\u0447\u0430\u0435\u0442 \u043d\u0430\u0447\u0430\u043b\u043e \u043f\u0430\u043a\u0435\u0442\u0430             source_data &lt;= {7'h0,!ulpi_nxt,ulpi_data};          end       \/\/ \u041f\u043e\u043a\u0430 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0441\u044f \u0441\u0438\u0433\u043d\u0430\u043b DIR - \u0433\u043e\u043d\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 AVALON_ST       wr_st : begin             if (ulpi_dir)             begin               \/\/ \u041d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0442\u0430\u043a\u0442\u0435\u0430, \u0432\u0441\u0451 \u0435\u0449\u0451 \u043b\u043e\u0432\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u0435                source_valid_priv &lt;= 1;                source_data &lt;= {7'h0,!ulpi_nxt,ulpi_data};             end else                \/\/ \u0412 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0435 \u0431\u044b\u043b\u043e \u0435\u0449\u0451 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 wait2,                \/\/ \u043d\u043e \u044f \u0440\u0435\u0448\u0438\u043b, \u0447\u0442\u043e \u043e\u043d\u043e - \u043b\u0438\u0448\u043d\u0435\u0435.                 state &lt;= idle;          end       wait_nxt_w : begin            if (ulpi_nxt)            begin               ulpi_d &lt;= data_to_ulpi;               state &lt;= hold_w;            end          end       hold_w: begin            \/\/ \u043f\u0440\u0438 \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e ULPI \u043c\u043e\u0436\u0435\u0442            \/\/ \u0431\u044b\u0442\u044c \u043d\u0435 \u0433\u043e\u0442\u043e\u0432\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435. \u0438 \u0441\u043d\u044f\u0442\u044c NXT            \/\/ \u0414\u043e\u0431\u0430\u0432\u0438\u043b \u0443\u0441\u043b\u043e\u0432\u0438\u0435...            if (ulpi_nxt) begin               \/\/ \u0412\u0441\u0451, \u043f\u043e AVALON_MM \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0431\u0430\u0439\u0442               reg_served  &lt;= 1;               ulpi_d &lt;= 0;    \/\/ \u0428\u0438\u043d\u0443 \u0432 idle               ulpi_stp &lt;= 1;  \/\/ \u041d\u0430 \u043e\u0434\u0438\u043d \u0442\u0430\u043a\u0442 \u0432\u0437\u0432\u0435\u043b\u0438 STP               state &lt;= idle;  \/\/ \u0410 \u043f\u043e\u0442\u043e\u043c - \u0443\u0439\u0434\u0451\u043c \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 idle            end          end        \/\/ \u041e\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f STPw \u044f \u0440\u0435\u0448\u0438\u043b \u043e\u0442\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f...        \/\/ ...       \/\/ \u042d\u0442\u043e \u0443\u0436\u0435 \u043d\u0430\u0447\u0430\u043b\u043e \u0447\u0442\u0435\u043d\u0438\u044f. \u0416\u0434\u0451\u043c, \u043a\u043e\u0433\u0434\u0430 \u0441\u043a\u0430\u0436\u0443\u0442 NXT       \/\/ \u0418 \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u044f\u0442, \u0447\u0442\u043e \u043d\u0430\u0448\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\u0430       wait_nxt_r : begin            if (ulpi_nxt)            begin               ulpi_d &lt;= 0;    \/\/ \u041d\u043e\u043c\u0435\u0440 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u043c\u043e\u0436\u043d\u043e \u0443\u0431\u0438\u0440\u0430\u0442\u044c               state &lt;= wait_dir1;            end          end       \/\/ \u0416\u0434\u0451\u043c, \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u043c \u0432\u044b\u0434\u0430\u0434\u0443\u0442 \u0434\u0430\u043d\u043d\u044b\u0435       wait_dir1: begin           if (ulpi_dir)              state &lt;= latch;         end       \/\/ \u0422\u0443\u0442 \u043c\u044b \u0437\u0430\u0449\u0451\u043b\u043a\u0438\u0432\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435       \/\/ \u0438 \u0431\u0435\u0437 \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u0439 \u0438\u0434\u0451\u043c \u0434\u0430\u043b\u044c\u0448\u0435       latch: begin           data_from_ulpi &lt;= ulpi_data;           state &lt;= wait_dir0;         end       \/\/ \u0416\u0434\u0451\u043c, \u043a\u043e\u0433\u0434\u0430 \u0448\u0438\u043d\u0430 \u0432\u0435\u0440\u043d\u0451\u0442\u0441\u044f \u043a \u0447\u0442\u0435\u043d\u0438\u044e       wait_dir0: begin           if (!ulpi_dir)           begin              state &lt;= idle;              read_finished &lt;= 1;           end         end           default:\tbegin          state &lt;= idle;          end       endcase     end end \/\/ \u0422\u0430\u043a \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u0442\u0441\u044f \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 inout-\u043b\u0438\u043d\u0438\u0438 assign ulpi_data = (ulpi_dir == 0) ? ulpi_d : 8'hzz;  \/\/ reset \u043c\u043e\u0433 \u043f\u0440\u0438\u0439\u0442\u0438 \u0438\u0437\u0432\u043d\u0435, \u0430 \u043c\u043e\u0433\u043b\u0438 \u0435\u0433\u043e \u0438 \u043c\u044b \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c assign ulpi_rst = reset | force_reset;  assign clk60 = ulpi_clk;  endmodule <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/525440\/\"> https:\/\/habr.com\/ru\/post\/525440\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\">\u0422\u0440\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u043d\u0430\u0437\u0430\u0434 \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0433\u043e\u043b\u043e\u0432\u0443 \u0434\u043b\u044f \u0448\u0438\u043d\u043d\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 USB, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u2013 \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u043b\u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0433\u043e\u043d\u044f\u043b\u0438 \u044d\u0442\u0443 \u0433\u043e\u043b\u043e\u0432\u0443 \u043d\u0430 \u043c\u043e\u0434\u0435\u043b\u044f\u0445. \u041f\u0440\u0430\u0432\u0434\u0430, \u0432\u0441\u0451 \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u043d\u0435 \u0437\u0440\u044f. \u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430\u0448\u0451\u043b \u043f\u0430\u0440\u0443 \u0441\u0431\u043e\u0435\u0432 \u043b\u043e\u0433\u0438\u043a\u0438, \u0430 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438\u0445 \u0431\u044b\u043b\u043e \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u043d\u0430\u0447\u043d\u0438 \u044f \u0432\u0441\u0451 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u0432 \u0436\u0435\u043b\u0435\u0437\u0435 \u2014 \u0441\u0438\u0434\u0435\u043b \u0431\u044b \u0438 \u0441\u043e\u043a\u0440\u0443\u0448\u0430\u043b\u0441\u044f: \u00ab\u0410 \u0447\u0435\u0433\u043e \u043e\u043d\u043e \u0442\u0430\u043a \u0441\u0435\u0431\u044f \u0432\u0435\u0434\u0451\u0442?\u00bb \u0422\u0435\u043f\u0435\u0440\u044c \u0436\u0435 \u044f \u0443\u0432\u0435\u0440\u0435\u043d, \u0447\u0442\u043e \u0432 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0447\u0435\u0441\u043a\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432\u0441\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u0434\u0435\u043b\u0430\u0435\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u043e, \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u0437\u0430\u0434\u0443\u043c\u0430\u043d\u043e. \u0427\u0442\u043e \u0434\u0430\u043b\u044c\u0448\u0435? \u0422\u0435, \u043a\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u044b\u0435 \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b, \u0434\u0430\u043b\u044c\u0448\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044f\u0442 \u043a \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438, \u0430 \u0432 \u043a\u043e\u043d\u0446\u0435 \u2014 \u043c\u043e\u0434\u0435\u043b\u0438, \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0439 \u043a \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u0438 \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0438 \u0432 \u041f\u041b\u0418\u0421 (\u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0435 Gate-Level \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435). \u0422\u0430\u043c \u0443\u0436\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u043d\u0430 \u0432\u0441\u0435\u0445 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u0445 \u043f\u0440\u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u041d\u043e \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430\u0448\u0435\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442. \u041d\u0430\u043c \u0431\u044b\u043b\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0432\u0441\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0432\u0435\u0440\u043d\u043e. \u0418 \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0441\u0431\u043e\u0440\u043a\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/w5\/ph\/tm\/w5phtmbpnkderfosmrlhhocw624.jpeg\"><\/p>\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-312428","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/312428","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=312428"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/312428\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=312428"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=312428"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=312428"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}