{"id":365036,"date":"2024-05-21T02:29:38","date_gmt":"2024-05-21T02:29:38","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=365036"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2024-05-21T02:29:38","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=365036","title":{"rendered":"<span>\u0421\u043e\u0437\u0434\u0430\u0435\u043c I2C Master Controller \u043d\u0430 Verilog. \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0443 \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0436\u0435\u043b\u0435\u0437\u0435<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u042f <a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/776992\/\">\u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b<\/a> \u0431\u0438\u0442\u043e\u0432\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 I2C Master \u2014 \u0443\u0436 \u043e\u0447\u0435\u043d\u044c \u0447\u0435\u0441\u0430\u043b\u0438\u0441\u044c \u0440\u0443\u043a\u0438 \u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0443\u0440\u043e\u0432\u043d\u0438 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 \u043e\u0442 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0431\u0438\u0442\u0430\u043c\u0438 \u0438 \u0443\u0436\u0435 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442 \u043a \u043a\u0430\u043a\u043e\u043c\u0443-\u043b\u0438\u0431\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044e \u0441 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u044b\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c. \u042f \u043f\u043e\u0434\u0443\u043c\u0430\u043b, \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043a\u043b\u0430\u0441\u0441\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0441\u0432\u043e\u0435\u0433\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0430 \u0432\u043e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438 \u0441 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u0439 I2C 2K-bit EEPROM.<\/p>\n<p>  \u0418\u0434\u0435\u044f \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u2014 \u0447\u0438\u0442\u0430\u0435\u043c \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u044e \u043a\u043b\u0430\u0432\u0438\u0448 \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043e\u0442\u043b\u0430\u0434\u043e\u043a \u0441 Cyclone IV, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b \u0432 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u0441\u0432\u043e\u0438\u0445 \u043e\u0431\u0437\u043e\u0440\u043e\u0432. <\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0432\u0430\u043c \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c \u2014 \u0434\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c, \u0441 \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u0435\u043c \u0438 \u0432 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u043c\u043d\u0435 \u043c\u0430\u043d\u0435\u0440\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u0447\u0435\u0433\u043e \u043c\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f, \u0430 \u0447\u0435\u0433\u043e \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c. ?<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/pc\/ov\/06\/pcov06q63nkdqpxpflfdb4frhbg.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/pc\/ov\/06\/pcov06q63nkdqpxpflfdb4frhbg.png\"\/><\/div>\n<p>  <a name=\"habracut\"><\/a><\/p>\n<blockquote><p><b>\u0414\u0438\u0441\u043a\u043b\u0435\u0439\u043c\u0435\u0440.<\/b> \u041f\u0435\u0440\u0435\u0434 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u043f\u043e\u0432\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f, \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0446\u0435\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u044f \u043f\u0440\u0435\u0441\u043b\u0435\u0434\u0443\u044e \u043f\u0440\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u2014 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u0441\u0432\u043e\u0435\u043c \u043e\u043f\u044b\u0442\u0435. \u042f \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0441\u044c \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c \u043f\u043e\u0434 \u041f\u041b\u0418\u0421 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Verilog \u0438 \u043c\u043e\u0433\u0443 \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u043b\u0438\u0431\u043e \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u043b\u043e\u0433\u0438\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435 \u0441\u0430\u043c\u044b\u0435 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0443\u0442\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447, etc. \u041d\u043e \u043e\u0442\u043c\u0435\u0447\u0443, \u0447\u0442\u043e \u043b\u044e\u0431\u0430\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043a\u0440\u0438\u0442\u0438\u043a\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442\u0441\u044f. \u0427\u0442\u043e \u0436, \u043f\u043e\u0435\u0445\u0430\u043b\u0438\u2026<\/p><\/blockquote>\n<p>  <\/p>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c\u0441\u044f \u0441 \u043e\u0431\u0449\u0435\u0439 \u0438\u0434\u0435\u0435\u0439<\/font><\/h2>\n<p>  \u041f\u0435\u0440\u0432\u044b\u043c \u0448\u0430\u0433\u043e\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f, \u043a \u0447\u0435\u043c\u0443 \u0441\u0442\u0440\u0435\u043c\u0438\u043c\u0441\u044f \u0438 \u0447\u0435\u0433\u043e \u0445\u043e\u0442\u0438\u043c \u0432 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c. <\/p>\n<p>  \u0412 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a \u043e\u0442\u043b\u0430\u0434\u043a\u0435 \u043f\u043b\u0430\u0442\u0443 \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438 \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0441 \u0430\u043d\u0442\u0438\u0434\u0440\u0435\u0431\u0435\u0437\u0433\u043e\u043c. \u041a\u0430\u0436\u0434\u0430\u044f \u0438\u0437 \u043a\u043d\u043e\u043f\u043e\u043a \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0441\u0432\u043e\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e.<\/p>\n<p>  \u0412\u044b\u0432\u043e\u0434 \u0432\u0441\u0435\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0443\u0434\u0435\u0442 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043d\u0430 7-\u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043d\u044b\u0439 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440 \u0441 8 \u0440\u0430\u0437\u0440\u044f\u0434\u0430\u043c\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u043d\u0430 \u043e\u0442\u043b\u0430\u0434\u043a\u0443. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043d\u0430 \u044d\u0442\u043e\u0442 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440. <\/p>\n<p>  \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0442\u0430\u043a\u0436\u0435 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c ACK-\u0441\u0438\u0433\u043d\u0430\u043b \u043d\u0430 \u043f\u043b\u0430\u0442\u0443, \u0447\u0442\u043e\u0431\u044b \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0447\u0442\u043e \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e.<\/p>\n<p>  \u0420\u0430\u0437 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 EEPROM \u2014 \u0442\u043e:<\/p>\n<ol>\n<li>\u041f\u0435\u0440\u0432\u043e\u0439 \u043a\u043b\u0430\u0432\u0438\u0448\u0435\u0439 \u0431\u0443\u0434\u0435\u0442 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043d\u0430 <b>\u0447\u0442\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445<\/b> \u0438\u0437 \u044f\u0447\u0435\u0439\u043a\u0438 \u0441 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u0438 \u0432\u044b\u0432\u043e\u0434 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u0441\u0435\u043c\u0438\u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043d\u044b\u0439 \u0434\u0438\u0441\u043f\u043b\u0435\u0439;<\/li>\n<li>\u0412\u0442\u043e\u0440\u0430\u044f \u043a\u043b\u0430\u0432\u0438\u0448\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c <b>\u0437\u0430\u043f\u0438\u0441\u044c<\/b> \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0437\u0430\u0434\u0430\u043d\u043d\u0443\u044e \u044f\u0447\u0435\u0439\u043a\u0443 \u043f\u0430\u043c\u044f\u0442\u0438;<\/li>\n<li>\u0422\u0440\u0435\u0442\u044c\u044f \u043a\u043b\u0430\u0432\u0438\u0448\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0430 \u0434\u043b\u044f <b>\u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430<\/b> \u043f\u0430\u043c\u044f\u0442\u0438 EEPROM \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 \u043e\u0442 0x00 \u0434\u043e 0xFF, \u043d\u0443 \u0438\u043b\u0438 \u0447\u0442\u0435\u043d\u0438\u0435;<\/li>\n<li>\u0427\u0435\u0442\u0432\u0435\u0440\u0442\u0430\u044f \u043a\u043b\u0430\u0432\u0438\u0448\u0430 \u0431\u0443\u0434\u0435\u0442 <b>\u0434\u0435\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430<\/b> \u043f\u0430\u043c\u044f\u0442\u0438;<\/li>\n<li>\u041f\u044f\u0442\u0430\u044f \u043a\u043b\u0430\u0432\u0438\u0448\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0430 \u0434\u043b\u044f <b>\u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445<\/b>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0432 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u044f\u0447\u0435\u0439\u043a\u0438 \u043f\u0430\u043c\u044f\u0442\u0438;<\/li>\n<li>\u0428\u0435\u0441\u0442\u0430\u044f, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0431\u0443\u0434\u0435\u0442 <b>\u0434\u0435\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c<\/b> \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435;<\/li>\n<li>\u041d\u0430 \u043f\u043b\u0430\u0442\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0430 RESET \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u0437\u0430 <b>\u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u0441\u0431\u0440\u043e\u0441<\/b>.<\/li>\n<\/ol>\n<p>  \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u043d\u0430\u0431\u043e\u0440 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0437\u0430\u0434\u0430\u0447, \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0442\u043e \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e. \u041f\u043e\u0435\u0445\u0430\u043b\u0438. <\/p>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">\u0427\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447\u0438?<\/font><\/h2>\n<p>  \u0418\u0442\u0430\u043a, \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f:<\/p>\n<ol>\n<li>\u041e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0430 Saylinx \u0441 Cyclone IV, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u044f \u043e\u0431\u043e\u0437\u0440\u0435\u0432\u0430\u043b \u0432 <a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/743340\/\">\u044d\u0442\u043e\u0439<\/a> \u0441\u0442\u0430\u0442\u044c\u0435. \u041e\u043d\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u043c\u043e\u0435\u0439 \u0446\u0435\u043b\u0438 \u043a\u0430\u043a \u0440\u0430\u0437 \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 \u0435\u0441\u0442\u044c EEPROM \u0438 \u0441\u0435\u043c\u0438\u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043d\u044b\u0439 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440;<\/li>\n<li>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440 Altera USB Blaster \u0434\u043b\u044f \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u043f\u043b\u0430\u0442\u044b \u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438;<\/li>\n<li>\u041d\u0430 \u043f\u043b\u0430\u0442\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0441\u0435\u043c\u0438\u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043d\u044b\u0439 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440. \u0423 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u0435\u0441\u0442\u044c 8 \u0440\u0430\u0437\u0440\u044f\u0434\u043e\u0432, <b>\u043f\u0435\u0440\u0432\u044b\u0435 \u0434\u0432\u0430<\/b> \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u044b \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u043c \u043f\u043e\u0434 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a\u043e\u0439 \u0430\u0434\u0440\u0435\u0441 \u043f\u0430\u043c\u044f\u0442\u0438 \u0441\u0435\u0439\u0447\u0430\u0441 \u0432\u044b\u0431\u0440\u0430\u043d, <b>\u0442\u0440\u0435\u0442\u0438\u0439 \u0438 \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u044b\u0439<\/b> \u2014 \u043f\u043e\u0434 \u0432\u044b\u0431\u043e\u0440 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u044f\u0447\u0435\u0439\u043a\u0443, <b>\u043f\u044f\u0442\u044b\u0439 \u0438 \u0448\u0435\u0441\u0442\u043e<\/b>\u0439 \u2014 \u043f\u043e\u0434 \u0432\u044b\u0432\u043e\u0434 \u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 EEPROM;<\/li>\n<li>\u041d\u0430 \u043f\u043b\u0430\u0442\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c EEPROM. \u0418 \u043e\u043d \u0442\u0430\u043c \u0435\u0441\u0442\u044c ?;<\/li>\n<li>\u041f\u043b\u0430\u0442\u043a\u0430 \u0441 \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438 \u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0432\u043e\u0434\u043a\u0430\u043c\u0438 \u0434\u043b\u044f PLS-\u0433\u0440\u0435\u0431\u0435\u043d\u043a\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0430 \u043e\u0442\u043b\u0430\u0434\u043a\u0435 \u0438\u0445 \u043d\u0435 \u0442\u0430\u043a \u043c\u043d\u043e\u0433\u043e \u043a\u0430\u043a \u0445\u043e\u0447\u0435\u0442\u0441\u044f;<\/li>\n<li>\u041b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440, \u0442\u0438\u043f\u0430 \u043a\u0430\u043a\u043e\u0433\u043e-\u043d\u0438\u0431\u0443\u0434\u044c DSLogic Basic \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 DSView (\u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043d\u0430 \u0410\u043b\u0438). \u041e\u043d \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0442\u0430\u043a\u0436\u0435 \u0434\u043b\u044f \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u044f \u0437\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u043c\u0438 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0436\u0435\u043b\u0435\u0437\u0435.<\/li>\n<\/ol>\n<p>  \u041f\u043b\u044e\u0441\u043e\u043c \u043a \u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 HDL-\u043a\u043e\u0434 \u0434\u043b\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u0441\u0445\u0435\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0436\u0435\u043b\u0430\u0435\u043c\u043e\u0435. \u041d\u0443 \u0447\u0442\u043e \u0436, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0437\u0430\u0434\u0443\u043c\u043a\u0443!)<\/p>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">\u0428\u0430\u0433 \u043d\u0443\u043b\u0435\u0432\u043e\u0439. \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u0440\u0430\u0437\u043c\u0435\u0447\u0430\u0435\u043c \u043f\u0438\u043d\u044b<\/font><\/h2>\n<p>  \u042d\u0442\u043e\u0442 \u0448\u0430\u0433 \u044f \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043d\u0435 \u0431\u0443\u0434\u0443, \u0434\u0443\u043c\u0430\u044e \u0432\u044b \u0443\u0436\u0435 \u043d\u0430\u0443\u0447\u0438\u043b\u0438\u0441\u044c \u0438\u0437 \u043f\u0440\u043e\u0448\u043b\u044b\u0445 \u0441\u0442\u0430\u0442\u0435\u0439 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0432 \u043d\u0435\u0433\u043e \u043d\u043e\u0432\u044b\u0435 \u0444\u0430\u0439\u043b\u044b. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c Top-Level Design File \u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430. <\/p>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u044d\u0442\u0430\u043f \u2014 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b:<\/p>\n<pre><code class=\"vhdl\">module top_module  ( inputclk_i,\/\/ \u0412\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u0434\u043b\u044f \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f inputrstn_i,\/\/ \u0412\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u0434\u043b\u044f \u0441\u0431\u0440\u043e\u0441\u0430, 0 - \u0441\u0431\u0440\u043e\u0441  input[2:0] btn_main_i,\/\/ \u0412\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u043e\u0442 \u043a\u043d\u043e\u043f\u043e\u043a \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 input[5:0] btn_brd_i,\/\/ \u0412\u0445\u043e\u0434\u043d\u044b\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u043e\u0442 \u043f\u043b\u0430\u0442\u044b \u0441 \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438 output[3:0] led_brd_o,\/\/ \u0412\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0434\u043b\u044f \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u0432  output[5:0] seg_sel_o,\/\/ \u0412\u044b\u0431\u043e\u0440 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0440\u044f\u0434\u0430 \u0441\u0435\u043c\u0438\u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043d\u043e\u0433\u043e \u0434\u0438\u0441\u043f\u043b\u0435\u044f output[7:0] seg_data_o,\/\/ \u0414\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u0441\u0435\u043c\u0438\u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043d\u043e\u043c \u0434\u0438\u0441\u043f\u043b\u0435\u0435  inoutsda_io,\/\/ \u041b\u0438\u043d\u0438\u044f I2C SDA outputscl_io\/\/ \u041b\u0438\u043d\u0438\u044f I2C SCL );  endmodule<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0440\u0430\u0437\u0443 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u043f\u0438\u043d\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u044b, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a \u044d\u0442\u043e\u043c\u0443 \u0432\u043e\u043f\u0440\u043e\u0441\u0443. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0441\u0445\u0435\u043c\u0430\u0442\u0438\u043a \u043f\u043b\u0430\u0442\u044b \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u0438\u043d\u044b, \u043a \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u0442\u043e, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e. \u0421\u0440\u0430\u0437\u0443 \u0436\u0435 \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043a\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u0435\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u0430\u043c\u0438.<\/p>\n<p>  \u041d\u0430\u0447\u043d\u0435\u043c \u0441 <b>\u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/b>. \u0412\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u043a\u0432\u0430\u0440\u0446\u0435\u0432\u044b\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0441 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 50MHz:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/sr\/p5\/0a\/srp50ahx1slecp4p_lccobpwesi.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/sr\/p5\/0a\/srp50ahx1slecp4p_lccobpwesi.png\"\/><\/div>\n<p>  \u0418 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d <b>CL<\/b>K \u043a \u043d\u043e\u0436\u043a\u0435 <b>E1<\/b>: <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/6e\/4j\/vy\/6e4jvy-a32lkl0uftojz6qxf93w.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/6e\/4j\/vy\/6e4jvy-a32lkl0uftojz6qxf93w.png\"\/><\/div>\n<p>  \u041d\u0430\u0439\u0434\u0435\u043c \u0432 \u0441\u0445\u0435\u043c\u0435 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u044b. \u041d\u0430 \u043f\u043b\u0430\u0442\u0435 \u0443 \u043d\u0430\u0441 \u0438\u0445 \u0432\u0441\u0435\u0433\u043e 4 \u0448\u0442\u0443\u043a\u0438:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/jj\/5k\/tp\/jj5ktpmqt2mbhzrl_7lobrd11oi.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/jj\/5k\/tp\/jj5ktpmqt2mbhzrl_7lobrd11oi.png\"\/><\/div>\n<p>  \u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0440\u0430\u0437\u0434\u0435\u043b\u0443 \u0441\u0445\u0435\u043c\u044b \u0433\u0434\u0435 \u0446\u0435\u043f\u0438 LEDx \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u043a \u041f\u041b\u0418\u0421:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ol\/2_\/sy\/ol2_syxl6q3k3x_pbzjh7ph9rfm.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/ol\/2_\/sy\/ol2_syxl6q3k3x_pbzjh7ph9rfm.png\"\/><\/div>\n<p>  \u041e\u0442\u043b\u0438\u0447\u043d\u043e.<b> LED0 \u2014 E10, LED1 \u2014 F9, LED2 \u2014 C9, LED3 \u2014 D9<\/b>. \u042f \u043e\u0431\u044b\u0447\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u044e \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043b\u0438\u0441\u0442\u043e\u0447\u0435\u043a, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0442\u043e\u043c \u0432 Pin Planner \u0441\u0440\u0430\u0437\u0443 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0435 \u043f\u0438\u043d\u044b, \u043d\u0435 \u043f\u0435\u0440\u0435\u0440\u044b\u0432\u0430\u044f \u0441\u0445\u0435\u043c\u0430\u0442\u0438\u043a \u0441\u043d\u043e\u0432\u0430. <\/p>\n<p>  \u0418\u0434\u0451\u043c \u0434\u0430\u043b\u044c\u0448\u0435. \u041a\u043d\u043e\u043f\u043a\u0438. \u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0445 \u0441\u0445\u0435\u043c\u0430\u0442\u0438\u043a\u043e\u0432 \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e \u201c\u043d\u0430 \u0432\u044b\u0441\u043e\u0442\u0435\u201d \u0438 \u0441\u0441\u044b\u043b\u043e\u043a \u043f\u043e \u0446\u0435\u043f\u044f\u043c \u043d\u0435\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043f\u043e\u0438\u0441\u043a \u0438 \u0438\u0449\u0435\u043c \u043f\u043e \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u043c \u0441\u043b\u043e\u0432\u0430\u043c.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/d8\/k0\/ra\/d8k0raixr3keau3inxpt5n3ff1k.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/d8\/k0\/ra\/d8k0raixr3keau3inxpt5n3ff1k.png\"\/><\/div>\n<p>  \u041d\u0430\u0445\u043e\u0434\u0438\u043c \u043a\u043d\u043e\u043f\u043a\u0438 <b>KEY1, KEY2, KEY3<\/b> \u043d\u0430 \u043d\u043e\u0436\u043a\u0430\u0445 <b>M15, M16, E16<\/b> \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/0t\/h2\/gq\/0th2gqx5o2jhldpymevv3hv4uo4.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/0t\/h2\/gq\/0th2gqx5o2jhldpymevv3hv4uo4.png\"\/><\/div>\n<p>  \u0418 \u043a\u043d\u043e\u043f\u043a\u0443 <b>RESET<\/b> \u2014 \u0442\u0443\u0442, \u043d\u0430 <b>N13<\/b>:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/2u\/km\/x3\/2ukmx3rg02jpzwjxkzanpfynnye.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/2u\/km\/x3\/2ukmx3rg02jpzwjxkzanpfynnye.png\"\/><\/div>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u043a \u043a\u0430\u043a\u0438\u043c \u043f\u0438\u043d\u0430\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043b\u0430\u0442\u0443 \u0441 \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438 \u0438 \u044f \u0432\u044b\u0431\u0440\u0430\u043b \u043b\u0435\u0432\u0443\u044e \u0433\u0440\u0435\u0431\u0435\u043d\u043a\u0443 \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 \u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0438\u043d\u044b:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/u6\/fv\/xd\/u6fvxdti2vzh-fhkogyt0nowjm8.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/u6\/fv\/xd\/u6fvxdti2vzh-fhkogyt0nowjm8.png\"\/><\/div>\n<p>  \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043a\u0440\u0438\u0432\u043e\u0439 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0439 \u0441\u0445\u0435\u043c\u0430\u0442\u0438\u043a \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043a\u0432\u0435\u0440\u0445\u0443 \u043d\u043e\u0433\u0430\u043c\u0438, \u043d\u043e \u0448\u0435\u043b\u043a\u043e\u0433\u0440\u0430\u0444\u0438\u044f \u043d\u0430 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043f\u043b\u0430\u0442\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u0441\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0440\u0430\u0441\u043f\u0438\u043d\u043e\u0432\u043a\u0435. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435: <\/p>\n<ul>\n<li>\u043a\u043d\u043e\u043f\u043a\u0430 <b>\u0437\u0430\u043f\u0438\u0441\u0438<\/b> \u2014 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043a \u043f\u0438\u043d\u0443 <b>N2<\/b>;<\/li>\n<li>\u043a\u043d\u043e\u043f\u043a\u0430 <b>\u0447\u0442\u0435\u043d\u0438\u044f<\/b> \u2014 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043a \u043f\u0438\u043d\u0443 <b>P1<\/b>;<\/li>\n<li>\u043a\u043d\u043e\u043f\u043a\u0430 <b>\u043f\u0440\u0438\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f<\/b> \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e <b>\u0430\u0434\u0440\u0435\u0441\u0430<\/b> \u044f\u0447\u0435\u0439\u043a\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u2014 \u043f\u0438\u043d <b>P2<\/b>;<\/li>\n<li>\u043a\u043d\u043e\u043f\u043a\u0430 <b>\u0432\u044b\u0447\u0438\u0442\u0430\u043d\u0438\u044f<\/b> \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u0438\u0437 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <b>\u0430\u0434\u0440\u0435\u0441\u0430<\/b> \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u2014 \u043f\u0438\u043d <b>R1<\/b>;<\/li>\n<li>\u043a\u043d\u043e\u043f\u043a\u0430 <b>\u043f\u0440\u0438\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f<\/b> \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u043a <b>\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u043e\u043c\u0443 \u0447\u0438\u0441\u043b\u0443<\/b> \u0432 \u044f\u0447\u0435\u0439\u043a\u0443 \u043f\u0430\u043c\u044f\u0442\u0438 \u2014 \u043f\u0438\u043d <b>P8<\/b>;<\/li>\n<li>\u043a\u043d\u043e\u043f\u043a\u0430 <b>\u0432\u044b\u0447\u0438\u0442\u0430\u043d\u0438\u044f<\/b> \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u0438\u0437 <b>\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430<\/b> \u0432 \u044f\u0447\u0435\u0439\u043a\u0443 \u043f\u0430\u043c\u044f\u0442\u0438 \u2014 \u043f\u0438\u043d <b>K9<\/b>.<\/li>\n<\/ul>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0441\u0435\u043c\u0438\u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043d\u043e\u043c\u0443 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0443:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/rt\/n8\/y7\/rtn8y71hpla3aw_jt9obp7pd_60.png\" data-src=\"https:\/\/habrastorage.org\/webt\/rt\/n8\/y7\/rtn8y71hpla3aw_jt9obp7pd_60.png\"\/><\/p>\n<p>  \u0422\u0443\u0442 \u043f\u0438\u043d\u044b \u0432\u0441\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u044b. \u041d\u0435 \u0431\u0443\u0434\u0443 \u0438\u0445 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044f\u0442\u044c. \u0425\u043e\u0442\u044c \u0433\u0434\u0435-\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435 \u0446\u0435\u043f\u0435\u0439, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0431\u043b\u0443\u0436\u0434\u0430\u0442\u044c \u043f\u043e \u0441\u0445\u0435\u043c\u0430\u0442\u0438\u043a\u0443 ? \u0432 \u043f\u043e\u0438\u0441\u043a\u0430\u0445 \u043f\u0438\u043d\u0430, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u044f. \u041e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u0435\u043c\u0438\u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043d\u0438\u043a\u0430 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u0447\u0443\u0442\u044c \u043f\u043e\u0437\u0436\u0435.<\/p>\n<p>  \u0418 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0448\u0442\u0440\u0438\u0445 \u2014 \u043f\u0438\u043d\u044b SDA \u0438 SCL \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b EEPROM:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/2i\/pp\/_a\/2ipp_ahnvnjrujqlelwoayvjjv4.png\" data-src=\"https:\/\/habrastorage.org\/webt\/2i\/pp\/_a\/2ipp_ahnvnjrujqlelwoayvjjv4.png\"\/><\/div>\n<p>  \u0418 \u0441\u0430\u043c\u044b\u0435 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0438 \u0437\u0430\u043c\u0435\u0442\u044f\u0442 \u2014 \u0447\u0442\u043e \u043d\u0430 \u043f\u0438\u043d\u0430\u0445 <b>D1, E6<\/b> \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0432\u044b\u0431\u043e\u0440\u0430 SEL6 \u0438 SEL7 \u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u044b SCL, SDA. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0434\u0432\u0430 \u0440\u0430\u0437\u0440\u044f\u0434\u0430 \u043c\u044b \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u043c \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435. \u0418 \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u044f\u043a\u0443\u044e \u0445\u0440\u0435\u043d\u044c, \u0431\u0443\u0434\u0435\u043c \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u044d\u0442\u043e \u0432\u043e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0438.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 <b>Pin Planner (Assignments \u2014 Pin Planner)<\/b> \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043d\u0435\u0441\u0442\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0438\u043d\u043e\u0432. \u0423 \u043c\u0435\u043d\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u0432\u043d\u0443\u0448\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/6z\/zx\/q_\/6zzxq_pygidm5mr5hg9sc67arca.png\" data-src=\"https:\/\/habrastorage.org\/webt\/6z\/zx\/q_\/6zzxq_pygidm5mr5hg9sc67arca.png\"\/><\/div>\n<p>  \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e <b>I\/O Standard<\/b> \u0443\u043a\u0430\u0437\u0430\u043d <b>3.3-V LVTTL<\/b>. \u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0438 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u043e\u0435 \u043e\u043a\u043d\u043e. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043a \u044d\u0442\u043e\u043c\u0443 \u044d\u0442\u0430\u043f\u0443 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0435\u0441\u044c \u043c\u0435\u043d\u044f\u0442\u044c \u0438\u043c\u0435\u043d\u0430 \u0446\u0435\u043f\u0435\u0439, \u0438\u043d\u0430\u0447\u0435 \u0438\u0445 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u043c\u0435\u0447\u0430\u0442\u044c \u0437\u0430\u043d\u043e\u0432\u043e \u043d\u0430 \u043d\u043e\u0432\u044b\u0435 \u0438\u043c\u0435\u043d\u0430.<\/p>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">\u0428\u0430\u0433 \u043f\u0435\u0440\u0432\u044b\u0439. \u0414\u0440\u0430\u0439\u0432\u0435\u0440 LED-\u043e\u0432<\/font><\/h2>\n<p>  \u0412 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0441\u0442\u043e\u0438\u0442 \u043d\u0430\u0447\u0430\u0442\u044c \u0441 \u0441\u0430\u043c\u044b\u0445 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0437\u0430\u0434\u0430\u0447, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0441\u043a\u0430\u0447\u0430\u0442\u044c \u044d\u043d\u0442\u0443\u0437\u0438\u0430\u0437\u043c \u2014 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0434\u043b\u044f LED-\u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432. <\/p>\n<p>  \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 \u0444\u0430\u0439\u043b <b>led_driver.v<\/b> \u0438 \u0432 \u043d\u0451\u043c \u043c\u044b \u043f\u0438\u0448\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u0430\u043c\u0438. \u0414\u0443\u043c\u0430\u044e \u0432 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043e\u043d\u0430 \u043d\u0435 \u043d\u0443\u0436\u0434\u0430\u0435\u0442\u0441\u044f:<\/p>\n<pre><code class=\"vhdl\">module led_driver ( inputclk_i,\/\/ \u0421\u0438\u0433\u043d\u0430\u043b \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f inputrstn_i,\/\/ \u0421\u0438\u0433\u043d\u0430\u043b \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e \u0441\u0431\u0440\u043e\u0441\u0430 inputstate_i,\/\/ \u0412\u0445\u043e\u0434\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, 1 - \u0433\u043e\u0440\u0438\u0442, 0 - \u043d\u0435 \u0433\u043e\u0440\u0438\u0442 outputled_o\/\/ \u0412\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u0434\u043b\u044f LED );                        reg led_r;     always @ (posedge clk_i or negedge rstn_i)   begin         if (~rstn_i) begin         led_r &lt;= 0;       end        else if(state_i) begin         led_r &lt;= 1'b1;       end       else begin         led_r &lt;= 1'b0;       end         end    assign led_o = led_r;                         endmodule<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u0438 \u043c\u043e\u0434\u0443\u043b\u0438 \u0432 Top Level Design \u0438 \u0438\u0434\u0442\u0438 \u0434\u0430\u043b\u044c\u0448\u0435:<\/p>\n<pre><code class=\"vhdl\">\/\/################################################# \/\/  LED Drivers \/\/#################################################  reg ack_bit_r;\/\/ \u0420\u0435\u0433\u0438\u0441\u0442\u0440 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f ACK  wire ack_bit_w;\/\/ \u041f\u0440\u043e\u0432\u043e\u0434 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0438\u0434\u0442\u0438 \u0438\u0437 I2C Bit Controller  reg led_write_pulse_r;\/\/ \u0414\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438: \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043a\u043d\u043e\u043f\u043a\u0438 Write reg led_read_pulse_r;\/\/ \u0414\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438: \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043a\u043d\u043e\u043f\u043a\u0438 Read  \/\/ ACK bit LED led_driver led_driver_m0 ( .clk_i(clk_i), .rstn_i(rstn_i), .state_i(ack_bit_w), .led_o(led_brd_o[0]) );     \/\/ Pulse Write LED led_driver led_driver_m1 ( .clk_i(clk_i), .rstn_i(rstn_i), .state_i(led_read_pulse_r), .led_o(led_brd_o[1]) );   \/\/ Pulse Read LED led_driver led_driver_m2 ( .clk_i(clk_i), .rstn_i(rstn_i), .state_i(led_write_pulse_r), .led_o(led_brd_o[2]) );<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439, 4-\u0439 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u043e\u0441\u0442\u0430\u0432\u0438\u043c \u043d\u0435\u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u043d\u044b\u043c. \u0418\u0434\u0435\u043c \u0434\u0430\u043b\u044c\u0448\u0435. <\/p>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">\u0428\u0430\u0433 \u0432\u0442\u043e\u0440\u043e\u0439. \u0414\u0440\u0430\u0439\u0432\u0435\u0440 \u043a\u043d\u043e\u043f\u043e\u043a<\/font><\/h2>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u043a\u0438\u0434\u0430\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0441 \u043d\u043e\u0436\u0435\u043a GPIO \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u043f\u043e\u0442\u043e\u043c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u201c\u0440\u044b\u0447\u0430\u0433\u043e\u0432\u201d \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u044d\u043a\u0448\u0435\u043d\u043e\u0432. <\/p>\n<p>  \u0412\u0441\u0435 \u0437\u043d\u0430\u044e\u0442, \u0447\u0442\u043e \u0434\u0440\u0435\u0431\u0435\u0437\u0433 \u043c\u0435\u0445\u0430\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043a\u043d\u043e\u043f\u043e\u043a \u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u0435\u0439 \u2014 \u044d\u0442\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438. \u041e\u0431 \u044d\u0442\u043e\u043c \u044f \u043f\u0438\u0441\u0430\u043b \u0432 <a href=\"https:\/\/habr.com\/ru\/articles\/564152\/\">\u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a>, \u0432 \u0433\u043b\u0430\u0432\u0435 \u201c\u041c\u043e\u0434\u0443\u043b\u044c Debouncer\u201d. <\/p>\n<p>  \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u044d\u0442\u0430 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0432\u043e\u0442 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/kp\/oj\/as\/kpojasvku9tqgdfe8ximt5jj6iw.png\" data-src=\"https:\/\/habrastorage.org\/webt\/kp\/oj\/as\/kpojasvku9tqgdfe8ximt5jj6iw.png\"\/><\/div>\n<p>  \u0418\u0442\u0430\u043a. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 \u0444\u0430\u0439\u043b \u0441 \u0438\u043c\u0435\u043d\u0435\u043c <b>gpio_debouncer.v<\/b>. \u0412 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u044f \u0440\u0435\u0448\u0438\u043b \u043d\u0430\u043a\u0438\u0434\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0438\u0434\u043e\u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c. \u041e\u0431\u0449\u0438\u0439 \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u0438\u043c \u0436\u0435 \u043a\u0430\u043a \u0438 \u0432 \u043f\u0440\u043e\u0448\u043b\u044b\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u2014 \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u0436\u0430\u0442\u0430 \u043a\u043d\u043e\u043f\u043a\u0430 \u0438 \u0443\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 (\u043e\u0447\u0435\u043d\u044c \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u043f\u043e \u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u0441\u043a\u0438\u043c \u043e\u0449\u0443\u0449\u0435\u043d\u0438\u044f\u043c \u043f\u0435\u0440\u0438\u043e\u0434) \u2014 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u2014 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u043f\u043e\u0440\u0442. \u0415\u0441\u043b\u0438 \u043a\u043d\u043e\u043f\u043a\u0430 \u043e\u0442\u0436\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u2014 \u0442\u043e \u0441\u0438\u0433\u043d\u0430\u043b \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043d\u043e\u043b\u044c. \u0412 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a \u044d\u0442\u043e\u043c\u0443 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438\u043c\u043f\u0443\u043b\u044c\u0441 \u043d\u0430 \u043d\u0430\u0436\u0430\u0442\u0438\u0435 \u043a\u043d\u043e\u043f\u043a\u0438, \u0438 \u0438\u043c\u043f\u0443\u043b\u044c\u0441 \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043e\u0442\u0436\u0430\u0442\u0438\u044f \u043a\u043d\u043e\u043f\u043a\u0438. \u041e\u043d\u0438, \u0442\u043e\u0447\u043d\u0435\u0435 \u043e\u0434\u0438\u043d \u0438\u0437 \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u043e\u0432 \u2014 \u043d\u0430\u043c \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c.<\/p>\n<p>  \u0418\u0442\u0430\u043a. \u041e\u043f\u0438\u0448\u0443 \u043a\u043e\u0440\u043e\u0442\u043a\u043e \u043a\u0430\u043a \u044f \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b \u044d\u0442\u043e\u0442 \u043c\u043e\u0434\u0443\u043b\u044c. \u0412 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b \u043a\u0430\u043a\u0438\u0435 \u0432\u0445\u043e\u0434\u043d\u044b\u0435, \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0431\u0443\u0434\u0443\u0442 \u0443 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f:<\/p>\n<pre><code class=\"vhdl\">module gpio_debouncer  \/\/ \u041f\u043e\u0440\u0442\u044b ( inputclk_i,\/\/ \u0421\u0438\u0433\u043d\u0430\u043b \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f inputrstn_i,\/\/ \u0421\u0438\u0433\u043d\u0430\u043b \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e \u0441\u0431\u0440\u043e\u0441\u0430 inputbutton_i,\/\/ \u0421\u0438\u0433\u043d\u0430\u043b \u0441 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u0438 output regbutton_posedge_r,\/\/ \u0418\u043c\u043f\u0443\u043b\u044c\u0441 \u043d\u0430 \u043d\u0430\u0436\u0430\u0442\u0438\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 output regbutton_negedge_r,\/\/ \u0418\u043c\u043f\u0443\u043b\u044c\u0441 \u043d\u0430 \u043e\u0442\u0436\u0430\u0442\u0438\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 output regbutton_out_r\/\/ \u0424\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u0441 \u043a\u043d\u043e\u043f\u043a\u0438 );  endmodule<\/code><\/pre>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043a\u0430\u043a\u043e\u0439 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b \u0431\u0443\u0434\u0435\u0442 \u0441\u0447\u0451\u0442\u0447\u0438\u043a, \u043a\u0430\u043a\u043e\u0432\u0430 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0436\u0430\u0442\u0438\u044f, \u0447\u0442\u043e\u0431\u044b \u0435\u0435 \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u043c \u043d\u0430\u0436\u0430\u0442\u0438\u0435\u043c \u0430 \u043d\u0435 \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0438\u0437 \u0441\u0435\u0431\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043c\u0435\u0445\u0430\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u0438. <\/p>\n<p>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u0440\u044f\u0434 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0443 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f:<\/p>\n<pre><code class=\"vhdl\">\/\/ \u0413\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b #( parameter CNT_WIDTH = 32,\/\/ \u0420\u0430\u0437\u0440\u044f\u0434\u043d\u043e\u0441\u0442\u044c \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430 \u0442\u0430\u0439\u043c\u0435\u0440\u0430 parameter FREQ = 50,\/\/ \u0413\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f parameter MAX_TIME = 20\/\/ \u0414\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0443\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 )  \/\/ \u041b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b localparam TIMER_MAX_VAL = MAX_TIME * 1000 * FREQ; \/\/ \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0442\u0430\u0439\u043c\u0435\u0440\u0430<\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 (D-\u0442\u0440\u0438\u0433\u0433\u0435\u0440\u043e\u0432) \u0438 \u0444\u043b\u0430\u0433 \u0441\u0431\u0440\u043e\u0441\u0430 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430 \u0435\u0441\u043b\u0438 \u0434\u0435\u0442\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u0434\u0440\u0435\u0431\u0435\u0437\u0433. \u041e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441\u0431\u0440\u043e\u0441\u0430 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430, \u0435\u0441\u043b\u0438 \u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f, \u0442.\u0435. \u043a\u043e\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0434\u0440\u0435\u0431\u0435\u0437\u0433 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432 \u0432 \u0432\u0438\u0434\u0435 \u0445\u0430\u043e\u0442\u0438\u0447\u043d\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u2014 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u0441\u0447\u0451\u0442\u0447\u0438\u043a:<\/p>\n<pre><code class=\"vhdl\">\/\/ Input flip-flops reg DFF1;  reg DFF2;   wire q_reset;  assign q_reset = (DFF1 ^ DFF2);\/\/ XOR \u0434\u043b\u044f \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u044f \u0437\u0430 \u0434\u0440\u0435\u0431\u0435\u0437\u0433\u043e\u043c<\/code><\/pre>\n<p>  \u0415\u0449\u0435 \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c \u0434\u0432\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0434\u043b\u044f \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430 \u0438 \u043e\u0434\u0438\u043d \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u043b\u0430\u0433:<\/p>\n<pre><code class=\"vhdl\">\/\/ Timing regs reg [CNT_WIDTH-1:0] q_reg;\/\/ \u0420\u0435\u0433\u0438\u0441\u0442\u0440 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430 reg [CNT_WIDTH-1:0] q_next;\/\/ \u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440  wire q_add;  assign q_add = ~(q_reg == TIMER_MAX_VAL);\/\/ \u0424\u043b\u0430\u0433 \u043d\u0430 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0430 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430 <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0447\u0435\u0441\u043a\u0438\u0439 \u0431\u043b\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430. \u0421\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u043d\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e:<\/p>\n<ul>\n<li><b>q_reset<\/b> \u2014 \u044d\u0442\u043e \u0441\u0438\u0433\u043d\u0430\u043b \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0441\u0447\u0435\u0442\u0447\u0438\u043a;<\/li>\n<li><b>q_add<\/b> \u2014 \u044d\u0442\u043e \u0441\u0438\u0433\u043d\u0430\u043b \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430;<\/li>\n<li><b>q_reg<\/b> \u2014 \u044d\u0442\u043e \u0441\u0430\u043c \u0441\u0447\u0451\u0442\u0447\u0438\u043a.<\/li>\n<\/ul>\n<p>  \u041e\u0431\u0449\u0430\u044f \u0438\u0434\u0435\u044f \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 <b>q_reset<\/b> \u043d\u0435\u0442, \u0430 \u0435\u0441\u0442\u044c \u0441\u0438\u0433\u043d\u0430\u043b \u043d\u0430 <b>q_add<\/b>, \u0442.\u0435. \u043d\u0435 \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430 \u2014 \u0442\u043e \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. <\/p>\n<pre><code class=\"vhdl\">always @(q_reset, q_add, q_reg) begin case({q_reset , q_add}) 2'b00 :\/\/ \u0414\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430 q_next &lt;= q_reg;\/\/ \u041e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0442\u0435\u043c \u0436\u0435 2'b01 :\/\/ \u041d\u0435 \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c q_next &lt;= q_reg + 1;\/\/ \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e +1 default :\/\/ \u0412\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u043b\u0443\u0447\u0430\u0438 q_next &lt;= {CNT_WIDTH {1'b0}};\/\/ \u041e\u0431\u043d\u0443\u043b\u044f\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 endcase      end<\/code><\/pre>\n<p>  \u0418 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0431\u043b\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <b>q_reg<\/b> \u0438 \u0440\u0435\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0438\u0433\u043d\u0430\u043b:<\/p>\n<pre><code class=\"vhdl\">always @(posedge clk_i or negedge rstn_i) begin if(rstn_i == 1'b0) begin\/\/ \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u0435\u043b \u0441\u0431\u0440\u043e\u0441 \u0442\u043e \u043e\u0431\u043d\u0443\u043b\u044f\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f DFF1 &lt;= 1'b0; DFF2 &lt;= 1'b0; q_reg &lt;= {CNT_WIDTH {1'b0}}; end else begin DFF1 &lt;= button_i;\/\/ \u0424\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u043c \u0432\u0445\u043e\u0434\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 DFF2 &lt;= DFF1;\/\/ \u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0435\u0433\u043e \u0432\u0442\u043e\u0440\u043e\u043c\u0443 D-\u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0443 q_reg &lt;= q_next;\/\/ \u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430 end end<\/code><\/pre>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0431\u043b\u043e\u043a \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0441\u043b\u0438 \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442 \u043f\u0440\u0435\u0434\u0435\u043b \u0441\u0447\u0451\u0442\u0430:<\/p>\n<pre><code class=\"vhdl\">always @(posedge clk_i or negedge rstn_i) begin if(rstn_i == 1'b0) button_out_r &lt;= 1'b1; else if(q_reg == TIMER_MAX_VAL) button_out_r &lt;= DFF2; else button_out_r &lt;= button_out_r; end<\/code><\/pre>\n<p>  \u0418 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0431\u043b\u043e\u043a \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u043e\u0432:<\/p>\n<pre><code class=\"vhdl\">reg button_out_d0_r;  always @(posedge clk_i or negedge rstn_i) begin    if(rstn_i == 1'b0) begin       button_out_d0_r &lt;= 1'b1;       button_posedge_r &lt;= 1'b0;       button_negedge_r &lt;= 1'b0;   end   else begin       button_out_d0_r &lt;= button_out_r;       button_posedge_r &lt;= ~button_out_d0_r &amp;  button_out_r;       button_negedge_r &lt;= button_out_d0_r &amp; ~button_out_r;   end end<\/code><\/pre>\n<p>  \u0412 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043c\u043e\u0434\u0443\u043b\u044c:<\/p>\n<pre><code class=\"vhdl\">module gpio_debouncer  \/\/ Global parameters #( parameter CNT_WIDTH = 32, \/\/ Debounce timer bitwidth parameter FREQ = 50,         \/\/ Global clock (MHz) parameter MAX_TIME = 20     \/\/ Total delay time in ms )  \/\/ Ports ( inputclk_i,               \/\/ Clock input inputrstn_i,              \/\/ Reset input inputbutton_i, output regbutton_posedge_r, output regbutton_negedge_r, output regbutton_out_r );  localparam TIMER_MAX_VAL = MAX_TIME * 1000 * FREQ; \/\/ Maximum timer value  \/\/ Timing regs reg [CNT_WIDTH-1:0] q_reg;       reg [CNT_WIDTH-1:0] q_next;  \/\/ Input flip-flops reg DFF1; reg DFF2;               \/\/ Control flags wire q_add;                  wire q_reset;  reg button_out_d0_r;  \/\/ Continous assignment for counter control assign q_reset = (DFF1 ^ DFF2);  assign q_add = ~(q_reg == TIMER_MAX_VAL);      \/\/ Combo counter to manage q_next  always @(q_reset, q_add, q_reg) begin case({q_reset , q_add}) 2'b00 : q_next &lt;= q_reg; 2'b01 : q_next &lt;= q_reg + 1; default : q_next &lt;= {CNT_WIDTH {1'b0}};  endcase      end  \/\/ Flip flop inputs and q_reg update always @(posedge clk_i or negedge rstn_i) begin if(rstn_i == 1'b0) begin DFF1 &lt;= 1'b0; DFF2 &lt;= 1'b0; q_reg &lt;= {CNT_WIDTH {1'b0}}; end else begin DFF1 &lt;= button_i; DFF2 &lt;= DFF1; q_reg &lt;= q_next; end end  \/\/ Counter control always @(posedge clk_i or negedge rstn_i) begin if(rstn_i == 1'b0) button_out_r &lt;= 1'b1; else if(q_reg == TIMER_MAX_VAL) button_out_r &lt;= DFF2; else button_out_r &lt;= button_out_r; end  always @(posedge clk_i or negedge rstn_i) begin if(rstn_i == 1'b0) begin button_out_d0_r &lt;= 1'b1; button_posedge_r &lt;= 1'b0; button_negedge_r &lt;= 1'b0; end else begin button_out_d0_r &lt;= button_out_r; button_posedge_r &lt;= ~button_out_d0_r &amp; button_out_r; button_negedge_r &lt;= button_out_d0_r &amp; ~button_out_r; end end  endmodule<\/code><\/pre>\n<p>  \u0412 \u0438\u0442\u043e\u0433\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c testbench-\u0444\u0430\u0439\u043b \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u0432\u0445\u043e\u0434\u043d\u044b\u043c\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u0430\u043c\u0438 \u0438 \u043e\u0442\u0441\u043b\u0435\u0434\u0438\u0442\u044c \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c. \u041d\u043e \u0435\u0441\u043b\u0438 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u044d\u0442\u043e\u043c \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435, \u043e\u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043a\u0440\u0430\u0439\u043d\u0435 \u043e\u0431\u044a\u0435\u043c\u043d\u043e\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0434\u0435\u043c \u0434\u0430\u043b\u044c\u0448\u0435.<\/p>\n<p>  \u0421\u0440\u0430\u0437\u0443 \u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 Top Level Design \u0432\u0441\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b \u043c\u043e\u0434\u0443\u043b\u044f \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0441 \u043a\u043d\u043e\u043f\u043e\u043a:<\/p>\n<pre><code class=\"vhdl\">\/\/################################################# \/\/  GPIO Buttons Debouncers \/\/#################################################  wire btn_read_negedge_w; wire btn_write_negedge_w; wire btn_reg_p_negedge_w; wire btn_reg_n_negedge_w; wire btn_data_p_negedge_w; wire btn_data_n_negedge_w;  gpio_debouncer gpio_debouncer_m0 ( .clk_i(clk_i),                .rstn_i(rstn_i),               .button_i(btn_brd_i[0]),  .button_out_r(),      .button_negedge_r(),       .button_posedge_r(btn_read_negedge_w)    );  gpio_debouncer gpio_debouncer_m1 ( .clk_i(clk_i),                .rstn_i(rstn_i),               .button_i(btn_brd_i[1]),  .button_out_r(),      .button_negedge_r(),       .button_posedge_r(btn_write_negedge_w)   );  gpio_debouncer gpio_debouncer_m2 ( .clk_i(clk_i),                .rstn_i(rstn_i),               .button_i(btn_brd_i[2]),  .button_out_r(),      .button_negedge_r(),       .button_posedge_r(btn_reg_p_negedge_w)   );  gpio_debouncer gpio_debouncer_m3 ( .clk_i(clk_i),                .rstn_i(rstn_i),               .button_i(btn_brd_i[3]),  .button_out_r(),      .button_negedge_r(),         .button_posedge_r(btn_reg_n_negedge_w) );  gpio_debouncer gpio_debouncer_m4 ( .clk_i(clk_i),                .rstn_i(rstn_i), .button_i(btn_brd_i[4]),  .button_out_r(), .button_negedge_r(), .button_posedge_r(btn_data_p_negedge_w) );  gpio_debouncer gpio_debouncer_m5 ( .clk_i(clk_i), .rstn_i(rstn_i), .button_i(btn_brd_i[5]),  .button_out_r(), .button_negedge_r(), .button_posedge_r(btn_data_n_negedge_w) );<\/code><\/pre>\n<p>  \u041f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u0434\u0430\u043b\u044c\u0448\u0435 \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443 \u043d\u0430\u0448\u0435\u0439 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438.<\/p>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">\u0428\u0430\u0433 \u0442\u0440\u0435\u0442\u0438\u0439. \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0435\u043c\u0438\u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043d\u044b\u043c \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c<\/font><\/h2>\n<p>  \u0414\u0430\u043d\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u0434\u0435\u043b\u0438\u0442\u0441\u044f \u043d\u0430 \u0434\u0432\u0430 \u044d\u0442\u0430\u043f\u0430. \u041f\u0435\u0440\u0432\u044b\u0439 \u2014 \u044d\u0442\u043e \u0434\u0435\u043a\u043e\u0434\u0435\u0440 8-\u0431\u0438\u0442\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u043d\u0430 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432. \u0412\u0442\u043e\u0440\u043e\u0439 \u2014 \u044d\u0442\u043e \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0434\u0440\u0430\u0439\u0432\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c \u0432\u044b\u0432\u043e\u0434 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b.<\/p>\n<p>  \u0420\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e \u0441\u0445\u0435\u043c\u043e\u0442\u0435\u0445\u043d\u0438\u043a\u043e\u0439 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430, \u043e\u0442\u043a\u0440\u043e\u0435\u043c \u0441\u0445\u0435\u043c\u0443:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/lu\/hz\/9o\/luhz9oyrq9da6d4rrak6byudn9q.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/lu\/hz\/9o\/luhz9oyrq9da6d4rrak6byudn9q.png\"\/><\/div>\n<p>  \u0423 \u0441\u0435\u043c\u0438\u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043d\u0438\u043a\u043e\u0432, \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0440\u0430\u0437\u0440\u044f\u0434\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435 \u0436\u0435 \u043f\u0438\u043d\u044b \u0434\u043b\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0432\u0437\u044f\u0442\u044b\u0445 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432. \u0418 4 \u043f\u0438\u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0442 \u0437\u0430 \u0437\u0430\u0436\u0438\u0433\u0430\u043d\u0438\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0432\u0437\u044f\u0442\u043e\u0433\u043e \u0440\u0430\u0437\u0440\u044f\u0434\u0430. <\/p>\n<p>  \u041e\u0431\u0449\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u043f\u0438\u043d\u0430\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 (\u043e\u0442\u043c\u0435\u0447\u0435\u043d\u044b \u0431\u0443\u043a\u0432\u0430\u043c\u0438) \u0438 \u043f\u043e\u0442\u043e\u043c \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043d\u0430 \u043a\u0430\u043a\u043e\u043c \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0435 \u0438\u0445 \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c. \u0427\u0442\u043e\u0431\u044b \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0446\u0438\u0444\u0440, \u043d\u0430\u0434\u043e \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0447\u0435\u0440\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u0440\u044f\u0434\u044b \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0435\u043c\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432. \u041a\u0430\u043a \u044d\u0442\u0438\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u2014 \u0447\u0443\u0442\u044c \u043f\u043e\u0437\u0436\u0435. <\/p>\n<p>  \u0421\u0434\u0435\u043b\u0430\u0435\u043c \u0434\u0435\u043a\u043e\u0434\u0435\u0440 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442 \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u043d\u0430 \u0434\u0438\u0441\u043f\u043b\u0435\u0439. \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0444\u0430\u0439\u043b <b>seg_decoder.v<\/b> \u0438 \u043f\u0438\u0448\u0435\u043c \u043a\u043e\u0434 \u043c\u043e\u0434\u0443\u043b\u044f. \u0422\u0443\u0442 \u0432\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0438 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e:<\/p>\n<pre><code class=\"vhdl\">module seg_decoder ( input[3:0]      bin_data_i,     \/\/ Binary data input output reg[6:0] seg_data_o      \/\/ Seven segments LED output );  always@(*) begin  case(bin_data_i)  4'd0:seg_data_o &lt;= 7'b1000000; 4'd1:seg_data_o &lt;= 7'b1111001; 4'd2:seg_data_o &lt;= 7'b0100100; 4'd3:seg_data_o &lt;= 7'b0110000; 4'd4:seg_data_o &lt;= 7'b0011001; 4'd5:seg_data_o &lt;= 7'b0010010; 4'd6:seg_data_o &lt;= 7'b0000010; 4'd7:seg_data_o &lt;= 7'b1111000; 4'd8:seg_data_o &lt;= 7'b0000000; 4'd9:seg_data_o &lt;= 7'b0010000; 4'hA:seg_data_o &lt;= 7'b0001000; 4'hB:seg_data_o &lt;= 7'b0000011; 4'hC:seg_data_o &lt;= 7'b1000110; 4'hD:seg_data_o &lt;= 7'b0100001; 4'hE:seg_data_o &lt;= 7'b0000110; 4'hF:seg_data_o &lt;= 7'b0001110;  default:seg_data_o &lt;= 7'b1111111;  endcase  end  endmodule<\/code><\/pre>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043c\u043e\u0434\u0443\u043b\u044c \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0434\u0430\u043d\u043d\u044b\u0445. \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0444\u0430\u0439\u043b <b>seg_scan.v<\/b> \u0438 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0437\u0430\u0433\u043e\u0442\u043e\u0432\u043a\u0443 \u043c\u043e\u0434\u0443\u043b\u044f. \u0412 \u0446\u0435\u043b\u043e\u043c \u043e\u043d \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439:<\/p>\n<pre><code class=\"vhdl\">module seg_scan ( input           clk_i, input           rstn_i, output reg[7:0] seg_sel_o,      \/\/ \u0412\u044b\u0431\u043e\u0440 \u0440\u0430\u0437\u0440\u044f\u0434\u0430 output reg[7:0] seg_data_o,     \/\/ \u0412\u044b\u0431\u043e\u0440 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 input[7:0]      seg_data_0_i, input[7:0]      seg_data_1_i, input[7:0]      seg_data_2_i, input[7:0]      seg_data_3_i, input[7:0]      seg_data_4_i, input[7:0]      seg_data_5_i, input[7:0]      seg_data_6_i, input[7:0]      seg_data_7_i );  endmodule<\/code><\/pre>\n<p>  \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f \u0442\u043e\u043d\u043a\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438:<\/p>\n<pre><code class=\"vhdl\">\/\/ Global parameters #( parameter SCAN_FREQ = 200;     \/\/ \u0427\u0430\u0441\u0442\u043e\u0442\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 parameter CLK_FREQ = 50000000; \/\/ \u0421\u0438\u0441\u0442\u0435\u043c\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f parameter SCAN_COUNT = CLK_FREQ \/ (SCAN_FREQ * 8) - 1; )<\/code><\/pre>\n<p>  \u0412\u0432\u0435\u0434\u0435\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432:<\/p>\n<pre><code class=\"vhdl\">reg [31:0] scan_timer_r;\/\/ Scan time counter reg  [3:0] scan_sel_r;\/\/ Scan select counter<\/code><\/pre>\n<p>  \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0447\u0435\u0441\u043a\u0438\u0439 \u0431\u043b\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u043e\u043c \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b:<\/p>\n<pre><code class=\"vhdl\">always@(posedge clk_i or negedge rstn_i) begin  if(~rstn_i) begin  scan_timer_r &lt;= 32'd0; scan_sel_r &lt;= 4'd0;  end else if(scan_timer_r >= SCAN_COUNT) begin  scan_timer_r &lt;= 32'd0;  if(scan_sel_r == 4'd5) scan_sel_r&lt;= 4'd0; else scan_sel_r&lt;= scan_sel_r + 4'd1; end else begin scan_timer_r &lt;= scan_timer_r + 32'd1; end end<\/code><\/pre>\n<p>  \u0418 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0438\u043d\u043e\u043c \u0432\u044b\u0431\u043e\u0440\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u0441 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u043c \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b:<\/p>\n<pre><code class=\"vhdl\">always@(posedge clk_i or negedge rstn_i) begin  if(~rstn_i) begin seg_sel_o &lt;= 8'b1111_1111; seg_data_o &lt;= 8'hFF; end else begin  \/\/ Digital LEDs choose case(scan_sel_r)  4'd0:begin seg_sel_o &lt;= 8'b1111_1110; seg_data_o &lt;= seg_data_0_i; end  4'd1:begin seg_sel_o &lt;= 8'b1111_1101; seg_data_o &lt;= seg_data_1_i; end  4'd2:begin seg_sel_o &lt;= 8'b1111_1011; seg_data_o &lt;= seg_data_2_i; end  4'd3:begin seg_sel_o &lt;= 8'b1111_0111; seg_data_o &lt;= seg_data_3_i; end  4'd4:begin seg_sel_o &lt;= 8'b1110_1111; seg_data_o &lt;= seg_data_4_i; end  4'd5:begin seg_sel_o &lt;= 8'b1101_1111; seg_data_o &lt;= seg_data_5_i; end  4'd6:begin seg_sel_o &lt;= 8'b1011_1111; seg_data_o &lt;= seg_data_6_i; end  4'd7:begin seg_sel_o &lt;= 8'b0111_1111; seg_data_o &lt;= seg_data_7_i; end  default:begin seg_sel_o &lt;= 8'b1111_1111; seg_data_o &lt;= 8'hFF; end  endcase end end<\/code><\/pre>\n<p>  \u0422\u0443\u0442 \u0442\u043e\u0436\u0435 \u0432\u0441\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e, \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0447\u0442\u043e \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0443\u0442 \u043d\u0435\u0447\u0435\u0433\u043e. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 0 \u0432 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u0440\u0430\u0437\u0440\u044f\u0434\u0435 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b PNP-\u0442\u0440\u0430\u043d\u0437\u0438\u0441\u0442\u043e\u0440\u044b \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u043f\u0440\u043e\u0442\u0438\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043a\u0430\u043d\u0430\u043b\u0430. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043d\u0430\u0431\u043e\u0440\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432, \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438.<\/p>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432 Top Level \u043c\u043e\u0434\u0443\u043b\u044c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b \u0432\u044b\u0448\u0435\u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0441\u0435\u043c\u0438\u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043d\u044b\u043c \u0434\u0438\u0441\u043f\u043b\u0435\u0435\u043c:<\/p>\n<pre><code class=\"vhdl\">\/\/################################################# \/\/ 7 Segments Display Drivers \/\/#################################################  wire[6:0] seg_data_0_w; wire[6:0] seg_data_1_w; wire[6:0] seg_data_2_w; wire[6:0] seg_data_3_w; wire[6:0] seg_data_4_w; wire[6:0] seg_data_5_w;  seg_decoder seg_decoder_m0 (  .bin_data_i  (reg_addr_r[7:4]),  .seg_data_o  (seg_data_0_w) );  seg_decoder seg_decoder_m1 (  .bin_data_i  (reg_addr_r[3:0]),  .seg_data_o  (seg_data_1_w) );  seg_decoder seg_decoder_m2 (  .bin_data_i  (data_write_r[7:4]),  .seg_data_o  (seg_data_2_w) );  seg_decoder seg_decoder_m3 (  .bin_data_i  (data_write_r[3:0]),  .seg_data_o  (seg_data_3_w) );  seg_decoder seg_decoder_m4 (  .bin_data_i  (read_data_r[7:4]),  .seg_data_o  (seg_data_4_w) );  seg_decoder seg_decoder_m5 (  .bin_data_i  (read_data_r[3:0]),  .seg_data_o  (seg_data_5_w) );  \/\/ Main driver for 7-seg display seg_scan seg_scan_m0 (  .clk_i        (clk_i),  .rstn_i      (rstn_i),  .seg_sel_o    (seg_sel_o),  .seg_data_o   (seg_data_o),  .seg_data_0_i ({1'b1, seg_data_0_w}),  .seg_data_1_i ({1'b1, seg_data_1_w}),  .seg_data_2_i ({1'b1, seg_data_2_w}),  .seg_data_3_i ({1'b1, seg_data_3_w}),  .seg_data_4_i ({1'b1, seg_data_4_w}),  .seg_data_5_i ({1'b1, seg_data_5_w}),  .seg_data_6_i ({1'b1, 7'b1111_111}),\/\/ Don't use this segments, busy by I2C  .seg_data_7_i ({1'b1, 7'b1111_111})\/\/ Don't use this segments, busy by I2C );<\/code><\/pre>\n<p>  \u0414\u0430\u043d\u043d\u044b\u0439 HDL-\u043a\u043e\u0434 \u043b\u0435\u0433\u043a\u043e \u0447\u0438\u0442\u0430\u0435\u043c \u0438 \u0432 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438, \u0443\u0432\u0435\u0440\u0435\u043d, \u043d\u0435 \u043d\u0443\u0436\u0434\u0430\u0435\u0442\u0441\u044f. \u0418\u0434\u0451\u043c \u0434\u0430\u043b\u044c\u0448\u0435.<\/p>\n<p>  r<\/p>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">\u0428\u0430\u0433 \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u044b\u0439. \u0414\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0434\u043b\u044f I2C Bit Controlle<\/font><\/h2>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0434\u043b\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 I2C, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0438 \u0432 <a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/776992\/\">\u043f\u0440\u043e\u0448\u043b\u043e\u0439<\/a> \u0441\u0442\u0430\u0442\u044c\u0435. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0430\u0439\u043b <b>clock_divider.v<\/b> \u0438 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043c\u043e\u0434\u0443\u043b\u044c \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f:<\/p>\n<pre><code class=\"vhdl\">module clock_divider ( input clk_i, output reg clk_o );  endmodule<\/code><\/pre>\n<p>  \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f \u0442\u043e\u043d\u043a\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438:<\/p>\n<pre><code class=\"vhdl\">\/\/ Global parameters #(     parameter DIVISOR = 32;     \/\/ \u0427\u0430\u0441\u0442\u043e\u0442\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445,  )<\/code><\/pre>\n<p>  \u041b\u043e\u0433\u0438\u043a\u0430 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u0430\u044f. \u041d\u0430 \u0432\u0445\u043e\u0434 \u043c\u043e\u0434\u0443\u043b\u044f \u043f\u043e\u0434\u0430\u0435\u0442\u0441\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u0432 50 MHz \u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430, \u043f\u0440\u0438 \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 DIVISOR, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u043d\u0432\u0435\u0440\u0441\u0438\u044f \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430. <\/p>\n<p>  \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430 \u0438 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0447\u0435\u0441\u043a\u0438\u0439 \u0431\u043b\u043e\u043a: <\/p>\n<pre><code class=\"vhdl\">reg[27:0] counter = 28'd0;  always @(posedge clk_i) begin  counter &lt;= counter + 28'd1;  if(counter >= (DIVISOR - 1)) counter &lt;= 28'd0;  clk_o &lt;= (counter &lt; DIVISOR \/ 2) ? 1'b1 : 1'b0;  end<\/code><\/pre>\n<p>  \u0412\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u0432 Top Level Design \u043c\u043e\u0434\u0443\u043b\u044c:<\/p>\n<pre><code class=\"vhdl\">\/\/################################################# \/\/ Clock Divider for I2C Bit Controller \/\/#################################################  wire clk_div_w;  clock_divider clock_divider_m0 ( .clk_i (clk_i), .clk_o (clk_div_w), );<\/code><\/pre>\n<p>  \u0422\u0430\u043a. \u0421\u043e \u0432\u0441\u0435\u043c\u0438 \u043f\u0440\u043e\u0441\u0442\u044b\u043c\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0434\u0438\u0437\u0430\u0439\u043d\u0430 \u043c\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c \u2014 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0441\u0430\u043c\u043e\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0435 (\u0434\u043b\u044f \u043c\u0435\u043d\u044f), \u0441 \u0447\u0435\u043c \u044f \u0434\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u043b\u043e\u043c\u0430\u043b \u0433\u043e\u043b\u043e\u0432\u0443.<\/p>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">\u0428\u0430\u0433 \u043f\u044f\u0442\u044b\u0439. \u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f I2C \u0441\u0438\u0433\u043d\u0430\u043b\u0430\u043c\u0438<\/font><\/h2>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u044d\u0442\u0430\u043f\u043e\u043c \u043f\u0435\u0440\u0435\u0434\u043e \u043c\u043d\u043e\u0439 \u0441\u0442\u043e\u044f\u043b\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u043c\u0441\u044f \u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u043c \u0443\u0440\u043e\u043a\u0435 \u0431\u0438\u0442\u043e\u0432\u044b\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0430\u0431\u0441\u0442\u0440\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u043d \u043e\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439 \u0438 \u0447\u0438\u0441\u0442\u043e \u043a\u0440\u0443\u0442\u0438\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0431\u0438\u0442\u0438\u043a\u0430\u043c\u0438 \u043a\u043e\u0433\u0434\u0430 \u0435\u043c\u0443 \u0441\u043a\u0430\u0436\u0443\u0442 \u043f\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c.<\/p>\n<p>  \u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u044f \u201c\u0440\u043e\u0436\u0430\u043b\u201d \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043e\u043b\u0433\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0446\u0435\u043b\u0443\u044e \u0441\u043e\u0432\u043e\u043a\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u0444\u0430\u043a\u0442\u043e\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u043b\u0438 \u0441\u043e\u0439\u0442\u0438\u0441\u044c \u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e \u043e\u0442\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0442\u043e \u0447\u0442\u043e \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e. \u0418 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0438\u0442\u044c \u2014 \u043a\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0434\u0435\u0442\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u043e\u043c\u0435\u043d\u0442 \u043a\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043a \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u043f\u043e\u0440\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u0421\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0438 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u2014 \u044d\u0442\u043e \u0432\u0432\u0435\u0441\u0442\u0438 \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u0430 ready. <\/p>\n<p>  \u041f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0430 \u0442\u0430\u043a\u043e\u0439, \u043a\u0430\u043a \u044f \u0435\u0435 \u043e\u0436\u0438\u0434\u0430\u043b. \u0412 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u043c \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043c\u043d\u043e\u0433\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u044b\u0448\u043b\u0435\u043d\u0438\u044f, \u043f\u0440\u043e\u043a\u0440\u0443\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0432 \u0433\u043e\u043b\u043e\u0432\u0435 \u0438 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. <\/p>\n<p>  \u0418\u0442\u0430\u043a, \u043e\u043f\u0438\u0448\u0443, \u0447\u0442\u043e \u0432 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043c\u043e\u0434\u0443\u043b\u044c \u0438 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0432 Top Level Design \u043c\u043e\u0434\u0443\u043b\u044c. \u041f\u0435\u0440\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u044d\u0442\u043e \u0430\u0434\u0440\u0435\u0441 Slave-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u0442.\u0435. \u043d\u0430\u0448\u0435\u0439 EEPROM. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0432 \u0432 Datasheet \u0434\u0430\u043d\u043d\u043e\u0439 EEPROM \u0438 \u043d\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0435\u0435 \u043d\u043e\u0436\u0435\u043a \u0430\u0434\u0440\u0435\u0441\u0430, \u0441\u0442\u0430\u043b\u043e \u044f\u0441\u043d\u043e, \u0447\u0442\u043e \u0430\u0434\u0440\u0435\u0441 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 0xA1, \u0430 \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c 0xA0. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 Contol Byte \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043a\u043b\u0435\u0438\u0442\u044c \u0438\u0437 \u0434\u0432\u0443\u0445 \u0447\u0430\u0441\u0442\u0435\u0439 7&#8217;b1010000 \u0438 \u0431\u0438\u0442\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438. \u0414\u0430\u043b\u0435\u0435 \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u043a\u0430\u043a \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442.<\/p>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u044d\u0442\u043e \u0432 \u043c\u043e\u0434\u0443\u043b\u044c:<\/p>\n<pre><code class=\"vhdl\">\/\/################################################# \/\/ Main Operation FSM \/\/#################################################  \/\/ \u0410\u0434\u0440\u0435\u0441 EEPROM localparam SLAVE_ADDR = 7'b1010000;<\/code><\/pre>\n<p>  \u042f \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0437\u0430\u0431\u044b\u0432\u0430\u043b, \u043a\u0430\u043a\u043e\u0439 \u0431\u0438\u0442 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 Control Byte \u0441 \u0430\u0434\u0440\u0435\u0441\u043e\u043c Slave-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0434\u043b\u044f <b>\u0447\u0442\u0435\u043d\u0438\u044f<\/b>, \u0430 \u043a\u0430\u043a\u043e\u0439 \u0431\u0438\u0442 \u0434\u043b\u044f <b>\u0437\u0430\u043f\u0438\u0441\u0438<\/b>. \u0412 \u0438\u0442\u043e\u0433\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u043b \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f:<\/p>\n<pre><code class=\"vhdl\">\/\/ \u0411\u0438\u0442\u044b \u0434\u043b\u044f \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432 Control Byte I2C  localparam READ_BIT= 1'b1; localparam WRITE_BIT= 1'b0;<\/code><\/pre>\n<p>  \u0414\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u043c\u0438 \u2014 \u043c\u043d\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442 \u0441 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u043c\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u043c\u0438 \u0438 \u0435\u0433\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0434\u043b\u044f \u0438\u0445 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0438 \u043e\u0431\u044a\u044f\u0432\u0438\u043c:<\/p>\n<pre><code class=\"vhdl\">\/\/ \u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f FSM \u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0434\u043b\u044f \u043d\u0438\u0445 localparam IDLE_STATE = 4'd1; localparam WRITE_STATE= 4'd2; localparam READ_STATE= 4'd3; localparam WAIT_STATE= 4'd4;  reg [3:0] state_r = IDLE_STATE;<\/code><\/pre>\n<p>  \u041d\u0430\u0431\u043e\u0440 \u043a\u043e\u043c\u0430\u043d\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0430 \u0432\u0445\u043e\u0434 I2C Bit Controller \u2014 \u0442\u043e\u0436\u0435 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043e\u0431\u044a\u044f\u0432\u0438\u043c \u0442\u0443\u0442:<\/p>\n<pre><code class=\"vhdl\">\/\/ \u0422\u0435 \u0441\u0430\u043c\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438\u0437 \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e \u0443\u0440\u043e\u043a\u0430 localparam START_CMD   = 4'd1;  localparam WR_CMD     = 4'd2;  localparam RD_CMD      = 3'd3;  localparam STOP_CMD    = 4'd4; localparam RESTART_CMD = 4'd5;  reg [2:0] cmd_r = START_CMD;<\/code><\/pre>\n<p>  \u0412 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u043c\u0435\u0441\u0442\u0430\u0445 \u043c\u043d\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u0430\u0441\u044c <b>\u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430<\/b> \u0438 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u0441\u0442\u044b\u043b\u044c, \u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 STOP. \u041f\u043e\u0437\u0436\u0435 \u043f\u043e\u043a\u0430\u0436\u0443 \u0433\u0434\u0435 \u044f \u0435\u0433\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b, \u043c\u043e\u0436\u0435\u0442 \u0432\u044b \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0435\u0442\u0435 \u0431\u043e\u043b\u0435\u0435 \u0438\u0437\u044f\u0449\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0435\u0439\u0441\u044f \u0443 \u043c\u0435\u043d\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b. \u041e\u0431\u044a\u044f\u0432\u0438\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0442\u0430\u0439\u043c\u0435\u0440\u0430:<\/p>\n<pre><code class=\"vhdl\">\/\/ \u0421\u0447\u0435\u0442\u0447\u0438\u043a \u0442\u0430\u0439\u043c\u0435\u0440\u0430 reg [31:0] timer_r;<\/code><\/pre>\n<p>  \u0414\u043b\u044f \u0441\u0442\u0430\u0440\u0442\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 I2C Bit Controller \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u2014 <b>wr_i2c<\/b>. \u041e\u0431\u044a\u044f\u0432\u0438\u043c \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0441\u0432\u043e\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440:<\/p>\n<pre><code class=\"vhdl\">\/\/ \u041a\u043e\u043c\u0430\u043d\u0434\u0430 \u0434\u043b\u044f \u0441\u0442\u0430\u0440\u0442\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 I2C Bit Ctrl reg wr_i2c_r;<\/code><\/pre>\n<p>  \u0414\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0430\u0434\u0440\u0435\u0441\u0430 Slave \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u0430\u0434\u0440\u0435\u0441\u0430 \u044f\u0447\u0435\u0439\u043a\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u2014 \u043e\u0431\u044a\u044f\u0432\u0438\u043c \u0442\u0440\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430:<\/p>\n<pre><code class=\"vhdl\">reg [6:0] slave_addr_r = SLAVE_ADDR; reg [7:0] reg_addr_r = 0; reg [7:0] data_write_r = 0;<\/code><\/pre>\n<p>  \u0414\u043b\u044f \u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0445 \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0431\u044a\u044f\u0432\u0438\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b-\u0431\u0443\u0444\u0435\u0440\u044b:<\/p>\n<pre><code class=\"vhdl\">\/\/ Data buffers reg [7:0] read_data_r; wire [7:0] read_data_w;  reg [7:0] write_data_r;<\/code><\/pre>\n<p>  \u0414\u043b\u044f \u0431\u0438\u0442\u0430 ACK-\u0442\u0430\u043a \u0436\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0432\u043e\u0451 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0438 \u043f\u0440\u043e\u0432\u043e\u0434 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0438\u0434\u0442\u0438 \u043e\u0442 \u043c\u043e\u0434\u0443\u043b\u044f I2C Bit Controller:<\/p>\n<pre><code class=\"vhdl\">reg ack_bit_r; wire ack_bit_w;<\/code><\/pre>\n<p>  \u0414\u043b\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438 \u043c\u043e\u0434\u0443\u043b\u044f \u2014 \u0442\u043e\u0436\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b: <\/p>\n<pre><code class=\"vhdl\">wire ready_w;<\/code><\/pre>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432 Top Level Design \u043c\u043e\u0434\u0443\u043b\u044c \u0438\u0437 \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e \u0443\u0440\u043e\u043a\u0430 (\u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b state_o, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u043c \u0443\u0440\u043e\u043a\u0435 \u2014 \u044f \u0443\u0431\u0440\u0430\u043b):<\/p>\n<pre><code class=\"vhdl\">\/\/################################################# \/\/ I2C Bit Controller \/\/#################################################  i2c_bit_controller i2c_bit_controller_m0 (  .rstn_i(rstn_i), \/\/ \u0421\u0438\u0433\u043d\u0430\u043b \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e \u0441\u0431\u0440\u043e\u0441\u0430 .clk_i(clk_div_w), \/\/ \u041f\u043e\u0434\u0435\u043b\u0435\u043d\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u0430  .wr_i2c_i(wr_i2c_r),\/\/ \u0421\u0438\u0433\u043d\u0430\u043b \u043d\u0430 \u0441\u0442\u0430\u0440\u0442 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439 .cmd_i(cmd_r), \/\/ \u041a\u043e\u043c\u0430\u043d\u0434\u0430 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f  .din_i(write_data_r),\/\/ \u0414\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 .dout_o(read_data_w),\/\/ \u041f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 .ack_o(ack_bit_w),\/\/ ACK-\u0431\u0438\u0442  .ready_o(ready_w),\/\/ \u0421\u0438\u0433\u043d\u0430\u043b \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438 \u043c\u043e\u0434\u0443\u043b\u044f  .sda_io(sda_io),\/\/ \u041b\u0438\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 SDA .scl_io(scl_io)\/\/ \u041b\u0438\u043d\u0438\u044f \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 SCL );<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 ACK-\u0431\u0438\u0442\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a \u043c\u043e\u0434\u0443\u043b\u044e \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f (\u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043d\u0435 \u043f\u043e\u043d\u044f\u043b \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u043f\u043e\u0447\u0435\u043c\u0443), \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0447\u0435\u0441\u043a\u0438\u0439 \u0431\u043b\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 ACK-\u0431\u0438\u0442\u0430 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440:<\/p>\n<pre><code class=\"vhdl\">always @(*) begin read_data_r &lt;= read_data_w; ack_bit_r &lt;= ack_bit_w; end<\/code><\/pre>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0438 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0437\u0430\u043f\u0438\u0441\u0438 \u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438:<\/p>\n<pre><code class=\"vhdl\">always @(posedge clk_i or negedge rstn_i) begin  if(rstn_i == 1'b0) begin reg_addr_r&lt;= 0; data_write_r&lt;= 0; end  else begin  if(btn_reg_p_negedge_w) begin reg_addr_r = reg_addr_r + 1; end  if(btn_reg_n_negedge_w) begin reg_addr_r = reg_addr_r - 1; end  if(btn_data_p_negedge_w) begin data_write_r = data_write_r + 1; end  if(btn_data_n_negedge_w) begin data_write_r = data_write_r - 1; end  end end<\/code><\/pre>\n<p>  \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e, \u0438 \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0447\u0442\u043e \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u0439 \u0442\u0443\u0442 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f.<\/p>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0447\u0435\u0441\u043a\u0438\u0439 \u0431\u043b\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u0445 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0438\u043b\u0438 \u0447\u0442\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445. \u041a\u0430\u0436\u0434\u043e\u0435 \u0432\u043e\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 <b>ready_w<\/b> \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u2014 \u0431\u0443\u0434\u0435\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u043c \u0434\u043b\u044f \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430 \u0438 \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0431\u0443\u0434\u0435\u0442 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f. \u0423 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u2014 \u0435\u0441\u0442\u044c \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u043f\u043e\u0441\u043b\u0435\u0438\u0445 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u2014 \u043d\u0443\u0436\u043d\u043e \u0441\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0441\u0447\u0451\u0442\u0447\u0438\u043a. <\/p>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u0432\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u043a\u0430\u043a \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043e, \u0430 \u043f\u043e\u043a\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u043c HDL-\u043a\u043e\u0434 \u0432 Top-\u043c\u043e\u0434\u0443\u043b\u044c:<\/p>\n<pre><code class=\"vhdl\">\/\/ Counter for transactions reg [4:0] counter_r = 0; always @(posedge ready_w or negedge rstn_i) begin  if(rstn_i == 1'b0) begin counter_r = 0; end  else begin   counter_r = counter_r + 1;  case(state_r)  READ_STATE: begin if (counter_r == 7) begin counter_r = 0; end end   WRITE_STATE: begin if (counter_r == 5) begin counter_r = 0; end end   default: begin counter_r = 0; end  endcase      end end<\/code><\/pre>\n<p>  \u041f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u0438 \u0434\u0435\u043b\u0430\u0435\u043c \u0441\u0431\u0440\u043e\u0441 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u0440\u0438 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u043c \u0441\u0431\u0440\u043e\u0441\u0435:<\/p>\n<pre><code class=\"vhdl\">always @(posedge clk_i or negedge rstn_i) begin      if(rstn_i == 1'b0) begin  led_write_pulse_r&lt;= 0; led_read_pulse_r&lt;= 0;  cmd_r &lt;= START_CMD; state_r &lt;= IDLE_STATE; write_data_r&lt;= 0; wr_i2c_r&lt;= 0;      end  else begin      end end<\/code><\/pre>\n<p>  \u0412 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0431\u043b\u043e\u043a\u0435 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u0443\u044e State-\u043c\u0430\u0448\u0438\u043d\u0443:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ex\/81\/cr\/ex81crhtv8nntklbatpf5mml5k4.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/ex\/81\/cr\/ex81crhtv8nntklbatpf5mml5k4.png\"\/><\/div>\n<p>  \u041e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0435\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0438 \u0440\u0430\u0441\u0441\u0442\u0430\u0432\u0438\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u043c \u0441\u0442\u0430\u0440\u0442\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439 <b>wr_i2c_r<\/b>: <\/p>\n<pre><code class=\"vhdl\">case(state_r)      IDLE_STATE: begin wr_i2c_r = 0;     end            READ_STATE: begin     wr_i2c_r = 1;     end  WRITE_STATE: begin wr_i2c_r = 1; end  WAIT_STATE: begin  wr_i2c_r = 1; end      default: begin wr_i2c_r = 0; end   endcase<\/code><\/pre>\n<p>  \u0412 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u043e\u0432 \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0437\u0430\u043f\u0438\u0441\u0438 \u0438\u043b\u0438 \u0447\u0442\u0435\u043d\u0438\u044f \u0441 \u043a\u043d\u043e\u043f\u043e\u043a, \u0435\u0441\u043b\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442 \u0433\u043e\u0442\u043e\u0432. \u0415\u0441\u043b\u0438 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0438\u043c\u043f\u0443\u043b\u044c\u0441 \u2014 \u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043c \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e \u0441 \u043a\u0430\u043a\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u0438 \u043f\u0440\u0438\u0448\u043b\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430:<\/p>\n<pre><code class=\"vhdl\">IDLE_STATE: begin  wr_i2c_r = 0;  \/\/ Button for Read operation if(btn_read_negedge_w) begin if(ready_w) begin state_r = READ_STATE; end end  \/\/ Button for Write operation if(btn_write_negedge_w) begin if(ready_w) begin state_r = WRITE_STATE; end end end<\/code><\/pre>\n<p>  \u041e\u043f\u0438\u0448\u0435\u043c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0430 <b>READ_STATE<\/b>. \u0422\u0443\u0442 \u0432\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u2014 \u0440\u0435\u0430\u0433\u0438\u0440\u0443\u0435\u043c \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0435 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430 counter_r, \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442 \u0433\u043e\u0442\u043e\u0432 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e. \u041f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<pre><code class=\"vhdl\">READ_STATE: begin  led_read_pulse_r &lt;= ~led_read_pulse_r;\/\/ \u0414\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438 wr_i2c_r = 1;\/\/ \u0421\u0442\u0430\u0440\u0442\u0443\u0435\u043c \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438  case(counter_r)  0: begin end  1: begin write_data_r = {slave_addr_r, WRITE_BIT}; \/\/ \u0412\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435         end  2: begin write_data_r = reg_addr_r; end  3: begin cmd_r = RESTART_CMD; write_data_r = {slave_addr_r, READ_BIT}; end  4: begin cmd_r = WR_CMD; write_data_r = {slave_addr_r, READ_BIT}; end  5: begin cmd_r = RD_CMD; end  6: begin cmd_r = STOP_CMD;              state_r = WAIT_STATE; timer_r = 0;  end default: begin cmd_r = START_CMD;              state_r = IDLE_STATE; write_data_r = 0; end  endcase end<\/code><\/pre>\n<p>  \u0422\u0443\u0442 \u0432 \u0446\u0435\u043b\u043e\u043c \u0432\u0441\u0435 \u043b\u0435\u0433\u043a\u043e \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f, \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043a\u0430\u0436\u0434\u0443\u044e \u043f\u043e\u0441\u044b\u043b\u043a\u0443. \u041e\u0442\u043a\u0440\u044b\u0432 \u0434\u0430\u0442\u0430\u0448\u0438\u0442 \u043d\u0430 EEPROM \u0432\u0438\u0434\u043d\u043e, \u043a\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0442\u0435\u043d\u0438\u0435:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/w5\/xb\/ay\/w5xbayf5zmfk1txx0iaaonskxtw.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/w5\/xb\/ay\/w5xbayf5zmfk1txx0iaaonskxtw.png\"\/><\/div>\n<p>  \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u043a\u043e\u0434\u0435 \u0441 \u0442\u0435\u043c, \u043a\u0430\u043a \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u043d\u0430 Random Read, \u0442.\u0435. \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 \u0440\u0430\u043d\u0434\u043e\u043c\u043d\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<p>  \u041f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 Random Write \u0432 Datasheet:  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/mb\/g3\/ii\/mbg3iiq27tsgpi4fobfm-aq_h7q.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/mb\/g3\/ii\/mbg3iiq27tsgpi4fobfm-aq_h7q.png\"\/><\/div>\n<p>  \u0422\u043e\u0436\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e \u0447\u0442\u043e \u0434\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u043f\u0440\u0438 \u0437\u0430\u043f\u0438\u0441\u0438. \u041e\u043f\u0438\u0448\u0435\u043c \u0441\u0435\u043a\u0446\u0438\u044e <b>WRITE_STATE<\/b>. \u0422\u0443\u0442 \u0434\u0430\u0436\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0449\u0435 \u0447\u0435\u043c \u0432 READ_STATE:<\/p>\n<pre><code class=\"vhdl\">WRITE_STATE: begin  led_write_pulse_r &lt;= ~led_write_pulse_r; wr_i2c_r = 1;  case(counter_r) 0: begin end  1: begin write_data_r = {slave_addr_r, WRITE_BIT};           end  2: begin write_data_r = reg_addr_r; end  3: begin write_data_r &lt;= data_write_r; end  4: begin cmd_r = STOP_CMD;  state_r = WAIT_STATE; timer_r = 0;  end  default: begin cmd_r = START_CMD; state_r = IDLE_STATE; write_data_r = 0; end  endcase end<\/code><\/pre>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 state, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c, \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0434\u043b\u044f \u043f\u043e\u043a\u043e\u0441\u0442\u044b\u043b\u0438\u0432\u0430\u043d\u0438\u044f \u043d\u0435\u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f STOP-\u043a\u043e\u043c\u0430\u043d\u0434\u044b \u2014 \u044d\u0442\u043e <b>WAIT_STATE<\/b>:<\/p>\n<pre><code class=\"vhdl\">WAIT_STATE: begin   wr_i2c_r = 1;  if(timer_r >= 32'd1000) begin             state_r &lt;= IDLE_STATE; write_data_r = 0; cmd_r = START_CMD; end else             timer_r &lt;= timer_r + 32'd1; end<\/code><\/pre>\n<p>  \u0416\u0434\u0451\u043c \u0443\u0441\u043b\u043e\u0432\u043d\u043e 1000 \u0442\u0430\u043a\u0442\u043e\u0432 \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 IDLE_STATE. <\/p>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0442\u0430\u043a\u0436\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432:<\/p>\n<pre><code class=\"vhdl\">default: begin  wr_i2c_r = 0;       state_r &lt;= IDLE_STATE;  end <\/code><\/pre>\n<p>  \u041f\u043e\u043b\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0433\u0434\u0430 \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f \u2014 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0439\u0442\u0438 \u0432 \u043c\u043e\u0435\u043c <a href=\"https:\/\/github.com\/megalloid\/I2C_Master_Controller\/blob\/main\/i2c_transactions_controller.v\">Github-\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438<\/a>.<\/p>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">\u0428\u0430\u0433 \u0448\u0435\u0441\u0442\u043e\u0439. \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0438\u0449\u0435\u043c \u0431\u0430\u0433\u0438<\/font><\/h2>\n<p>  \u0418\u0442\u0430\u043a. \u041c\u044b \u0441\u043e\u0431\u0440\u0430\u043b\u0438 \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0438 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u0434\u0435\u0431\u0430\u0433. \u0421\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0432\u0438\u0436\u0443 \u0434\u0432\u0430 \u2014 \u043f\u0440\u0438\u043f\u0430\u044f\u0442\u044c\u0441\u044f \u043a \u043d\u043e\u0436\u043a\u0430\u043c SDA \u0438 SCL \u0443 EEPROM \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c DSLogic \u0438\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0432 Quartus SignalTap \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438 \u043f\u043e JTAG \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442.<\/p>\n<p>  \u041a\u043e\u0440\u043e\u0442\u043a\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u0440\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431. \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c Signal Tap \u043c\u043e\u0436\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u043c\u0435\u043d\u044e:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/vd\/y7\/ub\/vdy7ub3hvczsnqhsjdx4km0bcbc.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/vd\/y7\/ub\/vdy7ub3hvczsnqhsjdx4km0bcbc.png\"\/><\/div>\n<p>  \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 \u0432 \u043e\u043a\u043d\u0435 \u044f \u0432\u044b\u0434\u0435\u043b\u0438\u043b \u043a\u0440\u0430\u0441\u043d\u044b\u043c:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/9d\/xp\/uz\/9dxpuzooweqyyxks9nybte1tp7a.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/9d\/xp\/uz\/9dxpuzooweqyyxks9nybte1tp7a.png\"\/><\/p>\n<p>  \u0412 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u0441\u0435\u043a\u0446\u0438\u0438 Clock. \u0422\u0443\u0442 \u044f \u0432\u044b\u0431\u0440\u0430\u043b \u043f\u043e\u0434\u0435\u043b\u0435\u043d\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u043e\u0442\u0443, \u0447\u0442\u043e\u0431\u044b \u043e\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0435\u043c\u043f\u043b\u043e\u0432 \u0442.\u043a. \u043f\u0430\u043c\u044f\u0442\u044c \u0437\u0430\u0445\u0432\u0430\u0442\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0430 \u0438 \u043d\u0430\u0434\u043e \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0451 \u0432\u043b\u0435\u0437\u043b\u043e. \u042d\u0442\u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 Sample depth.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u043a\u0438\u0434\u0430\u0442\u044c \u0432\u043e \u0432\u043a\u043b\u0430\u0434\u043a\u0435 Setup \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c\u044b\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0438 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e Basic OR \u0434\u043b\u044f \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u043e\u0432 \u043e\u0442 \u044d\u0442\u0438\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432. \u041f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u2014 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0434\u0443\u043b\u044c \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u044f \u043f\u043e\u043f\u0430\u043b \u0432 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0435 \u0438 \u043f\u0440\u043e\u0448\u0438\u0442\u044c \u0432 \u043f\u043b\u0430\u0442\u0443. <\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0442\u0440\u0438\u0433\u0433\u0435\u0440, \u044f \u0432\u044b\u0431\u0440\u0430\u043b \u043e\u0442 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 READ_STATE \u0438 WRITE_STATE. \u041c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c Run Analysis \u0434\u043b\u044f \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u043e\u0433\u043e \u0437\u0430\u0445\u0432\u0430\u0442\u0430 \u0438 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u0441\u0435\u043a\u0446\u0438\u044e Data \u043d\u0430\u0436\u0430\u0442\u044c \u043a\u043d\u043e\u043f\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/b6\/ey\/ui\/b6eyuinoighsmq_xpxmx1dmw_5m.png\" data-src=\"https:\/\/habrastorage.org\/webt\/b6\/ey\/ui\/b6eyuinoighsmq_xpxmx1dmw_5m.png\"\/><\/p>\n<p>  \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0432, \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0432\u0441\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <b>Read<\/b> \u043e\u0442\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u043a\u0430\u043a \u043d\u0443\u0436\u043d\u043e \u0442.\u0435. \u0447\u0438\u0442\u0430\u0435\u043c \u0438\u0437 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 0x02 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 0xCE. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <b>Write<\/b>. \u0417\u0430\u043f\u0438\u0448\u0435\u043c \u0432 \u044f\u0447\u0435\u0439\u043a\u0443 0x02 \u043d\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 0xF1:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/r8\/8x\/qm\/r88xqmvnakjorbf4s61gwpveddo.png\" data-src=\"https:\/\/habrastorage.org\/webt\/r8\/8x\/qm\/r88xqmvnakjorbf4s61gwpveddo.png\"\/><\/p>\n<p>  \u041a\u0430\u0436\u0435\u0442\u0441\u044f \u0432\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u0430\u043a \u043d\u0443\u0436\u043d\u043e. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 DSLogic \u043a \u043d\u043e\u0436\u043a\u0430\u043c EEPROM \u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b DSView \u0438 \u0434\u0435\u043a\u043e\u0434\u0435\u0440\u0430 I2C \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439.<\/p>\n<p>  \u041d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/vc\/ss\/rf\/vcssrf2iwfajfoxzakju69dxwu8.png\" data-src=\"https:\/\/habrastorage.org\/webt\/vc\/ss\/rf\/vcssrf2iwfajfoxzakju69dxwu8.png\"\/><\/p>\n<p>  \u041d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/vp\/i_\/yp\/vpi_ypultqbyuwxaadmztivzzvs.png\" data-src=\"https:\/\/habrastorage.org\/webt\/vp\/i_\/yp\/vpi_ypultqbyuwxaadmztivzzvs.png\"\/><\/p>\n<p>  \u041a\u0430\u0436\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u0441\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 Datasheet. \u041f\u043b\u044e\u0441\u043e\u043c \u0435\u0441\u043b\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u043d\u0430\u0436\u0438\u043c\u0430\u0442\u044c \u043a\u043d\u043e\u043f\u043a\u0438 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439, \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0438 \u0447\u0442\u0435\u043d\u0438\u044f \u2014 \u0442\u043e \u0432\u0441\u0435 \u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e. \u041d\u043e \u0441\u0442\u043e\u0438\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u0433\u043b\u0443\u0431\u0438\u0442\u044c\u0441\u044f \u0432 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u2014 \u0438 \u0441\u0445\u043e\u0434\u0443 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u0430\u0433\u043e\u0432. \u041f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044e \u0438\u0445.<\/p>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">\u0411\u0430\u0433 \u21161. \u041d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u0430 SCL<\/font><\/h2>\n<p>  \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u044e \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 390.62kHz:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/b9\/md\/mo\/b9mdmobgrp_7dd1lh2hucqzr3sq.png\" data-src=\"https:\/\/habrastorage.org\/webt\/b9\/md\/mo\/b9mdmobgrp_7dd1lh2hucqzr3sq.png\"\/><\/div>\n<p>  \u041f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043d\u0435 400kHz \u0440\u043e\u0432\u043d\u043e, \u043d\u043e \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0447\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u201c\u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f\u201d \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e. \u041c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0437\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0431\u0430\u0433. <\/p>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">\u0411\u0430\u0433 \u21162. \u041d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u0430\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 ACK-\u0431\u0438\u0442\u0430<\/font><\/h2>\n<p>  \u0412 \u0445\u043e\u0434\u0435 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439 \u2014 \u042f \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u0445\u0430\u043e\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 ACK-\u0431\u0438\u0442\u0430. \u041f\u043e\u043a\u0430 \u043d\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u043e\u0442\u043a\u0443\u0434\u0430 \u0431\u0435\u0440\u0435\u0442\u0441\u044f \u0432\u043e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438 \u0441 \u0436\u0435\u043b\u0435\u0437\u043e\u043c \u044d\u0442\u043e\u0442 \u043a\u043e\u0441\u044f\u043a. \u041d\u0430\u0434\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u0441\u043b\u0435.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/e9\/o8\/ek\/e9o8ekfrhmy1o0bz1u1k4pkby4o.png\" data-src=\"https:\/\/habrastorage.org\/webt\/e9\/o8\/ek\/e9o8ekfrhmy1o0bz1u1k4pkby4o.png\"\/><\/div>\n<p>  \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0433\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a \u044d\u0442\u043e\u043c\u0443 \u2014 \u043f\u0440\u0438 \u043f\u043e\u0434\u0430\u0447\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0434\u043b\u044f Slave-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0435\u0442 \u043d\u0430 \u0448\u0438\u043d\u0435 \u2014 \u043e\u0434\u0438\u043d \u0444\u0438\u0433 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0441\u0438\u0433\u043d\u0430\u043b ACK. <\/p>\n<p>  \u0414\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u044f \u043f\u043e\u043a\u0430 \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b. \u0414\u0443\u043c\u0430\u044e \u0432 \u043a\u043e\u043c\u043c\u0438\u0442\u0430\u0445 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441 \u043f\u043e \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0435.<\/p>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/font><\/h2>\n<p>  \u0412 \u0446\u0435\u043b\u043e\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0442.\u043a. \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430: <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/qe\/ip\/wj\/qeipwjjzkffh5t3s0fzbhv_pqu0.png\" data-src=\"https:\/\/habrastorage.org\/webt\/qe\/ip\/wj\/qeipwjjzkffh5t3s0fzbhv_pqu0.png\"\/><\/div>\n<p>  \u042d\u0442\u043e\u0442 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u043c\u043d\u0435 \u0434\u0430\u043b\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0446\u0435\u043d\u043e\u0439 \u2014 \u043a\u0443\u0447\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u043a\u0443\u0447\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u043e\u0442\u043b\u0430\u0434\u043a\u0443. \u041d\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u0442\u043e\u0438\u043b \u0442\u043e\u0433\u043e. \u041a\u0443\u0447\u0430 \u043e\u043f\u044b\u0442\u0430 \u0432 \u043e\u0442\u043b\u0430\u0434\u043a\u0435, \u0432 \u0440\u0430\u0437\u0431\u043e\u0440\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0447\u0430\u0441\u044b \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 RTL-\u0441\u0438\u043d\u0442\u0435\u0437\u0430. \u041a\u0430\u0436\u0435\u0442\u0441\u044f \u0431\u0430\u0437\u043e\u0432\u044b\u0439 Verilog-\u043a\u043e\u0434\u0438\u043d\u0433 \u0441\u0442\u0430\u043b \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043c\u043e\u0438\u0445 \u043a\u043e\u043c\u043f\u0435\u0442\u0435\u043d\u0446\u0438\u0439, \u043d\u043e \u0431\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e \u0435\u0441\u0442\u044c \u043a\u0443\u0434\u0430 \u0440\u0430\u0441\u0442\u0438. <\/p>\n<p>  \u0421\u0435\u0439\u0447\u0430\u0441 \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0435 \u043f\u043b\u0430\u043d\u044b:<\/p>\n<ul>\n<li>\u043f\u043e\u0444\u0438\u043a\u0441\u0438\u0442\u044c \u0431\u0430\u0433\u0438;<\/li>\n<li>\u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u043a\u043e\u0434 \u0432 Xilinx Vivado, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 Zynq Mini (\u043a\u043e\u0442\u043e\u0440\u0443\u044e \u044f \u043e\u0431\u043e\u0437\u0440\u0435\u0432\u0430\u043b \u0432 <a href=\"https:\/\/habr.com\/ru\/articles\/721146\/\">\u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a>);<\/li>\n<li>\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u043a AXI \u0448\u0438\u043d\u0435 \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441 \u043d\u0438\u043c \u0438\u0437 Linux.<\/li>\n<\/ul>\n<p>  \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441 \u044d\u0442\u0438\u043c\u0438 \u043f\u043b\u0430\u043d\u0430\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u0438\u0434\u0442\u0438 \u0434\u0430\u043b\u044c\u0448\u0435. \u0414\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0438 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445!<\/p>\n<p>  <b>P. S.<\/b> \u0417\u0430\u0431\u044b\u043b \u0441\u043a\u0430\u0437\u0430\u0442\u044c. \u0421\u0430\u043c\u043e\u0435 \u0434\u0443\u0440\u0430\u0446\u043a\u043e\u0435, \u0447\u0442\u043e \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u043e\u0441\u044c \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u2014 OLED-\u0434\u0438\u0441\u043f\u043b\u0435\u0439 SSD1306, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0430 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \u043f\u043e SPI \u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0442\u044c SPI-\u0430\u0432\u0442\u043e\u043c\u0430\u0442 ?. \u0422\u0430\u043a \u0447\u0442\u043e \u0431\u0443\u0434\u0443 \u043f\u043e \u0432\u0441\u0435\u0439 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u0435\u0449\u0435 \u0438 \u0435\u0433\u043e ?<\/p>\n<hr\/>\n<p>  <\/p>\n<h4><font color=\"#454cee\">\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0437\u0430\u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0438 \u044d\u0442\u043e:<\/font><\/p>\n<ul>\n<li>\u27a4 <a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/784500\/\">IR remote control, \u0430 \u0431\u0435\u0437 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u043c\u043e\u0436\u043d\u043e? \u0414\u0430 \u043d\u0435 \u0432\u043e\u043f\u0440\u043e\u0441<\/a><\/li>\n<li>\u27a4 <a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/763102\/\">\u041a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u043e\u0442\u043e\u0432\u0443\u044e \u0441\u0435\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430 AMPS \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 SDR<\/a><\/li>\n<li>\u27a4 <a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/748594\/\">Hello World \u043d\u0430 Tang Primer 20K \u043f\u043e\u0434 Linux<\/a><\/li>\n<li>\u27a4 <a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/784408\/\">\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u0445 \u0441 \u0413\u0430\u0440\u0432\u0430\u0440\u0434\u0441\u043a\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043e\u0439: \u043a\u0430\u043a \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0431\u0435\u0437 \u0437\u043d\u0430\u043d\u0438\u044f ABI?<\/a><\/li>\n<li>\u27a4 <a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/784730\/\">Atomic Heart \u0438\u043b\u0438 \u043a\u0430\u043a \u0437\u0430\u0431\u0438\u043b\u043e\u0441\u044c \u0441\u0435\u0440\u0434\u0446\u0435 \u0440\u0443\u0441\u0441\u043a\u043e\u0433\u043e \u0433\u0435\u0439\u043c\u0434\u0435\u0432\u0430<\/a><\/li>\n<\/ul>\n<p>  <a href=\"https:\/\/timeweb.cloud\/vds-vps?utm_source=habr&amp;utm_medium=banner&amp;utm_campaign\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/b5\/pj\/of\/b5pjofdoxth14ro-rjsrn7sbmiy.png\" data-src=\"https:\/\/habrastorage.org\/webt\/b5\/pj\/of\/b5pjofdoxth14ro-rjsrn7sbmiy.png\"\/><\/a><\/h4>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/785746\/\"> https:\/\/habr.com\/ru\/articles\/785746\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u042f <a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/776992\/\">\u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b<\/a> \u0431\u0438\u0442\u043e\u0432\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 I2C Master \u2014 \u0443\u0436 \u043e\u0447\u0435\u043d\u044c \u0447\u0435\u0441\u0430\u043b\u0438\u0441\u044c \u0440\u0443\u043a\u0438 \u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0443\u0440\u043e\u0432\u043d\u0438 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 \u043e\u0442 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0431\u0438\u0442\u0430\u043c\u0438 \u0438 \u0443\u0436\u0435 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442 \u043a \u043a\u0430\u043a\u043e\u043c\u0443-\u043b\u0438\u0431\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044e \u0441 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u044b\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c. \u042f \u043f\u043e\u0434\u0443\u043c\u0430\u043b, \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043a\u043b\u0430\u0441\u0441\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0441\u0432\u043e\u0435\u0433\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0430 \u0432\u043e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438 \u0441 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u0439 I2C 2K-bit EEPROM.<\/p>\n<p>  \u0418\u0434\u0435\u044f \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u2014 \u0447\u0438\u0442\u0430\u0435\u043c \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u044e \u043a\u043b\u0430\u0432\u0438\u0448 \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043e\u0442\u043b\u0430\u0434\u043e\u043a \u0441 Cyclone IV, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b \u0432 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u0441\u0432\u043e\u0438\u0445 \u043e\u0431\u0437\u043e\u0440\u043e\u0432. <\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0432\u0430\u043c \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c \u2014 \u0434\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c, \u0441 \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u0435\u043c \u0438 \u0432 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u043c\u043d\u0435 \u043c\u0430\u043d\u0435\u0440\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u0447\u0435\u0433\u043e \u043c\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f, \u0430 \u0447\u0435\u0433\u043e \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c. ?<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/pc\/ov\/06\/pcov06q63nkdqpxpflfdb4frhbg.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/pc\/ov\/06\/pcov06q63nkdqpxpflfdb4frhbg.png\"\/><\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-365036","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/365036","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=365036"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/365036\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=365036"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=365036"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=365036"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}