{"id":371514,"date":"2024-05-21T04:50:34","date_gmt":"2024-05-21T04:50:34","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=371514"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2024-05-21T04:50:34","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=371514","title":{"rendered":"<span>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0443\u0440\u044b \u043d\u0435\u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u043c: Yosys, SpinalHDL, VexRiscv (\u0447. 2)<\/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-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u042d\u0442\u043e \u0432\u0442\u043e\u0440\u0430\u044f \u0438 \u0437\u0430\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438. <a href=\"https:\/\/habr.com\/ru\/articles\/801191\/\" rel=\"noopener noreferrer nofollow\">\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u044c\u044e \u043c\u043e\u0436\u043d\u043e \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435<\/a>. <\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043f\u0440\u0435\u043b\u0435\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u041f\u041b\u0418\u0421, \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c,  \u0447\u0442\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0443\u0440\u044b \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0435\u0433\u043e  \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438: \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0430 \u043a\u043e\u0434\u0430 \u043a\u0430\u043a \u0442\u0435\u043a\u0441\u0442\u0430 \u043d\u0430 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445  \u044f\u0437\u044b\u043a\u0430\u0445 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0443\u0440\u044b (HDL); \u043a\u043e\u0434 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435  \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 (IP-\u0431\u043b\u043e\u043a\u043e\u0432), \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0435\u0433\u043e \u043b\u0435\u0433\u043a\u043e  \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445; \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u0430\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0431\u0448\u0438\u0440\u043d\u044b\u043c  \u043a\u043e\u043b\u043b\u0435\u043a\u0442\u0438\u0432\u043e\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0432\u0435\u0440\u0441\u0438\u0439, \u0442\u0430\u043a\u043e\u0439 \u0436\u0435, \u043a\u0430\u043a \u0443  \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432 (Git); \u0438, \u043a\u0430\u043a \u0438 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438, \u043d\u0438\u0447\u0442\u043e\u0436\u043d\u043e \u043d\u0438\u0437\u043a\u0430\u044f  \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u0435\u0441\u043b\u0438 \u043f\u0440\u0438  \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043d\u0435\u0441\u0435\u0442 \u0432\u043f\u043e\u043b\u043d\u0435  \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u0442\u0440\u0430\u0442\u044b \u043d\u0430 \u0441\u0431\u043e\u0440\u043a\u0443 \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u0438\u0437\u0434\u0435\u043b\u0438\u044f,  \u0438 \u043b\u044e\u0431\u0430\u044f  \u0441\u0445\u0435\u043c\u043e\u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u0438\u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u0430 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u043f\u0435\u0447\u0430\u0442\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u044b \u2014 \u044d\u0442\u043e  \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u044b\u0445\u043e\u0434 \u043d\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u0443\u044e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e \u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u0435 \u043d\u0430 \u0434\u0435\u043d\u044c\u0433\u0438, \u0442\u043e \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441  \u041f\u041b\u0418\u0421 \u043e\u0448\u0438\u0431\u043a\u0438 \u043d\u0438\u0447\u0442\u043e\u0436\u043d\u044b \u043f\u043e \u0441\u0432\u043e\u0435\u0439 \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u0438 \u0438 \u043b\u0435\u0433\u043a\u043e \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u043c\u044b. \u0418 \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432  \u0441\u0435\u0440\u0438\u0439\u043d\u043e\u043c \u0438\u0437\u0434\u0435\u043b\u0438\u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u0430, \u0442\u043e \u0435\u0451 \u0432\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043c\u043e\u0436\u043d\u043e  \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u0442\u044c \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u044b\u043c \u0430\u043f\u0433\u0440\u0435\u0439\u0434\u043e\u043c \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u00ab\u0432 \u043f\u043e\u043b\u0435\u00bb \u0431\u0435\u0437 \u0437\u0430\u043c\u0435\u043d\u044b \u0438\u0437\u0434\u0435\u043b\u0438\u044f.  \u041a\u043e\u0440\u043e\u0447\u0435, \u0441 \u043f\u0440\u0438\u0445\u043e\u0434\u043e\u043c \u041f\u041b\u0418\u0421 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0443\u0440\u044b \u0432\u0441\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0438  \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0430 \u044d\u0442\u043e, \u043f\u043e\u043c\u0438\u043c\u043e \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0447\u0435\u0433\u043e,  \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u043e\u043d\u0438\u0436\u0430\u0435\u0442 \u043f\u043e\u0440\u043e\u0433 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0432 \u0442\u0435\u043c\u0443, \u0438 \u0432\u0441\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432  \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438 \u00ab\u0436\u0435\u043b\u0435\u0437\u0430\u00bb. \u0410 \u043d\u043e\u0432\u044b\u0435 \u043b\u044e\u0434\u0438, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c,  \u043f\u0440\u0438\u043d\u043e\u0441\u044f\u0442 \u0441 \u0441\u043e\u0431\u043e\u0439 \u0432 \u0438\u043d\u0434\u0443\u0441\u0442\u0440\u0438\u044e \u043d\u043e\u0432\u044b\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044b \u0438 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b.<\/p>\n<p>\u0412 \u044d\u0442\u043e\u0439  \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441\u0432\u043e\u0438\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043e\u043f\u044b\u0442\u043e\u043c \u00ab\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\u00bb  \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c \u041f\u041b\u0418\u0421 \u0438 \u0442\u0435\u043c, \u043a\u0430\u043a \u044f \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u043f\u043e\u0433\u0440\u0443\u0436\u0430\u043b\u0441\u044f \u0432 \u0442\u0435\u043c\u0443 \u041f\u041b\u0418\u0421\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430.  \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u044f \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0441\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0437\u0430\u043c\u0435\u0442\u043a\u0443 \u043f\u0440\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0443\u043b\u0447\u0435\u0439\u043d  \u0434\u043b\u044f \u0441\u0438\u043d\u0442\u0435\u0437\u0430 Yosys. \u041f\u043e\u0442\u043e\u043c \u2014 \u043f\u0440\u043e \u044f\u0437\u044b\u043a SpinalHDL \u0438 \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u0443\u0435\u043c\u043e\u0435  \u043c\u0438\u043a\u0440\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u043e\u0435 \u044f\u0434\u0440\u043e VexRiscv, \u043d\u0430 \u043d\u0451\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0435. \u041f\u043e\u0442\u043e\u043c \u2014 \u043f\u0440\u043e \u0437\u0430\u043c\u0435\u043d\u0443  \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0430\u043c\u0438 \u041f\u041b\u0418\u0421 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043c\u043e\u0435\u0439 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u044b  \u00ab\u041a\u0430\u0440\u043d\u043e\u00bb. \u041d\u043e \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u044f \u043f\u043e\u0433\u0440\u0443\u0437\u0438\u043b\u0441\u044f \u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f Hardware  Description Languages (HDL), \u0438 \u043a\u043e\u0433\u0434\u0430 \u044f \u043d\u0430\u0447\u0430\u043b \u043f\u0438\u0441\u0430\u0442\u044c, \u041e\u0441\u0442\u0430\u043f\u0430, \u043a\u0430\u043a \u044d\u0442\u043e  \u0447\u0430\u0441\u0442\u043e \u0431\u044b\u0432\u0430\u0435\u0442, \u043f\u043e\u043d\u0435\u0441\u043b\u043e&#8230; \u0412 \u043e\u0431\u0449\u0435\u043c, \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0442\u043e, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c.  <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c24\/736\/2e4\/c247362e45ed7dff417bff7682e21a21.png\" width=\"944\" height=\"607\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c24\/736\/2e4\/c247362e45ed7dff417bff7682e21a21.png\"\/><\/figure>\n<p> <strong>\u0421\u041e\u0414\u0415\u0420\u0416\u0410\u041d\u0418\u0415<\/strong><\/p>\n<p>1. \u041a\u0440\u0430\u0442\u043a\u0438\u0439 \u044d\u043a\u0441\u043a\u0443\u0440\u0441 \u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u044e<\/p>\n<p>2. \u041f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432<\/p>\n<p>3. \u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c \u041f\u041b\u0418\u0421<\/p>\n<p>4. \u0421\u0438\u043d\u0442\u0435\u0437 \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u0445 \u0441\u0445\u0435\u043c \u0434\u043b\u044f \u041f\u041b\u0418\u0421<\/p>\n<p>5. Yosys Open SYnthesis Suite<\/p>\n<p>6. \u041a\u0430\u043a \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u0442\u0443\u043b\u0447\u0435\u0439\u043d\u0430 Yosys<\/p>\n<p>7. \u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u0442\u0443\u043b\u0447\u0435\u0439\u043d\u0430 Yosys<\/p>\n<p> 7.1. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u00abbasics-graphics-music\u00bb<\/p>\n<p> 7.2 \u041b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u00ab01_and_or_not_xor_de_morgan\u00bb<\/p>\n<p> 7.3 \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0431\u0438\u0442\u0441\u0442\u0440\u0438\u043c\u0430 \u0432 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0443 \u041f\u041b\u0418\u0421<\/p>\n<p>8. \u0422\u0438\u043f\u043e\u0432\u043e\u0439 Makefile \u0434\u043b\u044f \u0441\u0438\u043d\u0442\u0435\u0437\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Yosys<\/p>\n<p>9. \u0424\u0430\u0439\u043b \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 (LPF, PCF, CST)<\/p>\n<p>10. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 Yosys<\/p>\n<p> 10.1 \u041c\u0430\u043a\u0440\u043e YOSYS<\/p>\n<p> 10.2 \u041c\u043d\u043e\u0433\u043e\u043c\u0435\u0440\u043d\u044b\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432<\/p>\n<p> 10.3 \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u043e\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0432 \u0441\u0442\u0435\u043f\u0435\u043d\u044c ($POW) \u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 **<\/p>\n<p> 10.4 \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u0438\u0433\u043d\u0430\u043b\u0443, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u043c\u0443 \u0437\u0430 \u0435\u0451 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438<\/p>\n<p> 10.5 \u0421\u0438\u0433\u043d\u0430\u043b\u044b \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0438\u043b\u0438 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0438<\/p>\n<p> 10.6 \u0421\u043b\u043e\u0436\u043d\u044b\u0435 \u0431\u0438\u0442\u043e\u0432\u044b\u0435 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0438 \u0438\u043d\u043e\u0433\u0434\u0430 \u043c\u043e\u0433\u0443\u0442 \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443 \u043e loopback-\u0430\u0445<\/p>\n<p> 10.7 \u0413\u043b\u043e\u0431\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432<\/p>\n<p>11. \u0410\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0442 \u0442\u0443\u043b\u043e\u0432<\/p>\n<p> 11.1 \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0442 \u0443\u0442\u0438\u043b\u0438\u0442\u044b yosys<\/p>\n<p> 11.2 \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0442 \u0443\u0442\u0438\u043b\u0438\u0442\u044b nextpnr<\/p>\n<p>12. \u0421\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u0443\u0435\u043c\u0430\u044f \u042d\u0412\u041c<\/p>\n<p> 12.1 \u0421\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u0443\u0435\u043c\u043e\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u044f\u0434\u0440\u043e VexRiscv<\/p>\n<p> 12.2 \u0421\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b-\u043d\u0430-\u043a\u0440\u0438\u0441\u0442\u0430\u043b\u043b\u0435 \u043d\u0430 \u0431\u0430\u0437\u0435 VexRiscv<\/p>\n<p>13. \u042f\u0437\u044b\u043a \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0443\u0440\u044b SpinalHDL<\/p>\n<p> 13.1 \u0411\u0430\u0437\u043e\u0432\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u044f\u0437\u044b\u043a\u0430 SpinalHDL<\/p>\n<p> 13.2 FSM, \u043f\u043e\u0442\u043e\u043a\u0438, \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u044b, \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0435 \u0434\u043e\u043c\u0435\u043d\u044b<\/p>\n<p> 13.3 \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 SpinalHDL<\/p>\n<p> 13.4 \u0420\u0430\u0437\u0431\u043e\u0440 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 SpinalTemplateSbt<\/p>\n<p> 13.5 \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 Makefile-\u0430 \u0434\u043b\u044f \u0441\u0438\u043d\u0442\u0435\u0437\u0430 \u0438\u0437 SpinalHDL \u0432 \u0431\u0438\u0442\u0441\u0442\u0440\u0438\u043c<\/p>\n<p> 13.6 \u0410\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0432\u044b\u0432\u043e\u0434 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 SpinalHDL<\/p>\n<p> 13.7 \u0421\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u0438 \u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0432 SpinalHDL<\/p>\n<p>14. \u0421\u0438\u043d\u0442\u0435\u0437 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u044f\u0434\u0440\u0430 VexRiscv<\/p>\n<p> 14.1 \u0417\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u043e \u0441 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u043c VexRiscv<\/p>\n<p> 14.2 \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0434\u043b\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b RISC-V<\/p>\n<p> 14.3 \u041f\u043e\u0434\u0433\u043e\u0442\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c Makefile, LPF \u0438 toplevel.v<\/p>\n<p> 14.4 \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u043e\u0447\u043a\u0443 \u0432\u0445\u043e\u0434\u0430 \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0421\u043d\u041a Murax \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u044b \u00ab\u041a\u0430\u0440\u043d\u043e\u00bb<\/p>\n<p> 14.5 \u041c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u043c \u043a\u043e\u0434 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u00abhello_world\u00bb<\/p>\n<p> 14.6 \u0421\u0431\u043e\u0440\u043a\u0430 \u0421\u043d\u041a Murax \u0438 \u044f\u0434\u0440\u0430 VexRiscv<\/p>\n<p> 14.7 \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0421\u043d\u041a Murax \u043d\u0430 \u041f\u041b\u0418\u0421 \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c \u00abhello_world\u00bb<\/p>\n<p><a href=\"#15\" rel=\"noopener noreferrer nofollow\">15. \u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u0421\u043d\u041a Murax \u0438 \u044f\u0434\u0440\u0430 VexRiscv<\/a><\/p>\n<p> <a href=\"#15.1\" rel=\"noopener noreferrer nofollow\">15.1 \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0421\u043d\u041a Murax<\/a><\/p>\n<p> <a href=\"#15.2\" rel=\"noopener noreferrer nofollow\">15.2 \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u044f\u0434\u0440\u0430 VexRiscv<\/a><\/p>\n<p> <a href=\"#15.3\" rel=\"noopener noreferrer nofollow\">15.3 \u041f\u043b\u0430\u0433\u0438\u043d\u044b \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u044f\u0434\u0440\u0430 VexRiscv<\/a><\/p>\n<p><a href=\"#16\" rel=\"noopener noreferrer nofollow\">16. \u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b \u0441 \u044f\u0434\u0440\u043e\u043c VexRiscv \u0438 \u0421\u043d\u041a Murax<\/a><\/p>\n<p> <a href=\"#16.1\" rel=\"noopener noreferrer nofollow\">16.1 \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 RegFilePlugin<\/a><\/p>\n<p> <a href=\"#16.2\" rel=\"noopener noreferrer nofollow\">16.2 \u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u0442\u0430\u043a\u0442\u043e\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u044f\u0434\u0440\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 PLL<\/a><\/p>\n<p> <a href=\"#16.3\" rel=\"noopener noreferrer nofollow\">16.3 \u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0441\u0434\u0432\u0438\u0433\u0430<\/a><\/p>\n<p><a href=\"#17\" rel=\"noopener noreferrer nofollow\">17. \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u0432\u043e\u0438 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0438 (IP-\u0431\u043b\u043e\u043a\u0438)<\/a><\/p>\n<p> <a href=\"#17.1\" rel=\"noopener noreferrer nofollow\">17.1 \u041c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u043d\u044b\u0439 \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0439 \u0442\u0430\u0439\u043c\u0435\u0440 MTIME<\/a><\/p>\n<p> <a href=\"#17.2\" rel=\"noopener noreferrer nofollow\">17.2 \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0443 SRAM<\/a><\/p>\n<p><a href=\"#17.2.1\" rel=\"noopener noreferrer nofollow\">17.2.1 \u0420\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 SRAM<\/a><\/p>\n<p><a href=\"#17.2.2\" rel=\"noopener noreferrer nofollow\">17.2.2 \u0422\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c \u043f\u0430\u043c\u044f\u0442\u044c \u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 SRAM<\/a><\/p>\n<p><a href=\"#17.2.3\" rel=\"noopener noreferrer nofollow\">17.2.3 \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c SRAM \u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 malloc<\/a><\/p>\n<p><a href=\"#17.2.4\" rel=\"noopener noreferrer nofollow\">17.2.4 \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0431\u043b\u043e\u043a\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u0435\u0439 Div \u0438 Mul<\/a><\/p>\n<p><a href=\"#17.2.5\" rel=\"noopener noreferrer nofollow\">17.2.5 \u0417\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e printf<\/a><\/p>\n<p> <a href=\"#17.3\" rel=\"noopener noreferrer nofollow\">17.3 \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 PLIC<\/a><\/p>\n<p><a href=\"#17.3.1\" rel=\"noopener noreferrer nofollow\">17.3.1 \u0420\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 MicroPLIC<\/a><\/p>\n<p><a href=\"#17.3.2\" rel=\"noopener noreferrer nofollow\">17.3.2 \u0417\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 MicroPLIC \u0438\u0437 \u0421\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b<\/a><\/p>\n<p> <a href=\"#17.4\" rel=\"noopener noreferrer nofollow\">17.4 \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 FastEthernet (MAC)<\/a><\/p>\n<p><a href=\"#17.4.1\" rel=\"noopener noreferrer nofollow\">17.4.1 \u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 Ethernet<\/a><\/p>\n<p><a href=\"#17.4.2\" rel=\"noopener noreferrer nofollow\">17.4.2 \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 MacEth<\/a><\/p>\n<p><a href=\"#17.4.3\" rel=\"noopener noreferrer nofollow\">17.4.3 \u0420\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 MacEth<\/a><\/p>\n<p><a href=\"#17.4.4\" rel=\"noopener noreferrer nofollow\">17.4.4 \u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441 \u0432 DHCP \u0441\u0435\u0440\u0432\u0435\u0440<\/a><\/p>\n<p><a href=\"#18\" rel=\"noopener noreferrer nofollow\">18. \u041f\u043e\u0442\u0430\u043a\u0442\u043e\u0432\u0430\u044f \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u0421\u043d\u041a Murax<\/a><\/p>\n<p><a href=\"#19\" rel=\"noopener noreferrer nofollow\">19. \u0411\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440: VexRiscvWithHUB12ForKarnix<\/a><\/p>\n<p><a href=\"#20\" rel=\"noopener noreferrer nofollow\">20. \u042d\u043f\u0438\u043b\u043e\u0433<\/a><\/p>\n<p><a href=\"#links\" rel=\"noopener noreferrer nofollow\">\u0421\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438<\/a><\/p>\n<p><a class=\"anchor\" name=\"15\" id=\"15\"><\/a><\/p>\n<h2> 15. \u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u0421\u043d\u041a Murax \u0438 \u044f\u0434\u0440\u0430 VexRiscv<\/h2>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0438 \u043f\u0435\u0440\u0435\u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0421\u043d\u041a Murax \u0438 \u0421\u0438\u0448\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0434\u043b\u044f \u043d\u0435\u0433\u043e, \u043d\u0430\u0441\u0442\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0433\u0440\u0443\u0437\u0438\u0442\u044c\u0441\u044f \u0432 \u0434\u0435\u0442\u0430\u043b\u0438 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a \u043a\u043e\u0434 \u0421\u043d\u041a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 SpinalHDL, \u043a\u0430\u043a \u0437\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u044f\u0434\u0440\u0430 VexRiscv \u0438 \u043a\u0430\u043a \u043a \u043d\u0435\u043c\u0443 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u0430\u044f \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u044f.<\/p>\n<p><a class=\"anchor\" name=\"15.1\" id=\"15.1\"><\/a><\/p>\n<h3> 15.1 \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0421\u043d\u041a Murax<\/h3>\n<p>\u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u043a\u043e\u0434 \u0421\u043d\u041a Murax \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\u0435 <strong>.\/src\/main\/scala\/vexriscv\/demo\/Murax.scala<\/strong>, \u0432\u044b\u0448\u0435 \u043c\u044b \u0443\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u043b\u0438 \u0441\u0432\u043e\u0439 \u043a\u043e\u0434 \u0432 \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u2014 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u0432\u0445\u043e\u0434\u0430 \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438. \u0421\u0435\u0439\u0447\u0430\u0441 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0433\u043b\u0443\u0431\u0436\u0435.<\/p>\n<p>\u0421\u043d\u041a Murax \u043f\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 \u0421\u043d\u041a Briey, \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0430 <a href=\"https:\/\/habr.com\/ru\/articles\/801191\/#fig20\" rel=\"noopener noreferrer nofollow\">\u0440\u0438\u0441. 20<\/a>, \u043d\u043e \u0432\u043c\u0435\u0441\u0442\u043e <strong>AxiCrossbar<\/strong>  \u0432 \u0421\u043d\u041a Murax \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <strong>PipelinedMemoryBus<\/strong>.<\/p>\n<p>\u0412\u0435\u0441\u044c \u043a\u043e\u0434 \u0421\u043d\u041a Murax \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u0438\u043c \u043a\u043b\u0430\u0441\u0441\u043e\u043c <strong>Murax<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0430 <strong>Component<\/strong>, \u0442.\u00a0\u0435. Murax \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u043c. \u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u043a\u043b\u0430\u0441\u0441\u0430 Murax \u0438\u043c\u0435\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <strong>config<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439 \u0442\u0438\u043f\u0430 <strong>MuraxConfig<\/strong>, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0439 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0421\u043d\u041a (\u0442\u0430\u043a\u0442\u043e\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u043e\u0442\u0443, \u0440\u0430\u0437\u043c\u0435\u0440 \u041e\u0417\u0423 \u0438 \u0442.\u0434.)<\/p>\n<pre><code class=\"scala\">case class Murax(config : MuraxConfig) extends Component{    import config._    ...<\/code><\/pre>\n<p>\u041a\u0430\u043a \u0438 \u0443 \u0432\u0441\u044f\u043a\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430, \u0443 Murax \u0435\u0441\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0432\u0432\u043e\u0434\u0430\/\u0432\u044b\u0432\u043e\u0434\u0430, \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0441\u0431\u0440\u043e\u0441\u0430 \u0438 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f:<\/p>\n<pre><code class=\"scala\">  val io = new Bundle {      \/\/Clocks \/ reset      val asyncReset = in Bool()      val mainClk = in Bool()      \/\/Main components IO      val jtag = slave(Jtag())      \/\/Peripherals IO      val gpioA = master(TriStateArray(gpioWidth bits))      val uart = master(Uart())      val xip = ifGen(genXip)(master(SpiXdrMaster(xipConfig.ctrl.spi)))    } <\/code><\/pre>\n<p>\u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f <strong>ifGen(genXip)<\/strong> \u0434\u043e\u0431\u0430\u0432\u0438\u0442 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0437\u0430 \u043d\u0435\u0439 \u043a\u043e\u0434\u0430, \u0435\u0441\u043b\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <strong>genXip<\/strong> \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <strong>True<\/strong>. XiP \u044d\u0442\u043e \u0444\u043b\u044d\u0448 \u043f\u0430\u043c\u044f\u0442\u044c \u0441 SPI \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u00abeXecution In Place\u00bb \u2014 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u043f\u0440\u044f\u043c\u043e \u0438\u0437 \u0444\u043b\u044d\u0448 \u043f\u0430\u043c\u044f\u0442\u0438. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u043d\u0430 \u043d\u0435 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0430.<\/p>\n<p>Murax \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0434\u0432\u0430 \u0434\u043e\u043c\u0435\u043d\u0430 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f:<\/p>\n<pre><code class=\"scala\">  val systemClockDomain = ClockDomain(      clock = io.mainClk,      reset = resetCtrl.systemReset,      frequency = FixedFrequency(coreFrequency)    )    val debugClockDomain = ClockDomain(      clock = io.mainClk,      reset = resetCtrl.mainClkReset,      frequency = FixedFrequency(coreFrequency)    )  <\/code><\/pre>\n<p>\u0414\u043e\u043c\u0435\u043d \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f  <strong>debugClockDomain<\/strong> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 JTAG \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0438 \u0432\u0441\u0435 \u0447\u0442\u043e \u0441 \u043d\u0438\u043c \u0441\u0432\u044f\u0437\u0430\u043d\u043e. \u0412\u0441\u044f \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u044f, \u0430 \u0442\u0430\u043a\u0436\u0435 \u044f\u0434\u0440\u043e VexRiscv \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u0434\u043e\u043c\u0435\u043d\u0435 <strong>systemClockDomain<\/strong>. \u0414\u0430\u043b\u0435\u0435 \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u043c\u0435\u043d <strong>systemClockDomain<\/strong>.<\/p>\n<p>\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u044b\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c \u0434\u043e\u043c\u0435\u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0448\u0438\u043d\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <strong>PipelinedMemoryBus<\/strong>, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0448\u0438\u043d\u043d\u044b\u0439 \u0430\u0440\u0431\u0438\u0442\u0440 <strong>MuraxMasterArbiter<\/strong>:<\/p>\n<pre><code class=\"scala\">    val mainBusArbiter = new MuraxMasterArbiter(pipelinedMemoryBusConfig, bigEndianDBus) <\/code><\/pre>\n<p>\u0410\u0440\u0431\u0438\u0442\u0440 \u0438\u043c\u0435\u0435\u0442 \u0442\u0440\u0438 \u043f\u043e\u0440\u0442\u0430: \u0434\u0432\u0430 \u0432\u0435\u0434\u043e\u043c\u044b\u0445 (slave) \u043f\u043e\u0440\u0442\u0430 \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u044f\u0434\u0440\u0443 VexRiscv (\u043f\u043e\u0440\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 <strong>iBus<\/strong> \u0438 \u043f\u043e\u0440\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 <strong>dBus<\/strong>) \u0438 \u043e\u0434\u0438\u043d \u043f\u043e\u0440\u0442 \u043c\u0430\u0441\u0442\u0435\u0440 <strong>MainBus<\/strong>.<\/p>\n<pre><code class=\"scala\">    val mainBusMapping = ArrayBuffer[(PipelinedMemoryBus,SizeMapping)]()<\/code><\/pre>\n<p> \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u044f\u0434\u0440\u0430 VexRiscv \u043a \u0430\u0440\u0431\u0438\u0442\u0440\u0443 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0437\u0430\u0442\u0435\u0439\u043b\u0438\u0432\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u043d\u0441\u0442\u0430\u043d\u0446\u0438\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043a\u043b\u0430\u0441\u0441 <strong>VexRiscv<\/strong> \u0441 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435\u0439 \u0435\u043c\u0443 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 <strong>VexRiscvConfig<\/strong> \u2014 \u043e\u043d\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a\u0438\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u044b\/\u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u044b:<\/p>\n<pre><code class=\"scala\">    \/\/Instanciate the CPU      val cpu = new VexRiscv(          config = VexRiscvConfig(          plugins = cpuPlugins += new DebugPlugin(debugClockDomain, hardwareBreakpointCount)        )      ) <\/code><\/pre>\n<p> \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e, \u0432 \u0446\u0438\u043a\u043b\u0435 \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0435 \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u044f\u0434\u0440\u043e VexRiscv, \u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u043b\u0430\u0433\u0438\u043d \u043b\u0438\u043d\u043a\u0443\u0435\u0442\u0441\u044f \u0441 \u0448\u0438\u043d\u0430\u043c\u0438 <strong>iBus<\/strong> \u0438 <strong>dBus<\/strong> &#8212; \u043e\u043d\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 \u0442\u0438\u043f\u0430 <strong>Stream<\/strong>. \u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e <strong>Stream<\/strong> \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 <strong>cmd<\/strong> \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0438 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 <strong>rsp<\/strong> \u0434\u043b\u044f \u043e\u0442\u0432\u0435\u0442\u0430. \u041b\u0438\u043d\u043a\u043e\u0432\u043a\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430\u043c\u0438 <strong>&lt;><\/strong>, <strong>&lt;&lt;<\/strong> \u0438\u043b\u0438 <strong>>><\/strong>, \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"scala\">    \/\/Checkout plugins used to instanciate the CPU to connect them to the SoC      val timerInterrupt = False      val externalInterrupt = False      for(plugin &lt;- cpu.plugins) plugin match{        case plugin : IBusSimplePlugin =>          mainBusArbiter.io.iBus.cmd &lt;> plugin.iBus.cmd          mainBusArbiter.io.iBus.rsp &lt;> plugin.iBus.rsp        case plugin : DBusSimplePlugin => {          if(!pipelineDBus)            mainBusArbiter.io.dBus &lt;> plugin.dBus          else {            mainBusArbiter.io.dBus.cmd &lt;&lt; plugin.dBus.cmd.halfPipe()            mainBusArbiter.io.dBus.rsp &lt;> plugin.dBus.rsp          }        }        case plugin : CsrPlugin        => {          plugin.externalInterrupt := externalInterrupt          plugin.timerInterrupt := timerInterrupt        }        case plugin : DebugPlugin         => plugin.debugClockDomain{          resetCtrl.systemReset setWhen(RegNext(plugin.io.resetOut))          io.jtag &lt;> plugin.io.bus.fromJtag()        }        case _ =>      }  <\/code><\/pre>\n<p> \u0414\u043b\u044f \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a <strong>CsrPlugin<\/strong> \u0438 <strong>DebugPlugin<\/strong> \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043b\u0438\u043d\u043a\u043e\u0432\u043a\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432, \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u044b  <strong>externalInterrupt<\/strong>, <strong>timerInterrupt<\/strong> \u0438  <strong>io.jtag<\/strong>.<\/p>\n<p>\u0421 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0430\u0440\u0431\u0438\u0442\u0440\u0430 \u043a \u0448\u0438\u043d\u0435 <strong>MainBus<\/strong> \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0448\u0438\u043d\u0430 \u043d\u0430\u0431\u043e\u0440\u0442\u043d\u043e\u0433\u043e \u041e\u0417\u0423 <strong>ram<\/strong> \u0442\u0438\u043f\u0430  <strong>MuraxPipelinedMemoryBusRam<\/strong> \u0438 \u043c\u043e\u0441\u0442 <strong>apbBridge<\/strong> \u0442\u0438\u043f\u0430 <strong>PipelinedMemoryBusToApbBridge<\/strong><\/p>\n<pre><code class=\"scala\">\/\/****** MainBus slaves ********      val mainBusMapping = ArrayBuffer[(PipelinedMemoryBus,SizeMapping)]()      val ram = new MuraxPipelinedMemoryBusRam(        onChipRamSize = onChipRamSize,        onChipRamHexFile = onChipRamHexFile,        pipelinedMemoryBusConfig = pipelinedMemoryBusConfig,        bigEndian = bigEndianDBus      )      mainBusMapping += ram.io.bus -> (0x80000000l, onChipRamSize)       val apbBridge = new PipelinedMemoryBusToApbBridge(        apb3Config = Apb3Config(          addressWidth = 20,          dataWidth = 32        ),        pipelineBridge = pipelineApbBridge,        pipelinedMemoryBusConfig = pipelinedMemoryBusConfig      )      mainBusMapping += apbBridge.io.pipelinedMemoryBus -> (0xF0000000l, 1 MB) <\/code><\/pre>\n<p>\u0428\u0438\u043d\u0435 \u041e\u0417\u0423 \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 <strong>0x80000000<\/strong> \u0438 \u0434\u043b\u0438\u043d\u043e\u0439 <strong>onChipRamSize<\/strong>. \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <strong>\u043enChipRamSize<\/strong> \u2014  \u044d\u0442\u043e \u0447\u043b\u0435\u043d \u043a\u043b\u0430\u0441\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0438\u043d\u0441\u0442\u0430\u043d\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043a\u043b\u0430\u0441\u0441\u0430 <strong>Murax<\/strong> \u0432 \u0442\u043e\u0447\u043a\u0435 \u0432\u0445\u043e\u0434\u0430. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u044b \u00ab\u041a\u0430\u0440\u043d\u043e\u00bb, \u043e\u043d\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0430 \u0432 96 \u041a\u0411 (\u0441\u043c. \u0433\u043b\u0430\u0432\u0443 \u00ab<em>14.4 \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u043e\u0447\u043a\u0443 \u0432\u0445\u043e\u0434\u0430 \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0421\u043d\u041a Murax \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u044b \u00ab\u041a\u0430\u0440\u043d\u043e<\/em>\u00bb).<\/p>\n<p>\u0414\u043b\u044f \u043c\u043e\u0441\u0442\u0430  <strong>apbBridge<\/strong> \u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 <strong>0xF0000000<\/strong> \u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c <strong>1 \u041c\u0411<\/strong>. \u0427\u0435\u0440\u0435\u0437 \u043c\u043e\u0441\u0442 <strong>apbBridge<\/strong> \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432\u0441\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u044f:<\/p>\n<pre><code class=\"scala\">\/\/******** APB peripherals *********      val apbMapping = ArrayBuffer[(Apb3, SizeMapping)]()       val gpioACtrl = Apb3Gpio(gpioWidth = gpioWidth, withReadSync = true)      io.gpioA &lt;> gpioACtrl.io.gpio      apbMapping += gpioACtrl.io.apb -> (0x00000, 4 kB)       val uartCtrl = Apb3UartCtrl(uartCtrlConfig)      uartCtrl.io.uart &lt;> io.uart      externalInterrupt setWhen(uartCtrl.io.interrupt)      apbMapping += uartCtrl.io.apb  -> (0x10000, 4 kB)       val timer = new MuraxApb3Timer()      timerInterrupt setWhen(timer.io.interrupt)      apbMapping += timer.io.apb     -> (0x20000, 4 kB)       ...<\/code><\/pre>\n<p>\u041a\u0430\u0436\u0434\u043e\u043c\u0443 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0443 \u043d\u0430 \u0448\u0438\u043d\u0435 <strong>apbBrigde<\/strong> \u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u0432\u043e\u0451 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f. \u0418\u0437 \u043a\u043e\u0434\u0430 \u0432\u044b\u0448\u0435 \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0439\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u0442\u0430 <strong>gpioA<\/strong> \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0430\u0434\u0440\u0435\u0441\u0430 <strong>0xF0000000 + 0x00000<\/strong>, \u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b UART \u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0441 \u0430\u0434\u0440\u0435\u0441\u0430  <strong>0xF0000000 + 0x10000<\/strong>, \u0438 \u0442.\u00a0\u0434.<\/p>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u043a\u043e\u0434 \u0421\u043d\u041a Murax \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043c\u044b \u0437\u0430\u0445\u043e\u0434\u0438\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0439\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442, \u0442\u043e \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0430 <strong>Component<\/strong>, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c\u044b\u0439 \u043a\u043b\u0430\u0441\u0441\u043e\u043c <strong>Apb3<\/strong>, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0435\u0433\u043e \u043a \u0448\u0438\u043d\u0435  <strong>apbBrigde<\/strong> \u0432 \u044d\u0442\u043e\u043c \u0436\u0435 \u043c\u0435\u0441\u0442\u0435 \u0438 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c. \u0414\u0430\u043b\u0435\u0435 \u044f \u043f\u043e\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445.<\/p>\n<p><a class=\"anchor\" name=\"15.2\" id=\"15.2\"><\/a><\/p>\n<h3> 15.2 \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u044f\u0434\u0440\u0430 VexRiscv<\/h3>\n<p>\u041a\u0430\u043a \u0443\u0436\u0435 \u0431\u044b\u043b\u043e \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u043e \u0432\u044b\u0448\u0435, \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u044f\u0434\u0440\u043e VexRis\u0441v \u2014 \u044d\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442, \u0442.\u00a0\u0435. \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0430 <strong>Component<\/strong>, \u043e\u043f\u0438\u0441\u0430\u043d \u0432 \u0444\u0430\u0439\u043b\u0435 <strong>.\/src\/main\/scala\/vexriscv\/VexRiscv.scala<\/strong> \u0438 \u0438\u043d\u0441\u0442\u0430\u043d\u0446\u0438\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u043a\u043e\u0434\u0430 \u0432\u0438\u0434\u0430: <\/p>\n<p> <code>val cpu = new VexRiscv( config = VexRiscvConfig( ...) ) <\/code> <\/p>\n<p>\u0433\u0434\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <strong>config<\/strong> \u0437\u0430\u0434\u0430\u0435\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u044f\u0434\u0440\u0430, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u043e\u043c <strong>VexRiscvConfig<\/strong>. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u00ab\u0446\u0430\u043f\u044b\u00bb \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043a\u0440\u0443\u0442\u0438\u0442\u044c \u0438 \u0432 \u043a\u0430\u043a\u043e\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u044f\u0434\u0440\u0430 VecRiscv:<\/p>\n<pre><code class=\"scala\">case class VexRiscvConfig(){    var withMemoryStage = true    var withWriteBackStage = true    val plugins = ArrayBuffer[Plugin[VexRiscv]]()  ...<\/code><\/pre>\n<p>\u041d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043d\u0435\u043c\u043d\u043e\u0433\u043e: \u0434\u0432\u0435 \u0431\u0443\u043b\u0435\u0432\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 <strong>withMemoryStage<\/strong> \u0438 <strong>withWriteBackStage<\/strong>, \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <strong>plugins<\/strong> \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u043c\u0430\u0441\u0441\u0438\u0432 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0442\u0438\u043f\u0430 <strong>Plugin[VexRiscv]<\/strong>. \u0411\u0443\u043b\u0435\u0432\u044b \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u044e\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0434\u0432\u0443\u0445 \u0441\u0442\u0443\u043f\u0435\u043d\u0435\u0439 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430: Memory \u0438 WriteBack. \u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u044f\u0434\u0440\u043e VexRiscv \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b RISC-V, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043e\u0442 \u0434\u0432\u0443\u0445 \u0434\u043e \u043f\u044f\u0442\u0438 \u0441\u0442\u0443\u043f\u0435\u043d\u0435\u0439: [Fetch], Decode, Execute, [Memory], [WriteBack]. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0441\u0442\u0443\u043f\u0435\u043d\u0438 Memory \u0438 WriteBack \u043c\u043e\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c\/\u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0442\u044c, \u0438\u0437\u043c\u0435\u043d\u044f\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 <strong>withMemoryStage<\/strong> \u0438 <strong>withWriteBackStage<\/strong>. \u0427\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0441\u0442\u0443\u043f\u0435\u043d\u0438 Fetch, \u0442\u043e \u043e\u043d\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043a\u0430\u043a \u043f\u043b\u0430\u0433\u0438\u043d \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 <strong>plugins<\/strong>. \u041f\u043b\u0430\u0433\u0438\u043d\u044b \u2014 \u044d\u0442\u043e \u0442\u043e, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 VexRiscv \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c\u044b\u043c, \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c \u0438 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c. \u041d\u0430 \u0440\u0438\u0441. 27 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043e \u043e\u0431\u043e\u0431\u0449\u0435\u043d\u043d\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430 VexRiscv \u0438 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u043c\u0435\u0436\u0434\u0443 \u0435\u0433\u043e \u0441\u0442\u0443\u043f\u0435\u043d\u044f\u043c\u0438.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/da7\/9e4\/5ae\/da79e45ae0cebb79643e60f602fe50a1.png\" alt=\"\u0420\u0438\u0441. 27. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430 VexRiscv  \u0432 \u043e\u0431\u0449\u0438\u0445 \u0447\u0435\u0440\u0442\u0430\u0445.\" title=\"\u0420\u0438\u0441. 27. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430 VexRiscv  \u0432 \u043e\u0431\u0449\u0438\u0445 \u0447\u0435\u0440\u0442\u0430\u0445.\" width=\"1267\" height=\"467\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/da7\/9e4\/5ae\/da79e45ae0cebb79643e60f602fe50a1.png\"\/><\/p>\n<div><figcaption><em>\u0420\u0438\u0441. 27. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430 VexRiscv  \u0432 \u043e\u0431\u0449\u0438\u0445 \u0447\u0435\u0440\u0442\u0430\u0445.<\/em><\/figcaption><\/div>\n<\/figure>\n<p><a class=\"anchor\" name=\"15.3\" id=\"15.3\"><\/a><\/p>\n<h3> 15.3 \u041f\u043b\u0430\u0433\u0438\u043d\u044b \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u044f\u0434\u0440\u0430 VexRiscv<\/h3>\n<p> \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a\u0438\u043c\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u0430\u043c\u0438 \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043c\u044b \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u043c \u0438 \u043a\u0430\u043a\u0438\u043c\u0438 \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u043e\u043d\u0438 \u043e\u0431\u043b\u0430\u0434\u0430\u044e\u0442. \u0412\u0435\u0441\u044c \u043a\u043e\u0434 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043f\u043e\u0434\u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 <strong>.\/src\/main\/scala\/vexriscv\/plugin\/<\/strong>, \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0444\u0430\u0439\u043b\u0443 \u043d\u0430 \u043f\u043b\u0430\u0433\u0438\u043d:<\/p>\n<pre><code>rz@devbox:~\/VexRiscv$ ls -w 120 .\/src\/main\/scala\/vexriscv\/plugin\/ AesPlugin.scala                     FpuPlugin.scala                NoPipeliningPlugin.scala  BranchPlugin.scala                  HaltOnExceptionPlugin.scala    PcManagerSimplePlugin.scala  CfuPlugin.scala                     HazardPessimisticPlugin.scala  Plugin.scala  CsrPlugin.scala                     HazardSimplePlugin.scala       PmpPlugin.scala  DBusCachedPlugin.scala              IBusCachedPlugin.scala         PmpPluginNapot.scala  DBusSimplePlugin.scala              IBusSimplePlugin.scala         RegFilePlugin.scala  DebugPlugin.scala                   IntAluPlugin.scala             ShiftPlugins.scala  DecoderSimplePlugin.scala           MemoryTranslatorPlugin.scala   SingleInstructionLimiterPlugin.scala  DivPlugin.scala                     Misc.scala                     SrcPlugin.scala  DummyFencePlugin.scala              MmuPlugin.scala                StaticMemoryTranslatorPlugin.scala  EmbeddedRiscvJtag.scala             Mul16Plugin.scala              VfuPlugin.scala  ExternalInterruptArrayPlugin.scala  MulDivIterativePlugin.scala    YamlPlugin.scala  Fetcher.scala                       MulPlugin.scala  FormalPlugin.scala                  MulSimplePlugin.scala <\/code><\/pre>\n<p>\u0414\u0435\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 README \u0444\u0430\u0439\u043b\u0435 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 VexRiscv \u043f\u043e <a href=\"https:\/\/github.com\/SpinalHDL\/VexRiscv\/blob\/master\/README.md#plugins\" rel=\"noopener noreferrer nofollow\">\u0441\u0441\u044b\u043b\u043a\u0435<\/a>.<\/p>\n<p>\u041d\u0438\u0436\u0435 \u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u0442\u0438 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0432\u0430\u0436\u043d\u044b\u0445 \u0438 \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043f\u043e\u044f\u0441\u043d\u044f\u044e\u0449\u0438\u043c\u0438 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438. \u0421 \u044d\u0442\u0438\u043c\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u0430\u043c\u0438 \u043c\u044b \u0434\u0430\u043b\u0435\u0435 \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043c \u0440\u044f\u0434 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432.<\/p>\n<p><strong>DBusSimplePlugin<\/strong> \u2014 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0448\u0438\u043d\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u044f\u0434\u0440\u0430, \u0431\u0435\u0437 \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u044f\u0434\u0440\u043e \u043a \u0448\u0438\u043d\u0430\u043c \u0432\u0438\u0434\u0430 Axi4Shared, Avalon, Withbone, AhbLite3, Bmb, PipelinedMemoryBus. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0421\u043d\u041a Murax.<\/p>\n<p>\u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 <strong>DBusSimplePlugin<\/strong>, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a\u0438\u043c\u0438 \u0444\u0438\u0447\u0430\u043c\u0438 \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u043b\u0430\u0433\u0438\u043d.<\/p>\n<pre><code class=\"scala\">class DBusSimplePlugin(catchAddressMisaligned : Boolean = false,                         catchAccessFault : Boolean = false,                         earlyInjection : Boolean = false,  \/*, idempotentRegions : (UInt) => Bool = (x) => False*\/                         emitCmdInMemoryStage : Boolean = false,                         onlyLoadWords : Boolean = false,                         withLrSc : Boolean = false,                         val bigEndian : Boolean = false,                         memoryTranslatorPortConfig : Any = null) extends Plugin[VexRiscv] with DbusAccessService<\/code><\/pre>\n<p>\u0412\u0438\u0434\u043d\u043e, \u0447\u0442\u043e <strong>DBusSimplePlugin<\/strong> \u0438\u043c\u0435\u0435\u0442 \u043f\u043e\u0440\u0442 \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0442\u043e\u0440\u0430 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u043f\u0430\u043c\u044f\u0442\u0438 (MMU), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u043e\u0436\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u043c.<\/p>\n<p><strong>DBusCachedPlugin<\/strong> \u2014 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0448\u0438\u043d\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u044f\u0434\u0440\u0430, \u043d\u043e \u0441 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043a\u0435\u0448\u0430 \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u044f\u0434\u0440\u043e \u043a \u0448\u0438\u043d\u0430\u043c: Axi4Shared, Avalon, Withbone, Bmb \u0438 PipelinedMemoryBus. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0421\u043d\u041a Briey \u0441 \u0448\u0438\u043d\u043e\u0439 Axi4Shared. \u041a\u0430\u043a \u0438 \u0435\u0433\u043e \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u044b\u0439 \u0441\u043e\u0431\u0440\u0430\u0442 \u0438\u043c\u0435\u0435\u0442 \u043f\u043e\u0440\u0442 \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0442\u043e\u0440\u0430 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u043f\u0430\u043c\u044f\u0442\u0438 (MMU).<\/p>\n<p>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 <strong>DBusCachedPlugin<\/strong> \u0438 \u0435\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<pre><code class=\"scala\">class DBusCachedPlugin(val config : DataCacheConfig,                         memoryTranslatorPortConfig : Any = null,                         var dBusCmdMasterPipe : Boolean = false,                         dBusCmdSlavePipe : Boolean = false,                         dBusRspSlavePipe : Boolean = false,                         relaxedMemoryTranslationRegister : Boolean = false,                         csrInfo : Boolean = false,                         tightlyCoupledAddressStage : Boolean = false)  extends Plugin[VexRiscv] with  DBusAccessService with DBusEncoding  Service with VexRiscvRegressionArg<\/code><\/pre>\n<p> \u0414\u0430\u043d\u043d\u044b\u0439 \u043f\u043b\u0430\u0433\u0438\u043d, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u0435\u0440\u0432\u0438\u0441 \u043e\u0442 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 <strong>CsrPlugin<\/strong>, \u043c\u043e\u0436\u0435\u0442 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0439 <strong>csrInfo<\/strong> \u0440\u0435\u0433\u0438\u0441\u0442\u0440 <strong>0xCC0<\/strong> \u0441 \u0434\u0432\u0443\u043c\u044f \u043f\u043e\u043b\u044f\u043c\u0438 <strong>[7:0]<\/strong> \u0438 <strong>[27:20]<\/strong> \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043a\u0435\u0448\u0435:<\/p>\n<pre><code>    if(csrInfo){        val csr = service(classOf[CsrPlugin])        csr.r(0xCC0, 0 ->  U(cacheSize\/wayCount),  20 ->  U(bytePerLine))      } <\/code><\/pre>\n<p><strong>IBusSimplePlugin<\/strong> \u2014 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0448\u0438\u043d\u0443 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0432 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u044f\u0434\u0440\u043e, \u0431\u0435\u0437 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u0435\u0448\u0430. \u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u044f\u0434\u0440\u043e \u043a \u0448\u0438\u043d\u0430\u043c \u0432\u0438\u0434\u0430 Avalon, Withbone, AhbLite3, Bmb, PipelinedMemoryBus \u0438 Axi4ReadOnly. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0421\u043d\u041a Murax. \u041f\u043e \u0441\u0443\u0442\u0438, \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u043b\u0430\u0433\u0438\u043d \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f Fetch \u0441\u0442\u0443\u043f\u0435\u043d\u044c\u044e \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430.<\/p>\n<p>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 <strong>IBusSimplePlugin<\/strong> \u0438 \u0435\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"scala\">class IBusSimplePlugin(    resetVector : BigInt,                         val cmdForkOnSecondStage : Boolean,                         val cmdForkPersistence : Boolean,                         val catchAccessFault : Boolean = false,                             prediction : BranchPrediction = NONE,                             historyRamSizeLog2 : Int = 10,                             keepPcPlus4 : Boolean = false,                             compressedGen : Boolean = false,                         val busLatencyMin : Int = 1,                         val pendingMax : Int = 7,                             injectorStage : Boolean = true,                         val rspHoldValue : Boolean = false,                         val singleInstructionPipeline : Boolean = false,                         val memoryTranslatorPortConfig : Any = null,                             relaxPredictorAddress : Boolean = true,                             predictionBuffer : Boolean = true,                             bigEndian : Boolean = false,                             vecRspBuffer : Boolean = false                        ) extends IbusFetcherImpl<\/code><\/pre>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u043f\u043b\u0430\u0433\u0438\u043d \u0438\u043c\u0435\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <strong>resetVector<\/strong> \u0437\u0430\u0434\u0430\u0435\u0442 \u0430\u0434\u0440\u0435\u0441 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u044f\u0434\u0440\u043e \u043d\u0430\u0447\u043d\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b; \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <strong>compressedGen<\/strong> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a\u043e\u0434 \u0434\u043b\u044f \u0434\u0435\u043a\u043e\u0434\u0435\u0440\u0430 \u0441\u0436\u0430\u0442\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 <strong>RV32C<\/strong>; \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <strong>prediction<\/strong> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043a\u043e\u0434 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0439, \u0442\u043e\u0436\u0435 \u0432 \u0432\u0438\u0434\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043b\u0430\u0433\u0438\u043d\u0430.<\/p>\n<p><strong>IBusCachedPlugin<\/strong> \u2014 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0448\u0438\u043d\u0443 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0432 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043a\u0435\u0448\u0430. \u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u044d\u0442\u043e\u0433\u043e \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u0435\u043d <strong>IBusSimplePlugin<\/strong>. \u041e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 <strong>IBusCachedPlugin<\/strong> \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"scala\">class IBusCachedPlugin(resetVector : BigInt = 0x80000000l,                         relaxedPcCalculation : Boolean = false,                         prediction : BranchPrediction = NONE,                         historyRamSizeLog2 : Int = 10,                         compressedGen : Boolean = false,                         keepPcPlus4 : Boolean = false,                         val config : InstructionCacheConfig,                         memoryTranslatorPortConfig : Any = null,                         injectorStage : Boolean = false,                         withoutInjectorStage : Boolean = false,                         relaxPredictorAddress : Boolean = true,                         predictionBuffer : Boolean = true)  extends IbusFetcherImpl<\/code><\/pre>\n<p><strong>DecoderSimplePlugin<\/strong> \u2014 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u043c \u0434\u0435\u0448\u0438\u0444\u0440\u0430\u0446\u0438\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439.<\/p>\n<pre><code class=\"scala\">class DecoderSimplePlugin(catchIllegalInstruction : Boolean = false,                            throwIllegalInstruction : Boolean = false,                            assertIllegalInstruction : Boolean = false,                            forceLegalInstructionComputation : Boolean = false,                            decoderIsolationBench : Boolean = false,                            stupidDecoder : Boolean = false) extends Plugin[VexRiscv] with DecoderService<\/code><\/pre>\n<p>\u0418\u043c\u0435\u0435\u0442 \u043e\u043f\u0446\u0438\u0438 \u0434\u043b\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f\/\u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043e\u0442\u043b\u043e\u0432\u0430 \u043d\u0435\u043b\u0435\u0433\u0430\u043b\u044c\u043d\u044b\u0445 (\u043d\u0435\u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445) \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439: \u0435\u0441\u043b\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <strong>catchIllegalInstruction<\/strong> \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0432 <strong>True<\/strong>, \u0442\u043e \u044f\u0434\u0440\u043e \u0431\u0443\u0434\u0435\u0442 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c trap \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u0435\u0441\u043b\u0438 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0434\u0435\u0448\u0438\u0444\u0440\u0430\u0442\u043e\u0440\u0430 \u043f\u043e\u043f\u0430\u0434\u0435\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u043d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u043c\u0443 \u043d\u0430\u0431\u043e\u0440\u0443.<\/p>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0432 \u0434\u0435\u0448\u0438\u0444\u0440\u0430\u0442\u043e\u0440 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u043c\u0435\u0442\u043e\u0434\u0430 <strong>decoderService.add<\/strong> \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"scala\">decoderService.add(       \/\/Bit pattern of the new instruction       key = M\"0000011----------000-----0110011\",        \/\/Decoding specification when the 'key' pattern is recognized in the instruction       List(         IS_SIMD_ADD              -> True, \/\/Inform the pipeline that the current instruction is a SIMD_ADD instruction         REGFILE_WRITE_VALID      -> True, \/\/Notify the hazard management unit that this instruction writes to the register file         BYPASSABLE_EXECUTE_STAGE -> True, \/\/Notify the hazard management unit that the instruction result is already accessible in the EXECUTE stage (Bypass ready)         BYPASSABLE_MEMORY_STAGE  -> True, \/\/Same as above but for the memory stage         RS1_USE                  -> True, \/\/Notify the hazard management unit that this instruction uses the RS1 value         RS2_USE                  -> True  \/\/Same than above but for RS2.       )     )<\/code><\/pre>\n<p><strong>RegFilePlugin<\/strong> \u2014 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 RISC-V. \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 <strong>RegFilePlugin<\/strong> \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<pre><code class=\"scala\">class RegFilePlugin(regFileReadyKind : RegFileReadKind,                      zeroBoot : Boolean = false,                      x0Init : Boolean = true,                      writeRfInMemoryStage : Boolean = false,                      readInExecute : Boolean = false,                      syncUpdateOnStall : Boolean = true,                      rv32e : Boolean = false,                      withShadow : Boolean = false \/\/shadow registers aren't transition hazard free                     ) extends Plugin[VexRiscv] with RegFileService<\/code><\/pre>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u043f\u043b\u0430\u0433\u0438\u043d \u0438\u043c\u0435\u0435\u0442 \u0440\u044f\u0434 \u043e\u043f\u0446\u0438\u0439 \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438. \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <strong>regFileReadyKind<\/strong> \u0437\u0430\u0434\u0430\u0435\u0442 \u0442\u0438\u043f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u044f\u0447\u0435\u0435\u043a \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432: SYNC \u0438\u043b\u0438 ASYN\u0421. \u041f\u0435\u0440\u0432\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 (SYNC) \u2014 \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u044b \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0435 D-\u0442\u0440\u0438\u0433\u0433\u0435\u0440\u044b (\u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0432 1 \u0442\u0430\u043a\u0442), \u0445\u043e\u0440\u043e\u0448\u043e \u043b\u043e\u0436\u0438\u0442\u0441\u044f \u043d\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 LUT \u044f\u0447\u0435\u0439\u043a\u0438 \u041f\u041b\u0418\u0421. \u0412\u0430\u0440\u0438\u0430\u043d\u0442 ASYNC \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 SRAM \u0438 BRAM (\u0431\u0435\u0437 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438), \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c (ASIC). <\/p>\n<p><strong>HazardSimplePlugin<\/strong> \u2014 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u044b\u0439 \u0434\u043b\u044f \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 \u00abHazard\u00bb, \u0441\u0443\u0442\u044c \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0432\u0437\u0430\u0438\u043c\u043e\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u0435\u0436\u0434\u0443 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438, \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u043c\u0438 \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0442\u0443\u043f\u0435\u043d\u044f\u0445 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430 \u0432 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u043b\u0430\u0433\u0438\u043d \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0430\u0442\u044c (\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c) \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0432 \u0441\u0442\u0443\u043f\u0435\u043d\u0438 \u0434\u0435\u0448\u0438\u0444\u0440\u0430\u0442\u043e\u0440\u0430 (Decoder) \u0438\u043b\u0438, \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u0430\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c, \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0437\u0434\u043d\u0438\u0445 \u0441\u0442\u0443\u043f\u0435\u043d\u0435\u0439, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0437\u0430\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435. \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 <strong>HazardSimplePlugin<\/strong> \u0438 \u0435\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043e \u043d\u0438\u0436\u0435:<\/p>\n<pre><code class=\"scala\">class HazardSimplePlugin(bypassExecute : Boolean = false,                           bypassMemory: Boolean = false,                           bypassWriteBack: Boolean = false,                           bypassWriteBackBuffer : Boolean = false,                           pessimisticUseSrc : Boolean = false,                           pessimisticWriteRegFile : Boolean = false,                           pessimisticAddressMatch : Boolean = false) extends Plugin[VexRiscv] with HazardService<\/code><\/pre>\n<p>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b <strong>bypassExecute<\/strong>, <strong>bypassMemory<\/strong>, <strong>bypassWriteBack<\/strong> \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u044e\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0438\u0437 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0441\u0442\u0443\u043f\u0435\u043d\u0435\u0439 \u043d\u0430 \u0441\u0442\u0430\u0434\u0438\u044e (\u0441\u0442\u0443\u043f\u0435\u043d\u044c) <strong>Decoder<\/strong>.<\/p>\n<p><strong>IntAluPlugin<\/strong> \u2014 \u043f\u043b\u0430\u0433\u0438\u043d, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0439 \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0435 \u0410\u041b\u0423. \u0412\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0442\u0430\u0434\u0438\u044e Execute \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0442\u0430\u043a\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043a\u0430\u043a ADD, SUB, SLT, SLTU, XOR, OR, AND, LUI \u0438 AUIPC. \u042d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u043b\u0430\u0433\u0438\u043d \u043d\u0435 \u0438\u043c\u0435\u044e\u0449\u0438\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 <strong>IntAluPlugin<\/strong> \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"scala\">class IntAluPlugin extends Plugin[VexRiscv]<\/code><\/pre>\n<p><strong>LightShifterPlugin<\/strong> \u0438 <strong>FullBarrelShifterPlugin<\/strong> \u2014 \u044d\u0442\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043f\u043e\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0441\u0434\u0432\u0438\u0433\u0430 SLL, SRL \u0438 SRA. \u041f\u043b\u0430\u0433\u0438\u043d  <strong>LightShifterPlugin<\/strong> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043c\u043d\u043e\u0433\u043e\u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0441\u0434\u0432\u0438\u0433\u0430, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u0439 \u0437\u0430\u0434\u0430\u0447\u0443 \u0437\u0430 N \u0442\u0430\u043a\u0442\u043e\u0432, \u0433\u0434\u0435 N \u2014 \u0447\u0438\u0441\u043b\u043e \u0431\u0438\u0442 \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u0434\u0432\u0438\u0433.  <strong>FullBarrelShifterPlugin<\/strong> \u2014 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u043e\u043b\u043d\u044b\u0439 \u0441\u0434\u0432\u0438\u0433 \u043d\u0430 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0431\u0438\u0442 \u0437\u0430 \u043e\u0434\u0438\u043d \u0442\u0430\u043a\u0442. \u041f\u043e\u043b\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0435\u043c\u043a\u043e\u0439 (\u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432) \u0438 \u0432\u043d\u043e\u0441\u0438\u0442 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443 \u0432 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435,  \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0442\u0430\u043a\u0442\u043e\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u044f\u0434\u0440\u0430. \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u043e\u0432:<\/p>\n<pre><code class=\"scala\">class FullBarrelShifterPlugin(earlyInjection : Boolean = false) extends Plugin[VexRiscv]<\/code><\/pre>\n<p>\u0438<\/p>\n<pre><code class=\"scala\">class LightShifterPlugin extends Plugin[VexRiscv]<\/code><\/pre>\n<p><strong>FpuPlugin<\/strong> \u2014 \u043f\u043b\u0430\u0433\u0438\u043d, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 (\u00abFloating Point Unit\u00bb &#8212; FPU). \u0411\u043b\u043e\u043a FPU \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043a\u0430\u043a \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c \u0432 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440, \u0442\u0430\u043a \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0438\u0439 FPU \u0431\u043b\u043e\u043a (\u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0441\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440). \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 <strong>FpuPlugin<\/strong> \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"scala\">class FpuPlugin(externalFpu : Boolean = false,                  var simHalt : Boolean = false,                  val p : FpuParameter) extends Plugin[VexRiscv] with VexRiscvRegressionArg <\/code><\/pre>\n<p>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <strong>p<\/strong> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439 \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u0431\u043b\u043e\u043a\u0430 FPU, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"scala\">case class FpuParameter( withDouble : Boolean,                           asyncRegFile : Boolean = false,                           mulWidthA : Int = 18,                           mulWidthB : Int = 18,                           schedulerM2sPipe : Boolean = false,                           sim : Boolean = false,                           withAdd : Boolean = true,                           withMul : Boolean = true,                           withDivSqrt : Boolean = false,                           withDiv : Boolean = true,                           withSqrt : Boolean = true,                           withShortPipMisc : Boolean = true)<\/code><\/pre>\n<p>\u0412 \u0444\u0430\u0439\u043b\u0435 <a href=\"http:\/\/README.md\" rel=\"noopener noreferrer nofollow\">README.md<\/a> \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f VexRiscv \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0431\u043b\u043e\u043a\u0430 FPU \u0438 \u0435\u0433\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a. \u041e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u043c\u043e\u0436\u043d\u043e \u043f\u043e <a href=\"https:\/\/github.com\/SpinalHDL\/VexRiscv\/blob\/master\/README.md#fpu\" rel=\"noopener noreferrer nofollow\">\u0441\u0441\u044b\u043b\u043a\u0435<\/a>.<\/p>\n<p><strong>PcManagerSimplePlugin<\/strong> \u2014 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u043b\u0430\u0433\u0438\u043d \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430 \u043a\u043e\u043c\u0430\u043d\u0434 (PC).  \u0414\u0430\u043d\u043d\u044b\u0439 \u043f\u043b\u0430\u0433\u0438\u043d \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u044f\u0434\u0440\u0430 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430 \u043a\u043e\u043c\u0430\u043d\u0434 \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0432 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u044f\u0434\u0440\u0430, \u0432 \u043a\u043b\u0430\u0441\u0441 <strong>VexRiscv<\/strong>.<\/p>\n<p> <strong>BranchPlugin<\/strong> \u2014 \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u043b\u0430\u0433\u0438\u043d \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u0435 \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0439 \u0441 \u0446\u0435\u043b\u044c\u044e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0445\u043e\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u0442\u0430\u043a \u043a\u0430\u043a \u043a\u0430\u0436\u0434\u044b\u0439 \u00ab\u043f\u0440\u043e\u043c\u0430\u0445\u00bb (\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043d\u0435\u0432\u0435\u0440\u043d\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0432 \u0434\u0435\u043a\u043e\u0434\u0435\u0440) \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0432 2 \u0438\u043b\u0438 4 \u0442\u0430\u043a\u0442\u0430. \u042d\u0442\u043e\u0442 \u043f\u043b\u0430\u0433\u0438\u043d \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442 \u043d\u0435\u0433\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u0432\u043b\u0438\u044f\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434 \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u043a\u0435\u0448 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439. \u041f\u043b\u0430\u0433\u0438\u043d \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0432\u0441\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f: JAL, JALR, BEQ, BNE, BLT, BGE, BLTU \u0438 BGEU. \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 <strong>BranchPlugin<\/strong>:<\/p>\n<pre><code class=\"scala\">class BranchPlugin(earlyBranch : Boolean,                     catchAddressMisaligned : Boolean = false,                     fenceiGenAsAJump : Boolean = false,                     fenceiGenAsANop : Boolean = false,                     decodeBranchSrc2 : Boolean = false) extends Plugin[VexRiscv] with PredictionInterface<\/code><\/pre>\n<p> \u0412 VexRiscv \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c prediction \u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 <strong>IBusSimplePlugin <\/strong>\u0438\u043b\u0438 <strong>IBusCachedPlugin<\/strong> (\u043d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u044d\u0442\u0438 \u0434\u0432\u0430 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 Fetch \u0441\u0442\u0443\u043f\u0435\u043d\u044c \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430):<\/p>\n<ul>\n<li>\n<p>NONE \u2014 \u0431\u0435\u0437 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u044f, \u043b\u044e\u0431\u043e\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 PC \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438 \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a  \u043f\u043e\u043b\u043d\u043e\u043c\u0443 \u043d\u0430\u0431\u043e\u0440\u0443 \u00ab\u0448\u0442\u0440\u0430\u0444\u043d\u044b\u0445\u00bb \u0446\u0438\u043a\u043b\u043e\u0432 (\u043e\u0442 2 \u0434\u043e 4).<\/p>\n<\/li>\n<li>\n<p> STATIC \u2014 \u0441\u043f\u0435\u043a\u0443\u043b\u044f\u0442\u0438\u0432\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u0435, \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u0430 \u0438 \u0442\u0430 \u0436\u0435 \u0432\u0435\u0442\u0432\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f. \u0415\u0441\u043b\u0438 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u0435 \u0441\u0431\u044b\u043b\u043e\u0441\u044c, \u0442\u043e \u00ab\u0448\u0442\u0440\u0430\u0444\u00bb \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442\u0441\u044f \u0434\u043e \u043e\u0434\u043d\u043e\u0433\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0442\u0430\u043a\u0442\u0430, \u0438\u043d\u0430\u0447\u0435 \u00ab\u0448\u0442\u0440\u0430\u0444\u00bb \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u043d\u044b\u043c.<\/p>\n<\/li>\n<li>\n<p> DYNAMIC \u2014 \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430, \u0442.\u00a0\u043d. BHT \u043a\u0435\u0448, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043a\u0430\u043a\u043e\u0435 \u0438\u0437 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u044b\u043c.<\/p>\n<\/li>\n<li>\n<p> DYNAMIC_TARGET \u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0442.\u00a0\u043d. \u00ab\u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0431\u0443\u0444\u0435\u0440 \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f \u0441 \u043f\u0440\u044f\u043c\u044b\u043c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c\u00bb (BTB) \u0432 \u0441\u0442\u0443\u043f\u0435\u043d\u0438 Fetch, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 PC, \u0433\u0434\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 PC \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0431\u044b\u043b \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u0435\u043d \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u0438 \u0434\u0432\u0430 \u0431\u0438\u0442\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u0438\/\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u0438. \u042d\u0442\u043e \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0439, \u0442\u0430\u043a \u043a\u0430\u043a \u0435\u0441\u043b\u0438 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u0435 \u0443\u0433\u0430\u0434\u0430\u043d\u043e, \u0442\u043e \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u00ab\u0448\u0442\u0440\u0430\u0444\u043d\u044b\u0445\u00bb \u0442\u0430\u043a\u0442\u043e\u0432 \u043d\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442. \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0434\u043b\u0438\u043d\u043d\u0430\u044f \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u0442\u044f\u043d\u0443\u0449\u0430\u044f\u0441\u044f \u043e\u0442 \u043a\u0435\u0448\u0430 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u0439 \u0434\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430 \u043a\u043e\u043c\u0430\u043d\u0434, \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0449\u0430\u044f \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0439. \u042d\u0442\u0430 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0442\u0430\u043a\u0442\u043e\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u044f\u0434\u0440\u0430.<\/p>\n<\/li>\n<\/ul>\n<p> \u041d\u0430 \u044d\u0442\u043e\u043c \u044f \u0437\u0430\u043a\u043e\u043d\u0447\u0443 \u043e\u0431\u0437\u043e\u0440 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u044f\u0434\u0440\u0430 VexRiscv, \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0435 \u0443\u0437\u043d\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u2014 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0447\u0435\u0440\u043f\u043d\u0443\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0438\u0437 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0439 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u044f \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043b \u0443\u0436\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u0432\u044b\u0448\u0435 \u043f\u043e \u0442\u0435\u043a\u0441\u0442\u0443.<\/p>\n<p><a class=\"anchor\" name=\"16\" id=\"16\"><\/a><\/p>\n<h2> 16. \u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b \u0441 \u044f\u0434\u0440\u043e\u043c VexRiscv \u0438 \u0421\u043d\u041a Murax<\/h2>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043b\u0438\u0441\u044c \u0441 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u044f\u0434\u0440\u0430 VexRiscv, \u043d\u0430\u0441\u0442\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u044f\u0434\u0440\u0430 VexRiscv \u0438 \u0421\u043d\u041a Murax, \u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0430\u0447\u0430\u0442\u044c \u0435\u0433\u043e \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434 \u0441\u0432\u043e\u0438 \u043d\u0443\u0436\u043d\u044b.<\/p>\n<p><em>\u0414\u0430\u043b\u0435\u0435 \u044f \u0431\u0443\u0434\u0443 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u043c\u0430\u0441\u0442\u0435\u0440 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f VexRiscv, \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u044f \u043a\u0430\u043a \u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043b \u044f, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044f \u043d\u043e\u0432\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0432 \u0421\u043d\u041a \u0438 \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u0443\u044f \u0435\u0433\u043e \u043f\u043e\u0434 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438. \u0412\u0441\u0435 \u0432\u043d\u0435\u0441\u0435\u043d\u043d\u044b\u0435 \u043c\u043d\u043e\u0439 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0437 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u043d\u0430 Github-\u0435: \u043f\u043e <\/em><a href=\"https:\/\/github.com\/Fabmicro-LLC\/VexRiscvWithKarnix.git\" rel=\"noopener noreferrer nofollow\"><em>\u0441\u0441\u044b\u043b\u043a\u0435<\/em><\/a><em>.<\/em> <\/p>\n<p><a class=\"anchor\" name=\"16.1\" id=\"16.1\"><\/a><\/p>\n<h3> 16.1 \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 RegFilePlugin<\/h3>\n<p>\u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u0443 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 <strong>RegFilePlugin<\/strong> \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0442\u0438\u043f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430. \u0412 \u0421\u043d\u041a Murax \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432, \u0442.\u00a0\u0435. <strong>regFileReadyKind<\/strong> \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0430 \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <strong>SYNC<\/strong>. \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0430 \u041f\u041b\u0418\u0421 Lattice ECP5 \u0438\u043c\u0435\u0435\u0442 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0438 \u0434\u0432\u0443\u0445\u043f\u043e\u0440\u0442\u043e\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u043e\u0440\u0443\u0434\u0438\u0442\u044c \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b, \u0442\u043e \u0440\u0435\u0437\u043e\u043d\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c (\u0438\u043b\u0438 \u043d\u0435 \u0431\u044b\u0442\u044c) \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u043c.<\/p>\n<p>\u041e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u0444\u0430\u0439\u043b <strong>Murax.scala<\/strong> \u2014 \u043d\u0430\u0439\u0434\u0435\u043c \u0432 \u043d\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u0430, \u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u043c \u0441\u0442\u0440\u043e\u043a\u0443 \u043a\u043e\u0434\u0430:<\/p>\n<pre><code class=\"scala\">new RegFilePlugin(          regFileReadyKind = plugin.SYNC,          zeroBoot = false        ), <\/code><\/pre>\n<p>\u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0443:<\/p>\n<pre><code class=\"scala\">new RegFilePlugin(          regFileReadyKind = plugin.ASYNC,          zeroBoot = false        ), <\/code><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u043f\u0435\u0440\u0435\u0441\u0431\u043e\u0440\u043a\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 make \u0438 \u043f\u043e\u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c \u0437\u0430 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u043e\u0439 \u0443\u0442\u0438\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0438 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0445 \u0447\u0430\u0441\u0442\u043e\u0442. \u0412\u043e\u0442 \u0447\u0442\u043e \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u0432\u0438\u0434\u0435\u0442\u044c:<\/p>\n<p>\u0414\u043b\u044f \u0440\u0435\u0436\u0438\u043c\u0430 <strong>ASYNC<\/strong>:<\/p>\n<pre><code>Info: Device utilisation:  .. Info:             TRELLIS_FF:  1325\/24288     5%  Info:           TRELLIS_COMB:  2284\/24288     9%  Info:           TRELLIS_RAMW:    36\/ 3036     1%  Info: Max frequency for clock         'io_clk2574.47 MHz (PASS at 25.00 MHz)  Info: Max frequency for clock '\" class=\"formula inline\">glbnetTRELLIS_IO_IN': 128.97 MHz (PASS at 12.00 MHz) <\/code><\/pre>\n<p>\u0421\u0440\u0430\u0432\u043d\u0438\u043c \u044d\u0442\u0438 \u0436\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u0434\u043b\u044f \u0440\u0435\u0436\u0438\u043c\u0430 <strong>SYNC<\/strong> \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e:<\/p>\n<pre><code>Info:             TRELLIS_FF:  1379\/24288     5%  Info:           TRELLIS_COMB:  2346\/24288     9%  Info:           TRELLIS_RAMW:    36\/ 3036     1%  Info: Max frequency for clock         'io_clk2569.80 MHz (PASS at 25.00 MHz)  Info: Max frequency for clock '\" class=\"formula inline\">glbnetTRELLIS_IO_IN': 149.30 MHz (PASS at 12.00 MHz) <\/code><\/pre>\n<p>\u0412\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 ASYNC \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u043b\u0441\u044f \u0440\u0430\u0441\u0445\u043e\u0434 Flip-Flop \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u043e\u0432 \u0438 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a LUT-4. \u0422\u0430\u043a\u0436\u0435 \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u0430\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0434\u043b\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 io_clk25 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u043e\u0434\u0440\u043e\u0441\u043b\u0430 \u2014 \u0441 <strong>69.80 \u041c\u0413\u0446<\/strong> \u0434\u043e <strong>74.47. \u041c\u0413\u0446<\/strong>. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043c\u044b, \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u0438\u043c\u0435\u0435\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u044f\u0434\u0440\u0430 \u0434\u043e 74 \u041c\u0413\u0446 \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u044b\u0448\u0435! \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u044f \u043a\u0432\u0430\u0440\u0446\u0435\u0432\u043e\u0433\u043e \u043e\u0441\u0446\u0438\u043b\u043b\u044f\u0442\u043e\u0440\u0430, \u043f\u0443\u0442\u0435\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u0432 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0443 \u041f\u041b\u0418\u0421 \u0431\u043b\u043e\u043a\u0430 PLL.<\/p>\n<p><a class=\"anchor\" name=\"16.2\" id=\"16.2\"><\/a><\/p>\n<h3> 16.2 \u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u0442\u0430\u043a\u0442\u043e\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u044f\u0434\u0440\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 PLL<\/h3>\n<p>\u0415\u0441\u043b\u0438 \u043a\u0440\u0430\u0442\u043a\u043e, \u0442\u043e PLL \u0438\u043b\u0438 \u00ab<a href=\"https:\/\/en.wikipedia.org\/wiki\/Phase-locked_loop\" rel=\"noopener noreferrer nofollow\">Phase-locked Loop<\/a>\u00bb (\u00ab<a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A4%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D1%8F_%D0%B0%D0%B2%D1%82%D0%BE%D0%BF%D0%BE%D0%B4%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D1%87%D0%B0%D1%81%D1%82%D0%BE%D1%82%D1%8B\" rel=\"noopener noreferrer nofollow\">\u0424\u0430\u0437\u043e\u0432\u0430\u044f \u0430\u0432\u0442\u043e\u043f\u043e\u0434\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u044b<\/a>\u00bb, \u00ab\u0424\u0410\u041f\u0427\u00bb) \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0439 \u0431\u043b\u043e\u043a \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0443\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0440\u044f\u0434 \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u044b\u0445 \u0443\u0445\u0438\u0449\u0440\u0435\u043d\u0438\u0439, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0434\u0435\u043b\u0438\u0442\u044c \u0438 \u0443\u043c\u043d\u043e\u0436\u0430\u0442\u044c \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0435 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u0438 \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c\u044e. \u041c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0430 \u041f\u041b\u0418\u0421 Lattice ECP5 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0434\u0432\u0430 \u0442\u0430\u043a\u0438\u0445 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0445 \u0431\u043b\u043e\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f <strong>EHXPLLL<\/strong>. \u0422\u0443\u043b\u0447\u0435\u0439\u043d Yosys \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u044d\u0442\u0438 \u0431\u043b\u043e\u043a\u0438, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0438\u0437 \u043d\u0438\u0445 \u0434\u043b\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u044b, \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0435\u0439 \u043e\u0442 \u043a\u0432\u0430\u0440\u0446\u0435\u0432\u043e\u0433\u043e \u043e\u0441\u0446\u0438\u043b\u043b\u044f\u0442\u043e\u0440\u0430 \u0440\u0430\u0441\u043f\u0430\u044f\u043d\u043d\u043e\u0433\u043e \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 \u00ab\u041a\u0430\u0440\u043d\u043e\u00bb \u043d\u043e\u043c\u0438\u043d\u0430\u043b\u043e\u043c 25.0 \u041c\u0413\u0446 \u0432 (\u043f\u043e\u0447\u0442\u0438) \u043b\u044e\u0431\u0443\u044e \u0434\u0440\u0443\u0433\u0443\u044e \u0447\u0430\u0441\u0442\u043e\u0442\u0443. \u0412 \u044d\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u044f \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u044e, \u043a\u0430\u043a \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c PLL, \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0435\u0433\u043e, \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 75.0 \u041c\u0413\u0446 \u0438 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0442 \u043d\u0435\u0433\u043e \u0421\u043d\u041a Murax \u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u044f\u0434\u0440\u043e \u0432 \u0435\u0433\u043e \u0441\u043e\u0441\u0442\u0430\u0432\u0435. <\/p>\n<p>PLL \u2014 \u044d\u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u0431\u043b\u043e\u043a \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0443\u0440\u044b, \u0438\u043c\u0435\u044e\u0449\u0438\u0439 \u0440\u044f\u0434 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u0438\u0437\u043c\u0435\u043d\u044f\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430. \u0427\u0442\u043e\u0431\u044b \u043e\u0431\u043b\u0435\u0433\u0447\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0434\u0438\u0437\u0430\u0439\u043d\u0435\u0440\u0443, \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u0442\u0443\u043b\u0447\u0435\u0439\u043d\u0430 Yosys \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u0430 <strong>ecppll<\/strong>, \u0437\u0430\u0434\u0430\u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u0430\u0440\u0443 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 (\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430), \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u043e\u0434 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Verilog. \u042d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043f\u0440\u0438 \u0441\u0438\u043d\u0442\u0435\u0437\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Yosys \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442 \u0438 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u043e\u0434\u0438\u043d \u0438\u0437 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0445 \u0431\u043b\u043e\u043a\u043e\u0432 EHXPLLL.<\/p>\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043c <strong>ecppll<\/strong> \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438:<\/p>\n<pre><code class=\"bash\">rz@devbox:~\/VexRiscv\/scripts\/Murax\/Karnix$ ecppll --clkin_name in_clk25 -i 25 --clkout0_name out_clk75 -o 75 -f pll25to75.v  Pll parameters:  Refclk divisor: 1  Feedback divisor: 3  clkout0 divisor: 8  clkout0 frequency: 75 MHz  VCO frequency: 600 <\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0443\u0442\u0438\u043b\u0438\u0442\u0435 \u043d\u043e\u043c\u0438\u043d\u0430\u043b\u044b \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u043b\u0438\u043d\u0438\u0439 \u0434\u043b\u044f \u0432\u0445\u043e\u0434\u0430 \u0438 \u0432\u044b\u0445\u043e\u0434\u0430. \u0423\u0442\u0438\u043b\u0438\u0442\u0430 <strong>ecppll<\/strong> \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u0438 \u0437\u0430\u043f\u0438\u0448\u0435\u0442 \u043a\u043e\u0434 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Verilog \u0434\u043b\u044f \u043c\u043e\u0434\u0443\u043b\u044f PLL, \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430 <strong>EHXPLLL<\/strong>, \u0432 \u0444\u0430\u0439\u043b <strong>pll25to75.v<\/strong>. <\/p>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435:<\/p>\n<details class=\"spoiler\">\n<summary>pll25to75.v<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"vhdl\">\/\/ diamond 3.7 accepts this PLL  \/\/ diamond 3.8-3.9 is untested  \/\/ diamond 3.10 or higher is likely to abort with error about unable to use feedback signal  \/\/ cause of this could be from wrong CPHASE\/FPHASE parameters  module pll  (      input in_clk25, \/\/ 25 MHz, 0 deg      output out_clk75, \/\/ 75 MHz, 0 deg      output locked  );  (* FREQUENCY_PIN_CLKI=\"25\" *)  (* FREQUENCY_PIN_CLKOP=\"75\" *)  (* ICP_CURRENT=\"12\" *) (* LPF_RESISTOR=\"8\" *) (* MFG_ENABLE_FILTEROPAMP=\"1\" *) (* MFG_GMCREF_SEL=\"2\" *)  EHXPLLL #(          .PLLRST_ENA(\"DISABLED\"),          .INTFB_WAKE(\"DISABLED\"),          .STDBY_ENABLE(\"DISABLED\"),          .DPHASE_SOURCE(\"DISABLED\"),          .OUTDIVIDER_MUXA(\"DIVA\"),          .OUTDIVIDER_MUXB(\"DIVB\"),          .OUTDIVIDER_MUXC(\"DIVC\"),          .OUTDIVIDER_MUXD(\"DIVD\"),          .CLKI_DIV(1),          .CLKOP_ENABLE(\"ENABLED\"),          .CLKOP_DIV(8),          .CLKOP_CPHASE(4),          .CLKOP_FPHASE(0),          .FEEDBK_PATH(\"CLKOP\"),          .CLKFB_DIV(3)      ) pll_i (          .RST(1'b0),          .STDBY(1'b0),          .CLKI(io_clk25),          .CLKOP(clk75),          .CLKFB(clk75),          .CLKINTFB(),          .PHASESEL0(1'b0),          .PHASESEL1(1'b0),          .PHASEDIR(1'b1),          .PHASESTEP(1'b1),          .PHASELOADREG(1'b1),          .PLLWAKESYNC(1'b0),          .ENCLKOP(1'b0),          .LOCK(locked)          );  endmodule <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0412\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0443\u0442\u0438\u043b\u0438\u0442\u0430 <strong>ecppll<\/strong> \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u043b\u0430 \u0440\u0430\u0441\u0447\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0438 \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u043b\u0430 \u0438\u0445 \u0432 \u043c\u043e\u0434\u0443\u043b\u044c <strong>EHXPLLL<\/strong>. \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0443, \u043d\u043e \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0431\u0443\u0434\u0435\u0442 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u0432 <strong>toplevel.v<\/strong> \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u043a\u043e\u043c\u043c\u0443\u0442\u0430\u0446\u0438\u044e \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432: \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0441\u0438\u0433\u043d\u0430\u043b <strong>io_clk25<\/strong> \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0434\u0430\u0442\u044c \u043d\u0430 \u0432\u0445\u043e\u0434 <strong>in_clk25<\/strong> \u043c\u043e\u0434\u0443\u043b\u044f <strong>pll<\/strong>, \u0430 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0438\u0433\u043d\u0430\u043b <strong>out_clk75<\/strong> \u0447\u0435\u0440\u0435\u0437 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0432\u043e\u0434\u043d\u0438\u043a <strong>clk75<\/strong> \u043f\u043e\u0434\u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u043a \u0441\u0438\u0433\u043d\u0430\u043b\u0443 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f <strong>mainClk<\/strong> \u043c\u043e\u0434\u0443\u043b\u044f <strong>Murax<\/strong>. \u041d\u0430 Verilog-\u0435 \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<details class=\"spoiler\">\n<summary>toplevel.v<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"vhdl\">`timescale 1ns \/ 1ps   `include \"pll25to75.v\"   module toplevel(      input   io_clk25,      input   [3:0] io_key,      output  [3:0] io_led,      input   io_core_jtag_tck,      output  io_core_jtag_tdo,      input   io_core_jtag_tdi,      input   io_core_jtag_tms,      output  io_uart_debug_txd,      input   io_uart_debug_rxd    );     assign io_led[0] = io_gpioA_write[0];    assign io_led[1] = io_gpioA_write[1];    assign io_led[2] = io_gpioA_write[2];    assign io_led[3] = io_gpioA_write[3];     wire [31:0] io_gpioA_read;    wire [31:0] io_gpioA_write;    wire [31:0] io_gpioA_writeEnable;      assign io_gpioA_read[0] = io_key[0];    assign io_gpioA_read[1] = io_key[1];    assign io_gpioA_read[2] = io_key[2];    assign io_gpioA_read[3] = io_key[3];     wire clk75;     pll i_pll(.in_clk25(io_clk25), .out_clk75(clk75));     Murax murax (      .io_asyncReset(io_key[3]),      \/\/.io_mainClk (io_clk25),      .io_mainClk (clk75),      .io_jtag_tck(io_core_jtag_tck),      .io_jtag_tdi(io_core_jtag_tdi),      .io_jtag_tdo(io_core_jtag_tdo),      .io_jtag_tms(io_core_jtag_tms),      .io_gpioA_read       (io_gpioA_read),      .io_gpioA_write      (io_gpioA_write),      .io_gpioA_writeEnable(io_gpioA_writeEnable),      .io_uart_txd(io_uart_debug_txd),      .io_uart_rxd(io_uart_debug_rxd)    );   endmodule <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0414\u0430\u043b\u0435\u0435, \u0443\u043a\u0430\u0436\u0435\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u00abhello_world\u00bb \u043d\u0430 \u0442\u043e\u0442 \u0444\u0430\u043a\u0442, \u0447\u0442\u043e \u0442\u0430\u043a\u0442\u043e\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0430\u0441\u044c, \u044d\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u0437\u0430\u0434\u0435\u0440\u0436\u0435\u043a \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u0444\u0430\u0439\u043b\u0435 <strong>.\/src\/main\/c\/murax\/hello_world\/src\/murax.h<\/strong> \u0437\u0430\u043c\u0435\u043d\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b <strong>SYSTEM_CLOCK_HZ<\/strong> \u043d\u0430 <strong>75000000L<\/strong> \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043c \u043f\u0435\u0440\u0435\u0441\u0431\u043e\u0440\u043a\u0443 \u0421\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b:<\/p>\n<pre><code>rz@devbox:~\/VexRiscv\/src\/main\/c\/murax\/hello_world$ make clean &amp;&amp; make<\/code><\/pre>\n<p>\u041d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c <strong>regFileReadyKind = plugin.ASYNC<\/strong> \u0434\u043b\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u0430 <strong>RegFilePlugin<\/strong> (\u0441\u043c. \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u0433\u043b\u0430\u0432\u0443), \u0430 \u0442\u0430\u043a\u0436\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0434\u043b\u044f \u0421\u043d\u041a Murax \u043d\u043e\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435 <strong>coreFrequency = 75 Mhz<\/strong>, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0441\u0431\u043e\u0440\u043a\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c:<\/p>\n<pre><code>rz@devbox:~\/VexRiscvWithKarnix\/scripts\/Murax\/Karnix$ make ... Info: Device utilisation:  Info:             TRELLIS_IO:    15\/  197     7%  Info:                   DCCA:     2\/   56     3%  Info:                 DP16KD:    48\/   56    85%  ... Info:                EHXPLLL:     1\/    2    50%  ... Info:             TRELLIS_FF:  1325\/24288     5%  Info:           TRELLIS_COMB:  2270\/24288     9%  Info:           TRELLIS_RAMW:    36\/ 3036     1%  ... Info: Routing globals...  Info:     routing clock net io_core_jtag_tckInfo:     routing clock net $glbnet\" class=\"formula inline\">clk75 using global 1  ... Info: Max frequency for clock                          'clk75': 75.55 MHz (PASS at 75.00 MHz)  Info: Max frequency for clock 'io_core_jtag_tck$TRELLIS_IO_IN': 124.66 MHz (PASS at 12.00 MHz) <\/code><\/pre>\n<p>\u0425\u043e\u0445\u043e! \u041d\u0430\u0448 \u0434\u0438\u0437\u0430\u0439\u043d \u043f\u0440\u043e\u0448\u0435\u043b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c STA \u043f\u043e \u0441\u0430\u043c\u043e\u043c\u0443 \u043a\u0440\u0430\u0435\u0448\u043a\u0443 \u2014 75.00 \u041c\u0413\u0446 \u0438\u0437 75.55 \u041c\u0413\u0446 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043d\u044b\u0445.<\/p>\n<p>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043f\u043b\u0430\u0442\u0443 \u00ab\u041a\u0430\u0440\u043d\u043e\u00bb, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0431\u0438\u0442\u0441\u0442\u0440\u0438\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <strong>make upload<\/strong> \u0438 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c \u0437\u0430 \u0442\u0435\u043c, \u043a\u0430\u043a \u00ab\u043f\u043b\u044f\u0448\u0443\u0442\u00bb \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u044b \u0432 \u0442\u0440\u0438 \u0440\u0430\u0437\u0430 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043f\u0440\u0435\u0436\u043d\u0435\u0433\u043e.<\/p>\n<p><a class=\"anchor\" name=\"16.3\" id=\"16.3\"><\/a><\/p>\n<h3> 16.3 \u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0441\u0434\u0432\u0438\u0433\u0430<\/h3>\n<p>\u0412 \u0433\u043b\u0430\u0432\u0435 \u00ab<em>15.3 \u041f\u043b\u0430\u0433\u0438\u043d\u044b \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u044f\u0434\u0440\u0430 VexRiscv<\/em>\u00bb \u044f \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0430\u0432\u0442\u043e\u0440 VexRiscv \u0441\u043d\u0430\u0431\u0434\u0438\u043b \u0441\u0432\u043e\u0451 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u044f\u0434\u0440\u043e \u0434\u0432\u0443\u043c\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u043c\u0438 (\u0434\u0432\u0443\u043c\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u0430\u043c\u0438) \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u043f\u043e\u0431\u0438\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0434\u0432\u0438\u0433\u0430: <strong>LightShifterPlugin<\/strong> \u2014 \u043c\u043d\u043e\u0433\u043e\u0442\u0430\u043a\u0442\u043e\u0432\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0430\u044f \u0441\u0434\u0432\u0438\u0433 \u043d\u0430 N \u0431\u0438\u0442 \u0437\u0430 N \u0442\u0430\u043a\u0442\u043e\u0432, \u0438 <strong>FullBarrelShifterPlugin<\/strong> \u2014 \u043f\u043e\u043b\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f (\u00ab\u0431\u043e\u0447\u043a\u043e\u0432\u043e\u0439 \u0441\u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044c\u00bb), \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0434\u0432\u0438\u0433\u0430 \u043d\u0430 N \u0431\u0438\u0442 \u0437\u0430 1 \u0442\u0430\u043a\u0442. \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043d\u043e \u0438\u043c\u0435\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a \u2014 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u0438\u043c\u0435\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u0438\u043d\u043d\u0443\u044e \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u0438 (\u0434\u043b\u0438\u043d\u043d\u044b\u0439 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0443\u0442\u044c), \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u0442\u0430\u0434\u0438\u0438 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430 Execute \u0438 \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u044f\u0434\u0440\u0430. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432 \u0421\u043d\u041a Murax \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u0431\u043b\u0435\u0433\u0447\u0435\u043d\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u044d\u0442\u043e \u0441 \u0446\u0435\u043b\u044c\u044e \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b \u0438 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0436\u0435 \u043f\u0435\u0440\u0435\u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u043d\u0430\u0448\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u044f\u0434\u0440\u043e \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044f \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0432\u043e \u0447\u0442\u043e \u044d\u0442\u043e \u0432\u044b\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f. <\/p>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043c\u044b \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c \u043a \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0443\u0440\u044b, \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043a\u043e\u0434 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 \u0421\u0438 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u00abhello_world\u00bb, \u0434\u043b\u044f \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0441\u0434\u0432\u0438\u0433\u0430. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0443\u0436\u0435 \u0438\u043c\u0435\u044e\u0449\u0438\u043c\u0441\u044f \u0432 \u0421\u043d\u041a Murax \u0431\u043b\u043e\u043a\u043e\u043c \u0442\u0430\u0439\u043c\u0435\u0440\u043e\u0432 <strong>MuraxApb3Timer<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0434\u0432\u0443\u0445 16-\u0442\u0438 \u0431\u0438\u0442\u043d\u044b\u0445 \u0442\u0430\u0439\u043c\u0435\u0440\u043e\u0432  <strong>timerA<\/strong> \u0438 <strong>timerB<\/strong> \u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043e\u0431\u0449\u0435\u0433\u043e 16-\u0442\u0438 \u0431\u0438\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0441\u043a\u0435\u0439\u043b\u0435\u0440\u0430 (\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u044b). \u041f\u0440\u043e\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u043f\u0440\u0435\u0441\u043a\u0435\u0439\u043b\u0435\u0440 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0442\u0430\u0439\u043c\u0435\u0440 \u0432\u0435\u043b \u0440\u0430\u0441\u0447\u0435\u0442 \u0432 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445, \u0442.\u00a0\u0435. \u0437\u0430\u043d\u0435\u0441\u0435\u043c \u0432 \u043f\u0440\u0435\u0441\u043a\u0435\u0439\u043b\u0435\u0440 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435  <strong>(SYSTEM_CLOCK_HZ \/ 1000000  &#8212; 1)<\/strong>. \u0414\u0430\u043b\u0435\u0435, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u043a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>delay()<\/strong> \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u0443\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u0441\u0434\u0432\u0438\u0433\u0430 \u043d\u0430 16, \u0430 \u0432\u0440\u0435\u043c\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>delay()<\/strong> \u0431\u0443\u0434\u0435\u043c \u0438\u0437\u043c\u0435\u0440\u044f\u0442\u044c \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0442\u0430\u0439\u043c\u0435\u0440\u043e\u0432 \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0432 \u043f\u043e\u0440\u0442 UART \u0432 \u0432\u0438\u0434\u0435 \u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430.<\/p>\n<p>\u0424\u0430\u0439\u043b <strong>main.c<\/strong> \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u00abhello_world\u00bb \u043f\u0440\u0438\u043c\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f:<\/p>\n<details class=\"spoiler\">\n<summary>main.c<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">void delay(uint32_t loops){          for(int i=0;i&lt;loops;i++){                  \/\/int tmp = GPIO_A->OUTPUT;                  asm volatile (\"slli t1,t1,0x10\");          }  }   void printhex(unsigned int number){          unsigned int mask = 0xf0000000;          static char hex_digits[11] = {0,0,0,0,0,0,0,0,'\\r','\\n','\\0'};           for(int i = 0; i &lt; 8; i++) {                  int digit = (number &amp; mask) >> 4*(7-i);                  if(digit &lt; 0x0a)                          hex_digits[i] = digit + 0x30;                  else                          hex_digits[i] = (digit - 0x0a) + 'A';                  mask = mask >> 4;          }           print(hex_digits);  }           const int nleds = 4;          const int nloops = 1000000;          TIMER_PRESCALER->LIMIT = 0xFFFF; \/\/ Set max possible clock divider          while(1){                  unsigned int shift_time;                  println(\"Hello world, this is VexRiscv!\");                  for(unsigned int i=0;i&lt;nleds-1;i++){                          GPIO_A->OUTPUT = 1&lt;&lt;i;                          TIMER_A->CLEARS_TICKS = 0x00020002;                          TIMER_A->LIMIT = 0xFFFF;                          delay(nloops);                          shift_time = TIMER_A->VALUE;                  }                  for(unsigned int i=0;i&lt;nleds-1;i++){                          GPIO_A->OUTPUT = (1&lt;&lt;(nleds-1))>>i;                          delay(nloops);                  }                   printhex(shift_time);          } <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0416\u0438\u0440\u043d\u044b\u043c \u0448\u0440\u0438\u0444\u0442\u043e\u043c \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u044b \u043d\u043e\u0432\u044b\u0435 \u0438\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u043a\u043e\u0434\u0430. \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0441\u0431\u043e\u0440\u043a\u0443 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c:<\/p>\n<pre><code class=\"bash\">rz@devbox:~\/VexRiscv\/scripts\/Murax\/Karnix$ make clean &amp;&amp; make<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0441\u0435 \u043f\u0440\u043e\u0448\u043b\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u043e, \u0442.\u00a0\u0435. \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u043d\u0435\u0442 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u0448\u0438\u0431\u043e\u043a, \u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f, \u0441\u0438\u043d\u0442\u0435\u0437 \u0438 \u043f\u043e\u043b\u043d\u0430\u044f \u0441\u0431\u043e\u0440\u043a\u0430 \u0431\u0438\u0442\u0441\u0442\u0440\u0438\u043c\u0430.<\/p>\n<p>\u041a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043f\u043b\u0430\u0442\u0443 \u00ab\u041a\u0430\u0440\u043d\u043e\u00bb \u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0431\u0438\u0442\u0441\u0442\u0440\u0438\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <strong>make upload<\/strong>. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u0441\u044f \u043a \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u043c\u0443 UART \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430 <strong>minicom<\/strong> \u0438 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432\u0438\u0434\u0430:<\/p>\n<pre><code>rz@butterfly:~ % sudo minicom -b 115200 -D \/dev\/ttyU1  Hello world, this is VexRiscv!                                                    000001AC                                                                          Hello world, this is VexRiscv!                                                    000001AC                                                                          Hello world, this is VexRiscv!                                                    000001AB                                                                          Hello world, this is VexRiscv!                                                    000001AB  <\/code><\/pre>\n<p>\u0412\u044b\u0432\u043e\u0434\u0438\u043c\u043e\u0435 \u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u2014 \u044d\u0442\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0442\u0441\u0447\u0435\u0442\u043e\u0432 \u0442\u0430\u0439\u043c\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u0437\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 delay(). \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0432\u043e \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0430\u043a\u0442\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u0430 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f \u0446\u0438\u043a\u043b\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438: (0xFFFF+1) * 0x01AC \/ 1000000 = <strong>28<\/strong> \u0442\u0430\u043a\u0442\u043e\u0432 \u043d\u0430 \u0446\u0438\u043a\u043b. \u0413\u0434\u0435 0xFFFF \u2014 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c (\u043f\u0440\u0435\u0441\u043a\u0435\u0439\u043b\u0435\u0440), \u0430 1000000 \u0447\u0438\u0441\u043b\u043e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u0446\u0438\u043a\u043b\u0430.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u043c \u0421\u043d\u041a Murax \u0438 \u0432\u043c\u0435\u0441\u0442\u043e <strong>LightShifterPlugin<\/strong> \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c <strong>FullBarrelShifterPlugin<\/strong>. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u0444\u0430\u0439\u043b <strong>Murax.scala<\/strong>, \u043d\u0430\u0439\u0434\u0435\u043c \u0432 \u043d\u0451\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <strong>cpuPlugins<\/strong>, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432, \u0437\u0430\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u043c \u043f\u043b\u0430\u0433\u0438\u043d <strong>LightShifterPlugin<\/strong> \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c <strong>FullBarrelShifterPlugin<\/strong>: <\/p>\n<pre><code class=\"scala\">cpuPlugins = ArrayBuffer(       new IBusSimplePlugin(        ...       ),       new SrcPlugin(          ...       ),        \/\/new LightShifterPlugin,        new FullBarrelShifterPlugin,        new HazardSimplePlugin(          ...       ),<\/code><\/pre>\n<p>\u0415\u0449\u0435 \u0440\u0430\u0437 \u043f\u0435\u0440\u0435\u0441\u043e\u0431\u0435\u0440\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <strong>make clean &amp;&amp; make<\/strong>, \u043f\u043e \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044e \u0441\u0431\u043e\u0440\u043a\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043c \u0431\u0438\u0442\u0441\u0442\u0440\u0438\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <strong>make upload<\/strong>, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c <strong>minicom<\/strong> \u0438 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432\u0438\u0434\u0430:<\/p>\n<pre><code>Hello world, this is VexRiscv!  000000C7  Hello world, this is VexRiscv!  000000C7  Hello world, this is VexRiscv!  000000C6  Hello world, this is VexRiscv!  000000C6  Hello world, this is VexRiscv!  000000C7 <\/code><\/pre>\n<p>\u0412\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0447\u0438\u0441\u043b\u043e \u043e\u0442\u0441\u0447\u0435\u0442\u043e\u0432 \u0442\u0430\u0439\u043c\u0435\u0440\u0430 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u043b\u043e\u0441\u044c, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <strong>delay()<\/strong> \u0441\u0442\u0430\u043b\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u0435\u0435. \u041f\u0435\u0440\u0435\u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0432 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u0430\u043a\u0442\u043e\u0432: (0xFFFF+1) * 0x00C7 \/ 1000000 = <strong>13<\/strong>. \u0422.\u0435. \u0432\u0440\u0435\u043c\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u0434\u043d\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0446\u0438\u043a\u043b\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 <strong>delay()<\/strong> \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u043b\u043e\u0441\u044c \u043d\u0430 <strong>15<\/strong> \u0442\u0430\u043a\u0442\u043e\u0432. \u0418 \u044d\u0442\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u0435\u043e\u0440\u0438\u0438: \u043c\u0430\u0448\u0438\u043d\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 <strong>slli t1,t1,0x10<\/strong> \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0442\u0435\u043b\u043e \u0446\u0438\u043a\u043b\u0430, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0441\u0434\u0432\u0438\u0433 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 <strong>t1<\/strong> (\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 #1) \u0432\u043b\u0435\u0432\u043e \u043d\u0430 16 \u0431\u0438\u0442. \u0412 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0437\u0430 16 \u0442\u0430\u043a\u0442\u043e\u0432, \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u2014 \u0437\u0430 \u043e\u0434\u0438\u043d \u0442\u0430\u043a\u0442, \u0442.\u00a0\u0435. \u043d\u0430 15 \u0442\u0430\u043a\u0442\u043e\u0432 \u0431\u044b\u0441\u0442\u0440\u0435\u0435!<\/p>\n<p>\u0410 \u0441\u0435\u0439\u0447\u0430\u0441 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u0443\u044e \u043f\u0440\u0438 \u0441\u0438\u043d\u0442\u0435\u0437\u0435.<\/p>\n<p>\u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 <strong>LightShifterPlugin<\/strong>, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0435\u0433\u043e \u043e\u0431\u043b\u0435\u0433\u0447\u0435\u043d\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441\u0434\u0432\u0438\u0433\u0430 \u043d\u0430 N \u0431\u0438\u0442 \u0437\u0430 N \u0442\u0430\u043a\u0442\u043e\u0432:<\/p>\n<pre><code>Info: Device utilisation:  Info:             TRELLIS_IO:    15\/  197     7%  Info:                   DCCA:     2\/   56     3%  Info:                 DP16KD:    48\/   56    85%  ... Info:                EHXPLLL:     1\/    2    50%  ... Info:             TRELLIS_FF:  1325\/24288     5%  Info:           TRELLIS_COMB:  2255\/24288     9%  Info:           TRELLIS_RAMW:    36\/ 3036     1%   Info: Max frequency for clock                          '$glbnet$clk75': 77.29 MHz (PASS at 75.00 MHz)  Info: Max frequency for clock '$glbnet$io_core_jtag_tck$TRELLIS_IO_IN': 118.46 MHz (PASS at 12.00 MHz) <\/code><\/pre>\n<p>\u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u00ab\u043f\u043e\u043b\u043d\u043e\u0433\u043e \u0431\u043e\u0447\u043a\u043e\u0432\u043e\u0433\u043e \u0441\u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044f\u00bb, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c\u043e\u0433\u043e \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u043c <strong>FullBarrelShifterPlugin<\/strong>, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443:<\/p>\n<pre><code>Info: Device utilisation:  Info:             TRELLIS_IO:    15\/  197     7%  Info:                   DCCA:     2\/   56     3%  Info:                 DP16KD:    48\/   56    85%  ... Info:                EHXPLLL:     1\/    2    50%  ... Info:             TRELLIS_FF:  1353\/24288     5%  Info:           TRELLIS_COMB:  2447\/24288    10%  Info:           TRELLIS_RAMW:    36\/ 3036     1%  Info: Max frequency for clock                          'clk75': 79.73 MHz (PASS at 75.00 MHz)  Info: Max frequency for clock 'io_core_jtag_tck$TRELLIS_IO_IN': 124.01 MHz (PASS at 12.00 MHz) <\/code><\/pre>\n<p>\u0422\u0430\u043a\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0442\u0443\u043b\u0447\u0435\u0439\u043d\u0430 \u043c\u043d\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u043e. \u041c\u043e\u0451 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043a\u043e\u0434 \u00ab\u0431\u043e\u0447\u043a\u043e\u0432\u043e\u0433\u043e \u0441\u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044f\u00bb \u0445\u043e\u0440\u043e\u0448\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438 \u0441\u0438\u043d\u0442\u0435\u0437\u0430\u0442\u043e\u0440\u043e\u043c \u0438 \u043f\u043b\u0435\u0439\u0441\u0435\u0440\u043e\u043c. \u041e\u0442\u0447\u0430\u0441\u0442\u0438 \u044d\u0442\u043e \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u043e\u0439, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f (\u0434\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432) \u2014 \u0443\u0436\u0435 \u043d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u00ab\u0431\u043e\u0447\u043a\u043e\u0432\u043e\u0439 \u0441\u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044c\u00bb \u0431\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u0435\u043d \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f STA.<\/p>\n<p>\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u0434\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438:<\/p>\n<p>\u0414\u043b\u044f <strong>LightShifterPlugin<\/strong>:<\/p>\n<pre><code>Info: Max frequency for clock                          '$glbnet$clk75': 49.10 MHz (FAIL at 75.00 MHz)  Info: Max frequency for clock '$glbnet$io_core_jtag_tck$TRELLIS_IO_IN': 156.32 MHz (PASS at 12.00 MHz) <\/code><\/pre>\n<p>\u0414\u043b\u044f <strong>FullBarrelShifterPlugin<\/strong>:<\/p>\n<pre><code>Info: Max frequency for clock                          '$glbnet$clk75': 51.05 MHz (FAIL at 75.00 MHz)  Info: Max frequency for clock '$glbnet$io_core_jtag_tck$TRELLIS_IO_IN': 124.73 MHz (PASS at 12.00 MHz) <\/code><\/pre>\n<p><a class=\"anchor\" name=\"17\" id=\"17\"><\/a><\/p>\n<h2> 17. \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u0432\u043e\u0438 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0438 (IP-\u0431\u043b\u043e\u043a\u0438)<\/h2>\n<p>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0421\u043d\u041a Murax \u0438 \u044f\u0434\u0440\u0430 VexRiscv \u0432 \u0435\u0433\u043e \u0441\u043e\u0441\u0442\u0430\u0432\u0435, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 VexRiscv, \u0441\u043b\u0443\u0436\u0438\u0442 \u0434\u043b\u044f \u0446\u0435\u043b\u0435\u0439 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0438 \u0438\u043c\u0435\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438. \u041d\u0430\u0441\u0442\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b Murax \u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u0421\u043d\u041a, \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0443\u044e \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0448\u0438\u0440\u043e\u043a\u043e\u0433\u043e \u0441\u043f\u0435\u043a\u0442\u0440\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0437\u0430\u0434\u0430\u0447.<\/p>\n<p><a class=\"anchor\" name=\"17.1\" id=\"17.1\"><\/a><\/p>\n<h3> 17.1 \u041c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u043d\u044b\u0439 \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0439 \u0442\u0430\u0439\u043c\u0435\u0440 MTIME<\/h3>\n<p>\u0414\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u043d\u044b\u0439 \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0439 \u0442\u0430\u0439\u043c\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u043d\u043e\u0442\u043e\u043d\u043d\u043e \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u0435\u0442 \u0438 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f (\u0438\u043b\u0438 \u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0440\u0435\u0434\u043a\u043e). \u0421 \u0442\u0430\u043a\u0438\u043c \u0442\u0430\u0439\u043c\u0435\u0440\u043e\u043c \u0443\u0434\u043e\u0431\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u0440\u0438 \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0438 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043a\u0430\u043a, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0433\u043b\u0430\u0432\u0435. \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u0442\u0430\u0439\u043c\u0435\u0440 \u043d\u0435 \u0441\u043b\u043e\u0436\u043d\u043e, \u044f\u0437\u044b\u043a SpinalHDL \u0443\u0436\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u044b, \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u043e\u0436\u0438\u0442\u044c \u0438\u0445 \u0432\u043c\u0435\u0441\u0442\u0435 \u0438 \u043f\u043e\u0434\u0432\u044f\u0437\u0430\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0439\u0441\u044f IP-\u0431\u043b\u043e\u043a \u043a \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0439\u043d\u043e\u0439 \u0448\u0438\u043d\u0435 <strong>Apb3<\/strong>. \u0421\u0435\u0439\u0447\u0430\u0441 \u043c\u044b \u044d\u0442\u043e \u0438 \u043f\u0440\u043e\u0434\u0435\u043b\u0430\u0435\u043c. <\/p>\n<p> \u0421\u0445\u0435\u043c\u0430 \u043d\u0430\u0448\u0435\u0433\u043e \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u043d\u043e\u0433\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0434\u0432\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430-\u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430. \u041f\u0435\u0440\u0432\u044b\u0439 \u0441\u0447\u0435\u0442\u0447\u0438\u043a, <strong>counter<\/strong> \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 8 \u0431\u0438\u0442, \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0447\u0438\u0441\u043b\u043e \u0442\u0430\u043a\u0442\u043e\u0432 \u0434\u043e \u043f\u043e\u043b\u043d\u043e\u0439 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u044b, \u043e\u043f\u0438\u0440\u0430\u044f\u0441\u044c \u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 <strong>clockMHz<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u0437\u0432\u043d\u0435 \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u043a\u043b\u043e\u043a\u0430 \u0432 \u043c\u0435\u0433\u0430\u0433\u0435\u0440\u0446\u0430\u0445. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043f\u0440\u0438 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 <strong>clockMHz<\/strong> = 75.0 \u041c\u0413\u0446, \u044d\u0442\u043e\u0442 \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 75 &#8212; 1 = 74. \u0412\u0442\u043e\u0440\u043e\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440-\u0441\u0447\u0435\u0442\u0447\u0438\u043a, <strong>microCounter<\/strong> \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u044c\u044e 32 \u0431\u0438\u0442\u0430, \u044d\u0442\u043e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043d\u0430\u0448 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u043d\u044b\u0439 \u0442\u0430\u0439\u043c\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0440\u0430\u0441\u0442\u0430\u0442\u044c \u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0443 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043a\u043e\u0433\u0434\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f  <strong>clockMHz<\/strong> \u2014 1. \u0421\u0438\u0433\u043d\u0430\u043b <strong>io.micros<\/strong> \u0431\u0443\u0434\u0435\u0442 \u0441\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430 <strong>microCounter<\/strong> \u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 (\u0441\u0438\u0433\u043d\u0430\u043b) \u043d\u0430\u0448\u0435\u0433\u043e \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0430. \u0412\u043e\u0442 \u043a\u0430\u043a \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 SpinalHDL:<\/p>\n<pre><code class=\"scala\">package mylib  import spinal.core._  import spinal.lib._  import spinal.lib.bus.amba3.apb._  import spinal.lib.bus.misc._  case class MachineTimer(clockMHz: Int = 25) extends Component {    val io = new Bundle {      val micros = out UInt(32 bits)    }    val counter = Reg(UInt(8 bits))    val microCounter = Reg(UInt(32 bits))    io.micros := microCounter    counter := counter + 1    when (counter === clockMHz - 1) {      counter := 0;      microCounter := microCounter + 1    }    def driveFrom(busCtrl : BusSlaveFactory, baseAddress : Int = 0) () = new Area {      busCtrl.read(io.micros, baseAddress)    }  } <\/code><\/pre>\n<p>\u041c\u0435\u0442\u043e\u0434 <strong>driveFrom()<\/strong> \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0443 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 <strong>io.micros<\/strong> \u043a \u0448\u0438\u043d\u0435  <strong>BusSlaveFactory<\/strong> \u043f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 \u0441\u043b\u043e\u0432\u0430 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <strong>baseAddress<\/strong>. <strong>BusSlaveFactory<\/strong> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0448\u0438\u043d\u043e\u0439 \u0434\u043b\u044f \u043c\u043e\u0441\u0442\u0430 <strong>Apb3<\/strong>, \u0441\u043c\u043e\u0442\u0440\u044f\u0449\u0435\u0439 \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438, \u0430 \u043d\u0430\u0448\u0435 \u043d\u043e\u0432\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0431\u0443\u0434\u0435\u0442 \u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0441\u043b\u044d\u0439\u0432\u043e\u043c \u043d\u0430 \u044d\u0442\u043e\u0439 \u0448\u0438\u043d\u0435.<\/p>\n<p>\u0414\u043b\u044f \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u043d\u0430\u0448\u0435\u0433\u043e \u043d\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0435\u0449\u0435 \u043e\u0434\u0438\u043d, \u043e\u0431\u0435\u0440\u0442\u043e\u0447\u043d\u044b\u0439, \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 <strong>Apb3MachineTimer<\/strong> &#8212; \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u0441\u0435\u0431\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 <strong>MachineTimer<\/strong> \u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 <strong>Apb3SlaveFactory<\/strong>. <strong>Apb3SlaveFactory<\/strong> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c \u0434\u043b\u044f \u043c\u043e\u0441\u0442\u0430 <strong>Apb3<\/strong>. \u041e\u0431\u0435\u0440\u0442\u043e\u0447\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0442\u0430\u043a\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0443 \u043a\u043e\u0434\u0430, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0449\u0443\u044e \u0441\u0432\u044f\u0437\u044c \u043c\u0435\u0436\u0434\u0443 \u043d\u043e\u0432\u044b\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u043c \u0438 <strong>Apb3<\/strong>. \u041a\u043e\u0434 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u0431\u0435\u0440\u0442\u043e\u0447\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u043d\u0430 SpinalHDL \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"scala\">case class Apb3MachineTimer(clockMHz : Int = 25) extends Component {    val io = new Bundle {      val apb = slave(Apb3(Apb3Config(addressWidth = 8, dataWidth = 32)))    }    val busCtrl = Apb3SlaveFactory(io.apb)    val mtCtrl = MachineTimerCtrl(clockMHz)    mtCtrl.driveFrom(busCtrl)() \/\/ connect component to the bus } <\/code><\/pre>\n<p>\u0421\u0442\u0440\u043e\u0433\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u044d\u0442\u043e\u0442 \u043e\u0431\u0435\u0440\u0442\u043e\u0447\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c, \u043d\u043e \u0442\u043e\u0433\u0434\u0430 \u043d\u0430\u043c \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0431\u044b \u0432\u044b\u0442\u0430\u0449\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043d\u0430 \u0432\u0435\u0440\u0445\u043d\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c, \u0432 Murax, \u0447\u0442\u043e \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u044d\u0441\u0442\u0435\u0442\u0438\u0447\u043d\u043e.<\/p>\n<p>\u0420\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u043c \u0432\u0435\u0441\u044c \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0432 \u043e\u0434\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 <strong>.\/src\/main\/scala\/mylib\/MachineTimer.scala<\/strong>, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u043e\u0434\u043a\u0430\u0442\u0430\u043b\u043e\u0433 <strong>.\/src\/main\/scala\/mylib<\/strong> \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043d\u0430\u0448 \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043a \u0448\u0438\u043d\u0435 <strong>Apb3<\/strong> \u0432\u043d\u0443\u0442\u0440\u0438 \u0421\u043d\u041a Murax, \u043d\u0430\u0440\u0430\u0432\u043d\u0435 \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0435\u0439, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u0432 \u0430\u0441\u0441\u043e\u0446\u0438\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439\u0441\u044f \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <strong>apbMapping<\/strong>, \u0443\u043a\u0430\u0437\u0430\u0432 \u0430\u0434\u0440\u0435\u0441 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 <strong>0xB0000<\/strong>. \u0412\u0441\u0442\u0430\u0432\u0438\u043c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u0436\u0438\u0440\u043d\u044b\u043c \u043a\u043e\u0434 \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0430:<\/p>\n<pre><code class=\"scala\">    val timer = new MuraxApb3Timer()      timerInterrupt setWhen(timer.io.interrupt)      apbMapping += timer.io.apb     -> (0x20000, 4 kB)       val machineTimer = Apb3MachineTimer(coreFrequency.toInt \/ 1000000)      apbMapping += machineTimer.io.apb   -> (0xB0000, 4 kB)<\/code><\/pre>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u043d\u0430\u0448\u0435\u0433\u043e \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u043d\u043e\u0433\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0438\u0437 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b  \u043f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 32-\u0445 \u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443: 0xF0000000 + 0xB0000 = <strong>0xF00B0000<\/strong>. \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435 SBT \u043d\u0430\u0448\u0435\u043b \u043a\u043e\u0434 \u043d\u0430\u0448\u0435\u0433\u043e \u043d\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430, \u043f\u043e\u043c\u043e\u0436\u0435\u043c \u0435\u043c\u0443 \u0432 \u044d\u0442\u043e\u043c, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 \u0444\u0430\u0439\u043b\u0430 Murax.scala \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443 \u0441\u0442\u0440\u043e\u043a\u0443:<\/p>\n<pre><code>import mylib.Apb3MachineTimer<\/code><\/pre>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043d\u0430\u043c\u0438 \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0439 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u043d\u044b\u0439 \u0442\u0430\u0439\u043c\u0435\u0440, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u0444\u0430\u0439\u043b <strong>src\/murax.h<\/strong> \u043c\u0430\u043a\u0440\u043e <strong>MTIME<\/strong> \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0443:<\/p>\n<pre><code>#define MTIME   (*(volatile unsigned long*)(0xF00B0000))<\/code><\/pre>\n<p>\u0410 \u0432 \u043a\u043e\u0434 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u00abhello_world\u00bb \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>delay()<\/strong> \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u043d\u043e\u0433\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0430. \u041c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0421\u0438 \u043a\u043e\u0434 \u0432 \u0444\u0430\u0439\u043b\u0435 <strong>src\/main.c<\/strong> \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d \u043d\u0438\u0436\u0435:<\/p>\n<pre><code class=\"cpp\">       while(1){                  unsigned int shift_time;                  unsigned int t1, t2;                  println(\"Hello world, this is VexRiscv!\");                  for(unsigned int i=0;i&lt;nleds-1;i++){                          GPIO_A->OUTPUT = 1&lt;&lt;i;                          TIMER_A->CLEARS_TICKS = 0x00020002;                          TIMER_A->LIMIT = 0xFFFF;                          t1 = MTIME;                          delay(nloops);                          t2 = MTIME;                          shift_time = TIMER_A->VALUE;                  }                  for(unsigned int i=0;i&lt;nleds-1;i++){                          GPIO_A->OUTPUT = (1&lt;&lt;(nleds-1))>>i;                          delay(nloops);                  }                   printhex(shift_time);                  printhex(t2 - t1);          } <\/code><\/pre>\n<p>\u041a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0441\u0431\u043e\u0440\u043a\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <strong>make clean &amp;&amp; make<\/strong>, \u0443\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u043c \u0432\u0441\u0435 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0438 \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0438, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043f\u043b\u0430\u0442\u0443 \u00ab\u041a\u0430\u0440\u043d\u043e\u00bb \u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0431\u0438\u0442\u0441\u0442\u0440\u0438\u043c. \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430 <strong>minicom<\/strong> \u0438 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c \u0432 \u043f\u043e\u0440\u0442\u0443 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438:<\/p>\n<pre><code>Hello world, this is VexRiscv!                                                    000000C7                                                                          0002A516                                                                          Hello world, this is VexRiscv!                                                    000000C6                                                                          0002A515                                                                          Hello world, this is VexRiscv!                                                    000000C6                                                                          0002A515<\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u043f\u0435\u0440\u0432\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u2014 \u044d\u0442\u043e \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0435 \u0447\u0438\u0441\u043b\u0430 \u0442\u0430\u043a\u0442\u043e\u0432 (\u0443\u043c\u043d\u043e\u0436\u0435\u043d\u043d\u043e\u0435 \u043d\u0430 65536), \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0435 \u0442\u0430\u0439\u043c\u0435\u0440\u043e\u043c TIMER_A, \u0430 \u0432\u0442\u043e\u0440\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u2014 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0437\u0430\u043c\u0435\u0440\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u043d\u043e\u0433\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0430. \u0427\u0438\u0441\u043b\u043e 0002A515 \u0435\u0441\u0442\u044c \u043d\u0435 \u0447\u0442\u043e \u0438\u043d\u043e\u0435 \u043a\u0430\u043a 173333 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>delay(1000000)<\/strong>.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u043d\u044b\u0439 \u0442\u0430\u0439\u043c\u0435\u0440, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043b\u0435\u0433\u043a\u043e \u0441\u043e\u043e\u0440\u0443\u0434\u0438\u0442\u044c \u0441\u0435\u0440\u0432\u0438\u0441\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>delay_us()<\/strong> \u0438 <strong>delay_ms()<\/strong>, \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043c\u0438\u043a\u0440\u043e- \u0438 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434:<\/p>\n<pre><code class=\"cpp\">void delay_us(unsigned int us){          unsigned int t = MTIME;          while(MTIME - t &lt; us);  }  void delay_ms(unsigned int ms){          for(int i = 0; i &lt; ms; i++)                  delay_us(1000);  } <\/code><\/pre>\n<p><a class=\"anchor\" name=\"17.2\" id=\"17.2\"><\/a><\/p>\n<h3> 17.2 \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0443 SRAM<\/h3>\n<p>\u041d\u0430 \u043f\u043b\u0430\u0442\u0435 \u00ab\u041a\u0430\u0440\u043d\u043e\u00bb \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0440\u0430\u0441\u043f\u0430\u044f\u043d\u043d\u0430\u044f \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u0430\u044f \u043a \u041f\u041b\u0418\u0421 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0430 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 <a href=\"https:\/\/www.olimex.com\/Products\/_resources\/ds_k6r4016v1d_rev40.pdf\" rel=\"noopener noreferrer nofollow\">K6R4016V1D-10<\/a> \u043e\u0431\u044a\u0435\u043c\u043e\u043c 16&#215;256 \u041a\u0411 (512 \u041a\u0411) \u0438 \u0431\u044b\u043b\u043e \u0431\u044b \u043e\u0447\u0435\u043d\u044c \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u043f\u0430\u043c\u044f\u0442\u044c \u0432 \u0441\u0432\u043e\u0438\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0445, \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0445 \u043d\u0430 \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u044f\u0434\u0440\u0435. \u042d\u0442\u0430 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0430 \u0438\u043c\u0435\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0441\u0438\u0433\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u043b\u0438\u043d\u0438\u0439: <\/p>\n<ul>\n<li>\n<p><strong>A0-A9<\/strong> (\u043b\u0438\u043d\u0438\u0438 \u0432\u044b\u0431\u043e\u0440\u0430 \u0441\u0442\u0440\u043e\u043a\u0438) \u0438 A10-A17 (\u043b\u0438\u043d\u0438\u0438 \u0432\u044b\u0431\u043e\u0440\u0430 \u0441\u0442\u043e\u043b\u0431\u0446\u0430) \u0432\u043c\u0435\u0441\u0442\u0435 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044e\u0442 \u0430\u0434\u0440\u0435\u0441 16-\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430, \u0442.\u00a0\u0435. \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u0441\u0435\u0433\u043e 262144 \u0441\u043b\u043e\u0432 \u043f\u043e 16 \u0431\u0438\u0442.<\/p>\n<\/li>\n<li>\n<p><strong>D0-D15<\/strong> \u2014 \u043b\u0438\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<\/li>\n<li>\n<p><strong>#CS<\/strong> \u2014 \u0441\u0438\u0433\u043d\u0430\u043b \u0432\u044b\u0431\u043e\u0440\u0430 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b, \u043b\u043e\u0433 \u00ab0\u00bb \u2014 \u0432\u044b\u0431\u0440\u0430\u043d\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>#WE<\/strong> \u2014 \u0441\u0438\u0433\u043d\u0430\u043b \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u043f\u0430\u043c\u044f\u0442\u044c, \u043b\u043e\u0433 \u00ab0\u00bb &#8212; \u0437\u0430\u043f\u0438\u0441\u044c, \u043b\u043e\u0433 \u00ab1\u00bb &#8212; \u0447\u0442\u0435\u043d\u0438\u0435.<\/p>\n<\/li>\n<li>\n<p><strong>#OE<\/strong> \u2014 \u0441\u0438\u0433\u043d\u0430\u043b \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u043d\u0443\u044e \u0448\u0438\u043d\u0443 \u0434\u0430\u043d\u043d\u044b\u0445. \u041b\u043e\u0433 \u00ab0\u00bb &#8212; \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0430\u043a\u0442\u0438\u0432\u043d\u044b, \u043b\u043e\u0433 \u00ab1\u00bb &#8212; \u043b\u0438\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0432\u044b\u0441\u043e\u043a\u043e\u0433\u043e \u0438\u043c\u043f\u0435\u0434\u0430\u043d\u0441\u0430.<\/p>\n<\/li>\n<li>\n<p> <strong>#LB<\/strong> \u2014 \u0441\u0438\u0433\u043d\u0430\u043b, \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u044e\u0449\u0438\u0439 \u0437\u0430\u043f\u0438\u0441\u044c \u043c\u043b\u0430\u0434\u0448\u0435\u0433\u043e \u0431\u0430\u0439\u0442\u0430.<\/p>\n<\/li>\n<li>\n<p> <strong>#UB<\/strong> \u2014 \u0441\u0438\u0433\u043d\u0430\u043b, \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u044e\u0449\u0438\u0439 \u0437\u0430\u043f\u0438\u0441\u044c \u0441\u0442\u0430\u0440\u0448\u0435\u0433\u043e \u0431\u0430\u0439\u0442\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u043f\u0438\u0448\u0435\u043c \u044d\u0442\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u043b\u0438\u043d\u0438\u0438 \u0432 LPF \u0444\u0430\u0439\u043b\u0435, \u0447\u0442\u043e\u0431\u044b \u0438\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u0444\u0430\u0439\u043b karnix_cabga256.lpf \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438:<\/p>\n<details class=\"spoiler\">\n<summary>\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b io_sram \u043a karnix_cabga256.lpf<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>LOCATE COMP \"io_sram_cs\" SITE \"H15\";            # SRAM #CS  IOBUF PORT \"io_sram_cs\" IO_TYPE=LVCMOS33;  LOCATE COMP \"io_sram_we\" SITE \"K14\";            # SRAM #WE  IOBUF PORT \"io_sram_we\" IO_TYPE=LVCMOS33;  LOCATE COMP \"io_sram_oe\" SITE \"J14\";            # SRAM #OE  IOBUF PORT \"io_sram_oe\" IO_TYPE=LVCMOS33;  LOCATE COMP \"io_sram_bhe\" SITE \"J16\";           # SRAM #BHE  IOBUF PORT \"io_sram_bhe\" IO_TYPE=LVCMOS33;  LOCATE COMP \"io_sram_ble\" SITE \"J15\";           # SRAM #BLE  IOBUF PORT \"io_sram_ble\" IO_TYPE=LVCMOS33;  LOCATE COMP \"io_sram_dat[0]\" SITE \"L16\";        # SRAM D00  IOBUF PORT \"io_sram_dat[0]\" IO_TYPE=LVCMOS33;  LOCATE COMP \"io_sram_dat[1]\" SITE \"L15\";        # SRAM D01  IOBUF PORT \"io_sram_dat[1]\" IO_TYPE=LVCMOS33;  LOCATE COMP \"io_sram_dat[2]\" SITE \"M16\";        # SRAM D02  IOBUF PORT \"io_sram_dat[2]\" IO_TYPE=LVCMOS33;  LOCATE COMP \"io_sram_dat[3]\" SITE \"M15\";        # SRAM D03  IOBUF PORT \"io_sram_dat[3]\" IO_TYPE=LVCMOS33;  LOCATE COMP \"io_sram_dat[4]\" SITE \"K13\";        # SRAM D04  IOBUF PORT \"io_sram_dat[4]\" IO_TYPE=LVCMOS33;  LOCATE COMP \"io_sram_dat[5]\" SITE \"K12\";        # SRAM D05  IOBUF PORT \"io_sram_dat[5]\" IO_TYPE=LVCMOS33;  LOCATE COMP \"io_sram_dat[6]\" SITE \"L13\";        # SRAM D06  IOBUF PORT \"io_sram_dat[6]\" IO_TYPE=LVCMOS33;  LOCATE COMP \"io_sram_dat[7]\" SITE \"L12\";        # SRAM D07  IOBUF PORT \"io_sram_dat[7]\" IO_TYPE=LVCMOS33;  LOCATE COMP \"io_sram_dat[8]\" SITE \"N16\";        # SRAM D08  IOBUF PORT \"io_sram_dat[8]\" IO_TYPE=LVCMOS33;  LOCATE COMP \"io_sram_dat[9]\" SITE \"P15\";        # SRAM D09  IOBUF PORT \"io_sram_dat[9]\" IO_TYPE=LVCMOS33;  LOCATE COMP \"io_sram_dat[10]\" SITE \"L14\";       # SRAM D10  IOBUF PORT \"io_sram_dat[10]\" IO_TYPE=LVCMOS33;  LOCATE COMP \"io_sram_dat[11]\" SITE \"M14\";       # SRAM D11  IOBUF PORT \"io_sram_dat[11]\" IO_TYPE=LVCMOS33;  LOCATE COMP \"io_sram_dat[12]\" SITE \"P16\";       # SRAM D12  IOBUF PORT \"io_sram_dat[12]\" IO_TYPE=LVCMOS33;  LOCATE COMP \"io_sram_dat[13]\" SITE \"R16\";       # SRAM D13  IOBUF PORT \"io_sram_dat[13]\" IO_TYPE=LVCMOS33;  LOCATE COMP \"io_sram_dat[14]\" SITE \"M13\";       # SRAM D14  IOBUF PORT \"io_sram_dat[14]\" IO_TYPE=LVCMOS33;  LOCATE COMP \"io_sram_dat[15]\" SITE \"N14\";       # SRAM D15  IOBUF PORT \"io_sram_dat[15]\" IO_TYPE=LVCMOS33;  LOCATE COMP \"io_sram_addr[0]\" SITE \"N13\";       # SRAM A00  IOBUF PORT \"io_sram_addr[0]\" IO_TYPE=LVCMOS33;  LOCATE COMP \"io_sram_addr[1]\" SITE \"P14\";       # SRAM A01  IOBUF PORT \"io_sram_addr[1]\" IO_TYPE=LVCMOS33;  LOCATE COMP \"io_sram_addr[2]\" SITE \"R15\";       # SRAM A02  IOBUF PORT \"io_sram_addr[2]\" IO_TYPE=LVCMOS33;  LOCATE COMP \"io_sram_addr[3]\" SITE \"T15\";       # SRAM A03  IOBUF PORT \"io_sram_addr[3]\" IO_TYPE=LVCMOS33;  LOCATE COMP \"io_sram_addr[4]\" SITE \"P13\";       # SRAM A04  IOBUF PORT \"io_sram_addr[4]\" IO_TYPE=LVCMOS33;  LOCATE COMP \"io_sram_addr[5]\" SITE \"R14\";       # SRAM A05  IOBUF PORT \"io_sram_addr[5]\" IO_TYPE=LVCMOS33;  LOCATE COMP \"io_sram_addr[6]\" SITE \"R13\";       # SRAM A06  IOBUF PORT \"io_sram_addr[6]\" IO_TYPE=LVCMOS33;  LOCATE COMP \"io_sram_addr[7]\" SITE \"T14\";       # SRAM A07  IOBUF PORT \"io_sram_addr[7]\" IO_TYPE=LVCMOS33;  LOCATE COMP \"io_sram_addr[8]\" SITE \"R12\";       # SRAM A08  IOBUF PORT \"io_sram_addr[8]\" IO_TYPE=LVCMOS33;  LOCATE COMP \"io_sram_addr[9]\" SITE \"T13\";       # SRAM A09  IOBUF PORT \"io_sram_addr[9]\" IO_TYPE=LVCMOS33;  LOCATE COMP \"io_sram_addr[10]\" SITE \"M12\";      # SRAM A10  IOBUF PORT \"io_sram_addr[10]\" IO_TYPE=LVCMOS33;  LOCATE COMP \"io_sram_addr[11]\" SITE \"N12\";      # SRAM A11  IOBUF PORT \"io_sram_addr[11]\" IO_TYPE=LVCMOS33;  LOCATE COMP \"io_sram_addr[12]\" SITE \"M11\";      # SRAM A12  IOBUF PORT \"io_sram_addr[12]\" IO_TYPE=LVCMOS33;  LOCATE COMP \"io_sram_addr[13]\" SITE \"N11\";      # SRAM A13  IOBUF PORT \"io_sram_addr[13]\" IO_TYPE=LVCMOS33;  LOCATE COMP \"io_sram_addr[14]\" SITE \"P11\";      # SRAM A14  IOBUF PORT \"io_sram_addr[14]\" IO_TYPE=LVCMOS33;  LOCATE COMP \"io_sram_addr[15]\" SITE \"P12\";      # SRAM A15  IOBUF PORT \"io_sram_addr[15]\" IO_TYPE=LVCMOS33;  LOCATE COMP \"io_sram_addr[16]\" SITE \"K16\";      # SRAM A16  IOBUF PORT \"io_sram_addr[16]\" IO_TYPE=LVCMOS33;  LOCATE COMP \"io_sram_addr[17]\" SITE \"K15\";      # SRAM A17  IOBUF PORT \"io_sram_addr[17]\" IO_TYPE=LVCMOS33; <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0418 \u043f\u0435\u0440\u0435\u0434\u0430\u0434\u0438\u043c \u044d\u0442\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0438\u0437 \u043c\u043e\u0434\u0443\u043b\u044f <strong>toplevel<\/strong> \u0432 \u043c\u043e\u0434\u0443\u043b\u044c <strong>Murax<\/strong> \u0432 \u043e\u0431\u0435\u0440\u0442\u043e\u0447\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 <strong>toplevel.v<\/strong>, \u043a\u0430\u043a \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u0432 \u0432\u044b\u0434\u0435\u0440\u0436\u043a\u0435 \u043d\u0438\u0436\u0435:<\/p>\n<details class=\"spoiler\">\n<summary>\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b io_sram \u043a toplevel.v<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>module toplevel(      input   io_clk25,      input   [3:0] io_key,      output  [3:0] io_led,      input   io_core_jtag_tck,      output  io_core_jtag_tdo,      input   io_core_jtag_tdi,      input   io_core_jtag_tms,      output  io_uart_debug_txd,      input   io_uart_debug_rxd,      output  io_sram_cs,  \/\/ #CS      output  io_sram_we,  \/\/ #WE      output  io_sram_oe,  \/\/ #OE      output  io_sram_bhe, \/\/ #UB      output  io_sram_ble, \/\/ #LB      output  [17:0] io_sram_addr, \/\/ A0-A17      inout   [15:0] io_sram_dat   \/\/ D0-D15    ); ...   Murax murax (      .io_asyncReset(io_key[3]),      \/\/.io_mainClk (io_clk25),      .io_mainClk (clk75),      .io_jtag_tck(io_core_jtag_tck),      .io_jtag_tdi(io_core_jtag_tdi),      .io_jtag_tdo(io_core_jtag_tdo),      .io_jtag_tms(io_core_jtag_tms),      .io_gpioA_read       (io_gpioA_read),      .io_gpioA_write      (io_gpioA_write),      .io_gpioA_writeEnable(io_gpioA_writeEnable),      .io_uart_txd(io_uart_debug_txd),      .io_uart_rxd(io_uart_debug_rxd),      .io_sram_cs(io_sram_cs),      .io_sram_we(io_sram_we),      .io_sram_oe(io_sram_oe),      .io_sram_bhe(io_sram_bhe),      .io_sram_ble(io_sram_ble),      .io_sram_addr(io_sram_addr),      .io_sram_dat(io_sram_dat)    ); <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p><a class=\"anchor\" name=\"17.2.1\" id=\"17.2.1\"><\/a><\/p>\n<h4> 17.2.1 \u0420\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 SRAM<\/h4>\n<p>\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0434\u0443\u043c\u0430\u0435\u043c \u0432\u043e\u0442 \u043e \u0447\u0435\u043c. \u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0442\u0438\u043f\u043e\u0432\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043a \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0435 SRAM. \u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u0442\u0430\u0441\u043a\u0430\u0442\u044c \u0434\u0430\u043b\u0435\u0435 \u043f\u043e \u0432\u0441\u0435\u043c\u0443 \u043a\u043e\u0434\u0443 \u044d\u0442\u0443 \u043f\u0430\u0447\u043a\u0443 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432, \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0435\u0451 \u043a\u0430\u043a \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b, \u0438 \u0442\u043e\u0433\u0434\u0430 \u043d\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0434\u043d\u0443 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e. \u041d\u0430 SpinalHDL \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c.<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043a\u043b\u0430\u0441\u0441 <strong>SramInterface<\/strong> \u0441 \u0434\u0432\u043e\u0439\u043d\u044b\u043c \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435\u043c: \u043e\u0442 \u043a\u043b\u0430\u0441\u0441\u0430 <strong>Bundle<\/strong> (\u0441\u043b\u043e\u0436\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432) \u0438 \u043e\u0442 \u043a\u043b\u0430\u0441\u0441\u0430 <strong>IMasterSlave<\/strong>. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0430\u043c\u043f\u043b\u0443\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0448 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441: \u00ab\u043c\u0430\u0441\u0442\u0435\u0440\u00bb (\u0432\u0435\u0434\u0443\u0449\u0438\u0439) \u0438\u043b\u0438 \u00ab\u0441\u043b\u044d\u0439\u0432\u00bb (\u0432\u0435\u0434\u043e\u043c\u044b\u0439).<\/p>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u043d\u0430\u0448 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u0432 \u0430\u043c\u043f\u043b\u0443\u0430 \u00ab\u043c\u0430\u0441\u0442\u0435\u0440\u00bb, \u0442\u043e \u043c\u044b \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 <strong>asMaster()<\/strong>, \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0435\u0440\u0432\u0438\u0441\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>out()<\/strong> \u0438 <strong>inout()<\/strong>, \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043e\u0442 \u043a\u043b\u0430\u0441\u0441\u0430 <strong>Bundle<\/strong>, \u0434\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432.<\/p>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0430\u0448 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0433\u0438\u0431\u043a\u0438\u043c, \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a \u043d\u0435\u043c\u0443 \u043f\u0430\u0440\u0443 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u2014 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u0437\u0430\u0434\u0430\u044e\u0449\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u044c \u0448\u0438\u043d\u044b \u0430\u0434\u0440\u0435\u0441\u0430 \u0438 \u0448\u0438\u043d\u044b \u0434\u0430\u043d\u043d\u044b\u0445. \u0421\u0434\u0435\u043b\u0430\u0435\u043c \u044d\u0442\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b <strong>SramLayout<\/strong>:<\/p>\n<pre><code class=\"scala\">case class SramLayout(addressWidth: Int, dataWidth : Int){    def bytePerWord = dataWidth\/8    def capacity = BigInt(1) &lt;&lt; addressWidth  } <\/code><\/pre>\n<p>\u0422\u043e\u0433\u0434\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u043f\u0440\u0438\u043c\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0432\u0438\u0434:<\/p>\n<pre><code>case class SramInterface(g : SramLayout) extends Bundle with IMasterSlave{    val addr = inout(Analog(Bits(g.addressWidth bits)))    val dat = inout(Analog(Bits(g.dataWidth bits)))    val cs  = Bool    val we  = Bool    val oe  = Bool    val ble  = Bool    val bhe  = Bool    override def asMaster(): Unit = {      out(cs,we,oe,ble,bhe)      inout(dat, addr)    }  } <\/code><\/pre>\n<p>\u041f\u043e\u043c\u0435\u0441\u0442\u0438\u043c \u0432\u0441\u0435 \u044d\u0442\u043e \u0434\u0435\u043b\u043e \u0432 \u0444\u0430\u0439\u043b <strong>.\/src\/main\/scala\/mylib\/Sram.scala<\/strong>, \u0442\u043e \u0435\u0441\u0442\u044c \u0432 \u0442\u043e\u0442 \u0436\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433, \u0433\u0434\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u043d\u0435\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 <strong>MachineTimer<\/strong>. \u0412 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 \u0444\u0430\u0439\u043b\u0430 \u0442\u0430\u043a\u0436\u0435 \u0443\u043a\u0430\u0436\u0435\u043c \u0438\u043c\u044f \u043f\u0430\u043a\u0435\u0442\u0430 \u0438 \u043f\u0435\u0440\u0435\u0447\u0435\u043d\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a:<\/p>\n<pre><code>package mylib  import spinal.core._  import spinal.lib._  import spinal.lib.bus.simple._  import spinal.lib.io.TriState <\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b <strong>sram<\/strong> \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 <strong>Murax<\/strong>, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0433\u043e \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0421\u043d\u041a. \u041e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u0444\u0430\u0439\u043b <strong>Murax.scala<\/strong> \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<p>\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u043d\u0430\u0448\u0438 \u043d\u043e\u0432\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443:<\/p>\n<pre><code>import mylib.Apb3MachineTimer  import mylib.{SramInterface,SramLayout,PipelinedMemoryBusSram} <\/code><\/pre>\n<p> \u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u043d\u0430\u0439\u0434\u0435\u043c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 Murax \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u043e\u0432\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b sram, \u0441\u0440\u0430\u0437\u0443 \u0443\u043a\u0430\u0437\u0430\u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0448\u0438\u043d \u0430\u0434\u0440\u0435\u0441\u0430 \u0438 \u0434\u0430\u043d\u043d\u044b\u0445:<\/p>\n<pre><code class=\"scala\">case class Murax(config : MuraxConfig) extends Component{    import config._    val io = new Bundle {      \/\/Clocks \/ reset      val asyncReset = in Bool()      val mainClk = in Bool()      \/\/Main components IO      val jtag = slave(Jtag())      ...     val sram = master(SramInterface(SramLayout(addressWidth = 18, dataWidth = 16)))    } <\/code><\/pre>\n<p>\u0421 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c. \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u00ab\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u00bb \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b SRAM, \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u0441 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u00ab\u043c\u0430\u0441\u0442\u0435\u0440\u043e\u043c\u00bb \u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0447\u0435\u0440\u0435\u0437 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0432\u044b\u0448\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u0430 \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u2014 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u0432 \u0440\u043e\u043b\u0438 \u00ab\u0441\u043b\u044d\u0439\u0432\u00bb \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430 \u0448\u0438\u043d\u0435 <strong>MainBus<\/strong>. \u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e  \u0448\u0438\u043d\u0430 <strong>MainBus<\/strong> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0421\u043d\u041a Murax \u043e\u0441\u043d\u043e\u0432\u043e\u0439 \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u043a\u043e\u043d\u043d\u0435\u043a\u0442\u0430 \u0441 \u0435\u0433\u043e \u0447\u0430\u0441\u0442\u044f\u043c\u0438 \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043b\u0430\u0441\u0441\u043e\u043c <strong>PipelinedMemoryBus<\/strong>. \u0422\u043e\u0433\u0434\u0430 \u043a\u043e\u0434 \u00ab\u0437\u0430\u0433\u043e\u0442\u043e\u0432\u043a\u0438\u00bb \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430, \u043d\u0430\u0437\u043e\u0432\u0435\u043c \u0435\u0433\u043e <strong>PipelinedMemoryBusSram<\/strong>, \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"scala\">case class PipelinedMemoryBusSram(pipelinedMemoryBusConfig: PipelinedMemoryBusConfig,                                         sramLayout : SramLayout) extends Component{    val io = new Bundle{      val bus = slave(PipelinedMemoryBus(pipelinedMemoryBusConfig))      val sram = master(SramInterface(sramLayout))    }    ...    \/\/ \u0437\u0434\u0435\u0441\u044c \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 SRAM }<\/code><\/pre>\n<p> \u041d\u0430\u0441\u0442\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0434\u0443\u043c\u0430\u0442\u044c \u043e \u043b\u043e\u0433\u0438\u043a\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b SRAM.  <\/p>\n<p>\u0414\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u043d\u0435 \u0432 \u043a\u0443\u0440\u0441\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439, \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0430 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 (Static Random Access Memory) \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e, \u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u2014 \u0447\u0442\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u044f\u0447\u0435\u0439\u043a\u0438 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0434\u0430\u0447\u0438 \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0443 \u043d\u0430\u0431\u043e\u0440\u0430 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u044e\u0449\u0438\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 (<strong>#CS<\/strong> \u2014 chip-select, <strong>#W<\/strong>E \u2014 write-enable, <strong>#OE<\/strong> &#8212; output enable) \u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0432\u0440\u0435\u043c\u044f. \u042d\u0442\u043e \u0432\u0440\u0435\u043c\u044f, \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u0435 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0435 \u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043a\u0430\u043a \u00abRead Cycle Time\u00bb (<strong>trc<\/strong>)\u0438 \u00abWrite Cycle Time\u00bb (<strong>twc<\/strong>). \u0417\u0430\u0433\u043b\u044f\u043d\u0443\u0432 \u0432 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0443 K6R4016V1D \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043e\u0431\u0430 \u044d\u0442\u0438\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0438\u043c\u0435\u044e\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u2014 \u043e\u0442 <strong>10\u043d\u0441<\/strong>, \u0430 \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u0430\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u043e\u0447\u0442\u0438 <strong>100 \u043c\u043b\u043d<\/strong> \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0438 \u0447\u0442\u0435\u043d\u0438\u044f \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443. \u041c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0430 \u043e\u043f\u0435\u0440\u0438\u0440\u0443\u0435\u0442 16-\u0442\u0438 \u0431\u0438\u0442\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u0442.\u00a0\u0435. \u0437\u0430 \u043e\u0434\u043d\u0443 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0438\u043b\u0438 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043f\u043e 16 \u0431\u0438\u0442 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0434\u0430\u044e\u0442\u0441\u044f \u0438\u043b\u0438 \u0441\u043d\u0438\u043c\u0430\u044e\u0442\u0441\u044f \u0441 \u0448\u0438\u043d\u044b \u0434\u0430\u043d\u043d\u044b\u0445 (\u0441\u0438\u0433\u043d\u0430\u043b\u044b <strong>D0-D15<\/strong>), \u0430 \u0430\u0434\u0440\u0435\u0441 \u0441\u043b\u043e\u0432\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0438\u043b\u0438 \u0441\u0447\u0438\u0442\u0430\u043d\u043e, \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0448\u0438\u043d\u0443 \u0430\u0434\u0440\u0435\u0441\u0430 (\u0441\u0438\u0433\u043d\u0430\u043b\u044b <strong>A0-A17<\/strong>). <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d6d\/720\/efb\/d6d720efbc20e7c0b6ff0c6dabbbf8ca.png\" alt=\"\u0420\u0438\u0441. 28. \u0412\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b \u0434\u043b\u044f \u0446\u0438\u043a\u043b\u0430 \u0447\u0442\u0435\u043d\u0438\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b SRAM K6R4016V1D.\" title=\"\u0420\u0438\u0441. 28. \u0412\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b \u0434\u043b\u044f \u0446\u0438\u043a\u043b\u0430 \u0447\u0442\u0435\u043d\u0438\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b SRAM K6R4016V1D.\" width=\"1182\" height=\"820\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d6d\/720\/efb\/d6d720efbc20e7c0b6ff0c6dabbbf8ca.png\"\/><\/p>\n<div><figcaption><em>\u0420\u0438\u0441. 28. \u0412\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b \u0434\u043b\u044f \u0446\u0438\u043a\u043b\u0430 \u0447\u0442\u0435\u043d\u0438\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b SRAM K6R4016V1D.<\/em><\/figcaption><\/div>\n<\/figure>\n<p> \u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430 \u0440\u0438\u0441. 28, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e \u0430\u0434\u0440\u0435\u0441 \u043f\u043e\u0434\u0430\u0435\u0442\u0441\u044f \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043e\u043f\u0435\u0440\u0435\u0436\u0435\u043d\u0438\u0435\u043c \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u043d\u043e \u0435\u0441\u043b\u0438 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0443\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0430\u044f, \u0442\u043e \u0430\u0434\u0440\u0435\u0441 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u0430\u0432\u0430\u0442\u044c \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u044e\u0449\u0438\u043c\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u0430\u043c\u0438. \u0412 \u043d\u0430\u0448\u0435\u043c \u0434\u0438\u0437\u0430\u0439\u043d\u0435 \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 75 \u041c\u0413\u0446 \u0438\u043b\u0438 \u0438\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u0438\u043c\u0435\u0435\u0442 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c 13\u043d\u0441. \u042d\u0442\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0447\u0442\u0435\u043d\u0438\u044f \u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0443 SRAM \u0437\u0430 \u043e\u0434\u0438\u043d \u0442\u0430\u043a\u0442, \u043f\u043e\u0434\u0430\u0432\u0430\u044f \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0441\u0440\u0430\u0437\u0443. \u0422\u043e \u0435\u0441\u0442\u044c \u0437\u0430 \u043e\u0434\u0438\u043d \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0442\u0430\u043a\u0442 \u043c\u044b \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0447\u0438\u0442\u0430\u0442\u044c \u0438\u043b\u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043f\u043e 16 \u0431\u0438\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 SRAM. \u041e\u0434\u043d\u0430\u043a\u043e, \u043e\u043f\u044b\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e \u043d\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 60 \u041c\u0413\u0446 \u0438 \u0432\u044b\u0448\u0435, \u043f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0431\u0438\u0442\u0444\u043b\u0438\u043f\u044b (\u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445), \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0437\u0430\u043f\u0438\u0441\u044c \u043d\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 75 \u041c\u0413\u0446 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0431\u0435\u0437 \u043e\u0448\u0438\u0431\u043e\u043a. \u042f \u043d\u0435 \u0441\u0442\u0430\u043b \u0432\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u0442\u0430\u043a \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043d\u043e \u043f\u0440\u0438\u0448\u0435\u043b \u043a \u0432\u044b\u0432\u043e\u0434\u0443, \u0447\u0442\u043e \u0434\u043b\u044f \u043d\u0430\u0434\u0435\u0436\u043d\u043e\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e 16-\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u0432\u0430 \u0442\u0430\u043a\u0442\u0430.<\/p>\n<p>\u0412\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u044f\u0434\u0440\u043e VexRiscv \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f 32-\u0445 \u0431\u0438\u0442\u043d\u044b\u043c, \u0430 \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u044f\u0434\u0440\u043e \u0437\u0430 \u043e\u0434\u0438\u043d \u0442\u0430\u043a\u0442 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0438\u043b\u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0432 \u0448\u0438\u043d\u0443 <strong>PipelinedMemoryBus<\/strong> \u0441\u043b\u043e\u0432\u0430 \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u044c\u044e 32 \u0431\u0438\u0442\u0430 \u0438 \u0442\u0443\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c. \u0427\u0442\u043e\u0431\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0447\u0442\u0435\u043d\u0438\u044f\/\u0437\u0430\u043f\u0438\u0441\u0438 \u0441 \u0434\u0430\u043d\u043d\u043e\u0439 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u043e\u0439 SRAM, \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e \u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0430 \u0434\u0432\u0435 \u0447\u0430\u0441\u0442\u0438 (\u0434\u0432\u0430 \u0442\u0430\u043a\u0442\u0430), \u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e \u0447\u0442\u0435\u043d\u0438\u044f \u2014 \u043d\u0430 \u0447\u0435\u0442\u044b\u0440\u0435. \u041f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u00ab\u0441\u043a\u043b\u0435\u0438\u0432\u0430\u0442\u044c\u00bb \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 32-\u0431\u0438\u0442\u043d\u043e\u0435 \u0441\u043b\u043e\u0432\u043e \u043f\u0435\u0440\u0435\u0434 \u0432\u044b\u0434\u0430\u0447\u0435\u0439 \u0435\u0433\u043e \u0432 \u0448\u0438\u043d\u0443. <\/p>\n<p> \u0415\u0449\u0435 \u043e\u0434\u0438\u043d \u043c\u043e\u043c\u0435\u043d\u0442 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u044f\u0434\u0440\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435 \u0432\u0441\u0435 32 \u0431\u0438\u0442\u0430, \u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u0442\u044c \u0438\u0437 \u043d\u0438\u0445, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043c\u043b\u0430\u0434\u0448\u0438\u0435 8 \u0431\u0438\u0442 (\u043c\u043b\u0430\u0434\u0448\u0438\u0439 \u0431\u0430\u0439\u0442) \u0438\u043b\u0438 \u0441\u0442\u0430\u0440\u0448\u0438\u0435 8 \u0431\u0438\u0442 \u043b\u044e\u0431\u043e\u0433\u043e \u043f\u043e\u043b\u0443\u0441\u043b\u043e\u0432\u0430, \u0438\u043b\u0438 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044e \u0438\u0437 \u043d\u0438\u0445. \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0448 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 SRAM \u043f\u043e\u043d\u044f\u043b, \u043a\u0430\u043a\u0443\u044e \u0438\u043c\u0435\u043d\u043d\u043e \u0447\u0430\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0445 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c, \u0448\u0438\u043d\u0430 <strong>PipelinedMemoryBus<\/strong> \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u043d\u0430\u0431\u043e\u0440 \u0438\u0437 \u0447\u0435\u0442\u044b\u0440\u0435\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432-\u043c\u0430\u0441\u043e\u043a <strong>io.bus.cmd.mask[3:0]<\/strong> \u2014 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043b\u043e\u0433 \u00ab1\u00bb \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c \u0431\u0438\u0442\u0435 \u043c\u0430\u0441\u043a\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0431\u0430\u0439\u0442 (\u043e\u0434\u0438\u043d \u0438\u0437 \u0447\u0435\u0442\u044b\u0440\u0435\u0445 \u0431\u0430\u0439\u0442\u043e\u0432 32-\u0445 \u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430) \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c, \u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f.<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 SRAM \u0432\u044b\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u043f\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443:<\/p>\n<p>\u041f\u0440\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 SRAM (<strong>io.bus.cmd.write === True<\/strong>):<\/p>\n<ol>\n<li>\n<p>\u0410\u0432\u0442\u043e\u043c\u0430\u0442 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 <strong>#0<\/strong>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u043d \u043e\u0436\u0438\u0434\u0430\u0435\u0442 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438  <strong>io.bus.cmd.valid<\/strong> \u043e\u0442 \u0448\u0438\u043d\u044b.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u043b\u0443\u0447\u0438\u0432 \u0441\u0438\u0433\u043d\u0430\u043b \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438, \u0430\u0432\u0442\u043e\u043c\u0430\u0442 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b <strong>io.sram.oe = False<\/strong> \u0438 <strong>io.sram.we = False<\/strong>; \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0441 \u044d\u0442\u0438\u043c \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430 \u0448\u0438\u043d\u0443 \u0430\u0434\u0440\u0435\u0441\u0430 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b <strong>io.sram.addr<\/strong> \u0430\u0434\u0440\u0435\u0441 \u043c\u043b\u0430\u0434\u0448\u0435\u0433\u043e 16-\u0442\u0438 \u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0441 \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0448\u0438\u043d\u044b <strong>io.bus.cmd.address<\/strong>; \u043d\u0430 \u0448\u0438\u043d\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b <strong>io.sram.dat<\/strong> &#8212; \u043c\u043b\u0430\u0434\u0448\u0438\u0435 16 \u0431\u0438\u0442 \u0434\u0430\u043d\u043d\u044b\u0445; \u043d\u0430 \u043b\u0438\u043d\u0438\u0438 <strong>io.sram.ble<\/strong> \u0438 <strong>io.sram.bhe<\/strong> \u043f\u043e\u0434\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043c\u0430\u0441\u043e\u043a \u0438\u0437 <strong>io.bus.cmd.mask(0)<\/strong> \u0438 <strong>io.bus.cmd.mask(1)<\/strong> \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e; \u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 <strong>#1<\/strong>.<\/p>\n<\/li>\n<li>\n<p>\u0412 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 <strong>#1<\/strong> \u0430\u0432\u0442\u043e\u043c\u0430\u0442 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430 \u0448\u0438\u043d\u0443 \u0430\u0434\u0440\u0435\u0441\u0430 <strong>io.sram.addr<\/strong> \u0430\u0434\u0440\u0435\u0441 \u0441\u0442\u0430\u0440\u0448\u0435\u0433\u043e 16-\u0442\u0438 \u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430; \u043d\u0430 \u0448\u0438\u043d\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 <strong>io.sram.dat<\/strong> &#8212; \u0441\u0442\u0430\u0440\u0448\u0438\u0435 16 \u0431\u0438\u0442 \u0434\u0430\u043d\u043d\u044b\u0445; \u043d\u0430 \u043b\u0438\u043d\u0438\u0438 <strong>io.sram.ble<\/strong> \u0438 <strong>io.sram.bhe<\/strong> \u043f\u043e\u0434\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043c\u0430\u0441\u043e\u043a <strong>io.bus.cmd.mask(2)<\/strong> \u0438 <strong>io.bus.cmd.mask(3)<\/strong> \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e. \u0412 \u044d\u0442\u043e\u043c \u0436\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442 \u0441\u0432\u043e\u0451 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432 <strong>#0<\/strong> \u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 <strong>io.bus.cmd.ready<\/strong> \u0432 <strong>True<\/strong>.<\/p>\n<\/li>\n<\/ol>\n<p>\u0426\u0438\u043a\u043b \u0437\u0430\u043f\u0438\u0441\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0432\u0441\u0435\u0433\u043e \u0434\u0432\u0430 \u0442\u0430\u043a\u0442\u0430 (\u0434\u0432\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f).<\/p>\n<p> \u041f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 \u0438\u0437 SRAM (<strong>io.bus.cmd.write === False)<\/strong> \u0432\u0441\u0435 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435:<\/p>\n<ol>\n<li>\n<p>\u0410\u0432\u0442\u043e\u043c\u0430\u0442 \u0442\u0430\u043a \u0436\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 <strong>#0<\/strong> \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u043d \u043e\u0436\u0438\u0434\u0430\u0435\u0442 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438 <strong>io.bus.cmd.valid<\/strong> \u043e\u0442 \u0448\u0438\u043d\u044b.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u043b\u0443\u0447\u0438\u0432 \u0441\u0438\u0433\u043d\u0430\u043b \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438, \u0430\u0432\u0442\u043e\u043c\u0430\u0442 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b <strong>io.sram.oe = False<\/strong>, <strong>io.sram.we = True<\/strong> \u0438 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430 \u0448\u0438\u043d\u0443 \u0430\u0434\u0440\u0435\u0441\u0430 <strong>io.sram.addr<\/strong> \u0430\u0434\u0440\u0435\u0441 \u043c\u043b\u0430\u0434\u0448\u0435\u0433\u043e 16-\u0442\u0438 \u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0441 \u0448\u0438\u043d\u044b <strong>io.bus.cmd.address<\/strong>, \u0430 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u0448\u0438\u043d\u044b <strong>io.sram.dat<\/strong> \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0432\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 (\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439) \u0440\u0435\u0433\u0438\u0441\u0442\u0440 <strong>rsp_data<\/strong> &#8212; \u0432 \u0435\u0433\u043e \u043c\u043b\u0430\u0434\u0448\u0438\u0435 16 \u0431\u0438\u0442, \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 <strong>#1<\/strong>.<\/p>\n<\/li>\n<li>\n<p>\u0412 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 <strong>#1<\/strong> \u0430\u0432\u0442\u043e\u043c\u0430\u0442 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0443\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u043d\u0430 \u0448\u0438\u043d\u0435 <strong>io.sram.addr<\/strong> \u0430\u0434\u0440\u0435\u0441 \u043c\u043b\u0430\u0434\u0448\u0435\u0433\u043e 16-\u0442\u0438 \u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430 \u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440, \u0442.\u00a0\u0435. \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u0443\u0441\u0442\u043e\u0439 \u0446\u0438\u043a\u043b \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 <strong>#2<\/strong>.<\/p>\n<\/li>\n<li>\n<p>\u0412 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 <strong>#2<\/strong> \u0430\u0432\u0442\u043e\u043c\u0430\u0442 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430 \u0448\u0438\u043d\u0443 \u0430\u0434\u0440\u0435\u0441\u0430 <strong>io.sram.addr<\/strong> \u0430\u0434\u0440\u0435\u0441 \u0441\u0442\u0430\u0440\u0448\u0435\u0433\u043e 16-\u0442\u0438 \u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0441 \u0448\u0438\u043d\u044b <strong>io.bus.cmd.address<\/strong>, \u0430 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u0448\u0438\u043d\u044b <strong>io.sram.dat<\/strong>  \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0432\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 <strong>rsp_data<\/strong>, \u0432 \u0435\u0433\u043e \u0441\u0442\u0430\u0440\u0448\u0438\u0435 16 \u0431\u0438\u0442 \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 <strong>#3<\/strong>.<\/p>\n<\/li>\n<li>\n<p>\u0412 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 <strong>#3<\/strong> \u0430\u0432\u0442\u043e\u043c\u0430\u0442 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0443\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u043d\u0430 \u0448\u0438\u043d\u0435 <strong>io.sram.addr<\/strong> \u0430\u0434\u0440\u0435\u0441 \u0441\u0442\u0430\u0440\u0448\u0435\u0433\u043e 16-\u0442\u0438 \u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430, \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442 \u0432 \u044d\u0442\u043e\u043c \u0436\u0435 \u0446\u0438\u043a\u043b\u0435 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u0438\u0433\u043d\u0430\u043b \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 <strong>io.bus.cmd.ready<\/strong> \u0432 <strong>True<\/strong>, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0441\u0438\u0433\u043d\u0430\u043b \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 <strong>io.bus.rsp.valid<\/strong>.<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0446\u0438\u043a\u043b \u0447\u0442\u0435\u043d\u0438\u044f \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0447\u0435\u0442\u044b\u0440\u0435 \u0442\u0430\u043a\u0442\u0430 (\u0447\u0435\u0442\u044b\u0440\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0430).<\/p>\n<\/li>\n<\/ol>\n<p> \u0417\u0434\u0435\u0441\u044c \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0449\u0435 \u043f\u0430\u0440\u0443 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u0439 \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430:<\/p>\n<ol>\n<li>\n<p>\u0412\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0438\u0433\u043d\u0430\u043b <strong>io.bus.rsp.valid<\/strong> \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 <strong>rsp_valid<\/strong>). \u042d\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u043d\u0435\u0441\u0442\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u044b <strong>io.bus.cmd.ready<\/strong> \u0438 <strong>io.bus.rsp.valid<\/strong> \u0438\u0437-\u0437\u0430 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0448\u0438\u043d\u044b <strong>PipelinedMemoryBus<\/strong>. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0432 \u043e\u0431\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0432 \u043e\u0434\u043d\u043e\u043c \u0442\u0430\u043a\u0442\u0435 \u0448\u0438\u043d\u0430 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f (\u043f\u0435\u0440\u0435\u0439\u0434\u0435\u0442 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 STALL) \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u0440\u0435\u043a\u0440\u0430\u0442\u0438\u0442 \u0440\u0430\u0431\u043e\u0442\u0443.<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438 \u0446\u0438\u043a\u043b\u0435 \u0447\u0442\u0435\u043d\u0438\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0438\u0437 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 <strong>rsp_data<\/strong> \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0448\u0438\u043d\u0443 <strong>io.bus.rsp.data<\/strong>.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0434\u043b\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b SRAM \u043d\u0443\u0436\u043d\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u0432\u0441\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0438\u043c\u0435\u044e\u0442 \u0438\u043d\u0432\u0435\u0440\u0441\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 (active low), \u0442.\u00a0\u0435. \u044d\u0442\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0438\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<\/p>\n<\/li>\n<\/ol>\n<p> \u041f\u0435\u0440\u0435\u0432\u0435\u0434\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0432\u044b\u0448\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043d\u0430 \u044f\u0437\u044b\u043a SpinalHDL, \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434 \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 SRAM, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u043e\u043c <strong>PipelinedMemoryBusSram<\/strong>:<\/p>\n<details class=\"spoiler\">\n<summary>Sram.scala<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"scala\">case class PipelinedMemoryBusSram(pipelinedMemoryBusConfig: PipelinedMemoryBusConfig,                                         sramLayout : SramLayout) extends Component{    val io = new Bundle{      val bus = slave(PipelinedMemoryBus(pipelinedMemoryBusConfig))      val sram = master(SramInterface(sramLayout))    }    val state = Reg(UInt(3 bits)) init(0)    val rsp_data = Reg(Bits(pipelinedMemoryBusConfig.addressWidth bits)) init(0)    val rsp_valid = Reg(Bool()) init(False)        io.sram.cs := ~io.bus.cmd.valid    io.sram.we := True    io.sram.oe := True    io.sram.bhe := True    io.sram.ble := True    io.bus.rsp.data := rsp_data;    io.bus.rsp.valid := rsp_valid    io.bus.cmd.ready := (state === 1 &amp;&amp; io.bus.cmd.write) || (state === 3 &amp;&amp; !io.bus.cmd.write)    when (io.bus.cmd.valid) {      when (io.bus.cmd.write) { \/\/ Write        io.sram.we := False \/\/ active low        when (state === 0) { \/\/ Write low 16 bits          io.sram.addr := io.bus.cmd.address(sramLayout.addressWidth downto 2).asBits ## B\"0\"          io.sram.dat := io.bus.cmd.data(15 downto 0).asBits          io.sram.ble := ~io.bus.cmd.mask(0)          io.sram.bhe := ~io.bus.cmd.mask(1)          state := 1        } otherwise { \/\/ Write high 16 bits          io.sram.addr := io.bus.cmd.address(sramLayout.addressWidth downto 2).asBits ## B\"1\"          io.sram.dat := io.bus.cmd.data(31 downto 16).asBits          io.sram.ble := ~io.bus.cmd.mask(2)          io.sram.bhe := ~io.bus.cmd.mask(3)          state := 0        }      } otherwise { \/\/ Read        io.sram.ble := False        io.sram.bhe := False        io.sram.oe := False        when (state === 0) {          io.sram.addr := io.bus.cmd.address(sramLayout.addressWidth downto 2).asBits ## B\"0\"          rsp_data(15 downto 0) := io.sram.dat \/\/ buffer low 16 bits - first time          state := 1          rsp_valid := False        } elsewhen (state === 1) {          io.sram.addr := io.bus.cmd.address(sramLayout.addressWidth downto 2).asBits ## B\"0\"          rsp_data(15 downto 0) := io.sram.dat \/\/ buffer low 16 bits - second time          state := 2        } elsewhen (state === 2) {          io.sram.addr := io.bus.cmd.address(sramLayout.addressWidth downto 2).asBits ## B\"1\"          rsp_data(31 downto 16) := io.sram.dat \/\/ buffer high 16 bits - first time          state := 3        } otherwise {          io.sram.addr := io.bus.cmd.address(sramLayout.addressWidth downto 2).asBits ## B\"1\"          rsp_data(31 downto 16) := io.sram.dat \/\/ buffer high 16 bits - second time          rsp_valid := True \/\/ Signal data is READY         state := 0        }      }    } otherwise { \/\/ not Valid      state := 0      rsp_valid := False    }  } <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p> \u041f\u043e\u043c\u0435\u0441\u0442\u0438\u043c \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0432 \u0444\u0430\u0439\u043b <strong>Sram.scala<\/strong> \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0431\u043e\u0440\u043a\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <strong>make clean &amp;&amp; make.<\/strong> \u0415\u0441\u043b\u0438 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u0448\u0438\u0431\u043e\u043a \u043d\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u043e, \u0442\u043e \u043d\u0430 \u0441\u0442\u0430\u0434\u0438\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u0434\u0430 Verilog (\u0442.\u00a0\u0435. \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0431\u0430\u0439\u0442-\u043a\u043e\u0434\u0430 \u043d\u0430 JVM), \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043b\u0438\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0445 \u043d\u0438\u0436\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439:<\/p>\n<pre><code>rz@devbox:~\/VexRiscv\/scripts\/Murax\/Karnix$ make clean &amp;&amp; make  ... [info] [Progress] at 2.396 : Checks and transforms  ... [error] Exception in thread \"main\" spinal.core.SpinalExit:  [error]  Error detected in phase PhaseCheck_noLatchNoOverride  [error] ********************************************************************************  [error] ********************************************************************************  [error] NO DRIVER ON (toplevel\/io_sram_cs : out Bool), defined at  [error]     mylib.SramInterface.&lt;init>(Sram.scala:16)  [error]     vexriscv.demo.Murax$$anon$1.&lt;init>(Murax.scala:176)  [error]     vexriscv.demo.Murax.&lt;init>(Murax.scala:162)  [error]     vexriscv.demo.Murax_karnix$$anonfun$main$8.apply(Murax.scala:556)  [error]     vexriscv.demo.Murax_karnix$$anonfun$main$8.apply(Murax.scala:556)  [error]     spinal.sim.JvmThread.run(SimManager.scala:51)  [error] ********************************************************************************  [error] ********************************************************************************  [error] NO DRIVER ON (toplevel\/io_sram_we : out Bool), defined at  [error]     mylib.SramInterface.&lt;init>(Sram.scala:17)  [error]     vexriscv.demo.Murax$$anon$1.&lt;init>(Murax.scala:176)  [error]     vexriscv.demo.Murax.&lt;init>(Murax.scala:162)  [error]     vexriscv.demo.Murax_karnix$$anonfun$main$8.apply(Murax.scala:556)  [error]     vexriscv.demo.Murax_karnix$$anonfun$main$8.apply(Murax.scala:556)  [error]     spinal.sim.JvmThread.run(SimManager.scala:51)  [error] ********************************************************************************  ... [error] Nonzero exit code returned from runner: 1  [error] (Compile \/ runMain) Nonzero exit code returned from runner: 1  [error] Total time: 32 s, completed Feb 14, 2024, 11:47:45 PM <\/code><\/pre>\n<p> \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435 \u0432\u0438\u0434\u0430 \u00ab<strong>NO DRIVER ON<\/strong>\u00bb \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u043d\u043e \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a (\u043d\u0435\u0442 \u00ab\u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430\u00bb), \u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0435\u0442 \u0441\u0445\u0435\u043c\u044b, \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044e\u0449\u0435\u0439 \u044d\u0442\u043e\u0442 \u0441\u0438\u0433\u043d\u0430\u043b. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u043b\u0435\u0433\u043a\u043e \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u0435\u043c, \u0447\u0442\u043e \u043c\u044b \u043e\u043f\u0438\u0441\u0430\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043d\u044b\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0434\u043b\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b SRAM, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u043b\u0438\u043d\u0438\u0438 \u043a \u0441\u0430\u043c\u043e\u0439 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0435, \u043d\u043e \u043d\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b\u0438 \u0438\u0445 \u043a \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0443 <strong>PipelinedMemoryBusSram<\/strong>, \u0434\u0430 \u0438 \u0441\u0430\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043d\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b\u0438 \u043a \u0448\u0438\u043d\u0435 <strong>MainBus<\/strong>.<\/p>\n<p>\u041d\u0443 \u0447\u0442\u043e \u0436\u0435, \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043c \u044d\u0442\u043e \u043d\u0435\u0434\u043e\u0440\u0430\u0437\u0443\u043c\u0435\u043d\u0438\u0435 \u2014 \u043e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u0444\u0430\u0439\u043b <strong>Murax.scala<\/strong>, \u043d\u0430\u0439\u0434\u0435\u043c \u0432 \u043d\u0451\u043c \u0443\u0447\u0430\u0441\u0442\u043e\u043a \u043a\u043e\u0434\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u00ab\u0441\u043b\u044d\u0439\u0432\u00bb \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u043a \u0448\u0438\u043d\u0435 <strong>MainBus<\/strong> \u043f\u0443\u0442\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u0445 \u0432 \u0430\u0441\u0441\u043e\u0446\u0438\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 <strong>mainBusMapping<\/strong>:<\/p>\n<pre><code class=\"scala\">\/\/****** MainBus slaves ********      val mainBusMapping = ArrayBuffer[(PipelinedMemoryBus,SizeMapping)]()       val ram = new MuraxPipelinedMemoryBusRam(        onChipRamSize = onChipRamSize,        onChipRamHexFile = onChipRamHexFile,        pipelinedMemoryBusConfig = pipelinedMemoryBusConfig,        bigEndian = bigEndianDBus      )      mainBusMapping += ram.io.bus -> (0x80000000l, onChipRamSize)       ...<\/code><\/pre>\n<p> \u0418 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u044e\u0434\u0430 \u043d\u0430\u0448 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b SRAM:<\/p>\n<pre><code class=\"scala\">    val sramCtrl = new PipelinedMemoryBusSram(        pipelinedMemoryBusConfig = pipelinedMemoryBusConfig,        sramLayout = SramLayout(addressWidth = 18, dataWidth = 16)      )      sramCtrl.io.sram &lt;> io.sram      mainBusMapping += sramCtrl.io.bus -> (0x90000000l, 512 kB)<\/code><\/pre>\n<p> \u041f\u0440\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0434\u0435\u043a\u043e\u0434\u0435\u0440\u0443 \u0448\u0438\u043d\u044b \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0443 SRAM \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 <strong>512KB @ 0x90000000<\/strong>. \u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u00ab\u0431\u043e\u0440\u0442\u043e\u0432\u043e\u0439\u00bb RAM \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 <strong>96KB @ 0x80000000<\/strong>.<\/p>\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0435\u0449\u0435 \u0440\u0430\u0437 \u0441\u0431\u043e\u0440\u043a\u0443 \u0438 \u0443\u0431\u0435\u0434\u0438\u043c\u0441\u044f, \u0447\u0442\u043e \u0432\u0441\u0451 \u043f\u0440\u043e\u0448\u043b\u043e \u0433\u043b\u0430\u0434\u043a\u043e \u0438 \u0431\u0435\u0437 \u043e\u0448\u0438\u0431\u043e\u043a:<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u0441\u0438\u043d\u0442\u0435\u0437\u0430 \u0421\u043d\u041a Murax \u043f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 Sram<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>rz@devbox:~\/VexRiscv\/scripts\/Murax\/Karnix$ make  (cd ..\/..\/..; sbt \"runMain vexriscv.demo.Murax_karnix\")  [info] welcome to sbt 1.6.0 (Ubuntu Java 11.0.9.1)  \u2026 [info] running (fork) vexriscv.demo.Murax_karnix  [info] [Runtime] SpinalHDL v1.10.1    git head : 2527c7c6b0fb0f95e5e1a5722a0be732b364ce43  [info] [Runtime] JVM max memory : 8294.0MiB  [info] [Runtime] Current date : 2024.02.15 00:24:16  [info] [Progress] at 0.000 : Elaborate components  [info] [Warning] This VexRiscv configuration is set without software ebreak instruction support. Some software may rely on it (ex: Rust). (This isn't related to JTAG ebreak)  [info] [Warning] This VexRiscv configuration is set without illegal instruction catch support. Some software may rely on it (ex: Rust)  [info] [Progress] at 2.281 : Checks and transforms  [info] [Progress] at 3.035 : Generate Verilog  \u2026 Info: Logic utilisation before packing:  Info:     Total LUT4s:      2637\/24288    10%  Info:         logic LUTs:   2149\/24288     8%  Info:         carry LUTs:    272\/24288     1%  Info:           RAM LUTs:    144\/ 3036     4%  Info:          RAMW LUTs:     72\/ 6072     1%  Info:      Total DFFs:      1428\/24288     5%  \u2026 Info: Packing constants..  Info: Packing carries...  Info: Packing LUTs...  Info: Packing LUT5-7s...  Info: Packing FFs...  Info:     675 FFs paired with LUTs.  Info: Generating derived timing constraints...  Info:     Input frequency of PLL 'i_pll.pll_i' is constrained to 25.0 MHz  Info:     Derived frequency constraint of 75.0 MHz for net clk75  Info: Promoting globals...  Info:     promoting clock net clk75 to global network  Info:     promoting clock net io_core_jtag_tck$TRELLIS_IO_IN to global network  Info: Checksum: 0x8aa53f27  Info: Device utilisation:  Info:             TRELLIS_IO:    54\/  197    27%  Info:                   DCCA:     2\/   56     3%  Info:                 DP16KD:    48\/   56    85%  Info:             MULT18X18D:     0\/   28     0%  Info:                 ALU54B:     0\/   14     0%  Info:                EHXPLLL:     1\/    2    50%  ... Info:             TRELLIS_FF:  1428\/24288     5%  Info:           TRELLIS_COMB:  2749\/24288    11%  Info:           TRELLIS_RAMW:    36\/ 3036     1%  \u2026 Info: Max frequency for clock                          'clk75': 80.34 MHz (PASS at 75.00 MHz)  Info: Max frequency for clock 'io_core_jtag_tck$TRELLIS_IO_IN': 130.21 MHz (PASS at 12.00 MHz)  \u2026 2 warnings, 0 errors  Info: Program finished normally.  ecppack --compress --freq 38.8 --input murax_hello_world_out.config --bit murax_hello_world.bit <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p> \u0413\u043b\u0430\u0432\u043d\u043e\u0435, \u043d\u0430 \u0447\u0442\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c \u0432\u043e \u0432\u0441\u0435\u0439 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0435 \u0442\u043e, \u0447\u0442\u043e \u043d\u0430\u0448 \u0434\u0438\u0437\u0430\u0439\u043d \u0432\u0441\u0451 \u0435\u0449\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043f\u043e STA \u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u0430\u044f \u0442\u0430\u043a\u0442\u043e\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 <strong>80,34 \u041c\u0413\u0446<\/strong>, \u0442.\u00a0\u0435. \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u043f\u0430\u0441 \u00ab\u043f\u0440\u043e\u0447\u043d\u043e\u0441\u0442\u0438\u00bb.<\/p>\n<p><a class=\"anchor\" name=\"17.2.2\" id=\"17.2.2\"><\/a><\/p>\n<h4> 17.2.2 \u0422\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c \u043f\u0430\u043c\u044f\u0442\u044c \u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 SRAM<\/h4>\n<p> \u041f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c, \u043a\u0430\u043a \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435, \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0435\u043a\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u0442 \u0442\u0435\u0441\u0442 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 SRAM \u043f\u0430\u043c\u044f\u0442\u0438 \u043e\u0431\u044a\u0435\u043c\u043e\u043c 512 \u041a\u0411 \u0438 \u0432\u044b\u044f\u0441\u043d\u0438\u0442, \u0440\u0430\u0431\u043e\u0447\u0430\u044f \u0443 \u043d\u0430\u0441 SRAM \u0438\u043b\u0438 \u043d\u0435\u0442 \u2014 \u0432\u043f\u043e\u043b\u043d\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0430 \u0442\u0430\u043a\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0430 SRAM \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043d\u0435\u0442 \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0441 \u0437\u0430\u0434\u0430\u0447\u0435\u0439, \u0442.\u00a0\u0435. \u043f\u043e\u043f\u0440\u043e\u0441\u0442\u0443 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u043f\u0435\u0432\u0430\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0447\u0442\u0435\u043d\u0438\u044f\/\u0437\u0430\u043f\u0438\u0441\u0438. \u0422\u0430\u043a\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c, \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u0442\u043e\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0434\u043e\u043c\u0435\u043d\u0430.<\/p>\n<p>\u0421\u0442\u0440\u043e\u0433\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u2014 \u044d\u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430, \u043d\u043e \u043c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u043f\u0435\u0440\u0444\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0437\u043c\u043e\u043c, \u0430 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u043c \u2014 \u0431\u0443\u0434\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043f\u0441\u0435\u0432\u0434\u043e\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u0443\u044e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432 \u044f\u0447\u0435\u0439\u043a\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u043e\u0431\u043b\u0430\u0441\u0442\u0438, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043f\u0440\u043e\u0434\u0435\u043b\u0430\u0435\u043c \u0446\u0438\u043a\u043b \u0447\u0442\u0435\u043d\u0438\u044f \u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u044d\u0442\u043e\u0439 \u0436\u0435 \u043f\u0441\u0435\u0432\u0434\u043e\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e. \u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0442\u0430\u043a\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f:<\/p>\n<details class=\"spoiler\">\n<summary>\u0424\u0443\u043a\u043d\u0446\u0438\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0430\u044f \u043f\u0441\u0435\u0432\u0434\u043e\u0441\u0442\u0443\u0447\u0430\u0439\u043d\u0443\u044e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c.<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#define SRAM_SIZE       (512*1024)  #define SRAM_ADDR_BEGIN 0x90000000  #define SRAM_ADDR_END   (0x90000000 + SRAM_SIZE) \/\/ ... int sram_test_write_random_ints(void) {          volatile unsigned int *mem;          unsigned int fill;          int fails = 0;          fill = 0xdeadbeef; \/\/ random seed          mem = (unsigned int*) SRAM_ADDR_BEGIN;          print(\"Filling SRAM at: \");          printhex((unsigned int)mem);          while((unsigned int)mem &lt; SRAM_ADDR_END) {                  *mem++ = fill;                  fill += 0xdeadbeef; \/\/ generate pseudo-random data          }          fill = 0xdeadbeef; \/\/ random seed          mem = (unsigned int*) SRAM_ADDR_BEGIN;          print(\"Checking SRAM at: \");          printhex((unsigned int)mem);          while((unsigned int)mem &lt; SRAM_ADDR_END) {                  if(*mem != fill) {                          print(\"SRAM check failed at: \");                          printhex((unsigned int)mem);                          print(\"expected: \");                          printhex((unsigned int)fill);                          print(\"got: \");                          printhex((unsigned int)*mem);                          fails++;                  }                  mem++;                  fill += 0xdeadbeef; \/\/ generate pseudo-random data          }          if((unsigned int)mem == SRAM_ADDR_END)                  print(\"SRAM total fails: \");                  printhex((unsigned int)fails);          return fails++;  } <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p> \u0412 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u043c \u0432\u044b\u0448\u0435 \u043a\u043e\u0434\u0435 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 \u0421\u0438, \u043c\u044b \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c \u043d\u0430\u0431\u043e\u0440 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u0434\u043b\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u2014 \u0435\u0451 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441, \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0438 \u0440\u0430\u0437\u043c\u0435\u0440. \u0412 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>sram_test_write_random_ints()<\/strong>, \u043c\u044b \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0446\u0438\u043a\u043b\u043e\u043c \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c 32-\u0445 \u0431\u0438\u0442\u043d\u044b\u043c\u0438 \u0447\u0438\u0441\u043b\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439 \u043d\u0430\u043c \u0444\u043e\u0440\u043c\u0443\u043b\u0435 \u2014 \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e <strong>0xDEADBEEF<\/strong> \u043a\u0430\u0436\u0434\u0443\u044e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e \u0446\u0438\u043a\u043b\u0430 \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u043d\u043e\u0439 \u0441\u0443\u043c\u043c\u0435 \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <strong>fill<\/strong>, \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044f \u043f\u0441\u0435\u0432\u0434\u043e\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e. \u0417\u0430\u0442\u0435\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0447\u0442\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u044d\u0442\u043e\u0439 \u0436\u0435 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441\u0447\u0438\u0442\u0430\u043d\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0441 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c. \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u043d\u0435\u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0439, \u0442.\u00a0\u0435. \u043e\u0448\u0438\u0431\u043e\u043a \u0437\u0430\u043f\u0438\u0441\u0438 \u0438\u043b\u0438 \u0447\u0442\u0435\u043d\u0438\u044f.<\/p>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>sram_test_write_random_ints()<\/strong> \u0432 \u043d\u0430\u0447\u0430\u043b\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>main()<\/strong> \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u00abhello_world\u00bb, \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 UART:<\/p>\n<pre><code class=\"cpp\">void main() {          Uart_Config uart_config;          uart_config.dataLength = UART_DATA_8;          uart_config.parity = UART_PARITY_NONE;          uart_config.stop = UART_STOP_ONE;          uint32_t rxSamplePerBit = UART_PRE_SAMPLING_SIZE + UART_SAMPLING_SIZE + UART_POST_SAMPLING_SIZE;          uart_config.clockDivider = SYSTEM_CLOCK_HZ \/ UART_BAUD_RATE \/ rxSamplePerBit - 1;          uart_applyConfig(UART, &amp;uart_config);          sram_test_write_random_ints();   ... <\/code><\/pre>\n<p> \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0441\u0431\u043e\u0440\u043a\u0443 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <strong>make clean &amp;&amp; make<\/strong>. \u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043e\u0448\u0438\u0431\u043e\u043a \u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u0438\u0442\u0441\u0442\u0440\u0438\u043c\u0430, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0435\u0433\u043e \u0432 \u043f\u043b\u0430\u0442\u0443 \u00ab\u041a\u0430\u0440\u043d\u043e\u00bb \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <strong>make upload<\/strong>, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430 minicom \u0438 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c \u0437\u0430 \u0442\u0435\u043c, \u043a\u0430\u043a \u043e\u0442\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0442\u0435\u0441\u0442 SRAM \u043f\u0430\u043c\u044f\u0442\u0438. \u0415\u0441\u043b\u0438 \u0432\u0441\u0451 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u0442\u043e \u0432 \u043f\u043e\u0440\u0442 \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f:<\/p>\n<pre><code>Filling SRAM at: 90000000  Checking SRAM at: 90000000  SRAM total fails: 00000000  Hello world, this is VexRiscv!  000000C6  000282CD  Hello world, this is VexRiscv!  000000C6  000282CE  Hello world, this is VexRiscv!  000000C6  000282CD <\/code><\/pre>\n<p> \u0415\u0441\u043b\u0438 \u0436\u0435 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0430 \u043f\u0430\u043c\u044f\u0442\u0438 \u0441\u0431\u043e\u0438\u0442 \u0438\u043b\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442, \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432\u0438\u0434\u0430:<\/p>\n<pre><code>Filling SRAM at: 90000000  SRAM check failed at: 90000000  expected: DEADBEEF  got: BEEF0000  SRAM check failed at: 90000004  expected: BD5B7DDE  got: 7DDE0000  SRAM check failed at: 90000008  expected: 9C093CCD  got: 3CCD0000 <\/code><\/pre>\n<p><a class=\"anchor\" name=\"17.2.3\" id=\"17.2.3\"><\/a><\/p>\n<h4> 17.2.3 \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c SRAM \u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 malloc<\/h4>\n<p> \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0434\u043e\u0431\u044b\u0442\u044b\u0439 \u043a\u0443\u0441\u043e\u043a \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 \u0421\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0445. \u0421\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e &#8212; \u043f\u0440\u043e\u0441\u0442\u043e \u0447\u0438\u0442\u0430\u0442\u044c \u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 <strong>0x90000000<\/strong>, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043f\u0440\u044f\u043c\u043e\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c. \u0411\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u2014 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0431\u043b\u043e\u043a \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f \u00ab\u043a\u0443\u0447\u0438\u00bb (\u00abheap\u00bb), \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u0447\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>malloc()<\/strong> \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0431\u043b\u043e\u043a\u0438 \u0432 \u044d\u0442\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043f\u0430\u043c\u044f\u0442\u0438. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f.<\/p>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f <strong>malloc()<\/strong> \u0432\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u043e\u0441\u0442\u0430\u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0432\u0432\u043e\u0434\u0430\/\u0432\u044b\u0432\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c <strong>libc<\/strong>, \u0430 \u0435\u0451 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 <strong>stdlib.h<\/strong>. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u0441\u0442\u0430\u0432\u0438\u043c \u0432 \u043a\u043e\u0434 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u00abhello_world\u00bb \u0432\u044b\u0437\u043e\u0432 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f. \u041e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u0444\u0430\u0439\u043b <strong>main.c<\/strong>, \u0432\u043a\u043b\u044e\u0447\u0438\u043c \u0432 \u043d\u0435\u0433\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b <strong>stdlib.h<\/strong>, \u0432\u044b\u0437\u043e\u0432\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <strong>malloc()<\/strong> \u0438\u0437 \u0442\u0435\u043b\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>main()<\/strong> \u0438 \u0440\u0430\u0441\u043f\u0435\u0447\u0430\u0442\u0430\u0435\u043c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0439  \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<pre><code>#include &lt;stdint.h>  #include &lt;stdlib.h>  ...  void main() {  ...        sram_test_write_random_ints();            char *test = malloc(1024);         println(\"Malloc test:\");         printhex((unsigned int)test);  \u2026 }<\/code><\/pre>\n<p> \u041f\u043e\u043c\u0438\u043c\u043e \u044d\u0442\u043e\u0433\u043e, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443, \u0447\u0442\u043e\u0431\u044b \u043d\u0430 \u0441\u0442\u0430\u0434\u0438\u0438 \u043b\u0438\u043d\u043a\u043e\u0432\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u00abhello_world\u00bb \u043e\u043d \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u043b \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 <strong>libc_nano.a<\/strong> \u2014 \u044d\u0442\u043e \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <strong>libc<\/strong>, \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u0430\u044f \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043e\u0431\u044a\u0451\u043c\u043e\u043c \u041e\u0417\u0423. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u0444\u0430\u0439\u043b\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 <strong>makefile<\/strong> \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443:<\/p>\n<pre><code>rz@devbox:~\/VexRiscv\/src\/main\/c\/murax\/hello_world$ cat makefile  ... INC  =  LIBS = -lc_nano<\/code><\/pre>\n<p> \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0432 \u0441\u0431\u043e\u0440\u043a\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <strong>make<\/strong>, \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435:<\/p>\n<pre><code>\/opt\/riscv64-unknown-elf-gcc-8.3.0-2019.08.0-x86_64-linux-ubuntu14\/bin\/..\/lib\/gcc\/riscv64-unknown-elf\/8.3.0\/..\/..\/..\/..\/riscv64-unknown-elf\/bin\/ld: \/opt\/riscv64-unknown-elf-gcc-8.3.0-2019.08.0-x86_64-linux-ubuntu14\/bin\/..\/lib\/gcc\/riscv64-unknown-elf\/8.3.0\/..\/..\/..\/..\/riscv64-unknown-elf\/lib\/rv32i\/ilp32\/libc.a(lib_a-sbrkr.o): in function `.L0 ':  sbrkr.c:(.text+0x18): undefined reference to `_sbrk' <\/code><\/pre>\n<p> \u041e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>malloc()<\/strong> \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0441 \u0438\u043c\u0435\u043d\u0435\u043c <strong>_sbrk()<\/strong>, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0443 \u043d\u0430\u0441 \u043d\u0435\u0442. \u0427\u0442\u043e \u044d\u0442\u043e \u0437\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438 \u0433\u0434\u0435 \u0435\u0451 \u0432\u0437\u044f\u0442\u044c? \u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u044d\u0442\u043e \u0432\u043e\u043f\u0440\u043e\u0441 \u2014 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<p>\u041e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>malloc()<\/strong> \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0441 \u0438\u043c\u0435\u043d\u0435\u043c <strong>_sbrk()<\/strong>, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0443 \u043d\u0430\u0441 \u043d\u0435\u0442. \u0427\u0442\u043e \u044d\u0442\u043e \u0437\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438 \u0433\u0434\u0435 \u0435\u0451 \u0432\u0437\u044f\u0442\u044c? \u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u044d\u0442\u043e \u0432\u043e\u043f\u0440\u043e\u0441 \u2014 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f <strong>malloc()<\/strong> \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u043e\u0434\u0438\u043d \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u2014 \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u043b\u043e\u043a\u0430 \u043f\u0430\u043c\u044f\u0442\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435. \u041e\u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u043d\u0430 \u00ab\u043a\u0443\u0447\u0435\u00bb \u043d\u0435\u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430 \u043f\u0430\u043c\u044f\u0442\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0435 \u0434\u0435\u0440\u0435\u0432\u043e \u043f\u043e\u0438\u0441\u043a\u0430 (\u0438\u043b\u0438 \u0438\u043d\u043e\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u2014 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043c\u043d\u043e\u0433\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 malloc). \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043e\u043d\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u0431\u043b\u043e\u043a \u043f\u0430\u043c\u044f\u0442\u0438 \u0438\u043b\u0438 NULL, \u0435\u0441\u043b\u0438 \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0439 \u0431\u043b\u043e\u043a \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c. \u0424\u0443\u043d\u043a\u0446\u0438\u044f <strong>malloc()<\/strong> \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u0431\u043b\u043e\u043a\u0438 \u0438\u0437 \u043e\u0431\u043b\u0430\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043f\u0440\u0438\u044f\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u00ab\u043a\u0443\u0447\u0435\u0439\u00bb \u0438\u043b\u0438 \u00abheap\u00bb \u2014 \u044d\u0442\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u044b\u0445 \u0441\u0432\u044f\u0437\u0435\u0439 (\u043b\u0438\u043d\u043a\u0435\u0440\u043e\u043c) \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e.<\/p>\n<p>\u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u00ab\u043a\u0443\u0447\u0430\u00bb \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0432 \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u043f\u043e\u0441\u043b\u0435 \u0432\u0441\u0435\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u043e\u0431\u043b\u0430\u0441\u0442\u0435\u0439, \u0430 \u0437\u0430 \u00ab\u043a\u0443\u0447\u0435\u0439\u00bb \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u0430\u044f, \u043d\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c. \u0414\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u00ab\u043a\u0443\u0447\u0443\u00bb \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0442\u044c \u043f\u043e \u043c\u0435\u0440\u0435 \u043d\u0430\u0434\u043e\u0431\u043d\u043e\u0441\u0442\u0438, \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u043e\u0442\u043e\u0434\u0432\u0438\u0433\u0430\u044f \u0443\u0441\u043b\u043e\u0432\u043d\u0443\u044e \u043b\u0438\u043d\u0438\u044e \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u0435\u0439 (\u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432) \u00ab\u043a\u0443\u0447\u0438\u00bb \u0438 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438. \u0427\u0442\u043e\u0431\u044b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 (\u0440\u043e\u0441\u0442 \u00ab\u043a\u0443\u0447\u0438\u00bb), \u0444\u0443\u043d\u043a\u0446\u0438\u044f <strong>malloc()<\/strong> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <strong>_sbrk()<\/strong> (\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u043e\u0435 \u043e\u0442 \u00absegment break\u00bb) \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u0432 \u00ab\u043a\u0443\u0447\u0435\u00bb \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u043c\u0435\u0441\u0442\u0430 \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u0430 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0431\u043b\u043e\u043a\u0430 \u043f\u0430\u043c\u044f\u0442\u0438. \u0424\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u0432\u0441\u0435, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <strong>_sbrk()<\/strong>, \u044d\u0442\u043e \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u0432\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435 \u0430\u0434\u0440\u0435\u0441 \u044f\u0447\u0435\u0439\u043a\u0438 \u043f\u0430\u043c\u044f\u0442\u0438, \u0433\u0434\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0433\u0440\u0430\u043d\u0438\u0446\u0430 \u043e\u0431\u043b\u0430\u0441\u0442\u0435\u0439; \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u0435\u0451 \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u0442\u044c (\u0441\u0434\u0432\u0438\u043d\u0443\u0442\u044c \u043d\u0430 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0430\u0439\u0442); \u0435\u0441\u043b\u0438 \u043c\u043e\u0436\u043d\u043e, \u0442\u043e \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u043d\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0435\u0433\u043e \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <strong>malloc()<\/strong>. \u0412 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u0441 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044f <strong>_sbrk()<\/strong> \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u043c \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c \u0432\u044b\u0448\u0435, \u0430 \u0447\u0435\u0440\u0435\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 <strong>mmap()<\/strong>. \u0412 \u0441\u0442\u0430\u0440\u044b\u0445 UNIX \u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043b\u043e\u0441\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b\u043e\u0441\u044c \u043a\u0430\u043a \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 (\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443) \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u043a \u0443\u0436\u0435 \u0438\u043c\u0435\u044e\u0449\u0435\u0439\u0441\u044f. \u0415\u0441\u043b\u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043d\u0435\u0442 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u0442\u043e \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0441 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u041d\u043e \u043d\u0430\u0441 \u044d\u0442\u043e \u0432\u0441\u0451 \u043d\u0435 \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441 \u00ab\u0433\u043e\u043b\u044b\u043c \u0436\u0435\u043b\u0435\u0437\u043e\u043c\u00bb.<\/p>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u0443 \u043d\u0430\u0441 \u043d\u0435\u0442 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u043d\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <strong>_sbrk()<\/strong> \u0442\u0435\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u043c \u0443\u0434\u043e\u0431\u0435\u043d, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u2014 \u0437\u0430\u0432\u0435\u0434\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u043e \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u0431\u0443\u0434\u0435\u043c \u0435\u0433\u043e \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0432\u0438\u0433\u0430\u0442\u044c \u043d\u0430 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0430\u0439\u0442. \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u0442 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0439 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438, \u043d\u0430\u0448\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <strong>_sbrk()<\/strong> \u0432\u0435\u0440\u043d\u0435\u0442 NULL, \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044f \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>malloc()<\/strong> \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0432\u0441\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u0438\u0437\u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432\u0430\u043d\u0430. \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u044c, \u0433\u0434\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u00ab\u043a\u0443\u0447\u0443\u00bb \u0438 \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c.<\/p>\n<p>\u041f\u043e\u043c\u0438\u043c\u043e \u00ab\u043a\u0443\u0447\u0438\u00bb, \u043b\u0438\u043d\u043a\u0435\u0440 \u0442\u0430\u043a\u0436\u0435 \u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u0443\u0435\u0442 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u0441\u0442\u0435\u043a\u0430, \u0434\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0445 \u0438 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u043b\u044f \u0441\u0430\u043c\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430 (\u043a\u043e\u0434\u0430) \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u2014 \u0432\u0441\u0451 \u044d\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0432 \u043f\u0430\u043c\u044f\u0442\u0438. \u0414\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u043b\u0438\u043d\u043a\u043e\u0432\u0449\u0438\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435, \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u00abhello_world\u00bb \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b <strong>linker.ld<\/strong> \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b.<\/p>\n<p>\u0417\u0430\u0433\u043b\u044f\u043d\u0443\u0432 \u0432 \u0444\u0430\u0439\u043b <strong>linker.ld<\/strong>, \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e:<\/p>\n<ol>\n<li>\n<p> \u041b\u0438\u043d\u043a\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u043e\u0431\u043b\u0430\u0441\u0442\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0432 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 0x80000000 \u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 96\u041a\u0411.<\/p>\n<\/li>\n<li>\n<p> \u041b\u0438\u043d\u043a\u0435\u0440 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0435\u0441\u043b\u0438 \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <strong>_stack_size<\/strong>, \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442 \u043f\u043e\u0434 \u0441\u0442\u0435\u043a 2048 \u0431\u0430\u0439\u0442.<\/p>\n<\/li>\n<li>\n<p> \u041b\u0438\u043d\u043a\u0435\u0440 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0435\u0441\u043b\u0438 \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <strong>_heap_size<\/strong>, \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442 \u043f\u043e\u0434 \u00ab\u043a\u0443\u0447\u0443\u00bb 0 \u0431\u0430\u0439\u0442, \u0442.\u00a0\u0435. \u00ab\u043a\u0443\u0447\u0438\u00bb \u043d\u0435\u0442.<\/p>\n<\/li>\n<li>\n<p> \u041b\u0438\u043d\u043a\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0431\u043b\u0430\u0441\u0442\u0435\u0439 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439, \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 (\u043e\u0442 \u043c\u043b\u0430\u0434\u0448\u0438\u0445 \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u043a \u0441\u0442\u0430\u0440\u0448\u0438\u043c):<\/p>\n<\/li>\n<\/ol>\n<ul>\n<li>\n<p> <strong>._vector<\/strong> \u2014 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0430\u044f \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e JUMP;<\/p>\n<\/li>\n<li>\n<p>.<strong>text(crt.o)<\/strong> \u2014 \u0442\u0435\u043a\u0441\u0442 \u00abC run-time\u00bb;<\/p>\n<\/li>\n<li>\n<p><strong>._user_heap<\/strong> \u2014 \u00ab\u043a\u0443\u0447\u0430\u00bb \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 0 \u0431\u0430\u0439\u0442 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e;<\/p>\n<\/li>\n<li>\n<p><strong>._stack<\/strong> \u2014 \u0441\u0442\u0435\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 2048 \u0431\u0430\u0439\u0442;<\/p>\n<\/li>\n<li>\n<p><strong>.data<\/strong> \u2014 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043d\u0435\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b;<\/p>\n<\/li>\n<li>\n<p><strong>.rodate<\/strong> \u2014 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b;<\/p>\n<\/li>\n<li>\n<p><strong>.text<\/strong> \u2014 \u0442\u0435\u043a\u0441\u0442 (\u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0439 \u043a\u043e\u0434) \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u00abhello_world\u00bb.<\/p>\n<\/li>\n<\/ul>\n<p> \u041d\u0435\u0443\u0434\u043e\u0431\u0441\u0442\u0432\u043e \u0442\u0430\u043a\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u00ab\u043a\u0443\u0447\u0430\u00bb \u0437\u0434\u0435\u0441\u044c \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043e\u0431\u043b\u0430\u0441\u0442\u044f\u043c\u0438 \u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0430 \u043f\u0443\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f, \u043d\u0435 \u043f\u043e\u0432\u0440\u0435\u0434\u0438\u0432 \u0441\u0442\u0435\u043a, \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0441\u0440\u0430\u0437\u0443 \u0437\u0430 \u00ab\u043a\u0443\u0447\u0435\u0439\u00bb. \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <strong>_sbrk()<\/strong>, \u043c\u044b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u2014 \u043f\u0435\u0440\u0435\u0434\u0432\u0438\u043d\u0435\u043c \u00ab\u043a\u0443\u0447\u0443\u00bb \u0432 \u0441\u0430\u043c\u044b\u0439 \u043a\u043e\u043d\u0435\u0446 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0438 \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u043c \u0435\u0439 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 <strong>_ram_heap<\/strong>. \u042d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0434\u043b\u044f \u00ab\u043a\u0443\u0447\u0438\u00bb \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u0443\u0435\u043c\u043e\u0439 RAM. \u0420\u0430\u0437\u043c\u0435\u0440 \u044d\u0442\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043c\u044b \u043e\u0441\u0442\u0430\u0432\u0438\u043c \u0440\u0430\u0432\u043d\u044b\u043c \u043d\u0443\u043b\u044e, \u0444\u0443\u043d\u043a\u0446\u0438\u044f <strong>_sbrk()<\/strong> \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u0442 \u0435\u0451 \u043f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u0436\u0435 \u0432\u044b\u0437\u043e\u0432\u0435 \u043d\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0430\u0439\u0442.<\/p>\n<p>\u041d\u0430\u0448 \u043d\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b <strong>linker.ld<\/strong> \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<details class=\"spoiler\">\n<summary>linker.ld<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">OUTPUT_FORMAT(\"elf32-littleriscv\", \"elf32-littleriscv\", \"elf32-littleriscv\")  OUTPUT_ARCH(riscv)  ENTRY(crtStart)  MEMORY {    RAM      (rwx): ORIGIN = 0x80000000, LENGTH = 96k  }  _stack_size = DEFINED(_stack_size) ? _stack_size : 2048;  _ram_heap_size = DEFINED(_ram_heap_size) ? _ram_heap_size : 0;  SECTIONS {    ._vector ORIGIN(RAM): {      *crt.o(.start_jump);      *crt.o(.text);    } > RAM    .data :    {      (.rdata)      (.rodata .rodata.)      (.gnu.linkonce.r.)      (.data .data.)      (.gnu.linkonce.d.)      . = ALIGN(8);      PROVIDE( __global_pointer$ = . + 0x800 );      (.sdata .sdata.)      (.gnu.linkonce.s.)      . = ALIGN(8);      (.srodata.cst16)      (.srodata.cst8)      (.srodata.cst4)      (.srodata.cst2)      (.srodata .srodata.*)    } > RAM    .bss (NOLOAD) : {                  . = ALIGN(4);                  \/* This is used by the startup in order to initialize the .bss secion \/                  _bss_start = .;      (.sbss*)      (.gnu.linkonce.sb.)      (.bss .bss.)      (.gnu.linkonce.b.)      *(COMMON)                  . = ALIGN(4);                  _bss_end = .;    } > RAM    .rodata         :    {      (.rdata)      (.rodata .rodata.)      (.gnu.linkonce.r.*)    } > RAM    .noinit (NOLOAD) : {        . = ALIGN(4);        (.noinit .noinit.)        . = ALIGN(4);    } > RAM    .memory : {      *(.text);      end = .;    } > RAM    .ctors          :    {      . = ALIGN(4);      _ctors_start = .;      KEEP((.init_array))      KEEP ((SORT(.ctors.)))      KEEP (*(.ctors))      . = ALIGN(4);      _ctors_end = .;      PROVIDE ( END_OF_SW_IMAGE = . );    } > RAM    ._stack (NOLOAD):    {      . = ALIGN(16);      PROVIDE (_stack_end = .);      . = . + _stack_size;      . = ALIGN(16);      PROVIDE (_stack_start = .);    } > RAM    ._ram_heap (NOLOAD):    {      . = ALIGN(8);      PROVIDE ( end = . );      PROVIDE ( _end = . );      PROVIDE ( _ram_heap_start = .);      . = . + _ram_heap_size;      PROVIDE ( _ram_heap_end = ALIGN(ORIGIN(RAM) + LENGTH(RAM) ,8) );    } > RAM  } <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p> \u041d\u0430\u0441\u0442\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <strong>_sbrk()<\/strong>. \u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043d\u0430\u0448\u0435\u0439 \u0446\u0435\u043b\u044c\u044e \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u044f <strong>malloc()<\/strong> \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u043b\u0430 \u0431\u043b\u043e\u043a\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438\u0437 \u0432\u043d\u0435\u0448\u043d\u0435\u0439 SRAM \u043f\u0430\u043c\u044f\u0442\u0438 \u2014 \u043e\u0431\u043b\u0430\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0441 \u0430\u0434\u0440\u0435\u0441\u0430 <strong>0x90000000<\/strong>. \u0412 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f, \u0443 \u043d\u0430\u0441 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043d\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432 \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u0443\u0435\u043c\u043e\u0439 RAM \u043f\u0430\u043c\u044f\u0442\u0438, \u0433\u0434\u0435-\u0442\u043e \u0442\u0430\u043c \u0432\u044b\u0448\u0435 \u0441\u0442\u0435\u043a\u0430. \u0411\u044b\u043b\u043e \u0431\u044b \u043d\u0435 \u043f\u043b\u043e\u0445\u043e, \u0435\u0441\u043b\u0438 \u0431\u044b \u043d\u0430\u0448\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043c\u043e\u0433\u043b\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0435\u0439 SRAM \u0438 \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0431\u0435\u0437 \u043e\u0448\u0438\u0431\u043e\u043a, \u0442\u043e \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0435\u0451 \u043f\u043e\u0434 \u00ab\u043a\u0443\u0447\u0443\u00bb. \u0415\u0441\u043b\u0438 \u0436\u0435 SRAM \u0432\u044b\u0434\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u0440\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 (\u043b\u0438\u0431\u043e \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442), \u0442\u043e \u0434\u043b\u044f \u00ab\u043a\u0443\u0447\u0438\u00bb \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0438\u0437 \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 RAM. \u0418\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u043d\u0430\u043c \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u00ab\u043a\u0443\u0447\u0438\u00bb \u0434\u043b\u044f <strong>_sbrk()<\/strong>, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f SRAM.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0441\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043e\u0431\u043b\u0430\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u0432 \u0444\u0430\u0439\u043b\u0435 <strong>linker.ld<\/strong>, \u0432 \u0444\u0430\u0439\u043b\u0435 <strong>main.c<\/strong> \u0437\u0430\u0432\u0435\u0434\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b:<\/p>\n<pre><code class=\"cpp\">\/\/ Below is some linker specific stuff  extern unsigned int end; \/* Set by linker.  *\/  extern unsigned int _ram_heap_start; \/* Set by linker.  *\/  extern unsigned int _ram_heap_end; \/* Set by linker.  *\/  extern unsigned int _stack_start; \/* Set by linker.  *\/  extern unsigned int _stack_size; \/* Set by linker.  *\/ <\/code><\/pre>\n<p> \u042d\u0442\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043e\u0431\u043e\u0439 \u0430\u0434\u0440\u0435\u0441\u0430 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u0435\u0439 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438, \u043e\u043d\u0438  \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0432 \u0444\u0430\u0439\u043b\u0435 <strong>linker.ld<\/strong>.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435, \u0437\u0430\u0432\u0435\u0434\u0435\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0432\u043e\u0438\u0445 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430\u0448\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <strong>_sbrk()<\/strong>:<\/p>\n<pre><code class=\"cpp\">unsigned char* sbrk_heap_end = 0; \/* tracks heap usage *\/  unsigned int* heap_start = 0; \/* programmer define heap start *\/  unsigned int* heap_end = 0; \/* programmer defined heap end *\/ <\/code><\/pre>\n<p> \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f sbrk_heap_end \u2014 \u044d\u0442\u043e \u0438 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0448 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0443 \u0440\u0430\u0437\u0434\u0435\u043b\u0430, \u0442\u043e \u0435\u0441\u0442\u044c \u043e\u043d \u0432\u0441\u0435\u0433\u0434\u0430 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0442\u043e \u043c\u0435\u0441\u0442\u043e, \u0433\u0434\u0435 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u00ab\u043a\u0443\u0447\u0430\u00bb. \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 <strong>heap_start<\/strong> \u0438 <strong>heap_end<\/strong> \u0431\u0443\u0434\u0443\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u0440\u043e\u0441\u0442\u0430 \u00ab\u043a\u0443\u0447\u0438\u00bb.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <strong>init_sbrk()<\/strong> \u0434\u043b\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u044d\u0442\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0438 \u0442\u043e\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0435\u0451 \u0432 \u0444\u0430\u0439\u043b <strong>main.c<\/strong>:<\/p>\n<pre><code class=\"cpp\">void init_sbrk(unsigned int* heap, int size) {          if(heap == NULL) {                  heap_start = (unsigned int*)&amp; _ram_heap_start;                  heap_end = (unsigned int*)&amp; _ram_heap_end;          } else {                  heap_start = heap;                  heap_end = heap_start + size;          }          sbrk_heap_end = (char*) heap_start;  } <\/code><\/pre>\n<p>\u041d\u0443 \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <strong>_sbrk()<\/strong> \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f:<\/p>\n<pre><code class=\"cpp\">void* _sbrk(unsigned int incr) {          unsigned char* prev_heap_end;          if (sbrk_heap_end == 0) {                  \/\/ In case init_sbrk() has not been called                  \/\/ use on-chip RAM by default                  heap_start = &amp; _ram_heap_start;                  heap_end = &amp; _ram_heap_end;                  sbrk_heap_end = (char*) heap_start;          }          prev_heap_end = sbrk_heap_end;          if((unsigned int)(sbrk_heap_end + incr) >= (unsigned int)heap_end) {                  println(\"_sbrk() OUT OF MEM:\");                  print(\"sbrk_heap_end = \");                  printhex((unsigned int)sbrk_heap_end);                  print(\"heap_end = \");                  printhex((unsigned int)heap_end);                  print(\"incr = \");                  printhex((unsigned int)incr);                  return ((void*)-1); \/\/ error - no more free memory          }          sbrk_heap_end += incr;          return (void *) prev_heap_end;  } <\/code><\/pre>\n<p> \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <strong>_sbrk()<\/strong> \u2014 \u044d\u0442\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442 (\u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442) \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c <strong>sbrk_heap_end<\/strong> \u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 incr, \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u00ab\u043a\u0443\u0447\u0435\u00bb \u0434\u043e\u0437\u0432\u043e\u043b\u0435\u043d\u043e \u0431\u044b\u0442\u044c.<\/p>\n<p>\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <strong>init_sbrk()<\/strong> \u0438\u0437 \u0442\u0435\u043b\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>main()<\/strong>. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"cpp\">        ...         uart_config.clockDivider = SYSTEM_CLOCK_HZ \/ UART_BAUD_RATE \/ rxSamplePerBit - 1;          uart_applyConfig(UART, &amp;uart_config);           if(sram_test_write_random_ints() == 0) {                  init_sbrk((unsigned int*)SRAM_ADDR_BEGIN, SRAM_SIZE);                  println(\"Enabled heap on SRAM\");          } else {                  init_sbrk(NULL, 0);                  println(\"Enabled heap on on-chip RAM\");          }           char *test = malloc(1024);          println(\"Malloc test:\");          printhex((unsigned int)test);          ...<\/code><\/pre>\n<p> \u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u0443\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u043c \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438. \u041f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0421\u0438 \u043a\u043e\u0434\u0430, \u0438 \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f:<\/p>\n<details class=\"spoiler\">\n<summary>make clean &amp;&amp; make<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>rz@devbox:~\/VexRiscv\/scripts\/Murax\/Karnix$ make clean &amp;&amp; make  ... (cd ..\/..\/..\/src\/main\/c\/murax\/hello_world\/; make)  make[1]: Entering directory '\/home\/rz\/VexRiscvWithKarnix\/src\/main\/c\/murax\/hello_world'  mkdir -p build\/src\/  \/opt\/riscv\/\/bin\/riscv64-unknown-elf-gcc -c -march=rv32i  -mabi=ilp32 -DNDEBUG -g -Os -MD -fstrict-volatile-bitfields -fno-strict-aliasing   -o build\/src\/main.o src\/main.c  \/opt\/riscv\/\/bin\/riscv64-unknown-elf-gcc -S -march=rv32i  -mabi=ilp32 -DNDEBUG -g -Os -MD -fstrict-volatile-bitfields -fno-strict-aliasing   -o build\/src\/main.o.disasm src\/main.c  \/opt\/riscv\/\/bin\/riscv64-unknown-elf-gcc -march=rv32i  -mabi=ilp32 -DNDEBUG -g -Os -MD -fstrict-volatile-bitfields -fno-strict-aliasing -o build\/hello_world.elf build\/src\/main.o build\/src\/crt.o -march=rv32i  -mabi=ilp32 -nostdlib -lgcc -mcmodel=medany -nostartfiles -ffreestanding -Wl,-Bstatic,-T,.\/src\/linker.ld,-Map,build\/hello_world.map,--print-memory-usage -Lbuild -lc  Memory region         Used Size  Region Size  %age Used               RAM:        9760 B        96 KB      9.93%  \/opt\/riscv\/\/bin\/riscv64-unknown-elf-objcopy -O ihex build\/hello_world.elf build\/hello_world.hex  \/opt\/riscv\/\/bin\/riscv64-unknown-elf-objdump -S -d build\/hello_world.elf > build\/hello_world.asm  \/opt\/riscv\/\/bin\/riscv64-unknown-elf-objcopy -O verilog build\/hello_world.elf build\/hello_world.v  make[1]: Leaving directory '\/home\/rz\/VexRiscvWithKarnix\/src\/main\/c\/murax\/hello_world'  (cd ..\/..\/..; sbt \"runMain vexriscv.demo.Murax_karnix\")  [info] welcome to sbt 1.6.0 (Ubuntu Java 11.0.9.1)  ...<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p> \u0420\u0430\u0437\u043c\u0435\u0440 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0421\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u043f\u043e\u0434\u0440\u043e\u0441: \u0441 2756 \u0434\u043e 9760 \u0431\u0430\u0439\u0442. \u042d\u0442\u043e \u043c\u0435\u0441\u0442\u043e \u0437\u0430\u043d\u044f\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <strong>malloc()<\/strong> \u0438 \u0441\u043e\u043f\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0435\u0439 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u0438\u0437 <strong>libc<\/strong>.<\/p>\n<p> \u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0439\u0441\u044f \u0431\u0438\u0442\u0441\u0442\u0440\u0438\u043c \u0432 \u041f\u041b\u0418\u0421 \u0438 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c \u0432 \u043f\u043e\u0440\u0442\u0443 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f:<\/p>\n<pre><code>Checking SRAM at: 90000000  SRAM total fails: 00000000 special keys  Enabled heap on SRAM  Malloc test:  90000008  Hello world, this is VexRiscv!  000000C6  000282CD  Hello world, this is VexRiscv!  000000C6  000282CE<\/code><\/pre>\n<p> \u0412\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0442\u0435\u0441\u0442 SRAM \u043f\u0440\u043e\u0448\u0435\u043b \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0438 \u00ab\u043a\u0443\u0447\u0430\u00bb \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 SRAM, \u0447\u0442\u043e \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u043c \u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0431\u043b\u043e\u043a \u043f\u0430\u043c\u044f\u0442\u0438, \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 <strong>malloc()<\/strong>: <strong>0x90000008<\/strong>.<\/p>\n<p> \u0421 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043c\u0435\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <strong>malloc()<\/strong> \u0438 <strong>free()<\/strong>.<\/p>\n<p><a class=\"anchor\" name=\"17.2.4\" id=\"17.2.4\"><\/a><\/p>\n<h4> 17.2.4 \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0431\u043b\u043e\u043a\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u0435\u0439 Div \u0438 Mul<\/h4>\n<p> \u0421\u0435\u0439\u0447\u0430\u0441, \u043a\u043e\u0433\u0434\u0430 \u0443 \u043d\u0430\u0441 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u044e\u0449\u0438\u0439 <strong>malloc()<\/strong>, \u043c\u044b \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <strong>libc<\/strong>, \u043d\u043e \u0441\u043f\u0435\u0448\u0443 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0434\u0438\u0442\u044c, \u0447\u0442\u043e \u043d\u0435 \u0432\u0441\u0435 \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e <strong>libc<\/strong> \u043e\u0447\u0435\u043d\u044c \u0441\u0438\u043b\u044c\u043d\u043e \u0437\u0430\u0432\u044f\u0437\u0430\u043d\u0430 \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u0434\u0435\u043b\u0435\u043d\u0438\u044f (MUL \u0438 DIV), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0432 \u043d\u0430\u0448\u0435\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u044f\u0434\u0440\u0430 VexRiscv, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u044d\u0442\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u0432 \u043e\u043f\u0446\u0438\u044f\u0445 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0438 \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0421\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443, \u0441\u043a\u0430\u0436\u0435\u043c, \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>vsnprintf()<\/strong>, \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u0432\u044b\u0432\u043e\u0434\u0443 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u043e\u0448\u0438\u0431\u043e\u043a \u043e\u0431 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 <strong>__mulsi3()<\/strong> \u0438 <strong>__divsi3()<\/strong>. \u042d\u0442\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0431\u0435\u0440\u0442\u043a\u0430\u043c\u0438 \u0434\u043b\u044f \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u0434\u0435\u043b\u0435\u043d\u0438\u044f.<\/p>\n<p> \u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u044d\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 <strong>makefile<\/strong>-\u0435 \u0432 \u043e\u043f\u0446\u0438\u044f\u0445 \u043b\u0438\u043d\u043a\u0435\u0440\u0443 (<strong>LDFLAGS<\/strong>) \u043d\u0443\u0436\u043d\u043e \u0443\u0431\u0440\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <strong>-nostdlib<\/strong> \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c <strong>-lgcc<\/strong>, \u044d\u0442\u043e \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442 \u0435\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043d\u0430\u0431\u043e\u0440 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0439 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0438. \u041d\u043e, \u0432\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u044d\u0442\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442 \u043e\u0431\u044a\u0451\u043c \u043a\u043e\u0434\u0430, \u0432\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u043d\u0438\u0437\u043a\u043e\u0439. \u0418 \u0432-\u0442\u0440\u0435\u0442\u044c\u0438\u0445, \u0437\u0430\u0447\u0435\u043c \u043d\u0430\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u0430\u044f \u044d\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u0434\u0435\u043b\u0435\u043d\u0438\u044f, \u0435\u0441\u043b\u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043b\u0435\u0433\u043a\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0432 \u043d\u0430\u0431\u043e\u0440 \u043a\u043e\u043c\u0430\u043d\u0434 VexrRiscv, \u0432\u043a\u043b\u044e\u0447\u0438\u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b.<\/p>\n<p> \u0412\u0441\u0451 \u0447\u0442\u043e \u043d\u0430\u043c \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f, \u044d\u0442\u043e \u0432 \u0444\u0430\u0439\u043b\u0435 <strong>Murax.scala<\/strong> \u043d\u0430\u0439\u0442\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0441 \u043f\u043b\u0430\u0433\u0438\u043d\u0430\u043c\u0438 \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043d\u0435\u0433\u043e \u0434\u0432\u0430 \u043f\u043b\u0430\u0433\u0438\u043d\u0430: <strong>MulPlugin<\/strong> \u0438 <strong>DivPlugin<\/strong>. \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432  <strong>Murax.scala<\/strong> \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"scala\">      new FullBarrelShifterPlugin,        new MulPlugin, \/\/ \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043e       new DivPlugin, \/\/ \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043e       new HazardSimplePlugin(          bypassExecute = false,          bypassMemory = false,          bypassWriteBack = false,          bypassWriteBackBuffer = false,          pessimisticUseSrc = false,          pessimisticWriteRegFile = false,          pessimisticAddressMatch = false        ), <\/code><\/pre>\n<p> \u0416\u0438\u0440\u043d\u044b\u043c \u0448\u0440\u0438\u0444\u0442\u043e\u043c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u044b \u0434\u0432\u0435 \u0441\u0442\u0440\u043e\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c.<\/p>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u043c\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0441\u0431\u043e\u0440\u043a\u0443, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0438\u0437 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f <strong>M<\/strong>, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0447\u0442\u043e\u0431\u044b \u0435\u043c\u0443 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u043b\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <strong>-march=rv32im<\/strong> (\u0441\u0435\u0439\u0447\u0430\u0441 \u0435\u043c\u0443 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f <strong>-march=rv32i<\/strong> \u2014 \u0431\u0435\u0437 \u0431\u0443\u043a\u0432\u044b <strong>m<\/strong>). \u0421\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0432 <strong>makefile<\/strong> \u0434\u043b\u044f \u0421\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u00abhello_world\u00bb, \u0438\u0437\u043c\u0435\u043d\u0438\u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <strong>MULDIV=no<\/strong> \u043d\u0430 <strong>MULDIV=yes<\/strong>.<\/p>\n<p> \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0430 \u044d\u0442\u043e\u043c \u0432\u0441\u044f \u043c\u0430\u0433\u0438\u044f \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f. \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0439 <strong>libc<\/strong>, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u0442\u0435\u043a\u0441\u0442 \u0421\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0432 \u0442\u0435\u043b\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>main()<\/strong> \u0432\u044b\u0432\u043e\u0434 \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044e <strong>vsnprintf()<\/strong>:  <\/p>\n<pre><code class=\"cpp\">        while(1){                  unsigned int shift_time;                  unsigned int t1, t2;                   \/\/println(\"Hello world, this is VexRiscv!\");                  char str[128];                  vsnprintf(str, 128, \"Hello world, this is VexRiscv!\\r\\n\", NULL);                  print(str);                   for(unsigned int i=0;i&lt;nleds-1;i++){              ...<\/code><\/pre>\n<p> \u041a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e, \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <strong>make clean &amp;&amp; make<\/strong> \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0441\u0431\u043e\u0440\u043a\u0443 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441 \u043a\u0430\u043a\u0438\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043b\u0438\u043d\u043a\u043e\u0432\u043a\u0430:<\/p>\n<pre><code>... \/opt\/riscv\/\/bin\/riscv64-unknown-elf-gcc -march=rv32im  -mabi=ilp32 -DNDEBUG -g -Os -MD -fstrict-volatile-bitfields -fno-strict-aliasing -o build\/hello_world.elf build\/src\/main.o build\/src\/crt.o -march=rv32im  -mabi=ilp32 -nostdlib -lgcc -mcmodel=medany -nostartfiles -ffreestanding -Wl,-Bstatic,-T,.\/src\/linker.ld,-Map,build\/hello_world.map,--print-memory-usage -Lbuild -lc_nano  Memory region         Used Size  Region Size  %age Used               RAM:        9152 B        96 KB      9.31%  ...<\/code><\/pre>\n<p> \u0412\u0441\u0435 \u043e\u043a, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0444\u043b\u0430\u0433 <strong>-march=rv32im<\/strong> , \u043b\u0438\u043d\u043a\u043e\u0432\u043a\u0430 \u0421\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0438 \u0441\u0431\u043e\u0440\u043a\u0430 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f \u0443\u0441\u043f\u0435\u0448\u043d\u043e. \u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0431\u0438\u0442\u0441\u0442\u0440\u0438\u043c \u0432 \u041f\u041b\u0418\u0421 \u0438 \u0443\u0431\u0435\u0436\u0434\u0430\u0435\u043c\u0441\u044f, \u0447\u0442\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f \u0442\u0430\u043a\u0436\u0435 \u0445\u043e\u0440\u043e\u0448\u043e \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0439 \u043f\u043e\u0440\u0442, \u043a\u0430\u043a \u0438 \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435.<\/p>\n<p><a class=\"anchor\" name=\"17.2.5\" id=\"17.2.5\"><\/a><\/p>\n<h4> 17.2.5 \u0417\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e printf<\/h4>\n<p> \u0421\u0430\u043c\u043e\u0439 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u0438\u0437 \u0432\u0441\u0435\u0445, \u0431\u0435\u0437 \u0441\u043e\u043c\u043d\u0435\u043d\u0438\u044f, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <strong>printfs()<\/strong>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u0435\u0440\u0442\u043a\u043e\u0439 \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>vsnprintf()<\/strong>. \u0421 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 <strong>vsnprintf()<\/strong> \u043c\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c \u0438 \u0434\u043b\u044f \u0435\u0451 \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u043e\u043b\u0435\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f. \u0410 \u0432\u043e\u0442 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <strong>printf()<\/strong>, \u0435\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u043d\u0430 \u00ab\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0432\u044b\u0432\u043e\u0434\u0430\u00bb. \u0412 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u0434\u043b\u044f \u044d\u0442\u0438\u0445 \u0446\u0435\u043b\u0435\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 <strong>write()<\/strong> \u0441 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u043c \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u043c <strong>#1<\/strong>, \u043d\u043e \u0443 \u043d\u0430\u0441 \u043d\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u041a\u0430\u043a \u0442\u0443\u0442 \u0431\u044b\u0442\u044c? \u0412\u0441\u0451 \u043f\u0440\u043e\u0441\u0442\u043e. \u041d\u0443\u0436\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0440\u044f\u0434 \u043e\u0431\u0435\u0440\u0442\u043e\u0447\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u0442, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e:<\/p>\n<ul>\n<li>\n<p><strong>_write()<\/strong> &#8212; \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u0447\u043d\u044b\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438, \u043a\u043e\u0433\u0434\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0431\u043b\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445 (\u0441\u0442\u0440\u043e\u043a\u0443) \u043d\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0432\u044b\u0432\u043e\u0434\u0430. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0442\u0430\u043a\u0438\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0443\u0436\u0438\u0442\u044c \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0439 \u043f\u043e\u0440\u0442 UART, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0435\u043b\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>_write()<\/strong> \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u043a\u0430\u043a \u043e\u0431\u0435\u0440\u0442\u043a\u0443 \u0443 \u0443\u0436\u0435 \u0438\u043c\u0435\u044e\u0449\u0435\u0439\u0441\u044f \u0443 \u043d\u0430\u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>uart_write()<\/strong> \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0438\u043c\u0432\u043e\u043b \u0432 \u043f\u043e\u0440\u0442 UART.<\/p>\n<\/li>\n<li>\n<p> <strong>_close()<\/strong> &#8212; \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0443\u0441\u0442\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f.<\/p>\n<\/li>\n<li>\n<p> <strong>_lseek()<\/strong> &#8212; \u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u0435\u0442 \u043a\u0443\u0440\u0441\u043e\u0440 \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430. \u0422\u043e\u0436\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u043a\u0430\u043a \u043f\u0443\u0441\u0442\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e.<\/p>\n<\/li>\n<li>\n<p> <strong>_read()<\/strong> &#8212; \u0447\u0438\u0442\u0430\u0435\u0442 \u0431\u043b\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e \u0432\u0432\u043e\u0434\u0430. \u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0435\u0451 \u043a\u0430\u043a \u043f\u0443\u0441\u0442\u0443\u044e, \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u044e\u0449\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e. \u0415\u0441\u043b\u0438 \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>scanf()<\/strong> \u0438\u043b\u0438 <strong>getc()<\/strong>, \u0442\u043e \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c.<\/p>\n<\/li>\n<li>\n<p> <strong>_fstat()<\/strong> &#8212; \u0432\u044b\u0434\u0430\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u0431 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c \u0444\u0430\u0439\u043b\u0435. \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u043a\u0430\u043a \u043f\u0443\u0441\u0442\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e.<\/p>\n<\/li>\n<li>\n<p> <strong>_isatty()<\/strong> &#8212; \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u044c, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u0444\u0430\u0439\u043b \u0438\u043c\u0435\u043d\u0435\u043c \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u043e\u043c (\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 1 \u0435\u0441\u043b\u0438 \u0444\u0430\u0439\u043b \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u043e\u043c, \u0438\u043d\u0430\u0447\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <strong>0<\/strong>). \u0411\u0443\u0434\u0435\u043c \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c <strong>1<\/strong> \u2014 \u043f\u0443\u0441\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 <strong>libc<\/strong> \u0434\u0443\u043c\u0430\u0435\u0442 \u0447\u0442\u043e \u0438\u043c\u0435\u0435\u0442 \u0434\u0435\u043b\u043e \u0441 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u043e\u043c.<\/p>\n<\/li>\n<\/ul>\n<p> \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u0432\u044b\u0448\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u00ab\u0437\u0430\u0433\u043b\u0443\u0448\u0435\u043a\u00bb \u0432 \u0444\u0430\u0439\u043b <strong>main.c<\/strong>:<\/p>\n<pre><code class=\"cpp\">#include &lt;stdio.h>  #include &lt;sys\/stat.h>  ...  int _write (int fd, const void *buf, size_t count) {          int i;          char* p = (char*) buf;          for(i = 0; i &lt; count; i++) { uart_write(UART, *p++); }          return count;  }   int _read (int fd, const void *buf, size_t count) { return 1; }  int _close(int fd) { return -1; }  int _lseek(int fd, int offset, int whence) { return 0 ;}  int _isatty(int fd) { return 1; }   int _fstat(int fd, struct stat *sb) {          sb->st_mode = S_IFCHR;          return 0;  } <\/code><\/pre>\n<p> \u0412 \u0442\u0435\u043b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>main()<\/strong> \u0437\u0430\u043c\u0435\u043d\u0438\u043c \u0432\u044b\u0432\u043e\u0434 \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>printf()<\/strong>:<\/p>\n<pre><code class=\"cpp\"> while(1){   ... \/\/println(\"Hello world, this is VexRiscv!\");  \/\/char str[128];  \/\/vsnprintf(str, 128, \"Hello world, this is VexRiscv!\\r\\n\", NULL);  \/\/print(str);  printf(\"Hello world, this is VexRiscv!\\r\\n\"); <\/code><\/pre>\n<p> \u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c, \u043f\u0440\u043e\u0448\u0438\u0432\u0430\u0435\u043c \u0431\u0438\u0442\u0441\u0442\u0440\u0438\u043c \u0432 \u041f\u041b\u0418\u0421 \u0438 \u043d\u0430\u0441\u043b\u0430\u0436\u0434\u0430\u0435\u043c\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <strong>libc<\/strong> \u2014 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 <strong>printf()<\/strong>.<\/p>\n<p>\u041d\u0443 \u0438 \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e, \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0438 \u043b\u0438\u043d\u043a\u043e\u0432\u043a\u0438 \u0421\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b:<\/p>\n<pre><code>\/opt\/riscv\/\/bin\/riscv64-unknown-elf-gcc -march=rv32im  -mabi=ilp32 -DNDEBUG -g -Os -MD -fstrict-volatile-bitfields -fno-strict-aliasing -o build\/hello_world.elf build\/src\/main.o build\/src\/crt.o -march=rv32im  -mabi=ilp32 -nostdlib -lgcc -mcmodel=medany -nostartfiles -ffreestanding -Wl,-Bstatic,-T,.\/src\/linker.ld,-Map,build\/hello_world.map,--print-memory-usage -Lbuild -lc_nano  Memory region         Used Size  Region Size  %age Used               RAM:        9728 B        96 KB      9.90% <\/code><\/pre>\n<p><a class=\"anchor\" name=\"17.3\" id=\"17.3\"><\/a><\/p>\n<h3> 17.3 \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 PLIC<\/h3>\n<p> \u041f\u043e\u0447\u0442\u0438 \u043b\u044e\u0431\u043e\u0435 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0439\u043d\u043e\u0435 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u0430 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u043c\u0438 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u0438\u043b\u0438 IRQ (\u043e\u0442 \u00ab<strong>I<\/strong>nterrupt <strong>R<\/strong>e<strong>Q<\/strong>uest\u00bb). \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0445 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0439\u043d\u044b\u043c\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u0442\u044c \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 (\u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u044f\u0434\u0440\u043e) \u043e\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u043f\u043e\u043d\u0430\u043f\u0440\u0430\u0441\u043d\u0443 \u0446\u0438\u043a\u043b\u044b \u0434\u043b\u044f \u043e\u043f\u0440\u043e\u0441\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438 \u0438\u043b\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0439\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432, \u043e\u043d\u0438 (\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430) \u0441\u0430\u043c\u0438 \u0441\u043e\u043e\u0431\u0449\u0430\u044e\u0442 \u043e \u0441\u0432\u043e\u0435\u0439 \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438 \u043f\u0443\u0442\u0435\u043c \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u2014 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0442 \u0441\u0438\u0433\u043d\u0430\u043b \u043d\u0430 \u043b\u0438\u043d\u0438\u044f\u0445 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u0410\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u043e\u0431\u044b\u0447\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u043c \u043f\u0443\u0442\u0435\u043c \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435-\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c ISR (\u043e\u0442 \u00abInterrupt Service Routine\u00bb) \u0438\u043b\u0438 \u00abIRQ handler\u00bb. \u0412 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0431\u044b\u0441\u0442\u0440\u043e\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0443\u0440\u043e\u0439, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u0432\u043e\u0434\/\u0432\u044b\u0432\u043e\u0434 \u0431\u043b\u043e\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u0447\u0442\u0435\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u0438 \u0442.\u00a0\u0434., \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435, \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0432 \u043c\u0435\u0441\u0442\u0435 \u0435\u0451 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p><a class=\"anchor\" name=\"17.3.1\" id=\"17.3.1\"><\/a><\/p>\n<h4> 17.3.1 \u0420\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 MicroPLIC<\/h4>\n<p> \u0412 \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u0443\u0435\u043c\u043e\u043c \u044f\u0434\u0440\u0435 VexRiscv \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 RISC-V: \u00ab\u043f\u0440\u044f\u043c\u043e\u0439\u00bb \u0438 \u00ab\u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0439\u00bb. \u00ab\u041f\u0440\u044f\u043c\u043e\u0439\u00bb \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u044d\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u0432\u0438\u0434\u044b \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u0438 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u0438\u043c\u0435\u044e\u0442 \u043e\u0434\u0438\u043d \u043e\u0431\u0449\u0438\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a, \u0430\u0434\u0440\u0435\u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0432 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u043c CSR \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 (\u043e\u0442 \u00abControl and State Register\u00bb) <strong>mtvec<\/strong>. \u042d\u0442\u043e\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e CSR \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 <strong>mcause<\/strong> \u0438, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442 \u0432\u044b\u0437\u043e\u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u00ab\u0412\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0439\u00bb \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u2014 \u043a\u043e\u0433\u0434\u0430 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0432\u0438\u0434 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0441\u0432\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a, \u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u043c\u0443\u0441\u044f \u0432\u043e \u0432\u0441\u0435 \u0442\u043e\u043c \u0436\u0435 CSR \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 <strong>mtvec<\/strong>. \u0412\u044b\u0431\u043e\u0440 \u0441\u043f\u043e\u0441\u043e\u0431\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0431\u0443\u0434\u0443\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f, \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439 0-\u0433\u043e \u0431\u0438\u0442\u0430 \u0432 \u044d\u0442\u043e\u043c \u0436\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 <strong>mtvec<\/strong>. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e\u0442 \u0431\u0438\u0442 \u0440\u0430\u0432\u0435\u043d <strong>0<\/strong> \u2014 \u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u00ab\u043f\u0440\u044f\u043c\u043e\u0439\u00bb \u0441\u043f\u043e\u0441\u043e\u0431, \u0438\u043d\u0430\u0447\u0435 &#8212; \u00ab\u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0439\u00bb.<\/p>\n<p>\u0422\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e \u0432 RISC \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430\u0445 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0435\u043d\u0438\u0435 \u043e\u0442\u0434\u0430\u0435\u0442\u0441\u044f \u00ab\u043f\u0440\u044f\u043c\u043e\u043c\u0443\u00bb \u0441\u043f\u043e\u0441\u043e\u0431\u0443, \u0438 \u0434\u0430\u043b\u0435\u0435 \u0432\u0441\u0435 \u043d\u0430\u0448\u0438 \u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0438\u0437 \u044d\u0442\u043e\u0433\u043e. \u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0432\u0441\u0435 \u0432\u0438\u0434\u044b \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 (\u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0435 \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0435) \u0432 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 RISC-V \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u00ab\u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c\u00bb (exceptions). \u041a\u0441\u0442\u0430\u0442\u0438, \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u0442\u0430\u0440\u0442\u0430 (reset) \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u044f\u0434\u0440\u0430 \u0442\u043e\u0436\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c.<\/p>\n<p> \u0415\u0441\u043b\u0438 \u043c\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u044b\u0445 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u0432 \u0421\u043d\u041a Murax, \u0442\u043e \u0443\u0432\u0438\u0434\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443:<\/p>\n<pre><code>new CsrPlugin(CsrPluginConfig.smallest(mtvecInit = if(withXip) 0xE0040020l      else 0x80000020l)),<\/code><\/pre>\n<p> \u041f\u043b\u0430\u0433\u0438\u043d <strong>CsrPlugin<\/strong>, \u043f\u043e\u043c\u0438\u043c\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 CSR \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432, \u0442\u0430\u043a\u0436\u0435 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 (\u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439) \u0438 \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 <strong>mtvec<\/strong>. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c XiP, \u043e\u043d \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <strong>0x80000020<\/strong> \u2014 \u0442.\u00a0\u0435. \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u00ab\u043f\u0440\u044f\u043c\u043e\u0439\u00bb \u0441\u043f\u043e\u0441\u043e\u0431 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u0438 \u0435\u0434\u0438\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 \u0441 \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 RAM <strong>\u0441\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c 0x20 \u0431\u0430\u0439\u0442<\/strong>. \u0412 \u044d\u0442\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 GCC \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0438\u0442 \u043d\u0430\u043c \u043a\u043e\u0434 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 (\u00abC Run-time\u00bb \u2014 \u0438\u043b\u0438 CRT) \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 <strong>trap_entry<\/strong>. \u041a\u043e\u0434 \u044d\u0442\u043e\u0439 \u00ab\u043b\u043e\u0432\u0443\u0448\u043a\u0438\u00bb \u043f\u0440\u043e\u0441\u0442 \u2014 \u043e\u043d \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u0430\u0436\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u043d\u0430 \u0441\u0442\u0435\u043a\u0435 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>irqCallback()<\/strong> \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>\u042d\u0442\u0438\u043c \u0436\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u043c <strong>CsrPlugin<\/strong> \u0432 VexRiscv \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043e \u0434\u0432\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0445 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439: <strong>timerInterrupt<\/strong> \u0438 <strong>externalInterrupt<\/strong>. \u041e\u0442\u0434\u0435\u043b\u0438\u0442\u044c \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u043e\u0442 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u043f\u043e \u0441\u0442\u0430\u0440\u0448\u0435\u043c\u0443 \u0431\u0438\u0442\u0443 CSR \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 <strong>mcause<\/strong> \u2014 \u0435\u0441\u043b\u0438 \u043e\u043d \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0432 \u00ab1\u00bb, \u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435.  \u041a \u0441\u0438\u0433\u043d\u0430\u043b\u0443 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f  <strong>timerInterrupt<\/strong> \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0442\u0430\u0439\u043c\u0435\u0440, \u0430 \u043a  <strong>externalInterrupt<\/strong> \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044e\u0442 \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0432\u043d\u0435\u0448\u043d\u0435\u0435 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0439\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u043e\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432, \u0442\u043e \u043d\u0430 \u0441\u0438\u0433\u043d\u0430\u043b  <strong>externalInterrupt<\/strong> \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 (<strong>PLIC<\/strong> &#8212; \u00abPlatform-Level Interrupt Controller\u00bb), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043a\u0430\u043a \u0431\u044b \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u043b\u0438\u043d\u0438\u0439 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0437\u0430 \u0441\u0447\u0435\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043e\u043d \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u0432 \u0441\u0432\u043e\u0438\u0445 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439, \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0430) \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u044c \u043e\u0442 \u043a\u0430\u043a\u043e\u0433\u043e \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u043b\u043e \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u0438 \u0431) \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0432 \u043a\u0430\u043a\u043e\u043c-\u0442\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u0442.\u00a0\u0435. \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438.<\/p>\n<p>\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432 \u0421\u043d\u041a Murax \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439, \u0430 \u043d\u0430 \u0432\u0445\u043e\u0434\u043d\u0443\u044e \u043b\u0438\u043d\u0438\u044f \u0432\u0435\u043a\u0442\u043e\u0440\u0430  <strong>externalInterrupt<\/strong> \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \u0441\u0438\u0433\u043d\u0430\u043b \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u043e\u0442 UART (\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u0442\u0430). \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0442\u044c \u043d\u0430\u0448 \u0421\u043d\u041a \u0438 \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0432 \u043d\u0435\u0433\u043e \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0439\u043d\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u0442\u043e \u0432\u0441\u0442\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043b\u0438\u043d\u0438\u0439 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u043e\u0442 \u044d\u0442\u0438\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432. \u0418\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u0432\u043e\u0439 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 PLIC.<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 PLIC, \u0431\u0435\u0437 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439, \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u043e, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0437\u0430\u0432\u0435\u0441\u0442\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0434\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u043b\u0438\u043d\u0438\u0439 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0434\u043b\u044f \u0438\u0445 \u043c\u0430\u0441\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041a\u043e\u0434 \u0442\u0430\u043a\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 SpinalHDL \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d \u043d\u0438\u0436\u0435.<\/p>\n<details class=\"spoiler\">\n<summary>MicroPLIC.scala<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"scala\">package mylib  import spinal.core._  import spinal.lib._  import spinal.lib.Counter  import spinal.lib.bus.amba3.apb.{Apb3, Apb3Config, Apb3SlaveFactory}  class Apb3MicroPLICCtrl(irq_nums: Int = 32) extends Component {          val io = new Bundle {                  val apb = slave( Apb3( addressWidth = 16, dataWidth = 32))                  val externalInterrupt = out Bool()                  val IRQLines = in Bits(irq_nums bits)          }          \/\/ Define control words and connect it to APB3 bus          val busCtrl = Apb3SlaveFactory(io.apb)          val IRQEnabled = Reg(Bits(irq_nums bits)) init(0)          busCtrl.readAndWrite(IRQEnabled, address = 0)          val IRQPending = Reg(Bits(irq_nums bits)) init(0)          busCtrl.readAndWrite(IRQPending, address = 1 * (irq_nums \/ 8))          busCtrl.read(io.IRQLines, address = 2 * (irq_nums \/ 8))          val IRQPolarity = Reg(Bits(irq_nums bits)) init(0)          busCtrl.readAndWrite(IRQPolarity, address = 3 * (irq_nums \/ 8))          val IRQLastValue = Reg(Bits(irq_nums bits)) init(0)          busCtrl.read(IRQLastValue, address = 4 * (irq_nums \/ 8))          def setIRQ(irq_line: Bool, irq_num: Int): Unit = {                  if(irq_num >= irq_nums) {                          throw new Exception(\"MicroPLIC: Cannot add IRQ line with number: \" + irq_num + \" as it is too big!\");                  }                  io.IRQLines(irq_num) := irq_line          }          for (i &lt;- 0 to (irq_nums - 1)) {                  IRQPending(i).setWhen( IRQEnabled(i) &amp;&amp;                                  !(io.IRQLines(i) === IRQLastValue(i)) &amp;&amp;                                  (io.IRQLines(i) === IRQPolarity(i))                  )          }          io.externalInterrupt := !(IRQPending === 0) \/\/ trigger external interrupt if there's any pending bits set          IRQLastValue := io.IRQLines \/\/ recall last state of all IRQ lines  } <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p> \u0414\u0430\u043d\u043d\u044b\u0439 PLIC \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d \u0432 \u0432\u0438\u0434\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 <strong>Apb3MicroPLICCtrl<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u043c \u0438 \u0438\u043c\u0435\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441:<\/p>\n<ul>\n<li>\n<p><strong>apb<\/strong> \u2014 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043a \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0439\u043d\u043e\u0439 \u0448\u0438\u043d\u0435 <strong>Apb3<\/strong>, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u00ab\u0441\u043b\u044d\u0439\u0432\u0430\u00bb.<\/p>\n<\/li>\n<li>\n<p><strong>IRQLines<\/strong> \u2014 \u043c\u043d\u043e\u0433\u043e\u0431\u0438\u0442\u043d\u044b\u0439 \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u043e\u0442 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u044b\u0445 \u043a \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0443. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u043d\u0430 \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u044c 32 \u0431\u0438\u0442\u0430, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u043e\u0442 32-\u0445 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0439\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432.<\/p>\n<\/li>\n<li>\n<p><strong>externalInterrupt<\/strong> \u2014 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043a \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c\u0443 \u044f\u0434\u0440\u0443.<\/p>\n<\/li>\n<\/ul>\n<p> \u0412\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u043c\u0430\u0448\u0438\u043d\u044b \u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e:<\/p>\n<ul>\n<li>\n<p><strong>IRQEnabled<\/strong> \u2014 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0431\u0438\u0442\u043e\u0432\u044b\u0435 \u043c\u0430\u0441\u043a\u0438 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u043e\u0442 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432. \u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043b\u043e\u0433 \u00ab1\u00bb \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u043e\u0442 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043e.<\/p>\n<\/li>\n<li>\n<p><strong>IRQPending<\/strong> \u2014 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0431\u0438\u0442\u043e\u0432\u044b\u0435 \u0444\u043b\u0430\u0433\u0438, \u0438\u043d\u0434\u0438\u0446\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043b \u0441\u0438\u0433\u043d\u0430\u043b \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0438 \u0436\u0434\u0435\u0442 \u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438.<\/p>\n<\/li>\n<li>\n<p><strong>IRQPolarity<\/strong> \u2014 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0444\u043b\u0430\u0433\u0438, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0435 \u043d\u0430 \u043f\u043e\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u044c \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u043b\u0438\u043d\u0438\u0439 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u043e\u0442 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432. \u0415\u0441\u043b\u0438 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c \u0431\u0438\u0442\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u043b\u043e\u0433 \u00ab0\u00bb, \u0442\u043e \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u043e\u0442 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 \u043b\u0438\u043d\u0438\u0438 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0438\u0437 \u00abhigh\u00bb \u0432 \u00ablow\u00bb (\u043f\u043e \u0441\u043f\u0430\u0434\u0443), \u0438\u043d\u0430\u0447\u0435 \u2014 \u043f\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0443 \u00ablow\u00bb \u0432 \u00abhigh\u00bb (\u043f\u043e \u0444\u0440\u043e\u043d\u0442\u0443).<\/p>\n<\/li>\n<li>\n<p><strong>IRQLastValue<\/strong> \u2014 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0434\u043b\u044f \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u043b\u0438\u043d\u0438\u0439 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f.<\/p>\n<\/li>\n<\/ul>\n<p> \u0418\u0437 \u043a\u043e\u0434\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0432\u0441\u044f \u0435\u0433\u043e \u043b\u043e\u0433\u0438\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u043c\u0443 \u0441\u0438\u0433\u043d\u0430\u043b\u0443 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u043b\u0438\u043d\u0438\u0439 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u0441 \u0438\u0445 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0438 \u0435\u0441\u043b\u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435, \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043f\u043e\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u0438, \u0442\u043e \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0431\u0438\u0442 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 <strong>IRQPending<\/strong>. \u0415\u0441\u043b\u0438 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 <strong>IRQPending<\/strong> \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u0438\u043d \u0431\u0438\u0442 \u0432 \u043b\u043e\u0433 \u00ab1\u00bb, \u0442\u043e \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u0438\u0433\u043d\u0430\u043b <strong>externalInterrupt<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0443\u0447\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c \u043a \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c\u0443 \u044f\u0434\u0440\u0443 \u0432\u044b\u0437\u043e\u0432\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 (\u0432\u044b\u0437\u043e\u0432 ISR). \u0414\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043b\u0438\u043d\u0438\u0439 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u043e\u0442 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434 <strong>setIRQ()<\/strong>, \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0438\u0439 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0434\u0432\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430: \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u044d\u0442\u043e \u0441\u0438\u0433\u043d\u0430\u043b \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u0430 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u043e\u0442 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430, \u0432\u0442\u043e\u0440\u043e\u0439 \u2014 \u043d\u043e\u043c\u0435\u0440 \u0431\u0438\u0442\u0430, \u0430\u0441\u0441\u043e\u0446\u0438\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u0441 \u0434\u0430\u043d\u043d\u044b\u043c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u043c.<\/p>\n<p>\u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u0442\u0430\u043a\u043e\u0439 \u043d\u0435\u0437\u0430\u0442\u0435\u0439\u043b\u0438\u0432\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0438\u043c\u0435\u0435\u0442 \u043c\u0430\u0441\u0441\u0443 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u043e\u0432, \u043d\u043e \u043e\u043d \u0432\u043f\u043e\u043b\u043d\u0435 \u0433\u043e\u0434\u0435\u043d \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u0437\u0430\u0434\u0430\u0447 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d \u0432 \u0431\u043e\u044e.<\/p>\n<p>\u0420\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u043c \u0442\u0435\u043a\u0441\u0442 \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0432 \u0444\u0430\u0439\u043b\u0435 <strong>.\/src\/main\/scala\/mylib\/MicroPLIC.scala<\/strong>, \u0430 \u0432 \u043a\u043e\u0434 \u0421\u043d\u041a Murax \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<p>\u0412 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0444\u0430\u0439\u043b\u0430 <strong>Murax.scala<\/strong> \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u0442\u0440\u043e\u043a\u0443 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438:<\/p>\n<pre><code>import mylib.Apb3MicroPLICCtrl<\/code><\/pre>\n<p>\u0412 \u0430\u0441\u0441\u043e\u0446\u0438\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 <strong>apbMapping<\/strong> \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u043e\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u043f\u043e\u0434\u043e\u0431\u043d\u043e \u0442\u043e\u043c\u0443, \u043a\u0430\u043a \u043c\u044b \u0434\u0435\u043b\u0430\u043b\u0438 \u043f\u0440\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0430 <strong>MachineTimer<\/strong> \u0432 \u0433\u043b\u0430\u0432\u0435 \u00ab<em>17.1 \u041c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u043d\u044b\u0439 \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0439 \u0442\u0430\u0439\u043c\u0435\u0440 MTIME<\/em>\u00bb:<\/p>\n<pre><code class=\"scala\">    \/\/******** APB peripherals *********      val apbMapping = ArrayBuffer[(Apb3, SizeMapping)]()      ...     val plic = new Apb3MicroPLICCtrl()      apbMapping += plic.io.apb     -> (0x60000, 64 kB)      externalInterrupt := plic.io.externalInterrupt      plic.io.IRQLines := 0 <\/code><\/pre>\n<p> \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0441\u0430\u0434\u0438\u043c \u043f\u043e\u0440\u0442 UART, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u043c <strong>Apb3UartCtrl, <\/strong>\u043d\u0430 \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u043a\u0430\u043d\u0430\u043b (\u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0431\u0438\u0442) \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 PLIC, \u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0442\u0430\u0439\u043c\u0435\u0440 <strong>MuraxApb3Timer<\/strong> \u043d\u0430 3-\u0439 \u043a\u0430\u043d\u0430\u043b:<\/p>\n<pre><code class=\"scala\">    val uartCtrl = Apb3UartCtrl(uartCtrlConfig)      uartCtrl.io.uart &lt;> io.uart      \/\/\/externalInterrupt setWhen(uartCtrl.io.interrupt)      plic.setIRQ(uartCtrl.io.interrupt, 0)      apbMapping += uartCtrl.io.apb  -> (0x10000, 4 kB)       val timer = new MuraxApb3Timer()      \/\/timerInterrupt setWhen(timer.io.interrupt)      plic.setIRQ(timer.io.interrupt, 3)      apbMapping += timer.io.apb     -> (0x20000, 4 kB)<\/code><\/pre>\n<p>\u041f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043d\u0430 \u044d\u0442\u043e\u0442 PLIC \u0442\u0443\u0442 \u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0432\u0435\u0441\u0442\u0438 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u043e\u0442 \u0440\u044f\u0434\u0430 \u043b\u0438\u043d\u0438\u0439 <strong>Apb3Gpio<\/strong>.<\/p>\n<p> \u0418 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0448\u0442\u0440\u0438\u0445 \u2014 \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u043c \u044f\u0434\u0440\u0443 VexRiscv \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0439\u0434\u0435\u043c \u0432 \u043a\u043e\u0434\u0435 \u0421\u043d\u041a Murax \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e:<\/p>\n<pre><code class=\"scala\">\/\/val externalInterrupt = False  val externalInterrupt = Bool()<\/code><\/pre>\n<p>\u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u043c \u043d\u0430 \u0435\u0451 \u043d\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0442\u0438\u043f\u0430 <strong>Bool<\/strong>, \u043a\u0430\u043a \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c \u0448\u0440\u0438\u0444\u0442\u043e\u043c.<\/p>\n<p>\u0422\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0441\u0431\u043e\u0440\u043a\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <strong>make clean &amp;&amp; make<\/strong> \u0438 \u0434\u043e\u0431\u0438\u0432\u0430\u0435\u043c\u0441\u044f \u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u0448\u0438\u0431\u043e\u043a.<\/p>\n<p>\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441\u0438\u043d\u0442\u0435\u0437\u0430 \u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code>Info: Device utilisation:  Info:             TRELLIS_IO:    54\/  197    27%  Info:                   DCCA:     2\/   56     3%  Info:                 DP16KD:    48\/   56    85%  ... Info:                EHXPLLL:     1\/    2    50%  ... Info:             TRELLIS_FF:  1528\/24288     6%  Info:           TRELLIS_COMB:  2815\/24288    11%  Info:           TRELLIS_RAMW:    36\/ 3036     1%  Info: Max frequency for clock                          'clk75': 84.40 MHz (PASS at 75.00 MHz)  Info: Max frequency for clock 'io_core_jtag_tck$TRELLIS_IO_IN': 158.78 MHz (PASS at 12.00 MHz) <\/code><\/pre>\n<p><a class=\"anchor\" name=\"17.3.2\" id=\"17.3.2\"><\/a><\/p>\n<h4> 17.3.2 \u0417\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 MicroPLIC \u0438\u0437 \u0421\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b<\/h4>\n<p> \u041d\u0430\u0448 PLIC \u0433\u043e\u0442\u043e\u0432 \u043a \u0440\u0430\u0431\u043e\u0442\u0435. \u0415\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0431\u0443\u0434\u0443\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0441 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 <strong>0xF0060000<\/strong>. \u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043d\u0438\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0432 \u0421\u0438 \u043a\u043e\u0434 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u00abhello_world\u00bb:<\/p>\n<p> \u0412 \u0444\u0430\u0439\u043b <strong>murax.h<\/strong>:<\/p>\n<pre><code>#include \"plic.h\" ... #define PLIC            ((PLIC_Reg*)(0xF0060000))<\/code><\/pre>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0432\u044b\u0439 \u0437\u0430\u0433\u043e\u0442\u043e\u0432\u043e\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b <strong>plic.h<\/strong> \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f:<\/p>\n<details class=\"spoiler\">\n<summary>plic.h<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#ifndef _PLIC_H_  #define _PLIC_H_  #include &lt;stdint.h>  typedef struct  {    volatile uint32_t ENABLE;    volatile uint32_t PENDING;    volatile uint32_t IRQLINE;    volatile uint32_t POLARITY;    volatile uint32_t IRQLAST;  } PLIC_Reg;  #define PLIC_IRQ_UART0          0x00000001  #define PLIC_IRQ_TIMER0         0x00000008 #endif \/* PLIC_H *\/ <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p> \u0414\u0430\u043b\u0435\u0435 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u044b \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f, \u0437\u0430\u043f\u0438\u0441\u0438 \u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0431\u0438\u0442\u043e\u0432 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0445 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u0430\u0448\u0438\u043d\u043e\u0439 \u0438\u043b\u0438 CSR (Control and Status Register). \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0441 \u0438\u043c\u0435\u043d\u0435\u043c <strong>riscv.h<\/strong> \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u043d\u0435\u0433\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043c\u0430\u043a\u0440\u043e\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f:<\/p>\n<details class=\"spoiler\">\n<summary>riscv.h<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#ifndef _RISCV_H_  #define _RISCV_H_  \/\/exceptions  #define CAUSE_ILLEGAL_INSTRUCTION 2  #define CAUSE_MACHINE_TIMER 7  #define CAUSE_SCALL 9  \/\/interrupts  #define CAUSE_MACHINE_EXTERNAL 11  #define MEDELEG_INSTRUCTION_PAGE_FAULT (1 &lt;&lt; 12)  #define MEDELEG_LOAD_PAGE_FAULT (1 &lt;&lt; 13)  #define MEDELEG_STORE_PAGE_FAULT (1 &lt;&lt; 15)  #define MEDELEG_USER_ENVIRONNEMENT_CALL (1 &lt;&lt; 8)  #define MIDELEG_SUPERVISOR_SOFTWARE (1 &lt;&lt; 1)  #define MIDELEG_SUPERVISOR_TIMER (1 &lt;&lt; 5)  #define MIDELEG_SUPERVISOR_EXTERNAL (1 &lt;&lt; 9)  #define MIP_STIP (1 &lt;&lt; 5)  #define MIE_MTIE (1 &lt;&lt; CAUSE_MACHINE_TIMER)  #define MIE_MEIE (1 &lt;&lt; CAUSE_MACHINE_EXTERNAL)  #define MSTATUS_UIE         0x00000001  #define MSTATUS_SIE         0x00000002  #define MSTATUS_HIE         0x00000004  #define MSTATUS_MIE         0x00000008  #define MSTATUS_UPIE        0x00000010  #define MSTATUS_SPIE        0x00000020  #define MSTATUS_HPIE        0x00000040  #define MSTATUS_MPIE        0x00000080  #define MSTATUS_SPP         0x00000100  #define MSTATUS_HPP         0x00000600  #define MSTATUS_MPP         0x00001800  #define MSTATUS_FS          0x00006000  #define MSTATUS_XS          0x00018000  #define MSTATUS_MPRV        0x00020000  #define MSTATUS_SUM         0x00040000  #define MSTATUS_MXR         0x00080000  #define MSTATUS_TVM         0x00100000  #define MSTATUS_TW          0x00200000  #define MSTATUS_TSR         0x00400000  #define MSTATUS32_SD        0x80000000  #define MSTATUS_UXL         0x0000000300000000  #define MSTATUS_SXL         0x0000000C00000000  #define MSTATUS64_SD        0x8000000000000000  #define SSTATUS_UIE         0x00000001  #define SSTATUS_SIE         0x00000002  #define SSTATUS_UPIE        0x00000010  #define SSTATUS_SPIE        0x00000020  #define SSTATUS_SPP         0x00000100  #define SSTATUS_FS          0x00006000  #define SSTATUS_XS          0x00018000  #define SSTATUS_SUM         0x00040000  #define SSTATUS_MXR         0x00080000  #define SSTATUS32_SD        0x80000000  #define SSTATUS_UXL         0x0000000300000000  #define SSTATUS64_SD        0x8000000000000000  #define PMP_R     0x01  #define PMP_W     0x02  #define PMP_X     0x04  #define PMP_A     0x18  #define PMP_L     0x80  #define PMP_SHIFT 2  #define PMP_TOR   0x08  #define PMP_NA4   0x10  #define PMP_NAPOT 0x18  #define RDCYCLE 0xC00 \/\/Read-only cycle Cycle counter for RDCYCLE instruction.  #define RDTIME 0xC01 \/\/Read-only time Timer for RDTIME instruction.  #define RDINSTRET 0xC02 \/\/Read-only instret Instructions-retired counter for RDINSTRET instruction.  #define RDCYCLEH 0xC80 \/\/Read-only cycleh Upper 32 bits of cycle, RV32I only.  #define RDTIMEH 0xC81 \/\/Read-only timeh Upper 32 bits of time, RV32I only.  #define RDINSTRETH 0xC82 \/\/Read-only instreth Upper 32 bits of instret, RV32I only.  #define csr_swap(csr, val) \\  ({ \\      unsigned long __v = (unsigned long)(val); \\      asm volatile (\"csrrw %0, \" #csr \", %1\" \\                    : \"=r\" (__v) : \"rK\" (__v)); \\      __v;                            \\  })  #define csr_read(csr) \\  ({ \\      register unsigned long __v; \\      asm volatile (\"csrr %0, \" #csr \\                    : \"=r\" (__v)); \\      __v; \\  })  #define csr_write(csr, val) \\  ({ \\      unsigned long __v = (unsigned long)(val); \\      asm volatile (\"csrw \" #csr \", %0\" \\                    : : \"rK\" (__v)); \\  })  #define csr_read_set(csr, val) \\  ({ \\      unsigned long __v = (unsigned long)(val); \\      asm volatile (\"csrrs %0, \" #csr \", %1\" \\                    : \"=r\" (__v) : \"rK\" (__v)); \\      __v; \\  })  #define csr_set(csr, val) \\  ({ \\      unsigned long __v = (unsigned long)(val); \\      asm volatile (\"csrs \" #csr \", %0\" \\                    : : \"rK\" (__v)); \\  })  #define csr_read_clear(csr, val) \\  ({ \\      unsigned long __v = (unsigned long)(val); \\      asm volatile (\"csrrc %0, \" #csr \", %1\" \\                    : \"=r\" (__v) : \"rK\" (__v)); \\      __v; \\  })  #define csr_clear(csr, val) \\  ({ \\      unsigned long __v = (unsigned long)(val); \\      asm volatile (\"csrc \" #csr \", %0\" \\                    : : \"rK\" (__v)); \\  })  static inline unsigned long attribute((const)) cpuid() {          unsigned long res;          asm (\"csrr %0, mcpuid\" : \"=r\"(res));          return res;  }  static inline unsigned long attribute((const)) impid() {          unsigned long res;          asm (\"csrr %0, mimpid\" : \"=r\"(res));          return res;  }  #endif \/\/ RISCV_H <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p> \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 VexRiscv \u0443 \u043d\u0430\u0441 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0432\u0441\u0435\u0433\u043e \u043e\u0434\u0438\u043d \u0432\u0435\u043a\u0442\u043e\u0440 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f, \u043e\u0431\u0449\u0438\u0439, \u043a\u0430\u043a \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0445 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 <strong>externalInterrupt<\/strong>, \u0442\u0430\u043a \u0438 \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u044f\u0434\u0440\u043e\u043c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u043e\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 (\u0434\u043b\u044f \u0421\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u044d\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f <strong>irqCallback()<\/strong>), \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u044c, \u0447\u0442\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u043c \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f, \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0432 \u0441\u0442\u0430\u0440\u0448\u0438\u0439 \u0431\u0438\u0442 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430 <strong>mcause<\/strong> \u2014 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u043e\u0442 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430. \u0415\u0441\u043b\u0438 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0438\u0433\u043d\u0430\u043b <strong>externalInterrupt<\/strong>, \u0442\u043e \u0434\u0430\u043b\u0435\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440 <strong>PLIC->PENDING<\/strong>, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0444\u043b\u0430\u0433\u0438 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439, \u0438 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0444\u043b\u0430\u0433\u0430\u043c\u0438 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0434\u043b\u044f \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043a\u043e\u0434 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<p> \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432 CSR:<\/p>\n<pre><code class=\"cpp\">#include \"riscv.h\"<\/code><\/pre>\n<p>\u041e\u0431\u044a\u044f\u0432\u0438\u043c \u043f\u0430\u0440\u0443 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043f\u043e\u0434\u0441\u0447\u0435\u0442\u0430 \u0447\u0438\u0441\u043b\u0430 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439:<\/p>\n<pre><code class=\"cpp\">volatile int total_irqs = 0;  volatile int extint_irqs = 0; <\/code><\/pre>\n<p>\u041e\u0431\u044a\u044f\u0432\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0441\u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 \u043d\u0430\u043c \u043a\u043e\u0434 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0438 \u00ab\u0437\u0430\u0432\u0438\u0441\u043d\u0435\u0442\u00bb \u0432 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0446\u0438\u043a\u043b\u0435:<\/p>\n<pre><code class=\"cpp\">void crash(int cause) {          print(\"\\r\\n*** EXCEPTION: \");          printhex(cause);          print(\"\\r\\n\");          while(1);  } <\/code><\/pre>\n<p>\u041e\u0431\u044a\u044f\u0432\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u043e\u0442 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432:<\/p>\n<pre><code class=\"cpp\">void externalInterrupt() {          unsigned int pending_irqs = PLIC->PENDING;          print(\"EXTIRQ: pending flags = \");          printhex(pending_irqs);          unsigned int a = UART->DATA;          printhex(a);          PLIC->PENDING &amp;= 0x0; \/\/ clear all pending ext interrupts  } <\/code><\/pre>\n<p>\u041e\u0431\u044a\u044f\u0432\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u2014 \u0432\u0435\u043a\u0442\u043e\u0440 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439:<\/p>\n<pre><code class=\"cpp\">void irqCallback() {          \/\/ Interrupts are already disabled by machine          int32_t mcause = csr_read(mcause);          int32_t interrupt = mcause &lt; 0;    \/\/ HW interrupt if true, exception if false          int32_t cause     = mcause &amp; 0xF;          if(interrupt){                  switch(cause) {                          case CAUSE_MACHINE_TIMER: {                                  print(\"\\r\\n*** irqCallback: machine timer irq ? WEIRD!\\r\\n\");                                  break;                          }                          case CAUSE_MACHINE_EXTERNAL: {                                  externalInterrupt();                                  extint_irqs++;                                  break;                          }                          default: {                                  print(\"\\r\\n*** irqCallback: unsupported exception cause: \");                                  printhex((unsigned int)cause);                          } break;                  }          } else {                  crash(cause);          }          total_irqs++;  } <\/code><\/pre>\n<p> \u0412\u0435\u0441\u044c \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u043c \u0432 \u0444\u0430\u0439\u043b <strong>main.c<\/strong>.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0432 \u0442\u0435\u043b\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <strong>main()<\/strong>, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043a\u043e\u0434 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u043e\u0442 \u0432\u0441\u0435\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432:<\/p>\n<pre><code class=\"cpp\">        char *test = malloc(1024);          println(\"Malloc test:\");          printhex((unsigned int)test);           \/\/ Configure interrupt controller          PLIC->POLARITY = 0xffffffff; \/\/ Set all IRQ polarity to High          PLIC->PENDING = 0; \/\/ Clear pending IRQs          PLIC->ENABLE = 0xffffffff; \/\/ Enable all ext interrupts           \/\/ Configure UART IRQ sources: bit(0) - TX interrupts, bit(1) - RX interrupts          UART->STATUS |= (1&lt;&lt;1); \/\/ Allow only RX interrupts           csr_set(mstatus, MSTATUS_MIE); \/\/ Enable Machine interrupts  ...<\/code><\/pre>\n<p>\u0438 \u0440\u0430\u0441\u043f\u0435\u0447\u0430\u0442\u043a\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439:<\/p>\n<pre><code class=\"cpp\">    while(1){                  unsigned int shift_time;                  unsigned int t1, t2;                  \/\/println(\"Hello world, this is VexRiscv!\");                  \/\/char str[128];                  \/\/vsnprintf(str, 128, \"Hello world, this is VexRiscv!\\r\\n\", NULL);                  \/\/print(str);                  printf(\"Hello world, this is VexRiscv!\\r\\n\");                  printf(\"PLIC: pending = %0X, total_irqs = %d, extint_irqs = %d\\r\\n\", PLIC->PENDING, total_irqs, extint_irqs);  ...<\/code><\/pre>\n<p>\u0422\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0441\u0431\u043e\u0440\u043a\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <strong>make clean &amp;&amp; make<\/strong>, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0431\u0438\u0442\u0441\u0442\u0440\u0438\u043c, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c <strong>minicom<\/strong> \u0438 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f:<\/p>\n<pre><code>Checking SRAM at: 90000000  SRAM total fails: 00000000  Enabled heap on SRAM  Malloc test:  90000008  EXTIRQ: pending flags = 00000001  0001004D  Hello world, this is VexRiscv!  PLIC: pending = 0, total_irqs = 0, extint_irqs = 0  000000C6  000282CD  Hello world, this is VexRiscv!  PLIC: pending = 0, total_irqs = 0, extint_irqs = 0 000000C6 <\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u0435\u0441\u043b\u0438 \u0432 \u043f\u043e\u0440\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u043d\u0438\u0431\u0443\u0434\u044c \u0434\u0430\u043d\u043d\u044b\u0435, \u0430 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043d\u0430\u0436\u0438\u043c\u0430\u0442\u044c \u043a\u043b\u0430\u0432\u0438\u0448\u0438 \u0432 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0435 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430, \u0442\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f:<\/p>\n<pre><code>Hello world, this is VexRiscv!  PLIC: pending = 0, total_irqs = 0, extint_irqs = 0  EXTIRQ: pending flags = 00000001  00010073  EXTIRQ: pending flags = 00000001  00010064  EXTIRQ: pending flags = 00000001  00010066  EXTIRQ: pending flags = 00000001                                                  00010073                                                                          000000C7                                                                          000282CD                                                                          Hello world, this is VexRiscv!  PLIC: pending = 0, total_irqs = 4, extint_irqs = 4 <\/code><\/pre>\n<p>\u0412\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442 \u043a \u0432\u044b\u0437\u043e\u0432\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>irqCallback()<\/strong>, \u0430 \u0437\u0430 \u043d\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>externalInterrupt()<\/strong>, \u043e \u0447\u0435\u043c \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043d\u0430\u043c \u0431\u0438\u0442\u043e\u0432\u043e\u0435 \u043f\u043e\u043b\u0435 <strong>pending flags = 00000001<\/strong>, \u0433\u0434\u0435 \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0431\u0438\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0432 \u043b\u043e\u0433 \u00ab1\u00bb \u0438 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 UART.<\/p>\n<p> <em>\u0417\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0435\u0441\u043b\u0438 \u043f\u0440\u0438 \u043f\u043e\u0441\u044b\u043b\u043a\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043f\u043e\u0440\u0442 UART \u043d\u0435 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f, \u0442\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043e\u043f\u0446\u0438\u044e \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f RTS\/CTS \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 <\/em><strong><em>minicom<\/em><\/strong><em>, \u043e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0430. \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 <\/em><strong><em>minicom<\/em><\/strong><em> \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0441\u044b\u043b\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043f\u043e\u0440\u0442, \u0434\u043e\u0436\u0438\u0434\u0430\u044f\u0441\u044c \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430.<\/em><\/p>\n<p><a class=\"anchor\" name=\"17.4\" id=\"17.4\"><\/a><\/p>\n<h3> 17.4 \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 FastEthernet (MAC)<\/h3>\n<p> \u041f\u043b\u0430\u0442\u0430 \u00ab\u041a\u0430\u0440\u043d\u043e\u00bb \u0441\u043d\u0430\u0431\u0436\u0435\u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0441\u0435\u0442\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b LAN8710, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 PHY \u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430 FastEthernet (100Base-T). \u0422\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440 \u2014 \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043e\u0442 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432 \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0435\u0433\u043e \u0432 \u043b\u0438\u043d\u0438\u044e \u0441\u0432\u044f\u0437\u0438 \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e, \u0442.\u00a0\u0435. \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u044e \u0438 \u0434\u0435\u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u044e \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432, \u0438\u0445 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435. \u0422\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440 LAN8710 \u043e\u0441\u043d\u0430\u0449\u0435\u043d MII \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c (<a href=\"https:\/\/en.wikipedia.org\/wiki\/Media-independent_interface\" rel=\"noopener noreferrer nofollow\">Media-independent Interface<\/a>) \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439, \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041b\u0438\u043d\u0438\u0438 MII \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440\u0430 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u043a \u0441\u0438\u0433\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u043b\u0438\u043d\u0438\u044f\u043c \u041f\u041b\u0418\u0421, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443  \u0441 \u0441\u0435\u0442\u044c\u044e \u043f\u0440\u044f\u043c\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b \u041f\u041b\u0418\u0421, \u0438\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438 \u2014 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c MAC \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u0442.\u00a0\u0435. \u0432 \u043d\u0430\u0448 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0421\u043d\u041a Murax. \u041d\u0430\u043b\u0438\u0447\u0438\u0435 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0431\u043e\u0433\u0430\u0442\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043a \u0442\u0432\u043e\u0440\u0447\u0435\u0441\u0442\u0432\u0443 \u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044e \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0437\u0430\u0434\u0430\u0447, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0431\u043b\u043e\u043a \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0439\u043d\u043e\u0439 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0443\u0440\u044b \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0440\u0430\u0439\u043d\u0435 \u0432\u0430\u0436\u043d\u044b\u043c. \u0420\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0439 MAC \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043c\u044b \u043d\u0435 \u0441\u0442\u0430\u043d\u0435\u043c, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u0434\u043b\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0445, \u0438 \u0434\u043b\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0431\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043c\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u043c \u0443\u0436\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0438\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 SpinalHDL, \u0430 \u0442\u043e\u0447\u043d\u0435\u0435 \u2014 \u0446\u0435\u043b\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432. \u041d\u043e \u043f\u0440\u0435\u0436\u0434\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u043e\u0432 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0441\u0435\u0442\u044f\u043c\u0438 Ethernet.<\/p>\n<p><a class=\"anchor\" name=\"17.4.1\" id=\"17.4.1\"><\/a><\/p>\n<h4> 17.4.1 \u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 Ethernet<\/h4>\n<p>\u0421\u0435\u0442\u0438 Ethernet \u2014 \u044d\u0442\u043e \u0441\u043e\u0432\u043e\u043a\u0443\u043f\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u0432 \u043f\u0440\u043e\u0432\u043e\u0434\u043d\u043e\u0439 \u043f\u0430\u043a\u0435\u0442\u043d\u043e\u0439 \u0441\u0432\u044f\u0437\u0438 \u0431\u0435\u0437 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u0438 \u0431\u0435\u0437 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0438 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u043f\u0430\u043a\u0435\u0442\u043e\u0432, \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0435\u0439 Xerox \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0439 \u0432 \u043d\u0435\u0431\u0435\u0437\u044b\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u043c \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u043c \u0446\u0435\u043d\u0442\u0440\u0435 Xerox Palo Alto Research Center (<a href=\"https:\/\/en.wikipedia.org\/wiki\/PARC_(company)\" rel=\"noopener noreferrer nofollow\">Xerox PARC<\/a>). \u041f\u0435\u0440\u0432\u044b\u0439 \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 Ethernet \u0431\u044b\u043b \u043f\u0440\u0438\u043d\u044f\u0442 \u043a\u0430\u043a \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442  IEEE 802.3 \u0432 1982 \u0433\u043e\u0434\u0443, \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u0440\u0435\u0434\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u00ab\u0442\u043e\u043b\u0441\u0442\u044b\u0439\u00bb \u043a\u043e\u0430\u043a\u0441\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u0430\u0431\u0435\u043b\u044c (\u0441\u043c \u0440\u0438\u0441. 29) \u0438 \u0438\u043c\u0435\u043b \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 10 \u041c\u0431\u0438\u0442\/\u0441\u0435\u043a (\u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043c\u043e\u0434\u0435\u043c\u043d\u0430\u044f \u0441\u0432\u044f\u0437\u044c \u043d\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 9600 \u0431\u043e\u0434 \u0431\u044b\u043b\u0430 \u0432\u0435\u0440\u0448\u0438\u043d\u043e\u0439 \u0447\u0443\u0434\u0435\u0441). \u042d\u0442\u043e\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u043d\u043e\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 <a href=\"https:\/\/en.wikipedia.org\/wiki\/10BASE5\" rel=\"noopener noreferrer nofollow\">10Base-5<\/a>. \u0427\u0443\u0442\u044c \u043f\u043e\u0437\u0436\u0435 \u043e\u043d \u0431\u044b\u043b \u0443\u043f\u0440\u043e\u0449\u0435\u043d (\u0443\u0434\u0435\u0448\u0435\u0432\u043b\u0435\u043d) \u0438 \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u00ab\u0442\u043e\u043d\u043a\u043e\u0433\u043e\u00bb \u043a\u043e\u0430\u043a\u0441\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u0430\u0431\u0435\u043b\u044f \u0441 \u0432\u043e\u043b\u043d\u043e\u0432\u044b\u043c \u0441\u043e\u043f\u0440\u043e\u0442\u0438\u0432\u043b\u0435\u043d\u0438\u0435\u043c 50 \u041e\u043c (\u0441\u043c. \u0440\u0438\u0441. 30). \u042d\u0442\u043e\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 <a href=\"https:\/\/en.wikipedia.org\/wiki\/10BASE2\" rel=\"noopener noreferrer nofollow\">10Base-2<\/a>.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/eaa\/659\/2b2\/eaa6592b293c6e5e1fa4071289c80662.png\" alt=\"\u0420\u0438\u0441. 29. \u0422\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440 \u0441\u0435\u0442\u0438 Ethernet (10Base-5) \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u00ab\u0432\u0440\u0435\u0437\u0430\u043b\u0441\u044f\u00bb \u0432 \u043a\u043e\u0430\u043a\u0441\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u0430\u0431\u0435\u043b\u044c.\" title=\"\u0420\u0438\u0441. 29. \u0422\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440 \u0441\u0435\u0442\u0438 Ethernet (10Base-5) \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u00ab\u0432\u0440\u0435\u0437\u0430\u043b\u0441\u044f\u00bb \u0432 \u043a\u043e\u0430\u043a\u0441\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u0430\u0431\u0435\u043b\u044c.\" width=\"942\" height=\"900\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/eaa\/659\/2b2\/eaa6592b293c6e5e1fa4071289c80662.png\"\/><\/p>\n<div><figcaption><em>\u0420\u0438\u0441. 29. \u0422\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440 \u0441\u0435\u0442\u0438 Ethernet (10Base-5) \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u00ab\u0432\u0440\u0435\u0437\u0430\u043b\u0441\u044f\u00bb \u0432 \u043a\u043e\u0430\u043a\u0441\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u0430\u0431\u0435\u043b\u044c.<\/em><\/figcaption><\/div>\n<\/figure>\n<p> \u0412 \u043e\u0431\u043e\u0438\u0445 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430\u0445 \u0441\u0440\u0435\u0434\u0430 (\u043c\u0435\u0434\u043d\u044b\u0439 \u043f\u0440\u043e\u0432\u043e\u0434) \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u00ab\u043e\u0431\u0449\u0443\u044e \u043a\u043e\u043c\u043d\u0430\u0442\u0443 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0433\u043e\u0432\u043e\u0440\u043e\u0432\u00bb, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u0432 \u043e\u0434\u0438\u043d \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u00ab\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c\u00bb \u043c\u043e\u0436\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0432 \u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u0434\u043e\u043b\u0436\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u00ab\u0441\u043b\u0443\u0448\u0430\u0442\u044c\u00bb. \u0427\u0442\u043e\u0431\u044b \u0432\u044b\u0439\u0442\u0438 \u043d\u0430 \u0441\u0432\u044f\u0437\u044c, \u0442.\u00a0\u0435. \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043f\u0430\u043a\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0445, \u0441\u0442\u0430\u043d\u0446\u0438\u044f \u043e\u0431\u044f\u0437\u0430\u043d\u0430 \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u044c \u0437\u0430 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c\u044e \u0432 \u00ab\u043f\u0435\u0440\u0435\u0433\u043e\u0432\u043e\u0440\u043d\u043e\u0439 \u043a\u043e\u043c\u043d\u0430\u0442\u0435\u00bb \u0438 \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043d\u0435\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u00ab\u0442\u0438\u0448\u0438\u043d\u0430\u00bb \u2014 \u043d\u0430\u0447\u0430\u0442\u044c \u043f\u043e\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u0443\u0449\u0443\u044e \u0438 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043f\u0430\u043a\u0435\u0442, \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0432 \u0435\u0433\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434. \u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0441\u0442\u0430\u043d\u0446\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0441\u0442\u0440\u043e \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0440\u043e\u0441\u043b\u0443\u0448\u0438\u0432\u0430\u043d\u0438\u044f. \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0441\u0442\u0430\u043d\u0446\u0438\u044f \u0442\u0430\u043a \u0436\u0435 \u043e\u0431\u044f\u0437\u0430\u043d\u0430 \u043f\u0440\u043e\u0441\u043b\u0443\u0448\u0438\u0432\u0430\u0442\u044c \u0441\u0430\u043c\u0443 \u0441\u0435\u0431\u044f \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u0442\u043e, \u0447\u0442\u043e \u043e\u043d\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u043b\u0430 \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u043e\u043d\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442. \u042d\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u043d\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043b\u0438 \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u044f \u2014 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f, \u043a\u043e\u0433\u0434\u0430 \u0434\u0432\u0435 (\u0438 \u0431\u043e\u043b\u0435\u0435) \u0441\u0442\u0430\u043d\u0446\u0438\u0438 \u0432\u0435\u0434\u0443\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0415\u0441\u043b\u0438 \u0431\u044b\u043b\u043e \u0434\u0435\u0442\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u0438, \u0442\u043e \u0441\u0442\u0430\u043d\u0446\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u00ab\u0437\u0430\u043c\u043e\u043b\u0447\u0430\u0442\u044c\u00bb \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043f\u0430\u043a\u0435\u0442\u0430 \u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u0430. \u0415\u0441\u043b\u0438 \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0442\u0430\u043a\u0436\u0435 \u0431\u044b\u043b\u0430 \u0434\u0435\u0442\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u044f, \u0442\u043e \u0441\u0442\u0430\u043d\u0446\u0438\u044f \u0442\u0430\u043a\u0436\u0435 \u043e\u0431\u044f\u0437\u0430\u043d\u0430 \u00ab\u0437\u0430\u043c\u043e\u043b\u0447\u0430\u0442\u044c\u00bb, \u0443\u0434\u0432\u043e\u0438\u0432 \u0432\u0440\u0435\u043c\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u0415\u0441\u043b\u0438 \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u0432\u0440\u0430\u0437\u0443\u043c\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u0442\u0430\u043d\u0446\u0438\u0438 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043f\u0430\u043a\u0435\u0442 \u0431\u0435\u0437 \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u0438, \u0442\u043e \u044d\u0442\u043e \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043e\u0448\u0438\u0431\u043a\u0430 \u0438 \u043f\u0430\u043a\u0435\u0442 \u0432\u044b\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e (\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e, \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u044e\u0449\u0435\u043c\u0443 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0434\u0430\u043d\u043d\u044b\u0445) \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0441\u0438\u0433\u043d\u0430\u043b. \u0415\u0441\u043b\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043f\u0430\u043a\u0435\u0442\u0430 \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u0439 \u043d\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u043e, \u0442\u043e \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043f\u0430\u043a\u0435\u0442 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d. \u041d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0439 \u043d\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 \u043d\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0438 \u043d\u0430 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0438 \u043a\u0430\u043d\u0430\u043b\u044c\u043d\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u043d\u0435 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f. \u0422\u0430\u043a\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0441\u0440\u0435\u0434\u0435 (\u043a \u00ab\u043f\u0435\u0440\u0435\u0433\u043e\u0432\u043e\u0440\u043d\u043e\u0439 \u043a\u043e\u043c\u043d\u0430\u0442\u0435\u00bb) \u0431\u044b\u043b \u043d\u0430\u0437\u0432\u0430\u043d \u00abCarrier-sense multiple access with collision detection media access control\u00bb (CSMA\/CD MAC) \u2014 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u0440\u0435\u0434\u0435 \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u043d\u0435\u0441\u0443\u0449\u0435\u0439 \u0438 \u0434\u0435\u0442\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u0439. \u0421\u0435\u0439\u0447\u0430\u0441 \u044d\u0442\u043e \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c MAC, \u0447\u0442\u043e \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u043d\u043e, \u043a\u0430\u043a \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0441\u044f, \u00abwho cares?\u00bb.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/db3\/f39\/fee\/db3f39feefd64c48f4df440354639b53.png\" alt=\"\u0420\u0438\u0441. 30. \u0422\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440 Ethernet \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430 10Base-2 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u043b\u0441\u044f \u043a \u00ab\u0442\u043e\u043d\u043a\u043e\u043c\u0443\u00bb \u043a\u043e\u0430\u043a\u0441\u0438\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u043a\u0430\u0431\u0435\u043b\u044e \u0447\u0435\u0440\u0435\u0437 \u0440\u0430\u0437\u044a\u0435\u043c \u0442\u0438\u043f\u0430 BNC.\" title=\"\u0420\u0438\u0441. 30. \u0422\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440 Ethernet \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430 10Base-2 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u043b\u0441\u044f \u043a \u00ab\u0442\u043e\u043d\u043a\u043e\u043c\u0443\u00bb \u043a\u043e\u0430\u043a\u0441\u0438\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u043a\u0430\u0431\u0435\u043b\u044e \u0447\u0435\u0440\u0435\u0437 \u0440\u0430\u0437\u044a\u0435\u043c \u0442\u0438\u043f\u0430 BNC.\" width=\"1024\" height=\"732\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/db3\/f39\/fee\/db3f39feefd64c48f4df440354639b53.png\"\/><\/p>\n<div><figcaption><em>\u0420\u0438\u0441. 30. \u0422\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440 Ethernet \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430 10Base-2 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u043b\u0441\u044f \u043a \u00ab\u0442\u043e\u043d\u043a\u043e\u043c\u0443\u00bb \u043a\u043e\u0430\u043a\u0441\u0438\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u043a\u0430\u0431\u0435\u043b\u044e \u0447\u0435\u0440\u0435\u0437 \u0440\u0430\u0437\u044a\u0435\u043c \u0442\u0438\u043f\u0430 BNC.<\/em><\/figcaption><\/div>\n<\/figure>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2a1\/53e\/400\/2a153e400e2bec6ac6d9bf8053638f7b.png\" alt=\"\u0420\u0438\u0441. 31. \u0421\u0445\u0435\u043c\u0430 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0441\u0435\u0442\u0438 Ethernet \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430 10Base-2. \u041a \u043a\u043e\u0430\u043a\u0441\u0438\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u043a\u0430\u0431\u0435\u043b\u044e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u00ab\u0442\u0440\u043e\u0439\u043d\u0438\u043a\u043e\u0432\u00bb (BNC-T) \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u0441\u0442\u0430\u043d\u0446\u0438\u0438. \u041a\u0430\u0431\u0435\u043b\u044c \u043d\u0430 \u043e\u0431\u043e\u0438\u0445 \u043a\u043e\u043d\u0446\u0430\u0445 \u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u043f\u0440\u043e\u0442\u0438\u0432\u043b\u0435\u043d\u0438\u0435\u043c 50 \u041e\u043c (BNC terminator).\" title=\"\u0420\u0438\u0441. 31. \u0421\u0445\u0435\u043c\u0430 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0441\u0435\u0442\u0438 Ethernet \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430 10Base-2. \u041a \u043a\u043e\u0430\u043a\u0441\u0438\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u043a\u0430\u0431\u0435\u043b\u044e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u00ab\u0442\u0440\u043e\u0439\u043d\u0438\u043a\u043e\u0432\u00bb (BNC-T) \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u0441\u0442\u0430\u043d\u0446\u0438\u0438. \u041a\u0430\u0431\u0435\u043b\u044c \u043d\u0430 \u043e\u0431\u043e\u0438\u0445 \u043a\u043e\u043d\u0446\u0430\u0445 \u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u043f\u0440\u043e\u0442\u0438\u0432\u043b\u0435\u043d\u0438\u0435\u043c 50 \u041e\u043c (BNC terminator).\" width=\"404\" height=\"264\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2a1\/53e\/400\/2a153e400e2bec6ac6d9bf8053638f7b.png\"\/><\/p>\n<div><figcaption><em>\u0420\u0438\u0441. 31. \u0421\u0445\u0435\u043c\u0430 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0441\u0435\u0442\u0438 Ethernet \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430 10Base-2.<br \/> \u041a \u043a\u043e\u0430\u043a\u0441\u0438\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u043a\u0430\u0431\u0435\u043b\u044e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u00ab\u0442\u0440\u043e\u0439\u043d\u0438\u043a\u043e\u0432\u00bb (BNC-T) \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u0441\u0442\u0430\u043d\u0446\u0438\u0438. \u041a\u0430\u0431\u0435\u043b\u044c \u043d\u0430 \u043e\u0431\u043e\u0438\u0445 \u043a\u043e\u043d\u0446\u0430\u0445 \u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u043f\u0440\u043e\u0442\u0438\u0432\u043b\u0435\u043d\u0438\u0435\u043c 50 \u041e\u043c (BNC terminator).<\/em><\/figcaption><\/div>\n<\/figure>\n<p> \u0412 1990 \u0433\u043e\u0434\u0443 Ethernet \u0431\u044b\u043b \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u0430\u0431\u0435\u043b\u044f \u0442\u0438\u043f\u0430 \u00ab\u0432\u0438\u0442\u0430\u044f \u043f\u0430\u0440\u0430\u00bb \u2014 \u0447\u0435\u0442\u044b\u0440\u0435 \u043f\u0440\u043e\u0432\u043e\u0434\u043d\u0438\u043a\u0430, \u043f\u043e\u043f\u0430\u0440\u043d\u043e \u0441\u0432\u0438\u0442\u044b\u0445 \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c, \u043e\u0434\u043d\u0430 \u043f\u0430\u0440\u0430 \u043d\u0430 \u043f\u0440\u0438\u0435\u043c, \u0434\u0440\u0443\u0433\u0430\u044f \u2014 \u043d\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0434\u0430\u043d\u043d\u044b\u0445, \u0430 \u0434\u043b\u044f \u0438\u0445 \u043a\u043e\u043c\u043c\u0443\u0442\u0430\u0446\u0438\u0438 \u0431\u044b\u043b\u043e \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u00ab\u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0435\u0435\u00bb \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u2014 Ethernet HUB, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u0442\u0430 \u0432\u043e \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0430\u043a\u043e\u0439 \u0441\u0445\u0435\u043c\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u0440\u0438\u0435\u043c\u043d\u044b\u0439 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0449\u0438\u0439 \u043a\u0430\u043d\u0430\u043b\u044b, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0432\u043b\u0438\u044f\u043d\u0438\u0435 \u043f\u043e\u043c\u0435\u0445 \u0438 \u0441\u043d\u0438\u0437\u0438\u0442\u044c \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443 \u043d\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u043f\u0430\u043a\u0435\u0442\u0430. \u041f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u0430\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0432\u0441\u0435 \u0435\u0449\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u0437\u0430\u0432\u0438\u0441\u0435\u043b\u0430 \u043e\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u043a \u0441\u0435\u0442\u0438 \u0441\u0442\u0430\u043d\u0446\u0438\u0439 \u2014 \u0447\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0441\u0442\u0430\u043d\u0446\u0438\u0439, \u0442\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u0438. \u042d\u0442\u043e\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Ethernet_over_twisted_pair\" rel=\"noopener noreferrer nofollow\">10Base-T<\/a>. \u0411\u044b\u0441\u0442\u0440\u043e \u0441\u0442\u0430\u043b\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 Ethernet HUB \u0441\u043d\u0430\u0431\u0434\u0438\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442\u043e\u043c \u2014 \u0442.\u00a0\u0435. \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0430\u043a\u0435\u0442\u0430 \u0438 \u0442\u0440\u0430\u043d\u0441\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u043e\u0442 \u043f\u043e\u0440\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0435\u0434\u0435\u0442 \u043a \u0441\u0442\u0430\u043d\u0446\u0438\u0438-\u043f\u0440\u0438\u0435\u043c\u043d\u0438\u043a\u0443, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0441\u0435\u0442\u044c \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u0430\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0435\u043b\u0430 \u043e\u0442 \u0447\u0438\u0441\u043b\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u0439 \u0432 \u0441\u0435\u0442\u0438. \u0422\u0430\u043a\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0430\u0437\u0432\u0430\u043b\u0438 <strong>Level-2 Ethernet Switch<\/strong> (\u0438\u043b\u0438 L2 Ethernet-\u043a\u043e\u043c\u043c\u0443\u0442\u0430\u0442\u043e\u0440). \u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 Ethernet-\u043a\u043e\u043c\u043c\u0443\u0442\u0430\u0442\u043e\u0440\u044b \u2014 \u044d\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430: \u0432 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u0438 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043a\u043e\u043c\u043c\u0443\u0442\u0430\u0442\u043e\u0440\u043e\u0432 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u043f\u043e\u043d\u044f\u0442\u0438\u0435 \u00ab\u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u0433\u043e\u0432\u043e\u0440\u043d\u043e\u0439 \u043a\u043e\u043c\u043d\u0430\u0442\u044b\u00bb (VLAN), \u0441\u043d\u0430\u0431\u0434\u0438\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u0432 (Level-3), \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432, \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0438 \u0442.\u00a0\u0434.<\/p>\n<p>\u0412 1995 \u0433\u043e\u0434\u0443 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 FastEthernet (<a href=\"https:\/\/en.wikipedia.org\/wiki\/Fast_Ethernet#Copper\" rel=\"noopener noreferrer nofollow\">100Base-TX<\/a>), \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0439 \u043a\u0430\u043a IEEE 802.3u \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u043d\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 100 \u041c\u0431\u0438\u0442\/\u0441\u0435\u043a \u043f\u043e \u0432\u0441\u0435 \u0442\u0435\u043c \u0436\u0435 \u0434\u0432\u0443\u043c \u0441\u0432\u0438\u0442\u044b\u043c \u0432\u043c\u0435\u0441\u0442\u0435 \u043f\u0430\u0440\u0430\u043c, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0443\u0441\u0438\u043b\u0438\u043b\u0438\u0441\u044c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0443 \u043a\u0430\u0431\u0435\u043b\u044f \u0438 \u0435\u0433\u043e \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0430\u043c (Cat5).<\/p>\n<p>\u0412 1999 \u0433\u043e\u0434\u0443 \u0431\u044b\u043b \u043f\u0440\u0438\u044f\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 GigabitEthernet (<a href=\"https:\/\/en.wikipedia.org\/wiki\/Gigabit_Ethernet#Copper\" rel=\"noopener noreferrer nofollow\">1000Base-T<\/a>), \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u043f\u043e\u0434 \u043d\u043e\u043c\u0435\u0440\u043e\u043c IEEE 802.3ab. \u041a\u0430\u043a \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0437 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f, \u0434\u0430\u043d\u043d\u044b\u0439 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e 1000 \u041c\u0431\u0438\u0442\/\u0441\u0435\u043a \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0443\u0436\u0435 \u0447\u0435\u0442\u044b\u0440\u0435 \u0441\u0432\u0438\u0442\u044b\u0435 \u043f\u0430\u0440\u044b \u2014 \u043f\u0440\u0438\u0447\u0435\u043c \u0432\u0441\u0435 \u0447\u0435\u0442\u044b\u0440\u0435 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u043f\u0440\u0438\u0435\u043c \u0438 \u043d\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443, \u0430 \u0434\u043b\u044f \u043e\u0442\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043e\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u00ab\u044d\u0445\u043e \u043f\u043e\u0434\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u00bb (echo cancellation). \u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u043a\u0430\u0431\u0435\u043b\u044e \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u044e\u0442 \u0435\u0449\u0435 \u0441\u0438\u043b\u044c\u043d\u0435\u0435 (Cat5e, Cat6). \u0412 GigabitEthernet \u043f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0441\u0442\u0430\u043d\u0446\u0438\u0438 \u043f\u0440\u043e\u0432\u043e\u0434\u044f\u0442 \u00ab\u043f\u0435\u0440\u0435\u0433\u043e\u0432\u043e\u0440\u044b\u00bb \u0438 \u0434\u043e\u0433\u043e\u0432\u0430\u0440\u0438\u0432\u0430\u044e\u0442\u0441\u044f, \u043a\u0442\u043e \u0438\u0437 \u043d\u0438\u0445 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u00ab\u043c\u0430\u0441\u0442\u0435\u0440\u043e\u043c\u00bb, \u0430 \u043a\u0442\u043e \u00ab\u0441\u043b\u044d\u0439\u0432\u043e\u043c\u00bb &#8212; \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0441\u0438\u043d\u0445\u0440\u043e\u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u043e\u043c.<\/p>\n<p>\u0412 2016 \u0433\u043e\u0434\u0443 \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u0432: 2.5GBase-T, 5GBase-T, 10GBase-T, 25GBase-T \u0438 40GBase-T \u0441\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044f\u043c\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 2.5, 5, 10, 25 \u0438 40 \u0413\u0431\u0438\u0442\/\u0441\u0435\u043a \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e.<\/p>\n<p> \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u043e\u0441\u043a\u043e\u0440\u043e\u0441\u0442\u043d\u044b\u0445 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u0432, \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u044b FastEthernet (100Base-TX) \u0438 GigabitEthernet (1000Base-T) \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u0430\u043c\u044b\u043c\u0438 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u043c\u0438 \u043f\u043e \u0441\u0435\u0439 \u0434\u0435\u043d\u044c \u0437\u0430 \u0441\u0447\u0435\u0442 \u0434\u0435\u0448\u0435\u0432\u0438\u0437\u043d\u044b \u0438 \u043d\u0435\u043f\u0440\u0438\u0442\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043a \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u0438 \u043a\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u043c\u0443 \u0445\u043e\u0437\u044f\u0439\u0441\u0442\u0432\u0443 \u2014 \u0432\u0438\u0442\u0430\u044f \u043f\u0430\u0440\u0430 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 Cat5e, \u044d\u0442\u043e \u0441\u0430\u043c\u044b\u0439 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0439 \u0432\u0438\u0434 \u043a\u0430\u0431\u0435\u043b\u044f \u0432\u043e \u0432\u0441\u0435\u043c \u043c\u0438\u0440\u0435. \u0410 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 FastEthernet \u0437\u0430 \u0441\u0447\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u043d\u0438\u0437\u043a\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043e\u0431\u043c\u0435\u043d\u0430 \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445. \u0422\u0430\u043a, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0434\u043b\u044f FastEthernet \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 MII \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d \u043d\u0430 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u043e\u0431\u043c\u0435\u043d \u0441 \u0445\u043e\u0441\u0442-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u043d\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 25 \u041c\u0413\u0446, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a <a href=\"https:\/\/ru.wikipedia.org\/wiki\/RGMII\" rel=\"noopener noreferrer nofollow\">RGMII<\/a> \u0434\u043b\u044f GigabitEthernet \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 125 \u041c\u0413\u0446 \u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0431\u043b\u043e\u043a\u0430 \u043f\u043e 4 \u0431\u0438\u0442\u0430 \u043a\u0430\u043a \u043f\u043e \u0444\u0440\u043e\u043d\u0442\u0443, \u0442\u0430\u043a \u0438 \u043f\u043e \u0441\u043f\u0430\u0434\u0443 (DDR), \u0447\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e MAC \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0438 \u0434\u0435\u043b\u0430\u0435\u0442 \u043c\u0430\u043b\u043e \u043f\u0440\u0438\u0433\u043e\u0434\u043d\u044b\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 GigabitEthernet \u043d\u0430 \u0434\u0435\u0448\u0435\u0432\u044b\u0445 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445, \u043d\u0435\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b\u0445 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0441 \u0442\u0430\u043a\u043e\u0439 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439. \u041f\u043e \u044d\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u043f\u043e\u0434\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0435 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e IoT \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0441\u043d\u0430\u0431\u0436\u0430\u0435\u0442\u0441\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c MAC \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u043c\u0438 \u0441 MII \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a 100Base-TX \u0441\u0435\u0442\u0438.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u043d\u0446\u0438\u0438 (\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430) \u043a \u0441\u0435\u0442\u0438 Ethernet \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 100Base-TX. \u041d\u0430 \u0440\u0438\u0441. 32 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0442\u0430\u043a\u043e\u0433\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c MII \u0438 RMII \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430. \u041e\u0442\u043b\u0438\u0447\u0438\u0435 RMII \u043e\u0442 MII \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 RMII \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u043e \u0447\u0438\u0441\u043b\u043e \u043b\u0438\u043d\u0438\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u0437\u0430 \u0441\u0447\u0435\u0442 \u0443\u0434\u0432\u043e\u0435\u043d\u0438\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0434\u043e 50 \u041c\u0413\u0446, \u0432 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u043c \u043e\u043d\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u044e\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/89d\/aa9\/8fb\/89daa98fb352bcca7f0e508a791cfd4d.png\" alt=\"\u0420\u0438\u0441. 32. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043a \u0441\u0435\u0442\u0438 100Base-TX \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e MII\/RMII \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430.\" title=\"\u0420\u0438\u0441. 32. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043a \u0441\u0435\u0442\u0438 100Base-TX \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e MII\/RMII \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430.\" width=\"802\" height=\"397\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/89d\/aa9\/8fb\/89daa98fb352bcca7f0e508a791cfd4d.png\"\/><\/p>\n<div><figcaption><em>\u0420\u0438\u0441. 32. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043a \u0441\u0435\u0442\u0438 100Base-TX \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e MII\/RMII \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430.<\/em><\/figcaption><\/div>\n<\/figure>\n<p> \u041d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u0445\u043e\u0441\u0442-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u0431\u043b\u043e\u043a \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0443\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c MAC. \u041e\u0431\u044b\u0447\u043d\u043e \u044d\u0442\u043e IP-\u0431\u043b\u043e\u043a, \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0432 \u0441\u043e\u0441\u0442\u0430\u0432 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0438\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0433\u043e \u0421\u043d\u041a. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u043f\u043b\u0430\u0442\u043e\u0439 \u00ab\u041a\u0430\u0440\u043d\u043e\u00bb MAC \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b \u041f\u041b\u0418\u0421. \u0417\u0430\u0434\u0430\u0447\u0430 MAC \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f (\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f) \u0432 \u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440 PHY \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043f\u043e \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u0448\u0438\u043d\u0435 \u0438\u0437 4\u0445 \u0431\u0438\u0442 (\u0438\u043b\u0438 2-\u0445 \u0431\u0438\u0442 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 RMII). \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0434\u043b\u044f \u043f\u0440\u0438\u0435\u043c\u0430 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0440\u0430\u0437\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0448\u0438\u043d\u044b TX_D[0:3] \u0438 RX_D[0:4],  \u043a\u0430\u0436\u0434\u0430\u044f \u0441\u043e \u0441\u0432\u043e\u0438\u043c \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u043c \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f TX_CLK \u0438 RX_CLK. \u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u043c \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0434\u043b\u044f \u043e\u0431\u0435\u0438\u0445 \u0448\u0438\u043d \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440 (PHY), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u0432\u043e\u0439 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0439 \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 (CLK = 25 \u041c\u0413\u0446), \u0430 \u043f\u0440\u0438 \u043f\u0440\u0438\u0435\u043c\u0435 \u2014 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u0438\u0437 \u043b\u0438\u043d\u0438\u0438. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043d\u0430 \u0441\u0442\u044b\u043a\u0435 \u043c\u0435\u0436\u0434\u0443 MAC \u0438 PHY \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0435 \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0445 \u0434\u043e\u043c\u0435\u043d\u043e\u0432 CoreCLK&lt;->TX_CLK \u0438 CoreCLK&lt;->RX_CLK. \u0414\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435\u0439 \u0448\u0438\u043d\u0430 TX \u0441\u043d\u0430\u0431\u0436\u0430\u0435\u0442\u0441\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u043c TX_EN, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f MAC \u0432 \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d \u0433\u043e\u0442\u043e\u0432 \u043d\u0430\u0447\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0434\u0430\u043d\u043d\u044b\u0445. \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u0434\u043b\u044f \u043f\u0440\u0438\u0435\u043c\u0430 \u0448\u0438\u043d\u0430 RX \u0441\u043d\u0430\u0431\u0436\u0430\u0435\u0442\u0441\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u043c RX_DV (receive data valid), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u043e\u0442 PHY \u043a MAC \u0432 \u043c\u043e\u043c\u0435\u043d\u0442, \u043a\u043e\u0433\u0434\u0430 \u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u0432 \u043b\u0438\u043d\u0438\u0438 \u043d\u0435\u0441\u0443\u0449\u0443\u044e \u0438 \u043d\u0430\u0447\u0430\u043b \u043f\u0440\u0438\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u0440\u0438\u0435\u043c \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e, \u0442.\u00a0\u0435. \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u043b \u0441\u0438\u0433\u043d\u0430\u043b RX_DV, MAC \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043e\u0431\u044f\u0437\u0430\u043d \u043f\u0440\u0438\u043d\u044f\u0442\u044c \u0432\u0441\u0451 \u0434\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u043f\u043e\u043b\u0443\u0431\u0430\u0439\u0442\u0430, \u043f\u043e\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u043d\u044f\u0442\u0438\u0435\u043c \u0441\u0438\u0433\u043d\u0430\u043b\u0430 RX_DV. \u041f\u043e\u043c\u0438\u043c\u043e \u044d\u0442\u043e\u0433\u043e, \u0448\u0438\u043d\u0430 \u043f\u0440\u0438\u0435\u043c\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0435\u0449\u0435 \u0442\u0440\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u0430: RX_COL \u2014 \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043e \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0438 \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u0438, RX_ER \u2014 \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u043f\u0440\u0438\u0435\u043c\u0435 \u0438 RX_CRS \u2014 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u043d\u0435\u0441\u0443\u0449\u0435\u0439. \u0412\u0441\u0435 \u044d\u0442\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b MAC \u043c\u043e\u0433 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f CSMA\/CD.<\/p>\n<p>\u0417\u0430\u0434\u0430\u0447\u0430 PHY \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u0430\u044f \u2014 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u044e \u0432 \u043b\u0438\u043d\u0438\u044e \u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c Ethernet \u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440\u043e\u0432 (PHY) \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u0432 \u0438 \u0440\u0430\u0437\u043d\u043e\u0432\u0438\u0434\u043d\u043e\u0441\u0442\u0435\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u043e\u043f\u0440\u043e\u0441\u0430 \u043a\u0430\u0441\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u0431\u0443\u0434\u0435\u043c.<\/p>\n<p>\u041f\u043e\u043c\u0438\u043c\u043e \u0434\u0432\u0443\u0445 \u0448\u0438\u043d \u043e\u0431\u043c\u0435\u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 (TX_D \u0438 RX_D), Ethernet \u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440\u044b \u043e\u0431\u044b\u0447\u043d\u043e \u0438\u043c\u0435\u044e\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0448\u0438\u043d\u0443  \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u00ab<a href=\"https:\/\/en.wikipedia.org\/wiki\/Management_Data_Input\/Output\" rel=\"noopener noreferrer nofollow\">Management Data Input\/Output<\/a>\u00bb, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0443\u044e \u0438\u0437 \u0434\u0432\u0443\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432: Management IO (MDIO) \u2014 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043a\u043e\u043c\u0430\u043d\u0434 \u0438 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0438  Management CLK (MDC) \u2014 \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432. \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0448\u0438\u043d\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f MAC \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0440\u0435\u0436\u0438\u043c\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, Full\/Half-duplex, \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0432 \u043b\u0438\u043d\u0438\u0438 10 \u0438\u043b\u0438 100 \u041c\u0431\u0438\u0442\/\u0441), \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438 \u0443\u0437\u043d\u0430\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0449\u0438\u0445 \u043e\u0448\u0438\u0431\u043a\u0430\u0445. \u0412\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440\u043e\u043c \u043f\u043e \u0448\u0438\u043d\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f MDIO \u043f\u043e\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0439\u043d\u044b\u043c\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 \u043f\u043e \u0448\u0438\u043d\u0435 \u0442\u0438\u043f\u0430 I2C, \u043d\u043e \u0438\u043c\u0435\u0435\u0442 \u0440\u044f\u0434 \u043e\u0442\u043b\u0438\u0447\u0438\u0439 \u2014 \u0445\u043e\u0441\u0442-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u043f\u043e \u0448\u0438\u043d\u0435 5 \u0431\u0438\u0442 \u0430\u0434\u0440\u0435\u0441 \u043f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440\u0430 (\u0438\u0445 \u043d\u0430 \u0448\u0438\u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u043e 31 \u0448\u0442), 5 \u0431\u0438\u0442 \u043d\u043e\u043c\u0435\u0440\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440\u0430 \u0438 16 \u0431\u0438\u0442 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 \u044d\u0442\u043e\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c (\u0438\u043b\u0438 \u0441\u0447\u0438\u0442\u0430\u0442\u044c). \u041f\u0440\u0438 \u043e\u0431\u043c\u0435\u043d\u0435 \u043f\u043e \u0448\u0438\u043d\u0435 MDIO \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 MDC \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0442\u044c 2,5 \u041c\u0413\u0446. \u0412\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b MDIO \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u043d\u0438\u0436\u0435 \u043d\u0430 \u0440\u0438\u0441. 33.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/21c\/56c\/2ff\/21c56c2ff27e2215a4cd2157b51cd46c.png\" alt=\"\u0420\u0438\u0441. 33. \u0412\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b \u0446\u0438\u043a\u043b\u043e\u0432 \u0437\u0430\u043f\u0438\u0441\u0438 (\u0432\u0432\u0435\u0440\u0445\u0443) \u0438 \u0447\u0442\u0435\u043d\u0438\u044f (\u0432\u043d\u0438\u0437\u0443) \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440\u0430 \u043f\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0439 \u0448\u0438\u043d\u0435 MDIO.\" title=\"\u0420\u0438\u0441. 33. \u0412\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b \u0446\u0438\u043a\u043b\u043e\u0432 \u0437\u0430\u043f\u0438\u0441\u0438 (\u0432\u0432\u0435\u0440\u0445\u0443) \u0438 \u0447\u0442\u0435\u043d\u0438\u044f (\u0432\u043d\u0438\u0437\u0443) \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440\u0430 \u043f\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0439 \u0448\u0438\u043d\u0435 MDIO.\" width=\"945\" height=\"305\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/21c\/56c\/2ff\/21c56c2ff27e2215a4cd2157b51cd46c.png\"\/><\/p>\n<div><figcaption><em>\u0420\u0438\u0441. 33. \u0412\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b \u0446\u0438\u043a\u043b\u043e\u0432 \u0437\u0430\u043f\u0438\u0441\u0438 (\u0432\u0432\u0435\u0440\u0445\u0443) \u0438 \u0447\u0442\u0435\u043d\u0438\u044f (\u0432\u043d\u0438\u0437\u0443) \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440\u0430 \u043f\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0439 \u0448\u0438\u043d\u0435 MDIO.<\/em><\/figcaption><\/div>\n<\/figure>\n<p> \u041f\u0435\u0440\u0435\u0447\u0435\u043d\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440\u0430 \u0438 \u0438\u0445 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0435 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442\u0441\u044f \u043d\u0430 \u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b \u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440\u0430. \u041d\u043e \u0435\u0441\u0442\u044c \u0441\u043b\u043e\u0436\u0438\u0432\u0448\u0438\u0435\u0441\u044f \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u0438 \u2014 \u043c\u043d\u043e\u0433\u0438\u0435 \u043c\u0430\u043b\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c PHY \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0442 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u0438 \u0444\u043e\u0440\u043c\u0430\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0434\u0440\u0443\u0433\u0438\u0445, \u0431\u043e\u043b\u0435\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u0439 \u0441 \u0446\u0435\u043b\u044c\u044e \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438.<\/p>\n<p>Ethernet \u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440\u044b \u043c\u043e\u0433\u0443\u0442 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f (LAN_nINT) \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u2014 \u0442.\u00a0\u0435. \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f (\u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0438 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u00abhandshake\u00bb) \u0438\u043b\u0438 \u0441\u043c\u0435\u043d\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043b\u0438\u043d\u0438\u0438.<\/p>\n<p>\u0412 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u0448\u0438\u043d\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f MDIO \u043d\u0435\u0442, \u0442\u0430\u043a \u043a\u0430\u043a \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e Ethernet \u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440\u043e\u0432 \u0438\u043c\u0435\u044e\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043b\u0438\u043d\u0438\u0438 \u0431\u0435\u0437 \u0443\u0447\u0430\u0441\u0442\u0438\u044f MAC, \u0430 \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 MII \u0443\u0436\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u0441\u0451 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u0434\u043b\u044f \u043f\u0440\u0438\u0435\u043c\u0430\/\u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u0441\u0435\u0442\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0448\u0438\u043d\u044b MDIO \u043c\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u043c. \u041f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u043b\u0435\u0433\u043a\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c MDIO \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u043c \u043f\u0443\u0442\u0435\u043c, \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u0438\u0440\u0443\u044f \u0434\u0432\u0443\u043c\u044f \u043b\u0438\u043d\u0438\u044f\u043c\u0438 GPIO.<\/p>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u043d\u044f\u0442\u044c \u043f\u0430\u043a\u0435\u0442 \u0446\u0435\u043b\u0438\u043a\u043e\u043c, MAC \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u043c\u0435\u0442\u044c \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0431\u0443\u0444\u0435\u0440 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u043d\u0435 \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 Ethernet \u043f\u0430\u043a\u0435\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u00ab\u0444\u0440\u0435\u0439\u043c\u043e\u043c\u00bb. \u0414\u043b\u044f 100Base-TX \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0444\u0440\u0435\u0439\u043c\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 1522 \u0431\u0430\u0439\u0442\u0430, \u0447\u0435\u0442\u044b\u0440\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0431\u0430\u0439\u0442\u0430 \u0444\u0440\u0435\u0439\u043c\u0430 \u044d\u0442\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430 (FCS \u2014 frame check sequence), \u043a\u043e\u0442\u043e\u0440\u0443\u044e MAC \u043e\u0431\u044f\u0437\u0430\u043d \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u0438\u0435\u043c\u0430 \u0438 \u043f\u0435\u0440\u0435\u0434 \u0432\u044b\u0434\u0430\u0447\u0435\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e. \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0431\u0443\u0444\u0435\u0440 \u043d\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u2014 \u0432 \u043d\u0435\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442 \u043f\u0430\u043a\u0435\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 MAC \u0432\u044b\u0434\u0430\u0435\u0442 \u0432 \u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440. \u041f\u0440\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435 MAC \u043e\u0431\u044f\u0437\u0430\u043d \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0443\u044e \u0441\u0443\u043c\u043c\u0443 \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u0451 \u043a \u0434\u0430\u043d\u043d\u044b\u043c \u0444\u0440\u0435\u0439\u043c\u0430 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435 \u0432 PHY.<\/p>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 Ethernet \u0444\u0440\u0435\u0439\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 6 \u0431\u0430\u0439\u0442 \u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0435\u0439 \u0441\u0442\u0430\u043d\u0446\u0438\u0438, 6 \u0431\u0430\u0439\u0442 \u0430\u0434\u0440\u0435\u0441\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044f, \u0434\u0432\u0430 \u0431\u0430\u0439\u0442\u0430 <strong>EtherType<\/strong>, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0449\u0438\u0445 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438 \u0434\u043e <strong>1500<\/strong> \u0431\u0430\u0439\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0430\u043c\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438. \u041e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u0444\u0440\u0435\u0439\u043c \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0438\u043b\u0438 \u0434\u0432\u0430 \u0442\u044d\u0433\u0430 \u043f\u043e \u0447\u0435\u0442\u044b\u0440\u0435 \u0431\u0430\u0439\u0442\u0430 \u043a\u0430\u0436\u0434\u044b\u0439. \u041f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0442\u044d\u0433\u043e\u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u043e\u0439 \u043a\u043e\u043c\u043c\u0443\u0442\u0430\u0442\u043e\u0440\u0430, \u043f\u0435\u0440\u0432\u044b\u0435 \u0434\u0432\u0430 \u0431\u0430\u0439\u0442\u0430 \u0442\u044d\u0433\u0430 \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0447\u0438\u0441\u043b\u043e <strong>0x8100<\/strong>, \u0447\u0442\u043e \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 <strong>EtherType<\/strong> \u0434\u043b\u044f \u0442\u044d\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0444\u0440\u0435\u0439\u043c\u043e\u0432, \u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0434\u0432\u0430 \u0431\u0430\u0439\u0442\u0430 \u2014 \u043d\u043e\u043c\u0435\u0440 VLAN-\u0430 (\u00ab\u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u043c\u043d\u0430\u0442\u044b\u00bb).  \u041c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0442\u044d\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0444\u0440\u0435\u0439\u043c\u044b \u0438 \u0441\u043f\u043e\u0441\u043e\u0431 \u0438\u0445 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0442\u0430\u043a \u043a\u0430\u043a, \u0432\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u044d\u0442\u043e \u0442\u0435\u043c\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0434\u043b\u0438\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u0430, \u0430 \u0432\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0439 \u0446\u0435\u043b\u0438 (\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f MAC \u0432 \u041f\u041b\u0418\u0421) \u044d\u0442\u043e \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e. \u041d\u0430 \u0440\u0438\u0441. 34 \u043d\u0438\u0436\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0444\u043e\u0440\u043c\u0430\u0442 \u043d\u0435\u0442\u044d\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e Ethernet \u0444\u0440\u0435\u0439\u043c\u0430.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/3c3\/8bb\/f46\/3c38bbf46470fd494e8b8afe9415d053.png\" alt=\"\u0420\u0438\u0441. 34. \u0424\u043e\u0440\u043c\u0430\u0442 Ethernet \u0444\u0440\u0435\u0439\u043c\u0430.\" title=\"\u0420\u0438\u0441. 34. \u0424\u043e\u0440\u043c\u0430\u0442 Ethernet \u0444\u0440\u0435\u0439\u043c\u0430.\" width=\"1364\" height=\"486\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3c3\/8bb\/f46\/3c38bbf46470fd494e8b8afe9415d053.png\"\/><\/p>\n<div><figcaption><em>\u0420\u0438\u0441. 34. \u0424\u043e\u0440\u043c\u0430\u0442 Ethernet \u0444\u0440\u0435\u0439\u043c\u0430.<\/em><\/figcaption><\/div>\n<\/figure>\n<p><a class=\"anchor\" name=\"17.4.2\" id=\"17.4.2\"><\/a><\/p>\n<h4> 17.4.2 \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 MacEth<\/h4>\n<p> \u0418\u0442\u0430\u043a, \u043a MAC \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0443 \u0434\u043b\u044f FastEthernet \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u043d\u0430\u0448\u0435\u0439 \u043f\u043b\u0430\u0442\u044b \u00ab\u041a\u0430\u0440\u043d\u043e\u00bb \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u0435\u0434\u044a\u044f\u0432\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f:<\/p>\n<ul>\n<li>\n<p>\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 MII: RX_D[3:0], RX_CLK, RX_ER, RX_DV, RX_COL, RX_CRS, TX_D[3:0], TX_EN, TX_CLK;<\/p>\n<\/li>\n<li>\n<p>\u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 \u0431\u0443\u0444\u0435\u0440\u043e\u0432 \u0434\u043b\u044f \u043f\u0440\u0438\u0435\u043c\u0430 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0444\u0440\u0435\u0439\u043c\u043e\u0432 \u0432 \u0432\u0438\u0434\u0435 FIFO;<\/p>\n<\/li>\n<li>\n<p> \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0445 \u0434\u043e\u043c\u0435\u043d\u043e\u0432, \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0442\u0440\u0430\u043a\u0442\u0430 \u043f\u0440\u0438\u0435\u043c\u0430 \u0438 \u0442\u0440\u0430\u043a\u0442\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438;<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432, \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u044b\u0445 \u043d\u0430 \u043e\u0431\u0449\u0435\u0435 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e, \u0441\u0431\u0440\u043e\u0441 TX\/RX FIFO, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0441\u043b\u043e\u0432 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430 \u0432 TX FIFO \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0441\u043b\u043e\u0432 \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0438\u0437 RX FIFO;<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u0434\u043b\u044f TX \u2014 \u043f\u0440\u0438 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0438\u0438 FIFO (\u043a\u043e\u043d\u0435\u0446 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438), \u0434\u043b\u044f RX \u2014 \u043f\u0440\u0438 \u043f\u0440\u0438\u0435\u043c\u0435 \u0444\u0440\u0435\u0439\u043c\u0430.<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 FIFO;<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0441\u0442\u0430\u0442\u0443\u0441\u0430 (\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0445 \u0444\u0440\u0435\u0439\u043c\u043e\u0432, \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0448\u0438\u0431\u043e\u043a \u0438 \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u0439);<\/p>\n<\/li>\n<li>\n<p>\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0430\u0441\u0447\u0435\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u043e\u0439 \u0441\u0443\u043c\u043c\u044b (FCS).<\/p>\n<\/li>\n<\/ul>\n<p> \u041a\u0430\u043a \u043e\u0442\u043c\u0435\u0447\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u0448\u0435, \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 SpinalHDL \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0432\u0435\u0441\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 MAC \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c\u0438 \u0432\u044b\u0448\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u043e\u043d\u0438 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 <strong>lib\/src\/main\/scala\/spinal\/lib\/com\/eth\/<\/strong> \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f SpinalHDL:<\/p>\n<pre><code>rz@devbox:~$ cd ~\/SpinalHDL rz@devbox:~\/SpinalHDL$ ls -l lib\/src\/main\/scala\/spinal\/lib\/com\/eth\/  total 40  -rw-rw-r-- 1 rz rz  841 Feb  1 09:14 BmbMacEth.scala  -rw-rw-r-- 1 rz rz 5158 Apr  3  2021 Mac.scala  -rw-rw-r-- 1 rz rz 9271 Feb  1 09:14 MacRx.scala  -rw-rw-r-- 1 rz rz 9858 Feb  1 09:14 MacTx.scala  -rw-rw-r-- 1 rz rz 4091 Feb  1 09:14 Phy.scala <\/code><\/pre>\n<p>\u0424\u0430\u0439\u043b <strong>Mac.scala<\/strong> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430, \u0435\u0433\u043e \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u2014 <strong>MacEth<\/strong>. \u0422\u0430\u043a\u0436\u0435 \u0432 \u044d\u0442\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430  <strong>MacEthParameter<\/strong>, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b MII \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430.<\/p>\n<p>\u0424\u0430\u0439\u043b\u044b <strong>MacRx.scala<\/strong> \u0438 <strong>MacTx.scala<\/strong> \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0442\u0440\u0430\u043a\u0442\u0430 \u043f\u0440\u0438\u0451\u043c\u0430 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043f\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 MII \u0438 FIFO \u0431\u0443\u0444\u0435\u0440\u044b.<\/p>\n<p>\u0424\u0430\u0439\u043b <strong>Phy.scala<\/strong> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 MII, \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043d\u0430 \u0442\u0440\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430: <strong>MiiRx<\/strong>, <strong>MiiTx<\/strong> \u0438 <strong>Mdio<\/strong>.<\/p>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442  <strong>MacEth<\/strong> \u043a \u0448\u0438\u043d\u0435 <strong>Apb3<\/strong>, \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442-\u043e\u0431\u0435\u0440\u0442\u043a\u0443. \u041d\u0430\u0437\u043e\u0432\u0435\u043c \u0435\u0433\u043e <strong>Apb3MacEthCtrl<\/strong> \u0438 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u043c \u0432 \u0444\u0430\u0439\u043b <strong>.\/src\/main\/scala\/mylib\/Apb3MacEthCtrl.scala<\/strong> \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f VexRiscv \u0440\u044f\u0434\u043e\u043c \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043d\u0430\u0448\u0438\u043c\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438:<\/p>\n<details class=\"spoiler\">\n<summary>.\/src\/main\/scala\/mylib\/Apb3MacEthCtrl.scala<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"scala\">package mylib  import spinal.core._  import spinal.lib._  import spinal.lib.bus.amba3.apb.{Apb3, Apb3Config, Apb3SlaveFactory}  import spinal.lib.eda.altera.QSysify  import spinal.lib.com.eth._  object Apb3MacEthCtrl{    def getApb3Config = Apb3Config(      addressWidth = 16,      dataWidth = 32,      selWidth = 1,      useSlaveError = false    )  }  case class Apb3MacEthCtrl(p : MacEthParameter) extends Component{          val io = new Bundle{                  val apb =  slave(Apb3(Apb3MacEthCtrl.getApb3Config))                  val interrupt = out Bool()                  val mii = master(Mii( MiiParameter( MiiTxParameter( dataWidth = p.phy.txDataWidth, withEr = false), MiiRxParameter( dataWidth = p.phy.rxDataWidth))))          }          val txCd = ClockDomain(io.mii.TX.CLK)          val rxCd = ClockDomain(io.mii.RX.CLK)          val mac = new MacEth(p, txCd, rxCd)          val phy = PhyIo(p.phy)          phy &lt;> mac.io.phy          txCd.copy(reset = mac.txReset) on {                  val tailer = MacTxInterFrame(dataWidth = p.phy.txDataWidth)                  tailer.io.input &lt;&lt; phy.tx                  io.mii.TX.EN := RegNext(tailer.io.output.valid)                  io.mii.TX.D := RegNext(tailer.io.output.data)          }          rxCd on {                  phy.rx &lt;&lt; io.mii.RX.toRxFlow().toStream          }          val busCtrl = Apb3SlaveFactory(io.apb)          val bridge = mac.io.ctrl.driveFrom(busCtrl)          io.interrupt := bridge.interruptCtrl.pending  }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u043a\u043e\u0434\u0430, \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 <strong>Apb3MacEthCtrl<\/strong> \u0438\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u0438\u0440\u0443\u0435\u0442 \u0434\u0432\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430: <strong>MacEth<\/strong> \u0438 <strong>PhyIo<\/strong>, \u0432 \u043d\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0434\u0432\u0430 \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0445 \u0434\u043e\u043c\u0435\u043d\u0430 <strong>txCd<\/strong> \u0438 <strong>rxCd<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0432 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 <strong>MacEth<\/strong> \u0438 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u0432\u044f\u0437\u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043d\u044b\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432. \u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 <strong>Apb3MacEthCtrl<\/strong> \u0438\u043c\u0435\u0435\u0442 \u0442\u0440\u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043d\u044b\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u0430: <strong>apb<\/strong> \u2014 \u0434\u043b\u044f \u0441\u0442\u044b\u043a\u043e\u0432\u043a\u0438 \u0441 \u0448\u0438\u043d\u043e\u0439 <strong>Apb3<\/strong> \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u044f\u0434\u0440\u0430, \u0441\u0438\u0433\u043d\u0430\u043b <strong>mii<\/strong> \u2014 \u0434\u043b\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0441 \u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440\u043e\u043c \u0438 \u0441\u0438\u0433\u043d\u0430\u043b <strong>interrupt<\/strong> \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f. \u0421\u0438\u0433\u043d\u0430\u043b <strong>interrupt<\/strong> \u043c\u044b \u0434\u0430\u043b\u0435\u0435 \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u043c \u043d\u0430 \u043a\u0430\u043d\u0430\u043b <strong>#2<\/strong> \u0440\u0430\u043d\u0435\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 (\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 MicroPLIC).<\/p>\n<p>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430  <strong>Apb3MacEthCtrl<\/strong> \u043a \u0448\u0438\u043d\u0435 <strong>Apb3<\/strong> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c:<\/p>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b <strong>mii<\/strong> \u0432 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 <strong>Murax<\/strong>:<\/p>\n<pre><code class=\"scala\">case class Murax(config : MuraxConfig) extends Component{    import config._    val io = new Bundle {      ...     \/\/Peripherals IO      val gpioA = master(TriStateArray(gpioWidth bits))      val uart = master(Uart())      val mii = master(Mii(MiiParameter(MiiTxParameter(dataWidth = config.macConfig.phy.txDataWidth, withEr = false), MiiRxParameter( dat  aWidth = config.macConfig.phy.rxDataWidth))))     ...   }<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 <strong>Apb3MacEthCtrl<\/strong> \u0432 \u0430\u0441\u0441\u043e\u0446\u0438\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 <strong>apbMapping<\/strong> \u0432 \u0444\u0430\u0439\u043b\u0435 <strong>Murax.scala<\/strong>, \u0442\u0430\u043a\u0436\u0435 \u043a\u0430\u043a \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0440\u0430\u043d\u0435\u0435 \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 <strong>Apb3MicroPLICCtrl<\/strong> \u0438 <strong>Apb3MachineTimer<\/strong> \u0438 \u043f\u0440\u0438\u0432\u044f\u0436\u0435\u043c \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b <strong>io.mii.<\/strong> \u041a\u043e\u0434 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"scala\">    val macCtrl = new Apb3MacEthCtrl(macConfig)      apbMapping += macCtrl.io.apb     -> (0x70000, 64 kB)      macCtrl.io.mii &lt;> io.mii      plic.setIRQ(macCtrl.io.interrupt, 2) <\/code><\/pre>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u044b\u0435 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e 0xF0000000 + 0x70000 = <strong>0xF0070000<\/strong>, \u0430 \u043b\u0438\u043d\u0438\u044f  \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u043f\u043e \u043a\u0430\u043d\u0430\u043b\u0443 <strong>#2<\/strong> (\u0431\u0438\u0442 2 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0445) \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 <strong>MicroPLIC<\/strong>.<\/p>\n<p>\u041f\u043e\u043c\u0438\u043c\u043e \u044d\u0442\u043e\u0433\u043e, \u043d\u0430\u043c \u0435\u0449\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 <strong>MacEthParameter<\/strong>. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <strong>macConfig<\/strong> \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 <strong>MuraxConfig()<\/strong>:<\/p>\n<pre><code class=\"scala\">case class MuraxConfig(coreFrequency : HertzNumber,                         onChipRamSize      : BigInt,                         onChipRamHexFile   : String,                         pipelineDBus       : Boolean,                         pipelineMainBus    : Boolean,                         pipelineApbBridge  : Boolean,                         gpioWidth          : Int,                         macConfig          : MacEthParameter,                         uartCtrlConfig     : UartCtrlMemoryMappedConfig,                         xipConfig          : SpiXdrMasterCtrl.MemoryMappingParameters,                         hardwareBreakpointCount : Int,                         cpuPlugins         : ArrayBuffer[Plugin[VexRiscv]])<\/code><\/pre>\n<p>\u0417\u0430\u043f\u043e\u043b\u043d\u0438\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0438 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u043c \u0440\u044f\u0434\u043e\u043c \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c <strong>uartCtrlConfig<\/strong> \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 <strong>MuraxConfig()<\/strong>:<\/p>\n<pre><code class=\"scala\">    macConfig = MacEthParameter(        phy = PhyParameter(          txDataWidth = 4,          rxDataWidth = 4        ),        rxDataWidth = 32,        rxBufferByteSize = 4096,        txDataWidth = 32,        txBufferByteSize = 4096      ), <\/code><\/pre>\n<p> \u0412 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 <strong>MacEthParameter<\/strong> \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b  <strong>rxBufferByteSize<\/strong> \u0438  <strong>txBufferByteSize<\/strong> \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0443\u0444\u0435\u0440\u043e\u0432 FIFO \u0434\u043b\u044f \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445 Ethernet \u0444\u0440\u0435\u0439\u043c\u043e\u0432 \u0438 \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u043c\u0435\u044e\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u044b\u0439 \u0434\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0432\u0443\u0445 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0444\u0440\u0435\u0439\u043c\u043e\u0432. Jumbo \u0444\u0440\u0435\u0439\u043c\u044b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0432 \u0432\u0438\u0434\u0443 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043c\u0430 \u043d\u0430\u0431\u043e\u0440\u0442\u043d\u043e\u0439 RAM \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<p>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b <strong>rxDataWidth<\/strong> \u0438 <strong>txDataWidth<\/strong> \u0437\u0430\u0434\u0430\u044e\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u043b\u043e\u0432\u0430 FIFO. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u043b\u043e\u0432\u0430 \u043e\u0431\u0443\u0441\u043b\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u044c\u044e \u0448\u0438\u043d\u044b \u2014 32 \u0431\u0438\u0442\u0430. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 FIFO \u0432\u0441\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u0441\u044f \u0432 32-\u0445 \u0431\u0438\u0442\u043d\u044b\u0445 \u0441\u043b\u043e\u0432\u0430\u0445, \u0430 \u043d\u0435 \u0432 \u0431\u0430\u0439\u0442\u0430\u0445. \u041d\u0430 \u044d\u0442\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043f\u0440\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430.<\/p>\n<p>\u0412\u043b\u043e\u0436\u0435\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 <strong>PhyParameter<\/strong> \u0437\u0430\u0434\u0430\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b MII \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u2014 \u043f\u043e 4 \u0431\u0438\u0442\u0430 \u043d\u0430 \u043f\u0440\u0438\u0435\u043c \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u0441\u044f, \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0432  \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 \u0444\u0430\u0439\u043b\u0430 <strong>Murax.scala<\/strong>:<\/p>\n<pre><code class=\"scala\">import mylib.Apb3MicroPLICCtrl  import mylib.Apb3MacEthCtrl  import spinal.lib.com.eth._ <\/code><\/pre>\n<p>\u041e\u0441\u0442\u0430\u043b\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0448\u0442\u0440\u0438\u0445: \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043d\u044b\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 MII \u0432 \u0444\u0430\u0439\u043b <strong>karnix_cabga256.lpf<\/strong> \u0438 \u0432 \u0444\u0430\u0439\u043b-\u043e\u0431\u0435\u0440\u0442\u043a\u0443 <strong>toplevel.v<\/strong>.<\/p>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b \u0432 \u0444\u0430\u0439\u043b  <strong>karnix_cabga256.lpf<\/strong>:<\/p>\n<details class=\"spoiler\">\n<summary>\u0414\u043e\u0431\u0430\u0432\u043a\u0430 \u043a \u0444\u0430\u0439\u043b\u0443 karnix_cabga256.lpf \u0434\u043b\u044f MII \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>LOCATE COMP \"io_mii_mdio\" SITE \"B1\";            # LAN_MDIO  IOBUF PORT \"io_mii_mdio\" IO_TYPE=LVCMOS33;  IOBUF PORT \"io_mii_mdio\" PULLMODE=NONE;  LOCATE COMP \"io_mii_mdc\" SITE \"A2\";             # LAN_MDC  IOBUF PORT \"io_mii_mdc\" IO_TYPE=LVCMOS33;  IOBUF PORT \"io_mii_mdc\" PULLMODE=NONE;  LOCATE COMP \"io_mii_nint\" SITE \"B3\";            # LAN_nINT  IOBUF PORT \"io_mii_nint\" IO_TYPE=LVCMOS33;  IOBUF PORT \"io_mii_nint\" PULLMODE=NONE;  LOCATE COMP \"io_mii_nrst\" SITE \"A3\";            # LAN_nRST  IOBUF PORT \"io_mii_nrst\" IO_TYPE=LVCMOS33;  IOBUF PORT \"io_mii_nrst\" PULLMODE=NONE;  FREQUENCY PORT \"io_mii_TX_CLK\" 25.0 MHz;  LOCATE COMP \"io_mii_TX_CLK\" SITE \"B4\";          # LAN_TXCLK  IOBUF PORT \"io_mii_TX_CLK\" IO_TYPE=LVCMOS33;  IOBUF PORT \"io_mii_TX_CLK\" PULLMODE=NONE;  LOCATE COMP \"io_mii_TX_EN\" SITE \"A4\";           # LAN_TXEN  IOBUF PORT \"io_mii_TX_EN\" IO_TYPE=LVCMOS33;  IOBUF PORT \"io_mii_TX_EN\" PULLMODE=NONE;  LOCATE COMP \"io_mii_TX_D[0]\" SITE \"B5\";         # LAN_TXD0  IOBUF PORT \"io_mii_TX_D[0]\" IO_TYPE=LVCMOS33;  IOBUF PORT \"io_mii_TX_D[0]\" PULLMODE=NONE;  LOCATE COMP \"io_mii_TX_D[1]\" SITE \"A5\";         # LAN_TXD1  IOBUF PORT \"io_mii_TX_D[1]\" IO_TYPE=LVCMOS33;  IOBUF PORT \"io_mii_TX_D[1]\" PULLMODE=NONE;  LOCATE COMP \"io_mii_TX_D[2]\" SITE \"B6\";         # LAN_TXD2  IOBUF PORT \"io_mii_TX_D[2]\" IO_TYPE=LVCMOS33;  IOBUF PORT \"io_mii_TX_D[2]\" PULLMODE=NONE;  LOCATE COMP \"io_mii_TX_D[3]\" SITE \"A6\";         # LAN_TXD3  IOBUF PORT \"io_mii_TX_D[3]\" IO_TYPE=LVCMOS33;  IOBUF PORT \"io_mii_TX_D[3]\" PULLMODE=NONE;  FREQUENCY PORT \"io_mii_RX_CLK\" 25.0 MHz;  LOCATE COMP \"io_mii_RX_COL\" SITE \"B2\";          # LAN_COL  IOBUF PORT \"io_mii_RX_COL\" IO_TYPE=LVCMOS33;  IOBUF PORT \"io_mii_RX_COL\" PULLMODE=NONE;  LOCATE COMP \"io_mii_RX_CRS\" SITE \"C1\";          # LAN_CRS  IOBUF PORT \"io_mii_RX_CRS\" IO_TYPE=LVCMOS33;  IOBUF PORT \"io_mii_RX_CRS\" PULLMODE=NONE;  LOCATE COMP \"io_mii_RX_ER\" SITE \"C2\";           # LAN_RXER  IOBUF PORT \"io_mii_RX_ER\" IO_TYPE=LVCMOS33;  IOBUF PORT \"io_mii_RX_ER\" PULLMODE=NONE;  LOCATE COMP \"io_mii_RX_DV\" SITE \"B7\";           # LAN_RXDV  IOBUF PORT \"io_mii_RX_DV\" IO_TYPE=LVCMOS33;  IOBUF PORT \"io_mii_RX_DV\" PULLMODE=NONE;  LOCATE COMP \"io_mii_RX_CLK\" SITE \"F1\";          # LAN_RXCLK  IOBUF PORT \"io_mii_RX_CLK\" IO_TYPE=LVCMOS33;  IOBUF PORT \"io_mii_RX_CLK\" PULLMODE=NONE;  LOCATE COMP \"io_mii_RX_D[0]\" SITE \"D1\";         # LAN_RXD0  IOBUF PORT \"io_mii_RX_D[0]\" IO_TYPE=LVCMOS33;  IOBUF PORT \"io_mii_RX_D[0]\" PULLMODE=NONE;  LOCATE COMP \"io_mii_RX_D[1]\" SITE \"E2\";         # LAN_RXD1  IOBUF PORT \"io_mii_RX_D[1]\" IO_TYPE=LVCMOS33;  IOBUF PORT \"io_mii_RX_D[1]\" PULLMODE=NONE;  LOCATE COMP \"io_mii_RX_D[2]\" SITE \"E1\";         # LAN_RXD2  IOBUF PORT \"io_mii_RX_D[2]\" IO_TYPE=LVCMOS33;  IOBUF PORT \"io_mii_RX_D[2]\" PULLMODE=NONE;  LOCATE COMP \"io_mii_RX_D[3]\" SITE \"F2\"; #       LAN_RXD3  IOBUF PORT \"io_mii_RX_D[3]\" IO_TYPE=LVCMOS33;  IOBUF PORT \"io_mii_RX_D[3]\" PULLMODE=NONE; <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u0444\u0430\u0439\u043b <strong>toplevel.v<\/strong> \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043f\u0440\u043e\u0431\u0440\u043e\u0441 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 <strong>io_mii_*<\/strong> \u0438\u0437 \u043c\u043e\u0434\u0443\u043b\u044f <strong>toplevel<\/strong> \u0432 \u043c\u043e\u0434\u0443\u043b\u044c <strong>Murax<\/strong>:<\/p>\n<details class=\"spoiler\">\n<summary>\u0414\u043e\u0431\u0430\u0432\u043a\u0430 \u043a \u0444\u0430\u0439\u043b\u0443 toplevel.v \u0434\u043b\u044f MII \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"vhdl\">module toplevel(      input   io_clk25,      ...     input   [3:0] io_mii_RX_D, \/\/ MII RX data lines      input   io_mii_RX_DV, \/\/ MII RX data valid      input   io_mii_RX_CLK, \/\/ MII RX clock      input   io_mii_RX_ER, \/\/ MII RX error flag      input   io_mii_RX_CRS, \/\/ MII RX carrier sense flag      input   io_mii_RX_COL, \/\/ MII RX collision detection flag      output  [3:0] io_mii_TX_D, \/\/ MII TX data lines      output  io_mii_TX_EN, \/\/ MII TX data enable      input  io_mii_TX_CLK, \/\/ MII TX clock    );      \u2026    Murax murax (      ...     .io_mii_RX_D(io_mii_RX_D),      .io_mii_RX_CLK(io_mii_RX_CLK),      .io_mii_RX_DV(io_mii_RX_DV),      .io_mii_RX_ER(io_mii_RX_ER),      .io_mii_RX_CRS(io_mii_RX_CRS),      .io_mii_RX_COL(io_mii_RX_COL),      .io_mii_TX_D(io_mii_TX_D),      .io_mii_TX_CLK(io_mii_TX_CLK),      .io_mii_TX_EN(io_mii_TX_EN),    ); <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <strong>make clean &amp;&amp; make<\/strong>, \u0443\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u043c \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438,  \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0441\u0438\u043d\u0442\u0435\u0437\u0430 \u0438 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c \u043a\u0430\u043a \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u041f\u041b\u0418\u0421 \u043e\u0431\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u0448\u043b\u0438 \u0432 \u0440\u0430\u0441\u0445\u043e\u0434: <\/p>\n<pre><code>Info: Device utilisation:  Info:             TRELLIS_IO:    69\/  197    35%  Info:                   DCCA:     4\/   56     7%  Info:                 DP16KD:    52\/   56    92%  Info:             MULT18X18D:     4\/   28    14%  Info:                 ALU54B:     0\/   14     0%  Info:                EHXPLLL:     1\/    2    50%  ... Info:             TRELLIS_FF:  2360\/24288     9%  Info:           TRELLIS_COMB:  4256\/24288    17%  Info:           TRELLIS_RAMW:    36\/ 3036     1%  ... Info: Routing globals...  Info:     routing clock net $glbnet$io_core_jtag_tck$TRELLIS_IO_IN using global 0  Info:     routing clock net $glbnet$io_mii_RX_CLK$TRELLIS_IO_IN using global 1  Info:     routing clock net $glbnet$io_mii_TX_CLK$TRELLIS_IO_IN using global 2  Info:     routing clock net $glbnet$clk using global 3  ... Info: Max frequency for clock    '$glbnet$io_mii_TX_CLK$TRELLIS_IO_IN': 73.72 MHz (PASS at 25.00 MHz)  Info: Max frequency for clock    '$glbnet$io_mii_RX_CLK$TRELLIS_IO_IN': 113.21 MHz (PASS at 25.00 MHz)  Info: Max frequency for clock                            '$glbnet$clk': 75.26 MHz (PASS at 75.00 MHz)  Info: Max frequency for clock '$glbnet$io_core_jtag_tck$TRELLIS_IO_IN': 135.35 MHz (PASS at 12.00 MHz)  ... Info: Program finished normally. <\/code><\/pre>\n<p>\u0423 \u043d\u0430\u0441 \u0433\u043e\u0442\u043e\u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 MAC. \u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0433\u043b\u0430\u0432\u0435 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043e\u0431\u043c\u0435\u043d \u043f\u0430\u043a\u0435\u0442\u0430\u043c\u0438 \u0441 DHCP \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u0438\u0437 \u0421\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u00abhello_world\u00bb.<\/p>\n<p><a class=\"anchor\" name=\"17.4.3\" id=\"17.4.3\"><\/a><\/p>\n<h4> 17.4.3 \u0420\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 MacEth<\/h4>\n<p> \u0421\u043b\u043e\u0432\u043e \u00ab\u0434\u0440\u0430\u0439\u0432\u0435\u0440\u00bb, \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u044d\u0442\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0433\u0440\u043e\u043c\u043a\u043e\u0435 \u0441\u043b\u043e\u0432\u043e \u0434\u043b\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0442\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u0440\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043f\u043e\u043b\u043d\u0435 \u0441\u043e\u0439\u0434\u0443\u0442 \u0437\u0430 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u044b\u0439 \u0434\u0440\u0430\u0439\u0432\u0435\u0440. \u042d\u0442\u043e \u0431\u0443\u0434\u0443\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438: <strong>mac_init()<\/strong> \u2014 \u0434\u043b\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 (\u0441\u0431\u0440\u043e\u0441\u0430) MAC \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430, <strong>mac_tx()<\/strong> \u2014 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 Ethernet \u0444\u0440\u0435\u0439\u043c\u0430 \u0438 <strong>mac_rx()<\/strong> \u2014 \u0434\u043b\u044f \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0438\u043d\u044f\u0442\u043e\u0433\u043e \u0444\u0440\u0435\u0439\u043c\u0430 \u0438\u0437 \u0431\u0443\u0444\u0435\u0440\u0430 MAC \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430. \u0422\u0430\u043a\u0436\u0435 \u043c\u044b \u043f\u043e\u0434\u0432\u0435\u0441\u0438\u043c \u043a\u043e\u0434 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439, \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0438\u0445 \u043e\u0442 MAC \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0447\u0435\u0440\u0435\u0437 <strong>MicroPLIC<\/strong>.<\/p>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u043d\u0430\u0447\u0430\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430, \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 (API), \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u0435\u043c <strong>MacEth<\/strong>. \u041a\u0430\u043a \u0443\u0436\u0435 \u043e\u0442\u043c\u0435\u0447\u0430\u043b\u043e\u0441\u044c, \u0442\u0440\u0430\u043a\u0442\u044b \u043f\u0440\u0438\u0435\u043c\u0430 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u0434\u0440\u0443\u0433 \u043e\u0442 \u0434\u0440\u0443\u0433\u0430, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u0434\u0432\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u043a\u0430\u0436\u0434\u043e\u0435 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0439 FIFO \u0431\u0443\u0444\u0435\u0440 \u0434\u043b\u0438\u043d\u043e\u0439 \u0432 \u0434\u0432\u0430 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 Ethernet \u0444\u0440\u0435\u0439\u043c\u0430, \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f 32-\u0445 \u0431\u0438\u0442\u043d\u043e\u0435 \u0441\u043b\u043e\u0432\u043e. \u0414\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f FIFO \u0431\u0443\u0444\u0435\u0440\u0430\u043c\u0438 <strong>MacEth<\/strong> \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0434\u0438\u043d \u043e\u0431\u0449\u0438\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f <strong>CTRL<\/strong>; \u043e\u0434\u0438\u043d \u043e\u0431\u0449\u0438\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 <strong>STAT<\/strong> \u0434\u043b\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u043e\u0448\u0438\u0431\u043e\u043a; \u0440\u0430\u0437\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b <strong>TX\/RX<\/strong> \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438\/\u0447\u0442\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445; \u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b <strong>TX_AVAIL<\/strong> \u0438 <strong>RX_AVAIL<\/strong> \u0434\u043b\u044f \u0432\u044b\u044f\u0441\u043d\u0435\u043d\u0438\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0441\u0442\u0438 FIFO. \u0412\u0441\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b <strong>MacEth<\/strong> \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 <strong>0xF0070000<\/strong>, \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u0439 \u043d\u0438\u0436\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439. \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043c\u044b \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u043c \u0432 \u043d\u043e\u0432\u044b\u0439 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b <strong>mac.h<\/strong> \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 \u0441 \u043a\u043e\u0434\u043e\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u00abhello_world\u00bb, \u0430 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043e\u043f\u0438\u0448\u0435\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0430\u043a\u0440\u043e MAC:<\/p>\n<pre><code class=\"cpp\">#define MAC     ((MAC_Reg*)(0xF0070000))  typedef struct  {          volatile uint32_t CTRL;          volatile uint32_t res1[3];          volatile uint32_t TX;          volatile uint32_t TX_AVAIL;          volatile uint32_t res2[2];          volatile uint32_t RX;          volatile uint32_t res3[2];          volatile uint32_t STAT;          volatile uint32_t RX_AVAIL;  } MAC_Reg; <\/code><\/pre>\n<p>\u0420\u0435\u0433\u0438\u0441\u0442\u0440 CTRL \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 0 \u0431\u0430\u0439\u0442 \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0431\u0438\u0442\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f:<br \/> \u2022 \u0411\u0438\u0442 0 \u2014 \u0437\u0430\u043f\u0438\u0441\u044c \u043b\u043e\u0433 \u00ab1\u00bb \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u0431\u0440\u043e\u0441 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0443\u0440\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0449\u0435\u0433\u043e \u0442\u0440\u0430\u043a\u0442\u0430 \u0438 \u043e\u0431\u043d\u0443\u043b\u0435\u043d\u0438\u0435 FIFO.<br \/> \u2022 \u0411\u0438\u0442 1 \u2014 \u0447\u0442\u0435\u043d\u0438\u0435 \u043b\u043e\u0433 \u00ab1\u00bb \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u044c \u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043c\u0435\u0441\u0442\u0430 \u0432 FIFO \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430.<br \/> \u2022 \u0411\u0438\u0442 2 \u2014 \u0437\u0430\u043f\u0438\u0441\u044c \u043b\u043e\u0433 \u00ab1\u00bb \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0449\u0438\u0445 \u043b\u0438\u043d\u0438\u044f\u0445 MII \u043f\u043e \u0433\u0440\u0430\u043d\u0438\u0446\u0435 16 \u0431\u0438\u0442. \u041c\u043d\u0435 \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0437\u0430\u0447\u0435\u043c \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f, \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u044e, \u0447\u0442\u043e \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u043c\u0435\u044e\u0442 \u0431\u043e\u043b\u044c\u0448\u0435\u0435 \u0447\u0438\u0441\u043b\u043e \u043b\u0438\u043d\u0438\u0439 \u0434\u0430\u043d\u043d\u044b\u0445, \u0447\u0435\u043c 4 \u0434\u043b\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430 MII.<br \/> \u2022 \u0411\u0438\u0442 4 \u2014 \u0437\u0430\u043f\u0438\u0441\u044c \u043b\u043e\u0433 \u00ab1\u00bb \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u0431\u0440\u043e\u0441 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0443\u0440\u044b \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0435\u0433\u043e \u0442\u0440\u0430\u043a\u0442\u0430 \u0438 \u043e\u0431\u043d\u0443\u043b\u0435\u043d\u0438\u0435 FIFO.<br \/> \u2022 \u0411\u0438\u0442 5 \u2014 \u0447\u0442\u0435\u043d\u0438\u0435 \u043b\u043e\u0433 \u00ab1\u00bb \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0432 FIFO \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0442\u0440\u0430\u043a\u0442\u0430 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0440\u0438\u043d\u044f\u0442\u043e\u0433\u043e \u0444\u0440\u0435\u0439\u043c\u0430.<br \/> \u2022 \u0411\u0438\u0442 6 \u2014 \u0437\u0430\u043f\u0438\u0441\u044c \u043b\u043e\u0433 \u00ab1\u00bb \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e 16 \u0431\u0438\u0442 \u043d\u0430 \u043f\u0440\u0438\u0435\u043c\u043d\u044b\u0445 \u043b\u0438\u043d\u0438\u044f\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 MII.<br \/> \u2022 \u0411\u0438\u0442 7 \u2014 \u0447\u0442\u0435\u043d\u0438\u0435 \u043b\u043e\u0433 \u00ab1\u00bb \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e FIFO \u0431\u0443\u0444\u0435\u0440 \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0442\u0440\u0430\u043a\u0442\u0430 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d \u0438 \u0435\u0441\u0442\u044c \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f (\u043f\u043e\u0442\u0435\u0440\u0438 \u0447\u0430\u0441\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043d\u044f\u0442\u043e\u0433\u043e \u0444\u0440\u0435\u0439\u043c\u0430).<\/p>\n<p>\u0420\u0435\u0433\u0438\u0441\u0442\u0440 <strong>TX<\/strong> \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 8 \u0431\u0430\u0439\u0442. \u0417\u0430\u043f\u0438\u0441\u044c 32-\u0445 \u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430 \u0432 \u044d\u0442\u043e\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442 \u0441\u043b\u043e\u0432\u043e \u0432 FIFO \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0449\u0435\u0433\u043e \u0442\u0440\u0430\u043a\u0442\u0430.<\/p>\n<p>\u0420\u0435\u0433\u0438\u0441\u0442\u0440 <strong>TX_AVAIL<\/strong> \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 12 \u0431\u0430\u0439\u0442 \u2014 \u0447\u0442\u0435\u043d\u0438\u0435 \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0445 \u0441\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0435\u0449\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432 \u0431\u0443\u0444\u0435\u0440 FIFO \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0449\u0435\u0433\u043e \u0442\u0440\u0430\u043a\u0442\u0430.<\/p>\n<p>\u0420\u0435\u0433\u0438\u0441\u0442\u0440 <strong>RX<\/strong> \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 20 \u0431\u0430\u0439\u0442 \u2014 \u0447\u0442\u0435\u043d\u0438\u0435 \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0438\u0437\u044b\u043c\u0430\u0435\u0442 \u043e\u0434\u043d\u043e \u0441\u043b\u043e\u0432\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u043e\u0433\u043e \u0444\u0440\u0435\u0439\u043c\u0430 \u0438\u0437 FIFO \u0432 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0435\u043c \u0442\u0440\u0430\u043a\u0442\u0435.<\/p>\n<p>\u0420\u0435\u0433\u0438\u0441\u0442\u0440 <strong>STAT<\/strong> \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 28 \u0431\u0430\u0439\u0442 \u2014 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u043e\u043b\u044f:<br \/> \u2022 \u0411\u0438\u0442\u044b [7:0] \u2014 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0447\u0438\u0441\u043b\u0430 \u043e\u0448\u0438\u0431\u043e\u043a \u043f\u043e \u043f\u0440\u0438\u0435\u043c\u0443 (ERRORS).<br \/> \u2022 \u0411\u0438\u0442\u044b [15:8] \u2014 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0447\u0438\u0441\u043b\u0430 \u043e\u0448\u0438\u0431\u043e\u043a \u043f\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 (DROPS).<\/p>\n<p>\u0420\u0435\u0433\u0438\u0441\u0442\u0440 <strong>RX_AVAIL<\/strong> \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 32 \u0431\u0430\u0439\u0442\u0430 \u2014 \u0447\u0442\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0447\u0438\u0441\u043b\u043e \u0441\u043b\u043e\u0432, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0445\u0441\u044f \u0432 FIFO \u043f\u0440\u0438\u0435\u043c\u043d\u043e\u0433\u043e \u0442\u0440\u0430\u043a\u0442\u0430, \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u043a \u0438\u0437\u044a\u044f\u0442\u0438\u044e.<\/p>\n<p>\u041e\u043f\u0438\u0448\u0435\u043c \u0432\u0441\u0435 \u044d\u0442\u043e \u0434\u0435\u043b\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u043c\u0430\u043a\u0440\u043e\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f\u043c\u0438:<\/p>\n<pre><code class=\"cpp\">#define MAC_CTRL_TX_RESET       0x00000001  #define MAC_CTRL_TX_READY       0x00000002  #define MAC_CTRL_TX_ALIGN_EN    0x00000004  #define MAC_CTRL_RX_RESET       0x00000010  #define MAC_CTRL_RX_PENDING     0x00000020  #define MAC_CTRL_RX_ALIGN_EN    0x00000040  #define MAC_CTRL_RX_FULL        0x00000080  #define MAC_STAT_ERRORS         0x000000ff  #define MAC_STAT_DROPS          0x0000ff00 <\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u043c\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u044d\u0442\u043e\u0442 \u0436\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 inline \u0444\u0443\u043d\u043a\u0446\u0438\u0438:<\/p>\n<pre><code class=\"cpp\">inline uint32_t mac_writeAvailability(MAC_Reg *reg){          return reg->TX_AVAIL;  }  inline uint32_t mac_readAvailability(MAC_Reg *reg){          return reg->RX_AVAIL;  }  inline uint32_t mac_readDrops(MAC_Reg *reg){          return reg->STAT >> 8;  }  inline uint32_t mac_readErrors(MAC_Reg *reg){          return reg->STAT &amp; 0xff;  }  inline uint32_t mac_rxPending(MAC_Reg *reg){          return reg->CTRL &amp; MAC_CTRL_RX_PENDING;  }  inline uint32_t mac_rxFull(MAC_Reg *reg){          return reg->CTRL &amp; MAC_CTRL_RX_FULL;  }  inline uint32_t mac_txReady(MAC_Reg *reg){          return reg->CTRL &amp; MAC_CTRL_TX_READY;  }  inline uint32_t mac_getCtrl(MAC_Reg *reg){          return reg->CTRL;  }  inline uint32_t mac_setCtrl(MAC_Reg *reg, uint32_t val){          return reg->CTRL = val;  }  inline uint32_t mac_getRx(MAC_Reg *reg){          return reg->RX;  }  inline uint32_t mac_pushTx(MAC_Reg *reg, uint32_t val){          return reg->TX = val;  } <\/code><\/pre>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u0434\u043b\u044f \u0442\u0440\u0435\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430:<\/p>\n<pre><code>void mac_init(void);  int mac_rx(uint8_t* mac_buf);  int mac_tx(uint8_t *mac_buf, int frame_size); <\/code><\/pre>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043c\u0430\u043a\u0440\u043e\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043a\u043e\u0434\u043e\u0432 \u043e\u0448\u0438\u0431\u043e\u043a, \u0432\u044b\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0445 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u043c:<\/p>\n<pre><code>#define MAC_ERR_OK              0  #define MAC_ERR_RX_FIFO         1  #define MAC_ERR_ARGS            2  #define MAC_ERR_RX_TIMEOUT      3 <\/code><\/pre>\n<p>\u0414\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b <strong>mac.h<\/strong>, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u0443\u0441\u043b\u043e\u0432\u043d\u0443\u044e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044e \u0434\u043b\u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u0445 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u0444\u0430\u0439\u043b <strong>stdint.h<\/strong> \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0432\u043a\u043b\u044e\u0447\u0438\u043c \u0432\u044b\u0432\u043e\u0434 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0432 \u043c\u0430\u043a\u0440\u043e <strong>MAC_DEBUG<\/strong>:<\/p>\n<pre><code>#ifndef _MAC_H_  #define _MAC_H_  #include &lt;stdint.h>  #define MAC_DEBUG       1 \/\/ \u0432\u043a\u043b\u044e\u0447\u0438\u043c \u0432\u044b\u0432\u043e\u0434 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \/\/ \u2026 \u0437\u0434\u0435\u0441\u044c \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u0432\u044b\u0448\u0435 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 #endif \/\/ MAC_H <\/code><\/pre>\n<p>\u0423 \u043d\u0430\u0441 \u0433\u043e\u0442\u043e\u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0434\u043b\u044f \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c \u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0443\u0440\u044b (\u0441\u0431\u0440\u043e\u0441\u0430), \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u0430 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u0430\u044f. \u0414\u043b\u044f \u0441\u0431\u0440\u043e\u0441\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0432 \u043b\u043e\u0433 \u00ab1\u00bb \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0431\u0438\u0442\u044b, \u0432\u044b\u0436\u0434\u0430\u0442\u044c \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0432\u0440\u0435\u043c\u044f (\u043d\u0435 \u043c\u0435\u043d\u0435\u0435 10 \u043c\u0441) \u0438 \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u0432 \u043b\u043e\u0433 \u00ab0\u00bb \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432 \u0440\u0430\u0431\u043e\u0447\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u041f\u043e\u043c\u0435\u0441\u0442\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 \u0444\u0430\u0439\u043b <strong>mac.c<\/strong> \u0432 \u0442\u043e\u043c \u0436\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435:<\/p>\n<pre><code class=\"cpp\">extern void delay_us(unsigned int);  void mac_init(void) {          mac_setCtrl(MAC, MAC_CTRL_TX_RESET | MAC_CTRL_RX_RESET);          delay_us(10000);          mac_setCtrl(MAC, 0);  } <\/code><\/pre>\n<p>\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0439 <strong>delay_us()<\/strong> \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0440\u0430\u043d\u0435\u0435 \u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u2014 \u0432 <strong>main.c<\/strong>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0448\u043b\u0435\u043c\u0441\u044f \u043d\u0430 \u043d\u0435\u0451 \u043a\u0430\u043a \u043d\u0430 <strong>extern<\/strong> \u0444\u0443\u043d\u043a\u0446\u0438\u044e.<\/p>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043a\u043e\u0434 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>mac_printf()<\/strong> \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0431\u0443\u0444\u0435\u0440. \u042d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043b\u0435\u0433\u043a\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439 \u043c\u0430\u043a\u0440\u043e-\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <strong>MAC_DEBUG<\/strong>:<\/p>\n<pre><code class=\"cpp\">#define MAC_DEBUG       1  #ifdef MAC_DEBUG   #include &lt;stdarg.h>   extern void print(char *);   char mac_dbg_msg[256];   void mac_printf(const char* fmt, ...) {          va_list args;          va_start(args, fmt);          vsnprintf(mac_dbg_msg, 256, fmt, args);          va_end(args);          print(mac_dbg_msg);  }  #endif <\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 <strong>mac_tx()<\/strong>. \u042d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0434\u0432\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430: <strong>mac_buf<\/strong> \u2014 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0431\u0443\u0444\u0435\u0440 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043c\u0430\u0448\u0438\u043d\u044b, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043a \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0435 Ethernet \u0444\u0440\u0435\u0439\u043c \u0438 <strong>frame_size<\/strong> \u2014 \u0440\u0430\u0437\u043c\u0435\u0440 \u0444\u0440\u0435\u0439\u043c\u0430 \u0432 \u0431\u0430\u0439\u0442\u0430\u0445.<\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u043d\u0430\u043c\u0438 MAC \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 <strong>MacEth<\/strong> \u0438\u043c\u0435\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0443 \u043f\u0440\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0435 \u0444\u0440\u0435\u0439\u043c\u0430:<\/p>\n<ul>\n<li>\n<p> \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0444\u0440\u0435\u0439\u043c\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430;<\/p>\n<\/li>\n<li>\n<p> \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0438\u0441\u044c\u044e \u043b\u044e\u0431\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430 \u0432 FIFO \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043c\u0435\u0441\u0442\u0430 \u0432 \u043d\u0451\u043c;<\/p>\n<\/li>\n<li>\n<p> \u043f\u0435\u0440\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 FIFO, \u043e\u0431\u044f\u0437\u0430\u043d\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0444\u0440\u0435\u0439\u043c\u0430, \u0438\u0441\u0447\u0438\u0441\u043b\u044f\u0435\u043c\u044b\u0439 \u0432 <strong>\u0431\u0438\u0442\u0430\u0445<\/strong>;<\/p>\n<\/li>\n<li>\n<p> \u0432 \u0441\u043b\u0435\u0434 \u0437\u0430 \u044d\u0442\u0438\u043c \u0441\u043b\u043e\u0432\u043e\u043c \u0432 FIFO \u043f\u043e\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u0444\u0440\u0435\u0439\u043c\u0430 \u0441\u043b\u043e\u0432\u043e \u0437\u0430 \u0441\u043b\u043e\u0432\u043e\u043c \u043f\u043e 32 \u0431\u0438\u0442\u0430, \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0441\u043b\u043e\u0432\u0430\u0445 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u00abnetwork\u00bb (big endian).<\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>mac_tx()<\/strong> \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0432\u0430\u043b\u0438\u0434\u043d\u043e\u0441\u0442\u0438 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0447\u0438\u0441\u043b\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0445 \u0431\u0438\u0442, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0434\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0443\u0440\u044b \u0438 FIFO, \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043f\u0435\u0440\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0438\u0442 \u0432 \u0444\u0440\u0435\u0439\u043c\u0435 \u0438 \u0434\u0430\u043b\u0435\u0435, \u0432 \u0446\u0438\u043a\u043b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u044f \u043f\u043e \u0447\u0435\u0442\u044b\u0440\u0435 \u0431\u0430\u0439\u0442\u0430, \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0432\u0435\u0441\u044c \u0444\u0440\u0435\u0439\u043c \u0432 FIFO. \u0412\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<details class=\"spoiler\">\n<summary>int mac_tx(uint8_t *mac_buf, int frame_size)<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">int mac_tx(uint8_t *mac_buf, int frame_size) {          if(mac_buf == NULL || frame_size &lt; 0 || frame_size >= 2048) {                  #ifdef MAC_DEBUG                  mac_printf(\"mac_tx() wrong args: mac_buf = %p, frame_size = %d\\r\\n\", mac_buf, frame_size);                  #endif                  return -MAC_ERR_ARGS;          }          uint32_t bits = frame_size*8;          uint32_t words = (bits+31)\/32;          #ifdef MAC_DEBUG          mac_printf(\"mac_tx() sending MAC frame size = %d (%d words)\\r\\n\", frame_size, words);          #endif          \/\/ wait for MAC controller to get ready to send          while(!mac_txReady(MAC));          \/\/ wait for space in TX FIFO          while(mac_writeAvailability(MAC) == 0);          mac_pushTx(MAC, bits); \/\/ first word in FIFO is number of bits in following packet          uint32_t byte_idx = 0;          uint32_t word = 0;          uint32_t words_sent = 0;          uint8_t *p = mac_buf;          uint32_t bytes_left = frame_size;          while(bytes_left) {                  word |= ((*p++) &amp; 0xff) &lt;&lt; (byte_idx * 8);                  if(byte_idx == 3) {                          while(mac_writeAvailability(MAC) == 0);                          mac_pushTx(MAC, word);                          word = 0;                          words_sent++;                  }                  byte_idx = (byte_idx + 1) &amp; 0x03;                  bytes_left--;          }          \/\/ Write remaining tail          if(byte_idx != 0) {                  while(mac_writeAvailability(MAC) == 0);                  mac_pushTx(MAC, word);                  words_sent++;          }          #ifdef MAC_DEBUG          mac_printf(\"mac_tx() %02x:%02x:%02x:%02x:%02x:%02x &lt;- %02x:%02x:%02x:%02x:%02x:%02x \"                  \"type: 0x%02x%02x, byte_idx = %d, words sent = %d, frame_size = %d\\r\\n\",                  mac_buf[0], mac_buf[1], mac_buf[2], mac_buf[3], mac_buf[4], mac_buf[5],                  mac_buf[6], mac_buf[7], mac_buf[8], mac_buf[9], mac_buf[10], mac_buf[11],                  mac_buf[12], mac_buf[13],                  byte_idx, words_sent, frame_size);          #endif          return MAC_ERR_OK;  } <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0432 FIFO \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u043b\u043e\u0432\u0430 \u043f\u043e \u0447\u0435\u0442\u044b\u0440\u0435 \u0431\u0430\u0439\u0442\u0430, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b \u0441\u043b\u0443\u0447\u0430\u0438, \u043a\u043e\u0433\u0434\u0430 \u0440\u0430\u0437\u043c\u0435\u0440 \u0444\u0440\u0435\u0439\u043c\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043a\u0440\u0430\u0442\u043d\u044b\u043c \u0447\u0438\u0441\u043b\u0443 4. \u0422\u0430\u043a\u043e\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u0432 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043f\u0443\u0442\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <strong>byte_idx<\/strong>, \u043e\u043d\u0430 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u043d\u043e\u043c\u0435\u0440 \u0431\u0430\u0439\u0442\u0430 \u0432 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u043c \u0441\u043b\u043e\u0432\u0435.<\/p>\n<p> \u0421 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u043e\u0439 \u0444\u0440\u0435\u0439\u043c\u0430 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c. \u0422\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u0439\u043c\u0435\u043c\u0441\u044f \u0438\u0437\u044a\u044f\u0442\u0438\u0435\u043c \u0438\u0437 FIFO \u043f\u0440\u0438\u0435\u043c\u043d\u043e\u0433\u043e \u0442\u0440\u0430\u043a\u0442\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0444\u0440\u0435\u0439\u043c\u0430. \u0421\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 <strong>MacEth<\/strong> \u0437\u0434\u0435\u0441\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f:<\/p>\n<ul>\n<li>\n<p> \u043f\u0435\u0440\u0435\u0434 \u0447\u0442\u0435\u043d\u0438\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 FIFO \u043f\u0440\u0438\u0435\u043c\u043d\u043e\u0433\u043e \u0442\u0440\u0430\u043a\u0442\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0432 \u043d\u0451\u043c \u0434\u0430\u043d\u043d\u044b\u0445;<\/p>\n<\/li>\n<li>\n<p> \u043f\u0435\u0440\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e, \u0441\u0447\u0438\u0442\u0430\u043d\u043d\u043e\u0435 \u0438\u0437 FIFO, \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u0440\u0438\u043d\u044f\u0442\u043e\u0433\u043e \u0444\u0440\u0435\u0439\u043c\u0430, \u0438\u0441\u0447\u0438\u0441\u043b\u044f\u0435\u043c\u044b\u0439 \u0432 \u0431\u0438\u0442\u0430\u0445, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u043d\u0443\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0435\u0433\u043e \u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043b\u043e\u0432 \u0434\u043b\u044f \u0446\u0438\u043a\u043b\u0430 \u0447\u0442\u0435\u043d\u0438\u044f \u0441\u0430\u043c\u043e\u0433\u043e \u0444\u0440\u0435\u0439\u043c\u0430;<\/p>\n<\/li>\n<li>\n<p> \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0432\u0441\u0435\u0433\u043e \u0444\u0440\u0435\u0439\u043c\u0430 \u0438\u0437 FIFO \u0441\u043b\u043e\u0432\u0430\u043c\u0438 \u043f\u043e 32 \u0431\u0438\u0442\u0430, \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0442 \u0432  \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u00abnetwork\u00bb (big endian);<\/p>\n<\/li>\n<\/ul>\n<p>\u0421\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441\u043b\u0443\u0447\u0430\u044f, \u043a\u043e\u0433\u0434\u0430 \u0434\u043b\u0438\u043d\u0430 \u0438\u0437\u044b\u043c\u0430\u0435\u043c\u043e\u0433\u043e \u0444\u0440\u0435\u0439\u043c\u0430 \u043d\u0435 \u043a\u0440\u0430\u0442\u043d\u0430 4 \u0431\u0430\u0439\u0442\u0430\u043c, \u0437\u0434\u0435\u0441\u044c \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0447\u0438\u0441\u043b\u043e \u0446\u0438\u043a\u043b\u043e\u0432 \u0447\u0442\u0435\u043d\u0438\u044f (\u0447\u0438\u0441\u043b\u043e \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u0441\u043b\u043e\u0432).<\/p>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>mac_rx()<\/strong> \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<details class=\"spoiler\">\n<summary>int mac_rx(uint8_t* mac_buf)<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">int mac_rx(uint8_t* mac_buf) {          uint32_t bytes_read = 0;          #ifdef MAC_DEBUG          mac_printf(\"mac_rx() begin\\r\\n\");          #endif          if(mac_rxPending(MAC)) {                  uint32_t bits = mac_getRx(MAC);                  uint32_t words = (bits+31)\/32;                  uint32_t bytes_left = (bits+7)\/8;                  uint8_t* p = mac_buf;                  uint32_t word;                  if(bytes_left > 2048) {                          mac_printf(\"mac_rx() RX FIFO error, bytes_left = %d bytes (%d bits)\\r\\n\", bytes_left, bits);                          mac_init();                          return -MAC_ERR_RX_FIFO;                  }                  #ifdef MAC_DEBUG                  mac_printf(\"mac_rx() reading %d bytes (%d bits)\\r\\n\", bytes_left, bits);                  #endif                  while(bytes_left) {                          int i = 1000;                            while(mac_rxPending(MAC) == 0 &amp;&amp; i-- > 1000);                          if(i == 0) {                                  #if MAC_DEBUG                                  mac_printf(\"mac_rx() timeout, bytes_left = %d\\r\\n\", bytes_left);                                  #endif                                  return -MAC_ERR_RX_TIMEOUT;                          }                          word = mac_getRx(MAC);                          for(i = 0; i &lt; 4 &amp;&amp; bytes_left; i++) {                                  *p++ = (uint8_t) word;                                  word = word >> 8;                                  bytes_left--;                                  bytes_read++;                          }                  }                  #ifdef MAC_DEBUG                  mac_printf(\"mac_rx() %02x:%02x:%02x:%02x:%02x:%02x &lt;- %02x:%02x:%02x:%02x:%02x:%02x \"                                  \"type: 0x%02x%02x, bytes_left = %d, \"                                  \"words = %d, bytes_read = %d, last word = 0x%08x\\r\\n\",                          mac_buf[0], mac_buf[1], mac_buf[2], mac_buf[3], mac_buf[4], mac_buf[5],                          mac_buf[6], mac_buf[7], mac_buf[8], mac_buf[9], mac_buf[10], mac_buf[11],                          mac_buf[12], mac_buf[13],                          bytes_left, words, bytes_read, word);                  #endif          }          #ifdef MAC_DEBUG          mac_printf(\"mac_rx() done, bytes read = %d\\r\\n\", bytes_read);          #endif          return bytes_read;  } <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p> \u0424\u0443\u043d\u043a\u0446\u0438\u044f <strong>mac_rx()<\/strong> \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0438\u0437\u044b\u043c\u0430\u0435\u043c\u044b\u0439 \u0444\u0440\u0435\u0439\u043c \u0438\u0437 FIFO \u043f\u0440\u0438\u0435\u043c\u043d\u043e\u0433\u043e \u0442\u0440\u0430\u043a\u0442\u0430. \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043f\u043e\u0437\u0430\u0431\u043e\u0442\u0438\u043b\u0441\u044f \u043e \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c (\u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u043b\u0438 \u043d\u0430 \u00ab\u043a\u0443\u0447\u0435\u00bb) \u0431\u0443\u0444\u0435\u0440 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043c\u0430 \u0434\u043b\u044f \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0444\u0440\u0435\u0439\u043c\u0430. \u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 Ethernet \u0444\u0440\u0435\u0439\u043c \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0442\u044c <strong>1522<\/strong> \u0431\u0430\u0439\u0442\u0430.<\/p>\n<p>\u041e\u0431\u044b\u0447\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u0432 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u043e\u0442 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u043d\u0430\u043c\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 <strong>MacEth<\/strong> \u0443\u043c\u0435\u0435\u0442 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442, \u043a\u043e\u0433\u0434\u0430 \u0443 \u043d\u0435\u0433\u043e \u0432 FIFO \u0431\u0443\u0444\u0435\u0440\u0435 \u043f\u0440\u0438\u0435\u043c\u043d\u043e\u0433\u043e \u0442\u0440\u0430\u043a\u0442\u0430 \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f. \u0421\u0438\u0433\u043d\u0430\u043b <strong>interrupt<\/strong> \u043e\u0431\u0435\u0440\u0442\u043e\u0447\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 <strong>Apb3MacEthCtrl<\/strong> \u043c\u044b \u0440\u0430\u043d\u0435\u0435 \u0443\u0436\u0435 \u043f\u043e\u0434\u0432\u044f\u0437\u0430\u043b\u0438 \u043a 2-\u043c\u0443 \u043a\u0430\u043d\u0430\u043b\u0443 \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439. \u041d\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0441 \u0446\u0435\u043b\u044c\u044e \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u043c\u044b \u043f\u043e\u0439\u0434\u0435\u043c \u0434\u0440\u0443\u0433\u0438\u043c \u043f\u0443\u0442\u0435\u043c \u2014 \u0431\u0443\u0434\u0435\u043c \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e FIFO \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>delay()<\/strong>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0433\u043b\u0430\u0432\u043d\u043e\u043c \u0446\u0438\u043a\u043b\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u0438 \u0435\u0441\u043b\u0438 \u0432 FIFO \u0447\u0442\u043e-\u0442\u043e \u0438\u043c\u0435\u0435\u0442\u0441\u044f, \u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <strong>mac_rx()<\/strong>. \u0422\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442 \u043a\u043e\u0434 \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u0440\u044f\u0434\u0430 \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0445 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u0432, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439. \u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u0446\u0435\u043b\u044c \u0434\u0430\u043d\u043d\u043e\u0439 \u0433\u043b\u0430\u0432\u044b \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 <strong>MacEth<\/strong>, \u0430 \u043d\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0438 \u0432\u0441\u0435\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435 \u0432\u044b\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430.<\/p>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u043a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>delay()<\/strong>, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0435\u0439\u0441\u044f \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u2014 <strong>main.c<\/strong>, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0437\u0430\u0432\u0435\u0434\u0435\u043c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0431\u0443\u0444\u0435\u0440 \u0434\u043b\u044f \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c\u043e\u0433\u043e \u0444\u0440\u0435\u0439\u043c\u0430:<\/p>\n<pre><code class=\"cpp\">static char mac_rx_buf[2048];   void delay(uint32_t loops){          if(mac_rxPending(MAC)) {                  mac_rx(mac_rx_buf);          }          for(int i=0;i&lt;loops;i++){                  \/\/int tmp = GPIO_A->OUTPUT;                  asm volatile (\"slli t1,t1,0x10\");          }  } <\/code><\/pre>\n<p>\u041f\u0440\u0438\u043d\u044f\u0442\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u044b \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u043c, \u043d\u043e \u043f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u043c \u043c\u0430\u043a\u0440\u043e <strong>MAC_DEBUG<\/strong> \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u044c \u0432 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u043c \u043f\u043e\u0440\u0442\u0443 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>mac_rx()<\/strong>, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0440\u0430\u0441\u043f\u0435\u0447\u0430\u0442\u043a\u0443 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u043f\u0440\u0438\u043d\u044f\u0442\u043e\u0433\u043e Ethernet \u0444\u0440\u0435\u0439\u043c\u0430. \u042d\u0442\u043e\u0433\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0446\u0435\u043b\u0435\u0439.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0448\u0442\u0440\u0438\u0445 \u0432 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u2014 \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 MAC \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0435\u0451 \u0432 \u043a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>main()<\/strong> \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f UART:<\/p>\n<pre><code class=\"cpp\">    csr_set(mstatus, MSTATUS_MIE); \/\/ Enable Machine interrupts     \/\/ Configure UART0 IRQ sources: bit(0) - TX interrupts, bit(1) - RX interrupts      UART->STATUS |= (1&lt;&lt;1); \/\/ Allow only RX interrupts       mac_init();       GPIO_A->OUTPUT_ENABLE = 0x0000000F;  <\/code><\/pre>\n<p>\u041d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c <strong>#include &lt;mac.h><\/strong> \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0444\u0430\u0439\u043b\u0430 <strong>main.c<\/strong>. \u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442 \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <strong>make clean &amp;&amp; make<\/strong>, \u0443\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u043c \u043e\u0448\u0438\u0431\u043a\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u043d\u043e \u043d\u0435 \u0441\u043f\u0435\u0448\u0438\u043c \u0441 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u0432 \u041f\u041b\u0418\u0421. \u0412\u0435\u0434\u044c \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u0442\u043e Ethernet \u043f\u0430\u043a\u0435\u0442, \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0441\u043b\u0430\u0442\u044c \u0432 \u0441\u0435\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043f\u0430\u043a\u0435\u0442, \u0438 \u0437\u0434\u0435\u0441\u044c \u0432\u043f\u043e\u043b\u043d\u0435 \u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 Discover \u0432 DHCP \u0441\u0435\u0440\u0432\u0435\u0440. \u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u043e\u0433\u043e DHCP \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043c\u044b \u0437\u0430\u0439\u043c\u0435\u043c\u0441\u044f \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0433\u043b\u0430\u0432\u0435.<\/p>\n<p><a class=\"anchor\" name=\"17.4.4\" id=\"17.4.4\"><\/a><\/p>\n<h4> 17.4.4 \u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441 \u0432 DHCP \u0441\u0435\u0440\u0432\u0435\u0440<\/h4>\n<p> \u0420\u0430\u0431\u043e\u0442\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0441 \u0441\u0435\u0442\u044c\u044e \u0432 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0440\u0435\u0430\u043b\u0438\u044f\u0445 \u043d\u0435 \u043c\u044b\u0441\u043b\u0438\u043c\u0430 \u0431\u0435\u0437 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0441\u0442\u0435\u043a\u0430 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432 TCP\/IP, \u0430 \u0435\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0431\u0435\u0437 IP \u0430\u0434\u0440\u0435\u0441\u0430. \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 IP \u0430\u0434\u0440\u0435\u0441\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0432\u043e\u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439 \u043b\u044e\u0431\u043e\u0433\u043e \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0448\u0438\u0440\u043e\u043a\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Dynamic_Host_Configuration_Protocol\" rel=\"noopener noreferrer nofollow\">Dynamic Host Configuration Protocol (DHCP)<\/a>. \u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u044f \u043d\u0435 \u0431\u0443\u0434\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432\u0435\u0441\u044c TCP\/IP \u0441\u0442\u0435\u043a \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0421\u043d\u041a, \u0445\u043e\u0442\u044c \u044d\u0442\u043e \u0438 \u043e\u0447\u0435\u043d\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u0442\u0435\u043c\u0430, \u0441\u043a\u0430\u0436\u0443 \u043b\u0438\u0448\u044c, \u0447\u0442\u043e \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0438 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u043e, \u0435\u0441\u043b\u0438 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0441\u0442\u0435\u043a <a href=\"https:\/\/en.wikipedia.org\/wiki\/LwIP\" rel=\"noopener noreferrer nofollow\">lwIP<\/a>. \u0417\u0434\u0435\u0441\u044c \u0436\u0435 \u043c\u044b \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u043c\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u043c \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043a DHCP \u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 IP \u0430\u0434\u0440\u0435\u0441\u0430.<\/p>\n<p>\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b DHCP \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u044b\u043c \u0438 \u043c\u043d\u043e\u0433\u043e\u0433\u0440\u0430\u043d\u043d\u044b\u043c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0435\u0442\u044c\u044e. \u041e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435  \u0432\u043d\u043e\u0432\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u044b\u043c \u043a \u0441\u0435\u0442\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 IP \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0438 \u0441\u043d\u0430\u0431\u0436\u0435\u043d\u0438\u0435 \u0438\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u0439 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u0441\u0435\u0442\u0438. \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435 \u2014 DHCP \u0441\u0435\u0440\u0432\u0435\u0440, \u043e\u0434\u0438\u043d \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0430\u043a\u0438\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043e\u0442 DHCP \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u0432 \u043a\u0430\u0436\u0434\u044b\u0439 \u0448\u0438\u0440\u043e\u043a\u043e\u0432\u0435\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442 \u0441\u0435\u0442\u0438 Ethernet.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/cf0\/dae\/7a9\/cf0dae7a9b72e1d12e8df3779bc9935d.png\" alt=\"\u0420\u0438\u0441. 35. \u041e\u0431\u043c\u0435\u043d \u043c\u0435\u0436\u0434\u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 DHCP \u043d\u0430 \u0441\u0442\u0430\u0434\u0438\u0438 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f.\" title=\"\u0420\u0438\u0441. 35. \u041e\u0431\u043c\u0435\u043d \u043c\u0435\u0436\u0434\u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 DHCP \u043d\u0430 \u0441\u0442\u0430\u0434\u0438\u0438 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f.\" width=\"800\" height=\"464\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/cf0\/dae\/7a9\/cf0dae7a9b72e1d12e8df3779bc9935d.png\"\/><\/p>\n<div><figcaption><em>\u0420\u0438\u0441. 35. \u041e\u0431\u043c\u0435\u043d \u043c\u0435\u0436\u0434\u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 DHCP \u043d\u0430 \u0441\u0442\u0430\u0434\u0438\u0438 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f.<\/em><\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043a DHCP \u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u043e\u0442 \u043a\u043b\u0438\u0435\u043d\u0442 \u0441 \u043f\u0443\u0441\u0442\u044b\u043c (\u043d\u0443\u043b\u0435\u0432\u044b\u043c) IP \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u043d\u0430 \u0448\u0438\u0440\u043e\u043a\u043e\u0432\u0435\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 IP \u0430\u0434\u0440\u0435\u0441 <strong>255.255.255.255<\/strong> \u0432 \u0432\u0438\u0434\u0435 IP\/UDP \u043f\u0430\u043a\u0435\u0442\u0430, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043d\u043e\u043c\u0435\u0440\u0430 UDP \u043f\u043e\u0440\u0442\u043e\u0432: <strong>68<\/strong> \u2014 \u0434\u043b\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0438 <strong>67<\/strong> \u2014 \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u0412 \u0442\u0435\u043b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043a\u043b\u0438\u0435\u043d\u0442 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0442\u0438\u043f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 <strong>Discover<\/strong>) \u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043d \u0445\u043e\u0447\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0432 \u0437\u0430\u043f\u0440\u043e\u0441, \u043a\u043b\u0438\u0435\u043d\u0442 \u0434\u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u0432\u0435\u0442\u0430 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u0421\u0435\u0440\u0432\u0435\u0440 \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 <strong>Discover<\/strong> \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u043e\u0442\u0432\u0435\u0442-\u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u2014 <strong>Offer<\/strong>, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c\u044b\u0445 \u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 IP \u0430\u0434\u0440\u0435\u0441 \u0438 \u0441\u0435\u0442\u0435\u0432\u0443\u044e \u043c\u0430\u0441\u043a\u0443, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b (\u0430\u0434\u0440\u0435\u0441 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0442\u043e\u0440\u0430, \u0430\u0434\u0440\u0435\u0441 DNS \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0434\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u0438 \u0442.\u00a0\u0434.). \u041a\u043b\u0438\u0435\u043d\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u0442.\u00a0\u0435. \u0441\u043e\u0433\u043b\u0430\u0448\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c, \u043e \u0447\u0435\u043c \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u044f\u0435\u0442 \u0441\u0435\u0440\u0432\u0435\u0440 \u0434\u0440\u0443\u0433\u0438\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c \u2014 Request, \u043d\u0430 \u0447\u0442\u043e \u0441\u0435\u0440\u0432\u0435\u0440 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435\u043c \u2014 <strong>Acknowledge<\/strong>. \u0422\u0438\u043f\u043e\u0432\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 DHCP \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u043d\u0430 \u0440\u0438\u0441. 35. \u0420\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0432\u0435\u0441\u044c \u043e\u0431\u043c\u0435\u043d \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 DHCP \u043d\u0430\u043c \u043d\u0435 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043e\u0442\u0432\u0435\u0442 \u043e\u0442 DHCP \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u043d\u0430\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043f\u0440\u043e\u0441 <strong>Discover<\/strong>, \u044d\u0442\u043e \u0443\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043e\u0431\u043c\u0435\u043d \u043f\u043e \u0441\u0435\u0442\u0438 \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u043c \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e MAC \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043d\u0430\u043c\u0438 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430. <\/p>\n<p> Ethernet \u0444\u0440\u0435\u0439\u043c \u0441 DHCP \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c \u0438\u043c\u0435\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043e\u0431\u0449\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443:<\/p>\n<ul>\n<li>\n<p> \u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a Ethernet \u0444\u0440\u0435\u0439\u043c\u0430 \u2014 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 MAC \u0430\u0434\u0440\u0435\u0441\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u0438 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438 \u0441\u0442\u0430\u043d\u0446\u0438\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044f. \u0412 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 Discover \u0430\u0434\u0440\u0435\u0441 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 <strong>ff:ff:ff:ff:ff:ff<\/strong>, \u0447\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u00ab\u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0432\u0441\u0435\u043c\u00bb.<\/p>\n<\/li>\n<li>\n<p> IP \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u2014 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0443\u043b\u0435\u0432\u043e\u0439 IP \u0430\u0434\u0440\u0435\u0441\u0430 \u0445\u043e\u0441\u0442\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044f \u0438 \u0448\u0438\u0440\u043e\u043a\u043e\u0432\u0435\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 IP \u0430\u0434\u0440\u0435\u0441 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044f (<strong>255.255.255.255<\/strong>).<\/p>\n<\/li>\n<li>\n<p> UDP \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u2014 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u043e\u043c\u0435\u0440\u0430 \u043f\u043e\u0440\u0442\u043e\u0432 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 (<strong>68<\/strong>) \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 (<strong>67<\/strong>).<\/p>\n<\/li>\n<li>\n<p> DHCP \u0437\u0430\u043f\u0440\u043e\u0441 \u2014 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 <strong>XID<\/strong>, \u0442\u0438\u043f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432. \u041f\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u043c\u0443 <strong>XID<\/strong> \u043a\u043b\u0438\u0435\u043d\u0442 \u0438 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u044e\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u044b\/\u043e\u0442\u0432\u0435\u0442\u044b \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0430.<\/p>\n<\/li>\n<\/ul>\n<p> \u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f DHCP \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b MAC, IP \u0438 UDP \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0441\u0430\u043c\u043e\u0433\u043e DHCP \u0437\u0430\u043f\u0440\u043e\u0441\u0430.<\/p>\n<p>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u043b\u044f MAC \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430:<\/p>\n<pre><code class=\"cpp\">typedef struct  {          uint8_t hw_dst_addr[6];          uint8_t hw_src_addr[6];          uint16_t etype;  } MAC_Header; <\/code><\/pre>\n<p> \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u043b\u044f IP \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430:<\/p>\n<pre><code class=\"cpp\">typedef struct {          uint8_t ver_ihl;          uint8_t dscp_ecn;          uint16_t pkt_len;          uint16_t ident;          uint16_t flags_frags;          uint16_t ttl_proto;          uint16_t header_csum;          uint32_t src_addr;          uint32_t dst_addr;  } attribute((packed)) IP_Header;<\/code><\/pre>\n<p> \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u043b\u044f UDP \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430:<\/p>\n<pre><code class=\"cpp\">typedef struct {          uint16_t src_port;          uint16_t dst_port;          uint16_t pkt_len;          uint16_t crc;  } __attribute__((__packed__)) UDP_Header; <\/code><\/pre>\n<p> \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u043b\u044f DHCP \u0437\u0430\u043f\u0440\u043e\u0441\u0430:<\/p>\n<pre><code class=\"cpp\">typedef struct {          uint8_t op;          uint8_t htype;          uint8_t hlen;          uint8_t hops;          uint32_t xid;          uint16_t secs;          uint16_t flags;          uint32_t ciaddr;          uint32_t yiaddr;          uint32_t siaddr;          uint32_t giaddr;          char chaddr[16];          char sname[64];          char file[128];          char magic[4];          char opt[10];  } __attribute__((__packed__)) DHCP_Message; <\/code><\/pre>\n<p> \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u0441\u0435 \u0432\u044b\u0448\u0435\u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438:<\/p>\n<pre><code class=\"cpp\">typedef struct {          MAC_Header mac;          IP_Header ip;          UDP_Header udp;          DHCP_Message dhcp;  } __attribute__((__packed__)) MAC_IP_UDP_DHCP_Message; <\/code><\/pre>\n<p> \u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 IP \u0437\u0430\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0443\u044e \u0441\u0443\u043c\u043c\u0443. \u041f\u043e\u0437\u0430\u0438\u043c\u0441\u0442\u0432\u0443\u0435\u043c \u0441 \u0441\u0430\u0439\u0442\u0430 Wikipedia \u0433\u043e\u0442\u043e\u0432\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u043b\u044f \u044d\u0442\u0438\u0445 \u0446\u0435\u043b\u0435\u0439:<\/p>\n<details class=\"spoiler\">\n<summary>uint16_t ip_check_sum(uint16_t *addr, int len)<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">uint16_t ip_check_sum(uint16_t *addr, int len)  {          int nleft = len;          uint16_t *w = addr;          uint32_t sum = 0;          uint16_t answer = 0;          while (nleft > 1)  {                  sum += *w++;                  nleft -= 2;          }          if (nleft == 1) {                  *(uint8_t *)(&amp;answer) = *(uint8_t *)w ;                  sum += answer;          }          sum = (sum >> 16) + (sum &amp; 0xffff);          sum += (sum >> 16);          answer = ~sum;          return(answer);  } <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0412 UDP \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 \u0442\u043e\u0436\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u043e\u043b\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u043e\u0439 \u0441\u0443\u043c\u043c\u044b, \u043d\u043e \u0434\u043b\u044f IP \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u0432\u0435\u0440\u0441\u0438\u0438 4 \u044d\u0442\u043e \u043f\u043e\u043b\u0435 \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e, \u0442.\u00a0\u0435. \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u043c\u0435\u0449\u0430\u0442\u044c \u0432 \u043d\u0435\u0433\u043e \u043d\u0443\u043b\u0438.<\/p>\n<p>\u0414\u043b\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f MAC \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u0432\u0430 MAC \u0430\u0434\u0440\u0435\u0441\u0430 \u2014 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044f (\u043d\u0430\u0448\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e) \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044f (\u0441\u0435\u0440\u0432\u0435\u0440). \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044f \u0432 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435 DHCP \u0440\u0435\u0433\u043b\u0430\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0448\u0438\u0440\u043e\u043a\u043e\u0432\u0435\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 MAC \u0430\u0434\u0440\u0435\u0441 \u0432\u0438\u0434\u0430 <strong>ff:ff:ff:ff:ff:ff<\/strong>. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 MAC \u0430\u0434\u0440\u0435\u0441\u0430 \u043d\u0430\u0448\u0435\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432\u044b\u0431\u0435\u0440\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0438\u0439 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c <a href=\"https:\/\/en.wikipedia.org\/wiki\/MAC_address\" rel=\"noopener noreferrer nofollow\">Local Administered Address \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430 IEEE 802<\/a>: <strong>06:aa:bb:cc:dd:ee<\/strong>.<\/p>\n<pre><code>uint8_t hw_my_addr[6] = { 0x06, 0xaa, 0xbb, 0xcc, 0xdd, 0xee };  uint8_t hw_brd_addr[6] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; <\/code><\/pre>\n<p>\u0414\u043b\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u043e\u043b\u0435\u0439 \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0445 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043f\u0430\u0440\u0430 \u043c\u0430\u043a\u0440\u043e\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0431\u0430\u0439\u0442 \u0432 \u0441\u043b\u043e\u0432\u0435:<\/p>\n<pre><code>#define SWAP32(X)       __builtin_bswap32((X))  #define SWAP16(X)       __builtin_bswap16((X)) <\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u043b\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f DHCP \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438 \u0435\u0433\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0432 \u0441\u0435\u0442\u044c. \u041d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u0432 Wikipedia, \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 DHCP, \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0430\u043a\u0435\u0442\u0430 \u0441 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c <strong>Discover<\/strong>, \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u044d\u0442\u0438\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438:<\/p>\n<details class=\"spoiler\">\n<summary>int dhcp_send_discover(void)<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">int dhcp_send_discover(void) {          static uint32_t xid = 0x12345678;          int frame_size = 0;          MAC_IP_UDP_DHCP_Message msg = (MAC_IP_UDP_DHCP_Message) malloc(2048);          if(msg == NULL) {                  printf(\"dhcp_send_discover: failed to allocate buffer\\r\\n\");                  return -100;          }          bzero(msg, 2048);          msg->dhcp.op = 1; msg->dhcp.htype = 1; msg->dhcp.hlen = 6; msg->dhcp.hops = 0;          msg->dhcp.xid = SWAP32(xid++); msg->dhcp.secs = 0; msg->dhcp.flags = 0;          msg->dhcp.magic[0]=0x63; msg->dhcp.magic[1]=0x82; msg->dhcp.magic[2]=0x53; msg->dhcp.magic[3]=0x63;          msg->dhcp.opt[0]=0x35; msg->dhcp.opt[1]=1; msg->dhcp.opt[2]=1; \/\/ Discovery          msg->dhcp.opt[3]=0x37; msg->dhcp.opt[4]=4; \/\/ Parameter request list          msg->dhcp.opt[5]=1; msg->dhcp.opt[6]=3; \/\/ mask, router          msg->dhcp.opt[7]=15; msg->dhcp.opt[8]=6; \/\/ domain name, dns          msg->dhcp.opt[9]=0xff; \/\/ end of params          memcpy(msg->dhcp.chaddr, hw_my_addr, 6);          frame_size += sizeof(msg->dhcp) + sizeof(msg->udp);          msg->udp.pkt_len = SWAP16(frame_size);          msg->udp.src_port = SWAP16(68); msg->udp.dst_port = SWAP16(67);          frame_size += sizeof(msg->ip);          msg->ip.src_addr = 0x0; msg->ip.dst_addr = 0xffffffff;          msg->ip.ver_ihl = 0x45; msg->ip.ttl_proto = SWAP16((255 &lt;&lt; 8) + 17);          msg->ip.pkt_len = SWAP16(frame_size);          msg->ip.header_csum = ip_check_sum((uint16_t*)&amp;(msg->ip), sizeof(msg->ip));          frame_size += sizeof(msg->mac);          memcpy(msg->mac.hw_dst_addr, hw_brd_addr, 6);          memcpy(msg->mac.hw_src_addr, hw_my_addr, 6);          msg->mac.etype = SWAP16(0x0800);          int ret = mac_tx((uint8_t*)msg, frame_size);          free(msg);          return ret;  } <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p> \u041f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u0430\u044f \u0432\u044b\u0448\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <strong>dhcp_send_discover()<\/strong>, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f <strong>malloc()<\/strong>, \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442 \u043f\u0430\u043c\u044f\u0442\u044c \u043f\u043e\u0434 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0442\u0438\u043f\u0430 <strong>MAC_IP_UDP_DHCP_Message<\/strong>. \u0414\u0430\u043b\u0435\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0435\u0451, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u043a\u043e\u043d\u0446\u0430 (\u0441 \u0442\u0435\u043b\u0430 DCHP \u0437\u0430\u043f\u0440\u043e\u0441\u0430), \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0443\u044e \u0441\u0443\u043c\u043c\u0443 IP \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 IP \u0438 MAC \u0430\u0434\u0440\u0435\u0441\u0430 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 Ethernet \u0444\u0440\u0435\u0439\u043c \u0432 \u0441\u0435\u0442\u044c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 <strong>ma\u0441_tx()<\/strong>. \u041f\u043e\u0441\u043b\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u0438 \u0432\u044b\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u0447\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 <strong>free()<\/strong>. \u0412 \u043a\u0430\u0447\u0435c\u0442\u0432\u0435 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 <strong>XID<\/strong> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0447\u0438\u0441\u043b\u043e <strong>0x12345678<\/strong>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0437\u0430\u043d\u043e\u0441\u0438\u0442\u0441\u044f  \u0432 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0443 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<\/p>\n<p>\u041f\u043e\u043c\u0435\u0449\u0430\u0435\u043c \u0432\u0435\u0441\u044c \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u0432\u044b\u0448\u0435 \u043a\u043e\u0434 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b <strong>dhcp.c<\/strong> \u0432 \u0442\u043e\u043c \u0436\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435, \u0433\u0434\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u0434 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u00abhello_world\u00bb. \u0412 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 \u0444\u0430\u0439\u043b\u0430 <strong>dhcp.c<\/strong> \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438 \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u043f\u0440\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u043d\u0430\u0448\u0435\u0433\u043e \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 <strong>mac.h<\/strong>:<\/p>\n<pre><code class=\"css\">#include &lt;stdint.h>  #include &lt;stdlib.h>  #include &lt;stdio.h>  #include &lt;string.h>  #include \"mac.h\"<\/code><\/pre>\n<p> \u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>dhcp_send_discover()<\/strong> \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>main()<\/strong> \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u00abhello_world\u00bb. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0444\u0430\u0439\u043b\u0430 <strong>main.c<\/strong>:<\/p>\n<pre><code class=\"cpp\">volatile int total_irqs = 0;  volatile int extint_irqs = 0;   int dhcp_send_discover(void); <\/code><\/pre>\n<p>\u0412\u044b\u0437\u043e\u0432 <strong>dhcp_send_discover()<\/strong> \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0438\u043c \u0432 \u043a\u043e\u043d\u0446\u0435 \u0442\u0435\u043b\u0430 \u0446\u0438\u043a\u043b\u0430 <strong>while<\/strong>, \u043f\u043e\u0441\u043b\u0435 \u0440\u0430\u0441\u043f\u0435\u0447\u0430\u0442\u043a\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0434\u0432\u0438\u0433\u0430:<\/p>\n<pre><code class=\"cpp\">                ...                 printhex(shift_time);                  printhex(t2 - t1);                   dhcp_send_discover();  <\/code><\/pre>\n<p> \u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442, \u0443\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u043c \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0432 \u041f\u041b\u0418\u0421, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043a\u0430\u0431\u0435\u043b\u044c Ethernet, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c <strong>minicom<\/strong> \u0438 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f:<\/p>\n<pre><code>Filling SRAM at: 90000000  Checking SRAM at: 90000000  SRAM total fails: 00000000  Enabled heap on SRAM  Malloc test:  90000008  Hello world, this is VexRiscv!  PLIC: pending = 0, total_irqs = 0, extint_irqs = 0  EXTIRQ: pending flags = 00000004  mac_rx() begin  mac_rx() reading 64 bytes (512 bits)  mac_rx() 06:aa:bb:cc:dd:ee &lt;- c0:25:e9:ad:2b:1a type: 0x0806, bytes_left = 0, words = 16, bytes_read = 64, last word = 0x00000000  mac_rx() done, bytes read = 64  000000C6  0002A516  mac_tx() sending MAC frame size = 292 (73 words)  mac_tx() fEXTIRQ: pending flags = 00000004  f:ff:ff:ff:ff:ff &lt;- 06:aa:bb:cc:dd:ee type: 0x0800, byte_idx = 0, words sent = 73, frame_size = 292  Hello world, this is VexRiscv!  PLIC: pending = 0, total_irqs = 2, extint_irqs = 2  mac_rx() begin  mac_rx() reading 66 bytes (528 bits)  mac_rx() 06:aa:bb:cc:dd:ee &lt;- c0:25:e9:ad:2b:1a type: 0x0800, bytes_left = 0, words = 17, bytes_read = 66, last word = 0x0000007e  mac_rx() done, bytes read = 66  EXTIRQ: pending flags = 00000004  mac_rx() begin  mac_rx() reading 219 bytes (1752 bits)  mac_rx() ff:ff:ff:ff:ff:ff &lt;- c0:25:e9:ad:2b:1a type: 0x0800, bytes_left = 0, words = 55, bytes_read = 219, last word = 0x0000000c  mac_rx() done, bytes read = 219  EXTIRQ: pending flags = 00000004  mac_rx() begin  mac_rx() reading 64 bytes (512 bits)  mac_rx() 06:aa:bb:cc:dd:ee &lt;- c0:25:e9:ad:2b:1a type: 0x0806, bytes_left = 0, words = 16, bytes_read = 64, last word = 0x00000000  mac_rx() done, bytes read = 64  000000C8  0002AB3C  mac_tx() sending MAC frame size = 292 (73 words)  mac_tx() ff:ff:ff:ff:ff:ff &lt;- 06:aa:bb:cc:dd:ee type: 0x0800, byte_idx = 0, words sent = 73, frame_size = 292  Hello world, this is VexRiscv!  PLIC: pending = 0, total_irqs = 4, extint_irqs = 4  000000C7  0002A516  mac_tx() sending MAC frame size = 292 (73 words)  mac_tx() ff:ff:ff:ff:ff:ff &lt;- 06:aa:bb:cc:dd:ee type: 0x0800, byte_idx = 0, words sent = 73, frame_size = 292  Hello world, this is VexRiscv!  PLIC: pending = 0, total_irqs = 4, extint_irqs = 4  EXTIRQ: pending flags = 00000004  mac_rx() begin  mac_rx() reading 346 bytes (2768 bits)  mac_rx() 06:aa:bb:cc:dd:ee &lt;- c0:25:e9:ad:2b:1a type: 0x0800, bytes_left = 0, words = 87, bytes_read = 346, last word = 0x00000add  mac_rx() done, bytes read = 346  mac_rx() begin  mac_rx() reading 346 bytes (2768 bits)  mac_rx() 06:aa:bb:cc:dd:ee &lt;- c0:25:e9:ad:2b:1a type: 0x0800, bytes_left = 0, words = 87, bytes_read = 346, last word = 0x00000199  mac_rx() done, bytes read = 346  000000C6  0002A516 <\/code><\/pre>\n<p> \u0416\u0438\u0440\u043d\u044b\u043c \u0448\u0440\u0438\u0444\u0442\u043e\u043c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0445 Ethernet \u0444\u0440\u0435\u0439\u043c\u0430\u0445, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441 <strong>Dis\u0441over<\/strong> \u0438 \u043e\u0442\u0432\u0435\u0442 <strong>Offer<\/strong> \u043e\u0442 DHCP \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u0412 \u043c\u043e\u0451\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438\u043c\u0435\u0435\u0442 MAC \u0430\u0434\u0440\u0435\u0441 <strong>c0:25:e9:ad:2b:1a<\/strong> \u0438 \u044d\u0442\u043e \u043c\u043e\u0439 \u0434\u043e\u043c\u0430\u0448\u043d\u0438\u0439 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0442\u043e\u0440.  \u0415\u0441\u043b\u0438 \u043f\u0440\u0438\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c\u0441\u044f, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0444\u0440\u0435\u0439\u043c\u044b \u0441 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c\u0438 ARP (<strong>EtherType = 0x0806<\/strong>), \u0430\u0434\u0440\u0435\u0441\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043d\u0430\u0448\u0435\u043c\u0443 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443, \u043d\u043e \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u043c\u044b \u043d\u0430 \u043d\u0438\u0445 \u043f\u043e\u043a\u0430 \u0447\u0442\u043e \u043d\u0435 \u043c\u043e\u0436\u0435\u043c.<\/p>\n<p> \u041f\u0440\u043e\u0432\u0435\u0434\u0435\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 &#8212; \u043f\u043e\u0433\u043e\u043d\u044f\u0435\u043c \u043d\u0430\u0448\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0432 \u0442\u0430\u043a\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u0437\u0430\u043f\u0440\u043e\u0441-\u043e\u0442\u0432\u0435\u0442, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u043d\u0435\u0442 \u043b\u0438 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0438\u043b\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440. \u0427\u0435\u0440\u0435\u0437 15 \u043c\u0438\u043d\u0443\u0442 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u044c \u0432 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u043c \u043f\u043e\u0440\u0442\u0443 \u043e\u0431\u043c\u0435\u043d \u0441 DHCP \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c:<\/p>\n<pre><code>Hello world, this is VexRiscv!  PLIC: pending = 0, total_irqs = 885, extint_irqs = 885  mac_rx() begin  mac_rx() reading 346 bytes (2768 bits)  mac_rx() 06:aa:bb:cc:dd:ee &lt;- c0:25:e9:ad:2b:1a type: 0x0800, bytes_left = 0, words = 87, bytes_read = 346, last word = 0x00000760  mac_rx() done, bytes read = 346  000000C6  0002A516                                                                          mac_tx() sending MAC frame size = 292 (73 words)                                  mac_tx() ff:fEXTIRQ: pending flags = 00000004                                     f:ff:ff:ff:ff &lt;- 06:aa:bb:cc:dd:ee type: 0x0800, byte_idx = 0, words sent = 73, frame_size = 292  Hello world, this is VexRiscv!  PLIC: pending = 0, total_irqs = 886, extint_irqs = 886 <\/code><\/pre>\n<p>\u041f\u043e \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0443 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0443\u0436\u0435 \u0431\u044b\u043b\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u043e <strong>886<\/strong> \u0444\u0440\u0435\u0439\u043c\u043e\u0432. \u0414\u0435\u043b\u0430\u0435\u043c \u0432\u044b\u0432\u043e\u0434 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e MAC \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043d\u0430\u043c\u0438 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e.<\/p>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u0431\u044b\u043b\u043e \u0431\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 TCP\/IP \u0441\u0442\u0435\u043a\u0430, \u043d\u043e \u044d\u0442\u0443 \u0442\u0435\u043c\u0443 \u044f \u043e\u0441\u0442\u0430\u0432\u043b\u044e \u0434\u043b\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<p><a class=\"anchor\" name=\"18\" id=\"18\"><\/a><\/p>\n<h2> 18. \u041f\u043e\u0442\u0430\u043a\u0442\u043e\u0432\u0430\u044f \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u0421\u043d\u041a Murax<\/h2>\n<p> \u0412 \u0433\u043b\u0430\u0432\u0435 \u00ab<em>13.7  \u0421\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u0438 \u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0432 SpinalHDL<\/em>\u00bb \u044f \u043e\u0431\u0435\u0449\u0430\u043b \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043a\u0430\u043a \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0442\u0430\u043a\u0442\u043e\u0432\u0430\u044f \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0432 SpinalHDL. \u041d\u0430\u0441\u0442\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u043a \u0442\u043e\u043c\u0443 \u0436\u0435 \u0435\u0441\u0442\u044c \u043f\u043e\u0432\u043e\u0434.<\/p>\n<p>\u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 <strong>PipelinedMemoryBusSram<\/strong> \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u043e\u0439 SRAM \u0443 \u043c\u0435\u043d\u044f \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u0438 \u0441 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0446\u0438\u043a\u043b\u0430 \u0447\u0442\u0435\u043d\u0438\u044f. \u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 \u00ab\u041a\u0430\u0440\u043d\u043e\u00bb \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0430 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u044f 256\u041a \u044f\u0447\u0435\u0435\u043a \u043f\u043e 16 \u0431\u0438\u0442 \u043a\u0430\u0436\u0434\u0430\u044f, \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u044f \u044f\u0447\u0435\u0435\u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0441\u043b\u043e\u0432\u043d\u043e. \u0414\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u0441\u0442\u0430\u0440\u0448\u0435\u0433\u043e \u0438\u043b\u0438 \u043c\u043b\u0430\u0434\u0448\u0435\u0433\u043e \u0431\u0430\u0439\u0442\u0430 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0430 \u0438\u043c\u0435\u0435\u0442 \u0434\u0432\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 <strong>#UB<\/strong> \u0438 <strong>#LB<\/strong> (\u0443 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 <strong>PipelinedMemoryBusSram<\/strong> \u044d\u0442\u043e \u0431\u0443\u0434\u0443\u0442 \u0441\u0438\u0433\u043d\u0430\u043b\u044b <strong>io.sram_bhe<\/strong> \u0438 <strong>io.sram_ble<\/strong>). \u0417\u0430\u043f\u0438\u0441\u044c 32-\u0445 \u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430 \u0432 SRAM \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0437\u0430 \u0434\u0432\u0430 \u0442\u0430\u043a\u0442\u0430, \u0430 \u0432\u043e\u0442 \u0447\u0442\u0435\u043d\u0438\u0435 \u0437\u0430 \u0434\u0432\u0430 \u0442\u0430\u043a\u0442\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u2014 \u043e\u0447\u0435\u043d\u044c \u0447\u0430\u0441\u0442\u043e \u043d\u0430 \u0448\u0438\u043d\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u043b\u0441\u044f \u00ab\u043c\u0443\u0441\u043e\u0440\u00bb \u0438 \u0447\u0442\u043e\u0431\u044b \u043d\u0438\u0432\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0432\u044b\u0434\u0435\u043b\u044f\u0442\u044c \u043f\u043e \u0434\u0432\u0430 \u0442\u0430\u043a\u0442\u0430 \u043f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 \u043a\u0430\u0436\u0434\u043e\u0433\u043e 16-\u0442\u0438 \u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430. \u041f\u0440\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0443 \u043c\u0435\u043d\u044f \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0443\u0442\u0430\u043d\u0438\u0446\u0430 \u0432 \u0433\u043e\u043b\u043e\u0432\u0435, \u0438 \u0447\u0442\u043e\u0431\u044b \u0435\u0451 \u0440\u0430\u0437\u0432\u0435\u044f\u0442\u044c, \u043c\u043d\u0435 \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a \u0438 \u0432 \u043a\u0430\u043a\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 <strong>PipelinedMemoryBusSram<\/strong> \u0438 \u0447\u0442\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0432\u044b\u0434\u0430\u0435\u0442 \u0432 \u043e\u0442\u0432\u0435\u0442. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043e\u0441\u0432\u043e\u0438\u0442\u044c, \u043a\u0430\u043a \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0442\u0430\u043a\u0442\u043e\u0432\u0430\u044f \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u0432 SpinalHDL.<\/p>\n<p>\u041f\u043e \u0441\u0443\u0442\u0438, \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u0432 SpinalHDL \u043d\u0438\u0447\u0435\u043c \u043d\u0435 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. \u041f\u0440\u0438 \u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043c\u044b \u043f\u043e\u0434\u0430\u0435\u043c \u043d\u0430 \u0432\u0445\u043e\u0434 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0441\u0438\u043d\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441 \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u044c\u044e. \u041f\u0440\u0438 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u043c\u044b \u0434\u0435\u043b\u0430\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u0440\u0430\u0431\u043e\u0442\u044b \u2014 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u0435 \u043d\u0430\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0445 \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u043e\u0432 \u0438 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c \u0437\u0430 \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u0445 \u0447\u0430\u0441\u0442\u0435\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430, \u0442.\u00a0\u0435. \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0435 \u043d\u0430\u0441 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430. \u0412\u0435\u0440\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0441\u0438\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u043a\u0430\u043a \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0442\u0430\u043a \u0438 \u0432\u0441\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0446\u0435\u043b\u0438\u043a\u043e\u043c. \u041f\u0440\u0430\u0432\u0434\u0430, \u0432\u0435\u0440\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u043a\u0430\u043a \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u044f\u0434\u0440\u043e \u0441 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439, \u043a\u0440\u0430\u0439\u043d\u0435 \u0437\u0430\u0442\u0440\u0430\u0442\u043d\u043e \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0438 \u043a \u0442\u0430\u043a\u043e\u043c\u0443 \u0440\u0435\u0448\u0435\u043d\u0438\u044e \u043f\u0440\u0438\u0431\u0435\u0433\u0430\u044e\u0442 \u043d\u0435\u0447\u0430\u0441\u0442\u043e. \u0410 \u0432\u043e\u0442 \u043f\u0440\u043e\u0441\u0438\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044b \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438 \u043f\u043e\u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u044c \u0437\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u2014 \u044d\u0442\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u043e\u043b\u0435\u0437\u043d\u043e.<\/p>\n<p>\u041d\u0443 \u0447\u0442\u043e \u0436\u0435, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u0440\u043e\u0441\u0438\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u044e \u043d\u0430\u0448\u0443 \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u0443\u0435\u043c\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443-\u043d\u0430-\u043a\u0440\u0438\u0441\u0442\u0430\u043b\u043b\u0435 <strong>Murax<\/strong> \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0438 10000 \u0442\u0430\u043a\u0442\u043e\u0432 \u0438 \u043f\u043e\u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c \u0437\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u0430\u043c\u0438 \u043d\u0430 \u0441\u0442\u044b\u043a\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 <strong>PipelinedMemoryBusSram<\/strong> \u0438 <strong>mainBus<\/strong>, \u0438\u043b\u0438, \u0435\u0441\u043b\u0438 \u0431\u044b\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0442\u043e\u0447\u043d\u044b\u043c, \u0437\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u0430\u043c\u0438 <strong>sramCtrl.io.bus<\/strong> \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f <strong>system<\/strong>. \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0437\u0434\u0435\u0441\u044c \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u043a\u0430\u043a \u0434\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0434\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0445 \u043d\u0430\u0441 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0438\u0437 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u044b\u0442\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0442\u0435\u043d\u0434\u0430 \u0438 \u043a\u0430\u043a \u0438\u0445 \u0440\u0430\u0441\u043f\u0435\u0447\u0430\u0442\u0430\u0442\u044c \u0432 \u043b\u043e\u0433. \u041d\u043e \u043e\u0431 \u044d\u0442\u043e\u043c \u0447\u0443\u0442\u044c \u043f\u043e\u0437\u0436\u0435, \u0430 \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u043f\u0438\u0448\u0435\u043c \u0438\u0441\u043f\u044b\u0442\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0442\u0435\u043d\u0434 \u0434\u043b\u044f \u0432\u0441\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b:<\/p>\n<pre><code class=\"scala\">import spinal.sim._  import spinal.core.sim._  object Murax_karnix_Sim {    def main(args: Array[String]) {      SimConfig.withWave.compile{        val dut = new Murax(MuraxConfig.default(withXip = false).copy(                coreFrequency = 75.5 MHz,                onChipRamSize = 96 kB ,                \/\/pipelineMainBus = true,                onChipRamHexFile = \"src\/main\/c\/murax\/hello_world\/build\/hello_world.hex\"        ))        \/\/ More DUT preparations should be put here       dut      }.doSim {        dut =>        \/\/ Create our own clock domain using external signals mainClk and asyncReset        val myClockDomain = ClockDomain(dut.io.mainClk, dut.io.asyncReset)        \/\/ Fork process that drives our clock        myClockDomain.forkStimulus(period = 10)        \/\/ We are in reset state at the beginning        myClockDomain.assertReset()        \/\/ Simulate next 1K clock cycles        for(idx &lt;- 0 to 9999) {          if(idx > 1) { myClockDomain.deassertReset() }         myClockDomain.waitRisingEdge()          \/\/ \u2026 some printouts should be put here      }      }    }  } <\/code><\/pre>\n<p> \u041a\u0430\u043a \u0438 \u043f\u0440\u0438 \u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438, \u0437\u0434\u0435\u0441\u044c \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 <strong>Murax_karnix_Sim<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u0442\u043e\u0447\u043a\u043e\u0439 \u0432\u0445\u043e\u0434\u0430 \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u0441\u0431\u043e\u0440\u043e\u0447\u043d\u043e\u0439 \u0443\u0442\u0438\u043b\u0438\u0442\u044b SBT. <strong>SimConfig<\/strong> \u0437\u0430\u0434\u0430\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u2014 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440, \u043f\u043e\u043c\u0438\u043c\u043e \u043f\u0440\u043e\u0447\u0435\u0433\u043e, \u0431\u0443\u0434\u0435\u0442 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b \u0441 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u043e\u0439 (\u043d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u0442\u0443\u043b\u043e\u043c <strong>Verilator<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f). \u0414\u0430\u043b\u0435\u0435 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c <strong>myClockDomain<\/strong> \u0434\u043b\u044f \u0434\u043e\u043c\u0435\u043d\u0430 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0432 \u043d\u0435\u0439 \u0432 \u0446\u0438\u043a\u043b\u0435 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0435 \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u044b. \u0412 \u043d\u0443\u043b\u0435\u0432\u043e\u043c \u0442\u0430\u043a\u0442\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0441\u0431\u0440\u043e\u0441\u0430 \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u043c\u0435\u0442\u043e\u0434\u0430 <strong>myClockDomain.assertReset()<\/strong>, \u0430 \u0432 1-\u043c \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0442\u0430\u043a\u0442\u0430\u0445 \u0441\u0438\u0433\u043d\u0430\u043b \u0441\u0431\u0440\u043e\u0441\u0430 \u0441\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u043c\u0435\u0442\u043e\u0434\u0430 <strong>myClockDomain.deassertReset()<\/strong>. \u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0443\u0442\u0435\u043c \u0432\u044b\u0437\u043e\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 <strong>myClockDomain.waitRisingEdge()<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043a\u0430\u043a \u0431\u044b \u00ab\u0434\u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f\u00bb \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0434\u043d\u0435\u0433\u043e \u0444\u0440\u043e\u043d\u0442\u0430 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430, \u043d\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043e\u043d \u0436\u0435 \u0435\u0433\u043e \u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442. \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0432 \u044d\u0442\u043e\u043c \u0436\u0435 \u0446\u0438\u043a\u043b\u0435 \u043c\u044b \u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0435 \u043d\u0430\u0441 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u0432 \u043b\u043e\u0433.<\/p>\n<p>\u0420\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f, \u043a\u0430\u043a\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c. \u041f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b <strong>sramCtrl.io.bus<\/strong> \u0438 \u0435\u0433\u043e \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u0435 \u0447\u0430\u0441\u0442\u0438: <strong>.cmd.valid<\/strong>, <strong>.cmd.ready<\/strong>, <strong>.cmd.write<\/strong>, <strong>.cmd.address<\/strong>, <strong>.cmd.mask<\/strong>, <strong>.cmd.data<\/strong>, <strong>.rsp.valid<\/strong> \u0438 <strong>.rsp.data<\/strong> (\u0441\u043c. \u0433\u043b\u0430\u0432\u0443 \u00ab<em>17.2.1 \u0420\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 SRAM<\/em>\u00bb). \u0415\u0441\u043b\u0438 \u0437\u0430\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u0432 \u0444\u0430\u0439\u043b <strong>Murax.scala<\/strong>, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c, \u0447\u0442\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442  <strong>sramCtrl<\/strong> (\u0438 \u0432\u0441\u0435 \u0435\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u044b) \u0438\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f <strong>system<\/strong>. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0435 \u0438\u043c\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0445 \u043d\u0430\u0441 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0432\u0438\u0434: <strong>system.sramCtrl.io.bus.cmd.valid<\/strong>, <strong>system.sramCtrl.io.bus.cmd.ready<\/strong> \u0438 \u0442.\u00a0\u0434.<\/p>\n<p>\u041f\u043e\u043c\u0438\u043c\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430, \u043d\u0430\u043c \u0431\u044b\u043b\u043e \u0431\u044b \u043d\u0435 \u043f\u043b\u043e\u0445\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u043a\u0430\u043a\u0443\u044e \u043c\u0430\u0448\u0438\u043d\u043d\u0443\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u044f\u0434\u0440\u043e \u0438  \u043a\u0430\u043a\u043e\u0439 \u0430\u0434\u0440\u0435\u0441 \u0441\u0435\u0439\u0447\u0430\u0441 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d \u0432 \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u043a\u043e\u043c\u0430\u043d\u0434 <strong>PC<\/strong>. \u0412 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0435 <strong>VexRiscv<\/strong>, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0439 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u044f\u0434\u0440\u043e, \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u044b  <strong>lastStageInstruction<\/strong> \u0438 <strong>lastStagePc<\/strong>, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0435 \u043d\u0430\u0441 \u0434\u0430\u043d\u043d\u044b\u0435. \u0412 \u0421\u043d\u041a <strong>Murax<\/strong> \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 <strong>VexRiscv<\/strong> \u0438\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d \u0432 \u0442\u0443 \u0436\u0435 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f <strong>system<\/strong> \u0438 \u043f\u043e\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d \u043a\u0430\u043a <strong>cpu<\/strong>. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0435 \u043d\u0430\u0441 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u043c\u043e\u0436\u043d\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c: <strong>system.cpu.lastStagePc<\/strong> \u0438 <strong>system.cpu.lastStageInstruction<\/strong>.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f, \u043a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u0438\u0433\u043d\u0430\u043b\u0430\u043c \u0438\u0437 \u0438\u0441\u043f\u044b\u0442\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0442\u0435\u043d\u0434\u0430 \u0438 \u043a\u0430\u043a \u0438\u0445 \u0440\u0430\u0441\u043f\u0435\u0447\u0430\u0442\u0430\u0442\u044c \u0432 \u043b\u043e\u0433. \u0427\u0442\u043e\u0431\u044b \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0431\u044b\u043b\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0442\u0435\u043d\u0434\u0430, \u0438\u0445 \u043d\u0443\u0436\u043d\u043e \u00ab\u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c\u00bb \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u043c\u0435\u0442\u043e\u0434\u0430 <strong>.simPublic()<\/strong> \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432. \u0412\u044b\u0448\u0435 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <strong>dut<\/strong> \u0442\u0438\u043f\u0430 <strong>Murax<\/strong> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u0441\u043f\u044b\u0442\u0443\u0435\u043c\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430. \u0421\u043e\u0448\u043b\u0435\u043c\u0441\u044f \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u0451 \u0438 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u043c \u0432\u0441\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0435 \u043d\u0430\u0441 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"scala\">      \/\/ More DUT preparations should be put here       dut.system.cpu.lastStageInstruction.simPublic()        dut.system.cpu.lastStagePc.simPublic()        dut.system.sramCtrl.io.bus.cmd.valid.simPublic()        dut.system.sramCtrl.io.bus.cmd.write.simPublic()        dut.system.sramCtrl.io.bus.cmd.mask.simPublic()        dut.system.sramCtrl.io.bus.cmd.ready.simPublic()        dut.system.sramCtrl.io.bus.cmd.address.simPublic()        dut.system.sramCtrl.io.bus.cmd.data.simPublic()        dut.system.sramCtrl.io.bus.rsp.valid.simPublic()        dut.system.sramCtrl.io.bus.rsp.data.simPublic()         dut       }.doSim { <\/code><\/pre>\n<p> \u0427\u0442\u043e\u0431\u044b \u0440\u0430\u0441\u043f\u0435\u0447\u0430\u0442\u0430\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432, \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e <strong>println()<\/strong> \u0441 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u043e\u043c <strong>.format()<\/strong>. \u041f\u0440\u0438 \u0432\u044b\u0432\u043e\u0434\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b (\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e) \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u043a \u043d\u0443\u0436\u043d\u043e\u043c\u0443 \u0442\u0438\u043f\u0443: \u043a \u0447\u0438\u0441\u043b\u0443, \u043a \u0431\u0443\u043b\u0435\u0432\u043e\u043c\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e \u0438\u043b\u0438 \u043a \u0441\u0442\u0440\u043e\u043a\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432. \u0412\u044b\u0432\u043e\u0434 \u0432 \u043b\u043e\u0433 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0445 \u043d\u0430\u0441 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"scala\">            println(\"[cycle: %8d, pc: %08x, instr: %08x] dut.system.sramCtrl: cmd.valid = %s, cmd.ready = %s, cmd.write = %s, cmd.mask  = %08x, cmd.address = %08x, cmd.data = %08x, rsp.valid = %s, rsp.data = %08x\".format(                idx,                dut.system.cpu.lastStagePc.toLong,                dut.system.cpu.lastStageInstruction.toLong,                dut.system.sramCtrl.io.bus.cmd.valid.toBoolean,                dut.system.sramCtrl.io.bus.cmd.ready.toBoolean,                dut.system.sramCtrl.io.bus.cmd.write.toBoolean,                dut.system.sramCtrl.io.bus.cmd.mask.toLong,                dut.system.sramCtrl.io.bus.cmd.address.toLong,                dut.system.sramCtrl.io.bus.cmd.data.toLong,                dut.system.sramCtrl.io.bus.rsp.valid.toBoolean,                dut.system.sramCtrl.io.bus.rsp.data.toLong              )) <\/code><\/pre>\n<p> \u042d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u0446\u0438\u043a\u043b\u0430, \u043f\u043e\u0441\u043b\u0435 \u00ab\u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f\u00bb \u043f\u0435\u0440\u0435\u0434\u043d\u0435\u0433\u043e \u0444\u0440\u043e\u043d\u0442\u0430 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430.<\/p>\n<p> \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u044d\u0442\u043e\u0433\u043e \u0443\u0436\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044e \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. \u041d\u043e, \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c 10000 \u0441\u0442\u0440\u043e\u043a \u043b\u043e\u0433\u0430 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u0432\u043d\u0435\u0441\u0442\u0438 \u0432 \u043a\u043e\u0434 \u0443\u0441\u043b\u043e\u0432\u0438\u0435, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u044e\u0449\u0435\u0435 \u0432\u044b\u0432\u043e\u0434 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0435\u0433\u043e \u043d\u0430\u0441 \u043c\u043e\u043c\u0435\u043d\u0442\u0430. \u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u044f 32-\u0445 \u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430 \u0438\u0437 SRAM. \u0427\u0442\u043e\u0431\u044b \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u0432\u044b\u0432\u043e\u0434, \u0432\u0432\u0435\u0434\u0435\u043c \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 \u044f\u0447\u0435\u0439\u043a\u0438 \u043f\u0430\u043c\u044f\u0442\u0438, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0443\u043f. \u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u043e\u0431\u043b\u0430\u0441\u0442\u044c SRAM \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 <strong>0x90000000<\/strong> \u2014 <strong>0x900400ff<\/strong>.<\/p>\n<pre><code class=\"scala\">        if(!dut.system.sramCtrl.io.bus.cmd.write.toBoolean &amp;&amp;             dut.system.sramCtrl.io.bus.cmd.address.toLong >= 0x90000000l &amp;&amp;             dut.system.sramCtrl.io.bus.cmd.address.toLong &lt;= 0x900400ffl) {               println(\"...\".format(                \u2026             ))          } <\/code><\/pre>\n<p> \u0423\u0441\u043b\u043e\u0432\u0438\u0435 \u0432\u0438\u0434\u0430 <strong>!dut.system.sramCtrl.io.bus.cmd.write.toBoolean<\/strong> \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0447\u0442\u043e \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u0442\u0430\u043a\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0447\u0442\u0435\u043d\u0438\u044f (\u0442.\u00a0\u0435. \u00ab<strong>\u043d\u0435 \u0437\u0430\u043f\u0438\u0441\u044c<\/strong>\u00bb).<\/p>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u0435\u0441\u044c \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0432 \u0441\u0430\u043c\u044b\u0439 \u043a\u043e\u043d\u0435\u0446 \u0444\u0430\u0439\u043b\u0430 <strong>Murax.scala<\/strong> \u0438 \u0433\u043e\u0442\u043e\u0432\u0438\u043c\u0441\u044f \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044e.<\/p>\n<p> \u041f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043e\u0435-\u0447\u0442\u043e \u0435\u0449\u0435 \u2014 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0421\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u00abhello_world\u00bb \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0432 \u043f\u0435\u0440\u0432\u044b\u0445 \u0446\u0438\u043a\u043b\u0430\u0445 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0441\u0440\u0430\u0437\u0443 \u0431\u044b\u043b \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043e\u0431\u043b\u0430\u0441\u0442\u0438 SRAM \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435. \u0418\u043d\u0430\u0447\u0435, \u043d\u0430\u0448\u0430 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u0438\u0437 10000 \u0442\u0430\u043a\u0442\u043e\u0432 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0441\u044f \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0435\u0435 \u043d\u0430\u0441 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0438 \u0432 \u043b\u043e\u0433\u0435 \u043c\u044b \u043d\u0438\u0447\u0435\u0433\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0433\u043e \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043c. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434 \u0432 \u0444\u0430\u0439\u043b <strong>main.c<\/strong>:<\/p>\n<pre><code class=\"cpp\">        uart_config.clockDivider = SYSTEM_CLOCK_HZ \/ UART_BAUD_RATE \/ rxSamplePerBit - 1;          uart_applyConfig(UART, &amp;uart_config);           char a[8];          a[0] = *(char*)(0x90000000 + 3);          a[1] = 0;          println(a);           if(sram_test_write_random_ints() == 0) { <\/code><\/pre>\n<p> \u0422\u043e \u0435\u0441\u0442\u044c \u0441\u0447\u0438\u0442\u0430\u0435\u043c <strong>\u043e\u0434\u0438\u043d \u0431\u0430\u0439\u0442<\/strong> \u0438\u0437 \u044f\u0447\u0435\u0439\u043a\u0438 <strong>0x90000003<\/strong>. \u0417\u0434\u0435\u0441\u044c \u044f \u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u043e \u0441\u0442\u0430\u0432\u043b\u044e \u0430\u0434\u0440\u0435\u0441 \u043d\u0435 \u043a\u0440\u0430\u0442\u043d\u044b\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0434\u0432\u043e\u0439\u043a\u0438 \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043a\u0430\u043a \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043b\u0438 \u044d\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u0438\u043b\u0438 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435. \u0422\u0430\u043a\u0436\u0435 \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442, \u043a\u0430\u043a\u0438\u0435 \u0431\u0438\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u0432 \u0441\u0438\u0433\u043d\u0430\u043b\u0435 \u043c\u0430\u0441\u043a\u0438 <strong>.io.bus.cmd.mask<\/strong>.<\/p>\n<p>\u041a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c \u0421\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <strong>make clean &amp;&amp; make<\/strong> \u0438\u0437 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 <strong>.\/src\/main\/c\/murax\/hello_world:<\/strong><\/p>\n<pre><code>rz@devbox:~\/VexRiscv\/src\/main\/c\/murax\/hello_world$ make clean &amp;&amp; make  ... Memory region         Used Size  Region Size  %age Used               RAM:       21104 B        96 KB     21.47%  \/opt\/riscv\/\/bin\/riscv64-unknown-elf-objcopy -O ihex build\/hello_world.elf build\/hello_world.hex  \/opt\/riscv\/\/bin\/riscv64-unknown-elf-objdump -S -d build\/hello_world.elf > build\/hello_world.asm  \/opt\/riscv\/\/bin\/riscv64-unknown-elf-objcopy -O verilog build\/hello_world.elf build\/hello_world.v <\/code><\/pre>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 <strong>.\/scripts\/Murax\/Karnix<\/strong> \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<pre><code>rz@devbox:~\/VexRiscv\/scripts\/Murax\/Karnix$ (cd ..\/..\/..\/; sbt \"runMain vexriscv.demo.Murax_karnix_Sim\")<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0441\u0431\u043e\u0440\u043a\u0430 \u043f\u0440\u043e\u0448\u043b\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0438 \u043f\u0440\u043e\u0435\u043a\u0442 \u043e\u0442\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u0441\u044f \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0432 Verilator-\u0435, \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f:<\/p>\n<pre><code>[info] welcome to sbt 1.6.0 (Ubuntu Java 11.0.9.1)  [info] loading settings for project vexriscv-build from plugins.sbt ...  [info] loading project definition from \/home\/rz\/VexRiscv\/project  [info] loading settings for project root from build.sbt ...  [info] set current project to VexRiscv (in build file:\/home\/rz\/VexRiscv\/)  [info] running (fork) vexriscv.demo.Murax_karnix_Sim  [info] [Runtime] SpinalHDL v1.10.1    git head : 2527c7c6b0fb0f95e5e1a5722a0be732b364ce43  [info] [Runtime] JVM max memory : 8294.0MiB  [info] [Runtime] Current date : 2024.03.17 00:27:40  [info] [Progress] at 0.000 : Elaborate components  [info] [Warning] This VexRiscv configuration is set without software ebreak instruction support. Some software may rely on it (ex: Rust). (This isn't related to JTAG ebreak)  [info] [Warning] This VexRiscv configuration is set without illegal instruction catch support. Some software may rely on it (ex: Rust)  [info] [Progress] at 2.478 : Checks and transforms  [info] [Progress] at 3.453 : Generate Verilog  [info] [Warning] toplevel\/system_cpu\/RegFilePlugin_regFile : Mem[32*32 bits].readAsync can only be write first into Verilog  [info] [Warning] toplevel\/system_cpu\/RegFilePlugin_regFile : Mem[32*32 bits].readAsync can only be write first into Verilog  [info] [Warning] 195 signals were pruned. You can call printPruned on the backend report to get more informations.  [info] [Done] at 4.903  [info] [Progress] Simulation workspace in \/home\/rz\/VexRiscv\/.\/simWorkspace\/Murax  [info] [Progress] Verilator compilation started  [info] [info] Found cached verilator binaries  [info] [Progress] Verilator compilation done in 1373.702 ms  [info] [Progress] Start Murax test simulation with seed 923932021  [info] [cycle:     4885, pc: 80001bac, instr: 0037c783] dut.system.sramCtrl: cmd.valid = true, cmd.ready = false, cmd.write = false, cmd.mask = 00000008, cmd.address = 90000003, cmd.data = 88888888, rsp.valid = false, rsp.data = 00000000  [info] [cycle:     4886, pc: 80001bac, instr: 0037c783] dut.system.sramCtrl: cmd.valid = true, cmd.ready = false, cmd.write = false, cmd.mask = 00000008, cmd.address = 90000003, cmd.data = 88888888, rsp.valid = false, rsp.data = 00000000  [info] [cycle:     4887, pc: 80001bac, instr: 0037c783] dut.system.sramCtrl: cmd.valid = true, cmd.ready = false, cmd.write = false, cmd.mask = 00000008, cmd.address = 90000003, cmd.data = 88888888, rsp.valid = false, rsp.data = 00000000  [info] [cycle:     4888, pc: 80001bac, instr: 0037c783] dut.system.sramCtrl: cmd.valid = true, cmd.ready = true, cmd.write = false, cmd.mask = 00000008, cmd.address = 90000003, cmd.data = 88888888, rsp.valid = false, rsp.data = 00000000  [info] [Done] Simulation done in 1645.485 ms  [success] Total time: 14 s, completed Mar 17, 2024, 12:27:49 AM <\/code><\/pre>\n<p> \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0447\u0435\u0442\u044b\u0440\u0435 \u0441\u0442\u0440\u043e\u043a\u0438, \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0436\u0438\u0440\u043d\u044b\u043c \u0448\u0440\u0438\u0444\u0442\u043e\u043c \u2014 \u044d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c \u0432\u044b\u0432\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>println()<\/strong> \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438. \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0438\u0437 \u044f\u0447\u0435\u0439\u043a\u0438 \u0441 \u0430\u0434\u0440\u0435\u0441\u043e\u043c <strong>0x90000003<\/strong> \u0431\u044b\u043b\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u0437\u0430 \u0447\u0435\u0442\u044b\u0440\u0435 \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0445 \u0442\u0430\u043a\u0442\u0430 \u2014 \u0442\u0430\u043a \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 <strong>PipelinedMemoryBusSram<\/strong>.<\/p>\n<p>\u0418\u0437 \u0432\u044b\u0432\u043e\u0434\u0430 \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e \u0447\u0442\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u043b\u0430 \u043c\u0430\u0448\u0438\u043d\u043d\u0430\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0441 \u043a\u043e\u0434\u043e\u043c <strong>0x0037c783<\/strong> \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u0430\u044f \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <strong>0x80001bac<\/strong>. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0437\u0430\u0433\u043b\u044f\u043d\u0435\u043c \u0432 \u0444\u0430\u0439\u043b <strong>build\/hello_world.asm<\/strong> \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u00abhello_world\u00bb \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u0437\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f. \u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u044d\u0442\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430:<\/p>\n<pre><code>        a[0] = *(char*)(0x90000000 + 3);  80001ba8:       900007b7                lui     a5,0x90000  80001bac:       0037c783                lbu     a5,3(a5) # 90000003 &lt;_ram_heap_end+0xffe8003> <\/code><\/pre>\n<p> \u0416\u0438\u0440\u043d\u044b\u0439 \u0448\u0440\u0438\u0444\u0442\u043e\u043c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f: <strong>lbu a5,3(a5)<\/strong> \u2014 \u00abload byte unsigned\u00bb, \u043e\u043d\u0430 \u0447\u0438\u0442\u0430\u0435\u0442 \u043e\u0434\u0438\u043d \u0431\u0430\u0439\u0442 (\u0431\u0435\u0437 \u0437\u043d\u0430\u043a\u0430) \u0438\u0437 \u044f\u0447\u0435\u0439\u043a\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0441\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c 3 \u0431\u0430\u0439\u0442\u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0430\u0434\u0440\u0435\u0441\u0430, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0433\u043e\u0441\u044f \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 <strong>a5<\/strong>, \u0438 \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u044d\u0442\u043e\u0442 \u0436\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 <strong>a5<\/strong>.<\/p>\n<p>\u0418\u0437 \u043b\u043e\u0433\u0430 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u0442\u0430\u043a\u0436\u0435 \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 \u0441\u0438\u0433\u043d\u0430\u043b \u043c\u0430\u0441\u043e\u043a \u0431\u044b\u043b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <strong>0x00000008<\/strong>, \u0442\u043e \u0435\u0441\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0431\u0438\u0442 \u0432 3-\u0435\u043c \u0440\u0430\u0437\u0440\u044f\u0434\u0435, \u0447\u0442\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0443 \u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 (\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438) \u0447\u0438\u0442\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e 3-\u0439 \u0431\u0430\u0439\u0442. \u0422\u0435\u043a\u0443\u0449\u0430\u044f \u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430  <strong>PipelinedMemoryBusSram<\/strong> \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043c\u0430\u0441\u043e\u043a \u043f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438, \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442 \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u0432\u044b\u0434\u0430\u0435\u0442 \u0432\u0441\u0435 32 \u0431\u0438\u0442\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u0447\u0442\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0446\u0435\u043b\u044b\u0445 \u0447\u0435\u0442\u044b\u0440\u0435 \u0442\u0430\u043a\u0442\u0430. \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043f\u0440\u0438 \u0431\u0430\u0439\u0442\u043e\u0432\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u0445 \u0442\u0430\u043a\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u043c \u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u0434\u043e \u0434\u0432\u0443\u0445 \u0442\u0430\u043a\u0442\u043e\u0432. \u0416\u0435\u043b\u0430\u044e\u0449\u0438\u0435 \u0443\u043b\u0443\u0447\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 <strong>PipelinedMemoryBusSram<\/strong> \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0438\u0441\u044b\u043b\u0430\u0442\u044c \u043c\u043d\u0435 PR \u043d\u0430 Github-\u0435 \u0438\u043b\u0438 \u043f\u0430\u0442\u0447\u0438 \u043f\u043e \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u0435.<\/p>\n<p> \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u0432\u0441\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0442\u0430\u043a\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u0430\u043d \u0432 \u0444\u0430\u0439\u043b <strong>.\/simWorkspace\/Murax\/test\/wave.vcd<\/strong> , \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0443\u0442\u0438\u043b\u0438\u0442\u043e\u0439 <strong>GTKWave<\/strong> \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code>rz@devbox:~\/VexRiscv\/scripts\/Murax\/Karnix$ gtkwave ..\/..\/..\/simWorkspace\/Murax\/test\/wave.vcd <\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/8ea\/7c6\/6ea\/8ea7c66eacc646e06cde6f194d56badb.png\" alt=\"\u0420\u0438\u0441. 36. \u0412\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0432 \u0432\u0438\u0434\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c \u0432 GTKWave.\" title=\"\u0420\u0438\u0441. 36. \u0412\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0432 \u0432\u0438\u0434\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c \u0432 GTKWave.\" width=\"1910\" height=\"1025\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8ea\/7c6\/6ea\/8ea7c66eacc646e06cde6f194d56badb.png\"\/><\/p>\n<div><figcaption><em>\u0420\u0438\u0441. 36. \u0412\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0432 \u0432\u0438\u0434\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c \u0432 GTKWave.<\/em><\/figcaption><\/div>\n<\/figure>\n<p>\u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u0432 (<strong>4885<\/strong> &#8212; <strong>4821<\/strong>) = <strong>64<\/strong> \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0445 \u0446\u0438\u043a\u043b\u0430 \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u0435\u043c, \u0447\u0442\u043e \u044f\u0434\u0440\u043e VexRiscv \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0445 \u0442\u0430\u043a\u0442\u043e\u0432 \u043d\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e.<\/p>\n<p><a class=\"anchor\" name=\"19\" id=\"19\"><\/a><\/p>\n<h2>19. \u0411\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440: VexRiscvWithHUB12ForKarnix<\/h2>\n<p> \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043c\u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b-\u043d\u0430-\u043a\u0440\u0438\u0441\u0442\u0430\u043b\u043b\u0435 \u043d\u0430 \u0431\u0430\u0437\u0435 \u0432\u0441\u0451 \u0442\u043e\u0439-\u0436\u0435 Murax, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u043f\u043e\u043b\u043d\u0435 \u0433\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u0445. \u042d\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u043d\u0430\u0437\u0432\u0430\u043b <strong>VexRiscvWithHUB12ForKarnix<\/strong>. \u0414\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0431\u044b\u043b \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441\u043e <a href=\"https:\/\/static.chipdip.ru\/lib\/244\/DOC004244754.pdf\" rel=\"noopener noreferrer nofollow\">\u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043d\u044b\u043c\u0438 \u043c\u0430\u0442\u0440\u0438\u0446\u0430\u043c\u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 HUB12 \u0438 HUB75e<\/a> \u043f\u043e \u0435\u0434\u0438\u043d\u043e\u043c\u0443 \u043d\u0430\u0431\u043e\u0440\u0443 \u0441\u0438\u0433\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u043b\u0438\u043d\u0438\u0439. \u0421\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043d\u044b\u0435 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u044d\u0442\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u043e\u0441\u043d\u0430\u0449\u0435\u043d\u044b 16-\u0442\u0438 \u043f\u0438\u043d\u043e\u0432\u044b\u043c \u0448\u0442\u044b\u0440\u0435\u0432\u044b\u043c \u0440\u0430\u0437\u044a\u0435\u043c\u043e\u043c IDC-16 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0441\u0434\u0432\u0438\u0433\u043e\u0432\u044b\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b. \u042d\u0442\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0434\u043b\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u043c\u0430\u0442\u0440\u0438\u0446\u0435. \u041a\u0438\u0442\u0430\u0439\u0441\u043a\u0430\u044f \u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043d\u044b\u0445 \u043c\u0430\u0442\u0440\u0438\u0446 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u00abHUB\u00bb \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u0432, \u0441\u0434\u0432\u0438\u0433\u043e\u0432\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432, \u0441 \u043d\u0435\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438 \u043d\u0435\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u043c \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432. \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441 \u0442\u0430\u043a\u0438\u043c\u0438 \u043c\u0430\u0442\u0440\u0438\u0446\u0430\u043c\u0438, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0442\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u0440\u0430\u0437\u044a\u0435\u043c\u043e\u0432 \u2014 \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0442\u0438\u043f \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u0440\u0430\u0437\u043d\u044b\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b. \u041e\u0431\u043e\u0439\u0442\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043d\u0435\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u043c\u0430\u0442\u0440\u0438\u0446 \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u0443\u0442\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u0432 \u041f\u041b\u0418\u0421 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u2014 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 HUB \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0439 \u043c\u043d\u043e\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 HUB, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0439 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u043f\u0435\u0440\u0435\u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 \u0441\u0438\u0433\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u043b\u0438\u043d\u0438\u0438 \u0438\u0437 \u043e\u0431\u0449\u0435\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 (16 \u043b\u0438\u043d\u0438\u0439 GPIO) \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0439 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0441\u0434\u0432\u0438\u0433\u043e\u0432\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432. \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0432 \u043d\u0430\u0431\u043e\u0440\u0442\u043d\u043e\u0439 RAM \u0444\u0440\u0435\u0439\u043c\u0431\u0443\u0444\u0435\u0440\u0430 \u0438 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e, \u0441 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e (\u043e\u043f\u044b\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e \u043c\u0430\u043a\u0441\u0438\u043c\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 \u0441\u0434\u0432\u0438\u0433\u043e\u0432\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0439 \u043d\u0430\u043c\u0438 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 ~20 \u041c\u0413\u0446), \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0438\u0445 \u0432 \u043c\u0430\u0442\u0440\u0438\u0446\u0443. \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u043c\u0443 \u041f\u041e \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0444\u0440\u0435\u0439\u043c\u0431\u0443\u0444\u0435\u0440\u0430, \u0438\u043c\u0435\u044e\u0449\u0435\u0433\u043e \u043b\u0438\u043d\u0435\u0439\u043d\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443. \u0418\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u044f\u0434\u0440\u043e \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u0438 \u043d\u0435 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u043e \u0432 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u043c\u0430\u0442\u0440\u0438\u0446\u0435.  \u041f\u0440\u043e\u0435\u043a\u0442 (\u0438 \u0438\u0437\u0434\u0435\u043b\u0438\u0435 \u043d\u0430 \u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u0435) \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u043d\u043e\u043c \u0432\u0438\u0434\u0435 \u0438\u043c\u0435\u043b \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435.<\/p>\n<p>\u041d\u043e\u0432\u043e\u0433\u043e\u0434\u043d\u0435\u0435 <a href=\"https:\/\/www.youtube.com\/watch?v=xr0pdGuJbXQ\" rel=\"noopener noreferrer nofollow\">\u0432\u0438\u0434\u0435\u043e<\/a>, \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0430 \u0432 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b <strong>VexRiscvWithHUB12ForKarnix<\/strong>. \u0412\u0441\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u043a\u043e\u0434\u044b \u0438 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438, \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u043d\u0430 \u0432\u0438\u0434\u0435\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0438\u0437 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435:<\/p>\n<p><a href=\"https:\/\/github.com\/Fabmicro-LLC\/VexRiscvWithHUB12ForKarnix.git\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/Fabmicro-LLC\/VexRiscvWithHUB12ForKarnix.git<\/a><\/p>\n<p> \u0412 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 VexRiscvWithHUB12ForKarnix \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0438 (\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b):<\/p>\n<ul>\n<li>\n<p>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 SRAM \u0444\u043e\u0440\u043c\u0430\u0442\u0430 16&#215;256\u041a.<\/p>\n<ul>\n<li>\n<p>\u0424\u0430\u0439\u043b: <strong>.\/src\/main\/scala\/spinal\/lib\/mem\/Sram.scala<\/strong><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 (PLIC0).<\/p>\n<ul>\n<li>\n<p>\u0424\u0430\u0439\u043b: <strong>.\/src\/main\/scala\/mylib\/MicroPLIC.scala<\/strong><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u0414\u0432\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u043e\u0440\u0442\u0430 (UART0 \u0438 UART1) \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u043d\u0430 TX \u0438 RX.<\/p>\n<ul>\n<li>\n<p>\u0424\u0430\u0439\u043b: <strong>.\/src\/main\/scala\/spinal\/lib\/com\/uart\/Apb3UartCtrl.scala<\/strong><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u0414\u0432\u0430 32-\u0442\u0438 \u0431\u0438\u0442\u043d\u044b\u0445 \u0442\u0430\u0439\u043c\u0435\u0440\u0430 (TMER0 \u0438 TIMER1) \u0441 32-\u0445 \u0431\u0438\u0442\u043d\u044b\u043c \u043f\u0440\u0435\u0441\u043a\u0435\u0439\u043b\u0435\u0440\u043e\u043c \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u043f\u043e \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044e \u0441\u0447\u0435\u0442\u0430.<\/p>\n<ul>\n<li>\n<p>\u0424\u0430\u0439\u043b: <strong>.\/src\/main\/scala\/mylib\/Apb3Timer.scala<\/strong><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>32-\u0445 \u0431\u0438\u0442\u043d\u044b\u0439 \u0428\u0418\u041c \u0442\u0430\u0439\u043c\u0435\u0440 (PWM0).<\/p>\n<ul>\n<li>\n<p>\u0424\u0430\u0439\u043b: <strong>.\/src\/main\/scala\/spinal\/lib\/bus\/simple\/PWM.scala<\/strong><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u0421\u0442\u043e\u0440\u043e\u0436\u0435\u0432\u043e\u0439 \u0442\u0430\u0439\u043c\u0435\u0440 (WD0).<\/p>\n<ul>\n<li>\n<p>\u0424\u0430\u0439\u043b: <strong>.\/src\/main\/scala\/mylib\/Apb3WatchDog.scala<\/strong><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u041c\u0430\u0448\u0438\u043d\u043d\u044b\u0439 1\u043c\u043a\u0441 \u0442\u0430\u0439\u043c\u0435\u0440 (MTIME0) \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0439 \u0447\u0435\u0440\u0435\u0437 CSR.<\/p>\n<ul>\n<li>\n<p>\u0424\u0430\u0439\u043b: <strong>.\/src\/main\/scala\/mylib\/MachineTimer.scala<\/strong><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u041f\u043e\u0440\u0442 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u043b\u0438\u043d\u0438\u0439 \u0432\u0432\u043e\u0434\u0430\/\u0432\u044b\u0432\u043e\u0434\u0430 \u043d\u0430 32 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 (GPIO0).<\/p>\n<ul>\n<li>\n<p>\u0424\u0430\u0439\u043b: <strong>${SpinalHDL}.\/lib\/src\/main\/scala\/spinal\/lib\/io\/Gpio.scala<\/strong><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0448\u0438\u043d\u044b I2C (I2C0).<\/p>\n<ul>\n<li>\n<p>\u0424\u0430\u0439\u043b: <strong>.\/src\/main\/scala\/mylib\/MicroI2C.scala<\/strong><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>SPI \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u043d\u043e\u0433\u043e\u043a\u0430\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u0426\u0410\u041f \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u043f\u043b\u0430\u0442\u044b \u00ab\u041a\u0430\u0440\u043d\u043e\u00bb (AUDIODAC0).<\/p>\n<ul>\n<li>\n<p>\u0424\u0430\u0439\u043b: <strong>.\/src\/main\/scala\/spinal\/lib\/com\/spi\/Apb3SpiMasterCtrl.scala<\/strong><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043d\u044b\u0445 \u043c\u0430\u0442\u0440\u0438\u0446 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430 HUB12 \u0438 HUB75e (HUB0) \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u043a \u043f\u043b\u0430\u0442\u0435 \u00ab\u041a\u0430\u0440\u043d\u043e\u00bb \u0447\u0435\u0440\u0435\u0437 16 \u043b\u0438\u043d\u0438\u0439 GPIO.<\/p>\n<ul>\n<li>\n<p> \u0424\u0430\u0439\u043b: <strong>.\/src\/main\/scala\/mylib\/HUB.scala<\/strong><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 FastEthernet (MAC0);<\/p>\n<ul>\n<li>\n<p>\u0424\u0430\u0439\u043b: <strong>.\/src\/main\/scala\/mylib\/Apb3MacEthCtrl.scala<\/strong><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p> \u0412 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 <strong>VexRiscvWithHUB12ForKarnix<\/strong> \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438:<\/p>\n<ul>\n<li>\n<p>\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 SRAM \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u043b\u043e\u043a\u0430 SRAM \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u00ab\u043a\u0443\u0447\u0438\u00bb.<\/p>\n<\/li>\n<li>\n<p>\u0412\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u043e\u0439 EEPROM \u043f\u043e \u0448\u0438\u043d\u0435 I2C \u0434\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a (\u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 IP \u0430\u0434\u0440\u0435\u0441\u0430, \u0442\u0438\u043f\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0439 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0438 \u0435\u0451 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435).<\/p>\n<\/li>\n<li>\n<p>\u0414\u0440\u0430\u0439\u0432\u0435\u0440 MAC \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0441\u0442\u0435\u043a\u0430 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432 TCP\/IP \u043d\u0430 \u0431\u0430\u0437\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <a href=\"https:\/\/en.wikipedia.org\/wiki\/LwIP\" rel=\"noopener noreferrer nofollow\">lwIP<\/a> (Light Weight IP). \u041f\u043e\u043b\u043d\u044b\u0439 \u0441\u0442\u0435\u043a \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432, \u0432\u043a\u043b\u044e\u0447\u0430\u044f ARP, IP, ICMP, UDP, TCP, HTTP \u0438 DHCP, \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043e\u043a\u043e\u043b\u043e 45\u041a\u0411 \u041e\u0417\u0423. \u0421\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441\u0442\u0435\u043a\u0430 \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 ARP, IP, ICMP, UDP \u0438 DHCP \u0443\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u0432 25\u041a\u0411 \u041e\u0417\u0423.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 Modbus\/RTU (\u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0440\u0442) \u0438 Modbus\/UDP (\u043f\u043e\u0432\u0435\u0440\u0445 IP).<\/p>\n<\/li>\n<li>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430 \u0441\u043e \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043d\u044b\u043c\u0438 \u043c\u0430\u0442\u0440\u0438\u0446\u0430\u043c\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430 HUB12 \u0438 HUB75e \u0447\u0435\u0440\u0435\u0437 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0439 \u0432\u0438\u0434\u0435\u043e \u0444\u0440\u0435\u0439\u043c\u0431\u0443\u0444\u0435\u0440.<\/p>\n<\/li>\n<li>\n<p>\u0414\u0440\u0430\u0439\u0432\u0435\u0440 \u0441 \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0431\u0443\u0444\u0435\u0440\u043e\u043c \u0434\u043b\u044f \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0437\u0432\u0443\u043a\u0430 \u043d\u0430 \u0426\u0410\u041f \u0447\u0435\u0440\u0435\u0437 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 AUDIODAC0.  <\/p>\n<\/li>\n<li>\n<p>\u0412 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b Modbus \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0431\u043b\u043e\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0430\u0443\u0434\u0438\u043e \u0426\u0410\u041f \u0438 \u0432\u0438\u0434\u0435\u043e \u0432\u043e \u0444\u0440\u0435\u0439\u043c\u0431\u0443\u0444\u0435\u0440 HUB \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0440\u0438 \u0441\u0438\u043d\u0442\u0435\u0437\u0435 \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b:<\/p>\n<pre><code>Info: Device utilisation: Info:             TRELLIS_IO:   100\/  197    50% Info:                   DCCA:     3\/   56     5% Info:                 DP16KD:    55\/   56    98% Info:             MULT18X18D:     4\/   28    14% Info:                 ALU54B:     0\/   14     0% Info:                EHXPLLL:     1\/    2    50% Info:                EXTREFB:     0\/    1     0% Info:                   DCUA:     0\/    1     0% Info:              PCSCLKDIV:     0\/    2     0% Info:                IOLOGIC:     0\/  128     0% Info:               SIOLOGIC:     0\/   69     0% Info:                    GSR:     0\/    1     0% Info:                  JTAGG:     0\/    1     0% Info:                   OSCG:     0\/    1     0% Info:                  SEDGA:     0\/    1     0% Info:                    DTR:     0\/    1     0% Info:                USRMCLK:     0\/    1     0% Info:                CLKDIVF:     0\/    4     0% Info:              ECLKSYNCB:     0\/   10     0% Info:                DLLDELD:     0\/    8     0% Info:                 DDRDLL:     0\/    4     0% Info:                DQSBUFM:     0\/    8     0% Info:        TRELLIS_ECLKBUF:     0\/    8     0% Info:           ECLKBRIDGECS:     0\/    2     0% Info:                   DCSC:     0\/    2     0% Info:             TRELLIS_FF:  3690\/24288    15% Info:           TRELLIS_COMB: 16880\/24288    69% Info:           TRELLIS_RAMW:  1064\/ 3036    35% Info: Max frequency for clock 'io_lan_rxclkInfo: Max frequency for clock '\" class=\"formula inline\">glbnetTRELLIS_IO_IN': 100.35 MHz (PASS at 25.00 MHz) Info: Max frequency for clock             'core_pll_CLKOP': 82.24 MHz (PASS at 75.00 MHz)<\/code><\/pre>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e \u043c\u0430\u043a\u0441\u0438\u043c\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 \u044f\u0434\u0440\u0430, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u0440\u0438 \u043f\u043e\u043b\u043d\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0435, \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 <strong>60 \u041c\u0413\u0446<\/strong> \u0434\u043b\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c 6-\u0433\u043e \u00ab\u0433\u0440\u0435\u0439\u0434\u0430\u00bb \u0438 <strong>80 \u041c\u0413\u0446<\/strong> \u0434\u043b\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c 8-\u0433\u043e \u00ab\u0433\u0440\u0435\u0439\u0434\u0430\u00bb.<\/p>\n<p> \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0432\u0441\u0435\u0439 \u043c\u043e\u0449\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0432\u044b\u0448\u0435\u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 \u00ab\u041a\u0430\u0440\u043d\u043e\u00bb, \u043c\u043d\u043e\u044e \u0431\u044b\u043b\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0441\u0442\u0440\u0438\u043c\u0438\u043d\u0433\u043e\u0432\u043e\u0435 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u0432\u0438\u0434\u0435\u043e \u0440\u043e\u043b\u0438\u043a\u0430 \u00abBad apple\u00bb \u0441 \u0432\u044b\u0432\u043e\u0434\u043e\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043d\u0443\u044e \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c 80&#215;40 \u043f\u0438\u043a\u0441\u0435\u043b\u043e\u0432 (\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 HUB75e) \u0438 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u043d\u0438\u0435\u043c \u0437\u0432\u0443\u043a\u0430 \u043d\u0430 \u043e\u0434\u0438\u043d \u0438\u0437 \u0426\u0410\u041f, \u0440\u0430\u0441\u043f\u0430\u044f\u043d\u043d\u044b\u0445 \u043d\u0430 \u043f\u043b\u0430\u0442\u0435. \u0421\u0445\u0435\u043c\u0430 \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0434\u043b\u044f \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0430 \u043d\u0430 \u0440\u0438\u0441. 37.<\/p>\n<p>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0433\u043e \u0432\u0438\u0434\u0435\u043e\u0440\u043e\u043b\u0438\u043a\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<ol>\n<li>\n<p>\u0412\u0438\u0434\u0435\u043e\u0440\u043e\u043b\u0438\u043a \u0431\u044b\u043b \u0432\u044b\u043a\u0430\u0447\u0430\u043d \u0441 Youtube, \u043f\u0435\u0440\u0435\u0436\u0430\u0442 \u0443\u0442\u0438\u043b\u0438\u0442\u043e\u0439 <strong>FFMPEG<\/strong> \u0432 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 80&#215;40 \u0438 \u0437\u0430\u043f\u0438\u0441\u0430\u043d \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 BGR8. \u0417\u0432\u0443\u043a\u043e\u0432\u043e\u0439 \u0440\u044f\u0434 \u0431\u044b\u043b \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 PCM_S16LE \u0438 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u0438\u0437\u0430\u0446\u0438\u0438 16\u043a\u0413\u0446.<\/p>\n<\/li>\n<li>\n<p>\u0412 \u0438\u043c\u0435\u044e\u0449\u0438\u0439\u0441\u044f Perl \u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u0430\u0442\u0440\u0438\u0446\u0430\u043c\u0438 \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 Modbus \u0431\u044b\u043b\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0435\u0435 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0432\u0438\u0434\u0435\u043e \u0438 \u0430\u0443\u0434\u0438\u043e, \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0442\u044c \u043d\u0430 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u0445 \u043f\u043e Modbus\/UDP \u043d\u0430 \u043f\u043b\u0430\u0442\u0443 \u00ab\u041a\u0430\u0440\u043d\u043e\u00bb.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u00ab\u041a\u0430\u0440\u043d\u043e\u00bb, \u0438\u0437 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c\u044b\u0445 Modbus\/UDP \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0438\u0437\u044b\u043c\u0430\u043b\u0438\u0441\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u043b\u0438\u0431\u043e \u0432 \u0432\u0438\u0434\u0435\u043e \u0444\u0440\u0435\u0439\u043c\u0431\u0443\u0444\u0435\u0440, \u043b\u0438\u0431\u043e \u0432 \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u0443\u0434\u0438\u043e\u0431\u0443\u0444\u0435\u0440.<\/p>\n<\/li>\n<li>\n<p>\u0421\u043a\u0440\u0438\u043f\u0442 \u0432 \u043e\u0442\u0432\u0435\u0442 \u043e\u0442 \u00ab\u041a\u0430\u0440\u043d\u043e\u00bb \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043f\u043e Modbus\/UDP \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043e\u0442\u0440\u0430\u0436\u0430\u044e\u0449\u0435\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u0443\u0434\u0438\u043e\u0431\u0443\u0444\u0435\u0440\u0430 (\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430 \u0432 \u043d\u0451\u043c).<\/p>\n<\/li>\n<li>\n<p>\u041e\u0441\u043d\u043e\u0432\u044b\u0432\u0430\u044f\u0441\u044c \u043d\u0430 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0430\u0443\u0434\u0438\u043e\u0431\u0443\u0444\u0435\u0440\u0430, \u0441\u043a\u0440\u0438\u043f\u0442 \u0440\u0435\u0433\u0443\u043b\u0438\u0440\u0443\u0435\u0442 \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u00ab\u041a\u0430\u0440\u043d\u043e\u00bb \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0443\u0442\u0435\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 sleep(), \u043d\u0435 \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u044f \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0431\u0443\u0444\u0435\u0440\u0430 \u0438 \u0435\u0433\u043e \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u043e\u043f\u043e\u0440\u043e\u0436\u043d\u0435\u043d\u0438\u044f.<\/p>\n<\/li>\n<\/ol>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/98e\/8ad\/c5f\/98e8adc5f6bb62e39d00cec2ee74895c.jpg\" alt=\"\u0420\u0438\u0441.37. \u041f\u043b\u0430\u0442\u0430 \u00ab\u041a\u0430\u0440\u043d\u043e\u00bb \u0441 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c VexRiscvHUB12ForKarnix \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0438\u0437 \u0441\u0435\u0442\u0438 \u043f\u0430\u043a\u0435\u0442\u044b Modbus\/UDP, \u0438\u0437\u044b\u043c\u0430\u0435\u0442 \u0438\u0437 \u043d\u0438\u0445 \u0430\u0443\u0434\u0438\u043e \u0438 \u0432\u0438\u0434\u0435\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442 \u0438\u0445 \u043d\u0430 \u0438\u043c\u0435\u044e\u0449\u0435\u0439\u0441\u044f \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0443\u0440\u0435.\" title=\"\u0420\u0438\u0441.37. \u041f\u043b\u0430\u0442\u0430 \u00ab\u041a\u0430\u0440\u043d\u043e\u00bb \u0441 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c VexRiscvHUB12ForKarnix \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0438\u0437 \u0441\u0435\u0442\u0438 \u043f\u0430\u043a\u0435\u0442\u044b Modbus\/UDP, \u0438\u0437\u044b\u043c\u0430\u0435\u0442 \u0438\u0437 \u043d\u0438\u0445 \u0430\u0443\u0434\u0438\u043e \u0438 \u0432\u0438\u0434\u0435\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442 \u0438\u0445 \u043d\u0430 \u0438\u043c\u0435\u044e\u0449\u0435\u0439\u0441\u044f \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0443\u0440\u0435.\" width=\"2360\" height=\"831\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/98e\/8ad\/c5f\/98e8adc5f6bb62e39d00cec2ee74895c.jpg\" data-blurred=\"true\"\/><\/p>\n<div><figcaption><em>\u0420\u0438\u0441.37. \u041f\u043b\u0430\u0442\u0430 \u00ab\u041a\u0430\u0440\u043d\u043e\u00bb \u0441 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c VexRiscvHUB12ForKarnix \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0438\u0437 \u0441\u0435\u0442\u0438 \u043f\u0430\u043a\u0435\u0442\u044b Modbus\/UDP, \u0438\u0437\u044b\u043c\u0430\u0435\u0442 \u0438\u0437 \u043d\u0438\u0445 \u0430\u0443\u0434\u0438\u043e \u0438 \u0432\u0438\u0434\u0435\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442 \u0438\u0445 \u043d\u0430 \u0438\u043c\u0435\u044e\u0449\u0435\u0439\u0441\u044f \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0443\u0440\u0435.<\/em><\/figcaption><\/div>\n<\/figure>\n<p> \u0412\u0441\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u0434\u043b\u044f \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0445 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u0432\u0438\u0434\u0435\u043e \u0442\u0430\u043a\u0438\u043c \u0437\u0430\u0442\u0435\u0439\u043b\u0438\u0432\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 \u00ab\u041a\u0430\u0440\u043d\u043e\u00bb \u0438\u043b\u0438 \u043f\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043c\u0430\u0442\u0440\u0438\u0446\u0430\u043c\u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 HUB, \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u043f\u043e\u0434\u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 <strong>.\/scripts\/Perl<\/strong> \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f <strong>VexRiscvHUB12ForKarnix<\/strong>. \u0422\u0430\u043c \u0436\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f README \u0444\u0430\u0439\u043b \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0435\u0439 \u043f\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0443 \u0441\u043a\u0440\u0438\u043f\u0442\u0430.<\/p>\n<p><a class=\"anchor\" name=\"20\" id=\"20\"><\/a><\/p>\n<h2> 20. \u042d\u043f\u0438\u043b\u043e\u0433<\/h2>\n<p>\u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0430\u043c\u0438 \u041f\u041b\u0418\u0421 \u044f \u0432\u0441\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u0438\u0445\u043e\u0436\u0443 \u043a \u0432\u044b\u0432\u043e\u0434\u0443, \u0447\u0442\u043e \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u044b \u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438, \u0438 \u0435\u0441\u043b\u0438 \u0431\u044b \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0432 \u0446\u0435\u043d\u0435, \u0442\u043e \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e \u043f\u0440\u043e\u0437\u044f\u0431\u0430\u043b\u0438 \u0431\u044b \u043d\u0430 \u0441\u0432\u0430\u043b\u043a\u0435 \u0438\u0441\u0442\u043e\u0440\u0438\u0438. \u041e\u0434\u043d\u0430 \u0438\u0437 \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0444\u0435\u0440 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u041c\u041a \u2014 \u044d\u0442\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0441 \u044d\u043a\u0441\u0442\u0440\u0435\u043c\u0430\u043b\u044c\u043d\u043e \u043d\u0438\u0437\u043a\u0438\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435\u043c \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u044d\u043d\u0435\u0440\u0433\u0438\u0438 \u0438\u043b\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0441 \u0431\u0430\u0442\u0430\u0440\u0435\u0439\u043d\u044b\u043c \u043f\u0438\u0442\u0430\u043d\u0438\u0435\u043c. \u041d\u043e \u0438 \u0432 \u044d\u0442\u0443 \u0432\u043e\u0442\u0447\u0438\u043d\u0443 \u0443\u0436\u0435 \u0437\u0430\u0448\u043b\u0438 \u041f\u041b\u0418\u0421. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0441\u0435\u0440\u0438\u044f CPLD \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c Lattice MachXO2 \u0441 \u0443\u043b\u044c\u0442\u0440\u0430\u043d\u0438\u0437\u043a\u0438\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435\u043c, \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0438 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c \u043e\u0441\u0446\u0438\u043b\u043b\u044f\u0442\u043e\u0440\u043e\u043c. \u041c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b \u044d\u0442\u043e\u0439 \u0441\u0435\u0440\u0438\u0438 \u043f\u0440\u043e\u0441\u0442\u044b, \u043d\u043e \u0438\u043c\u0435\u044e\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0434\u043b\u044f \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043f\u043e\u0434 \u0437\u0430\u0434\u0430\u0447\u0443 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0443\u0440\u044b. \u0422\u0430\u043a\u0438\u0435 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u00ab\u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439\u00bb \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0435 \u0441 \u043d\u0438\u0437\u043a\u0438\u043c \u0443\u0440\u043e\u0432\u043d\u0435\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u0442\u043e\u043a\u0430 (\u0435\u0434\u0438\u043d\u0438\u0446\u044b \u043c\u0410) \u0438 \u043f\u0438\u0442\u0430\u043d\u0438\u0435\u043c \u043e\u0442 1.2\u0412.<\/p>\n<p>\u041a\u0442\u043e-\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u0440\u0430\u0437\u0438\u0442\u044c: \u00ab\u0430 \u043a\u0430\u043a \u0436\u0435 \u0426\u0410\u041f \u0438 \u0410\u0426\u041f?\u00bb. \u0422\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e \u044d\u0442\u0438 \u0431\u043b\u043e\u043a\u0438 \u0441\u0442\u044b\u043a\u043e\u0432\u043a\u0438 \u0441 \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u043e\u0439 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0443\u0440\u043e\u0439 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0432\u043e \u0432\u0441\u0435\u0445 \u041c\u041a \u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0432 \u043d\u0435\u0434\u043e\u0440\u043e\u0433\u0438\u0445 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0430\u0445 \u041f\u041b\u0418\u0421. \u0414\u0430, \u041f\u041b\u0418\u0421 \u2014 \u0447\u0438\u0441\u0442\u043e \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u043d\u043e \u0438 \u0442\u0443\u0442 \u043d\u0435 \u0432\u0441\u0435 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e. \u0426\u0410\u041f \u043b\u0435\u0433\u043a\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u041f\u041b\u0418\u0421 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0428\u0418\u041c \u0438 \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u043e\u0433\u043e \u041d\u0427 \u0444\u0438\u043b\u044c\u0442\u0440\u0430 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435. \u0410 \u0447\u0442\u043e \u0436\u0435 \u0441 \u0410\u0426\u041f? \u041d\u0435\u0434\u0430\u0432\u043d\u043e \u044f \u0443\u0437\u043d\u0430\u043b \u043f\u0440\u043e \u00ab<a href=\"https:\/\/www.eetimes.com\/how-to-implement-all-digital-analog-to-digital-converters-in-fpgas-and-asics\/\" rel=\"noopener noreferrer nofollow\">All-Digital ADC<\/a>\u00bb \u0438\u043b\u0438 <strong>A2D<\/strong> \u2014 \u0441\u043f\u043e\u0441\u043e\u0431 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0410\u0426\u041f \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0443\u0440\u044b \u0432\u043d\u0443\u0442\u0440\u0438 \u041f\u041b\u0418\u0421 (\u0438\u043b\u0438 ASIC), \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043e\u0434\u0438\u043d \u0434\u0438\u0444\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b LVDS (\u0434\u0432\u0435 \u043b\u0438\u043d\u0438\u0438) \u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0430\u0441\u0441\u0438\u0432\u043d\u043e\u0439 \u043e\u0431\u0432\u044f\u0437\u043a\u0438. \u041f\u0440\u0438\u043d\u0446\u0438\u043f \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u2014 \u0432\u0445\u043e\u0434 LVDS \u043e\u0431\u044b\u0447\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u043a\u043e\u043c\u043f\u0430\u0440\u0430\u0442\u043e\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f \u0434\u0432\u0443\u0445 \u043b\u0438\u043d\u0438\u0439 \u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u00ab0\u00bb \u0438\u043b\u0438 \u00ab1\u00bb \u0432\u043d\u0443\u0442\u0440\u0438 \u041f\u041b\u0418\u0421. \u0415\u0441\u043b\u0438 \u043f\u043e\u0434\u0432\u0435\u0441\u0442\u0438 \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u043a \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043b\u0438\u043d\u0438\u0439  LVDS (\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439), \u0430 \u043a \u0432\u0442\u043e\u0440\u043e\u0439 (\u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439) \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a\u043e\u043d\u0434\u0435\u043d\u0441\u0430\u0442\u043e\u0440 \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0435\u0433\u043e \u0437\u0430\u0440\u044f\u0434\u043e\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0428\u0418\u041c, \u0442\u043e \u043a\u043e\u043c\u043f\u0430\u0440\u0430\u0442\u043e\u0440 \u0432\u043d\u0443\u0442\u0440\u0438 \u041f\u041b\u0418\u0421 \u0431\u0443\u0434\u0435\u0442 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0437\u0430\u0440\u044f\u0434\u0430 \u043a\u043e\u043d\u0434\u0435\u043d\u0441\u0430\u0442\u043e\u0440\u0430 \u0441 \u0443\u0440\u043e\u0432\u043d\u0435\u043c \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430. \u041d\u0435\u0441\u043b\u043e\u0436\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441 \u00ab<a href=\"https:\/\/en.wikipedia.org\/wiki\/Oversampling\" rel=\"noopener noreferrer nofollow\">\u043e\u0432\u0435\u0440\u0441\u044d\u043c\u043f\u043b\u0438\u043d\u0433\u043e\u043c<\/a>\u00bb \u0434\u0430\u0435\u0442 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u0410\u0426\u041f. \u041d\u0430 \u0440\u0438\u0441. 38 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0430 \u0441\u0445\u0435\u043c\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0442\u0430\u043a\u043e\u0433\u043e \u0410\u0426\u041f.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/8a1\/d7c\/d79\/8a1d7cd79b615f82f7f11a4516954653.png\" alt=\"\u0420\u0438\u0441. 38. \u0421\u0445\u0435\u043c\u0430 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0433\u043e \u0410\u0426\u041f (All-Digital ADC).\" title=\"\u0420\u0438\u0441. 38. \u0421\u0445\u0435\u043c\u0430 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0433\u043e \u0410\u0426\u041f (All-Digital ADC).\" width=\"648\" height=\"436\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8a1\/d7c\/d79\/8a1d7cd79b615f82f7f11a4516954653.png\"\/><\/p>\n<div><figcaption><em>\u0420\u0438\u0441. 38. \u0421\u0445\u0435\u043c\u0430 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0433\u043e \u0410\u0426\u041f (All-Digital ADC).<\/em><\/figcaption><\/div>\n<\/figure>\n<p>     \u0412\u043e\u0437\u044c\u043c\u0443\u0441\u044c \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c, \u0447\u0442\u043e \u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c, \u0447\u0435\u043c \u0434\u0435\u0448\u0435\u0432\u043b\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u00ab\u043a\u0440\u0435\u043c\u043d\u0438\u0439\u00bb, \u0442\u0435\u043c \u0434\u0430\u043b\u044c\u0448\u0435 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b \u041f\u041b\u0418\u0421 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u043e\u043d\u0438\u043a\u0430\u0442\u044c \u0432 \u043d\u0430\u0448\u0443 \u043f\u043e\u0432\u0441\u0435\u0434\u043d\u0435\u0432\u043d\u0443\u044e \u0436\u0438\u0437\u043d\u044c \u0438 \u0442\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u044b\u0442\u0435\u0441\u043d\u044f\u0442\u044c \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b \u0438\u0437 \u043e\u0431\u043e\u0440\u043e\u0442\u0430. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435, \u0447\u0442\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u041c\u041a \u043d\u0430 \u00ab\u043f\u043b\u0430\u0432\u0443\u00bb, \u044d\u0442\u043e \u0443\u0441\u0442\u043e\u044f\u0432\u0448\u0438\u0435\u0441\u044f \u043f\u0440\u0438\u0432\u044b\u0447\u043a\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0438 \u0438\u043d\u0435\u0440\u0442\u043d\u043e\u0441\u0442\u044c \u043c\u044b\u0448\u043b\u0435\u043d\u0438\u044f, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u043d\u0430\u044f \u0431\u0430\u0437\u0430 \u041f\u041e \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f.<\/p>\n<p>\u041d\u0430 \u0440\u044b\u043d\u043a\u0435 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u0434\u043e\u043b\u0433\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0434\u043e\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u041c\u041a \u0434\u0432\u0443\u0445 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440 \u2014 AVR \u0438 ARM (\u043f\u0440\u043e PIC \u0438 8051 \u043a\u0430\u043a-\u0442\u043e \u0434\u0430\u0432\u043d\u043e \u043f\u043e\u0437\u0430\u0431\u044b\u043b\u043e\u0441\u044c). \u041d\u043e \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0433\u043e\u0434\u044b \u0432 \u044d\u0442\u0443 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043d\u0430\u043c\u0435\u0442\u0438\u043b\u043e\u0441\u044c \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e\u0435 \u043f\u0440\u043e\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b RISC-V, \u0447\u0442\u043e \u043e\u0437\u043d\u0430\u043c\u0435\u043d\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u0445\u043e\u0434\u043e\u043c \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u0441\u0435\u0440\u0438\u0438 GD32 \u0438 ESP32-\u04213. \u041e\u0442\u0435\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0438 \u0442\u0430\u043a\u0436\u0435 \u043e\u0442\u043c\u0435\u0442\u0438\u043b\u0438\u0441\u044c \u0441\u0432\u043e\u0438\u043c\u0438 \u0438\u0437\u0434\u0435\u043b\u0438\u044f\u043c\u0438 \u043d\u0430 \u0431\u0430\u0437\u0435 32-\u0431\u0438\u0442\u043d\u043e\u0433\u043e RISC-V \u2014 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u0442\u0435\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u041c\u041a MIK32 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0430 \u0437\u0435\u043b\u0435\u043d\u043e\u0433\u0440\u0430\u0434\u0441\u043a\u043e\u0433\u043e \u0410\u041e \u00ab\u041c\u0438\u043a\u0440\u043e\u043d\u00bb \u0437\u0430\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f. \u041d\u043e \u043a\u0430\u043a \u043c\u044b \u0443\u0432\u0438\u0434\u0435\u043b\u0438, 32-\u0431\u0438\u0442\u043d\u044b\u0435 \u044f\u0434\u0440\u0430 RISC-V \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 \u041f\u041b\u0418\u0421 \u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u0432\u0435\u0441\u044c\u043c\u0430 \u043d\u0435\u043f\u043b\u043e\u0445\u0443\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c. \u0414\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f, \u0442\u043e\u0442 \u0436\u0435 MIK32 \u0438\u043c\u0435\u0435\u0442 \u0442\u0430\u043a\u0442\u043e\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u043e\u0442\u0443 32 \u041c\u0413\u0446, \u0447\u0442\u043e \u0432  \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u043d\u0438\u0436\u0435 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u043c\u043d\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u043d\u0430 \u0431\u0430\u0437\u0435 \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e VexRiscv. \u0410 \u043f\u043e \u0446\u0435\u043d\u0435 MIK32 \u0432\u044b\u0448\u0435, \u0447\u0435\u043c \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b \u041f\u041b\u0418\u0421 \u043d\u0430 \u043d\u0430\u0448\u0435\u0439 \u043f\u043b\u0430\u0442\u0435 \u00ab\u041a\u0430\u0440\u043d\u043e\u00bb, \u043f\u0440\u0438 \u0442\u043e\u043c, \u0447\u0442\u043e \u041f\u041b\u0418\u0421 \u2014 \u044d\u0442\u043e \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440! <\/p>\n<p>\u0412\u0441\u0435\u043c \u0434\u043e\u0447\u0438\u0442\u0430\u0432\u0448\u0438\u043c \u044d\u0442\u0443 \u0441\u0442\u0430\u0442\u044c\u044e \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u2014 \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u0441\u043f\u0430\u0441\u0438\u0431\u043e! \u0418 \u043f\u0440\u043e\u0441\u0442\u0438\u0442\u0435 \u0437\u0430 \u0442\u043e, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0442\u0430\u043a \u043c\u043d\u043e\u0433\u043e.<\/p>\n<p>PS: \u041f\u043b\u0430\u0442\u0443 \u00ab\u041a\u0430\u0440\u043d\u043e\u00bb \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u2014 Gerber \u0444\u0430\u0439\u043b\u044b, BOM  \u0438 \u0441\u0445\u0435\u043c\u0430 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 PDF \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438. \u0418\u043b\u0438<a href=\"https:\/\/www.ozon.ru\/search\/?text=%D0%A4%D0%9C%D0%A2%D0%94.466961.029\" rel=\"noopener noreferrer nofollow\"> \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0441\u0442\u0438 \u0441 ozon.ru \u0443\u0436\u0435 \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u0443\u044e \u0438 \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e<\/a>.<\/p>\n<h2> \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u043d\u043e\u0441\u0442\u0438<\/h2>\n<p>\u042e\u0440\u0438\u044e \u041f\u0430\u043d\u0447\u0443\u043b\u0443 (<a class=\"mention\" href=\"\/users\/YuriPanchul\">@YuriPanchul<\/a>) \u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 &#171;\u0428\u043a\u043e\u043b\u0430 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0433\u043e \u0441\u0438\u043d\u0442\u0435\u0437\u0430&#187; \u0437\u0430 \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u043e\u0431\u0443\u0447\u0430\u044e\u0449\u0438\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 basics-graphics-music.<\/p>\n<p>\u0414\u043c\u0438\u0442\u0440\u0438\u044e (<a class=\"mention\" href=\"\/users\/DmitryZlobec\">@DmitryZlobec<\/a>) \u0437\u0430 \u0438\u0434\u0435\u0438 \u043f\u043e \u043f\u043b\u0430\u0442\u0435 &#171;\u041a\u0430\u0440\u043d\u043e&#187;.<\/p>\n<p>\u0412\u0438\u043a\u0442\u043e\u0440\u0443 \u0421\u0435\u0440\u0433\u0435\u0435\u0432\u0443 \u0437\u0430 \u0441\u0431\u043e\u0440\u043a\u0443 \u0441\u0435\u0440\u0438\u0438 \u043f\u043b\u0430\u0442 &#171;\u041a\u0430\u0440\u043d\u043e&#187; \u043d\u0430 \u0441\u0442\u0440\u0430\u0448\u043d\u043e\u043c \u0438 \u0443\u0436\u0430\u0441\u043d\u043e \u0433\u043b\u044e\u043a\u0430\u0432\u043e\u043c Autotronik BA385V2.<\/p>\n<p>\u0415\u0432\u0433\u0435\u043d\u0438\u044e \u041a\u043e\u0440\u043e\u043b\u0435\u043d\u043a\u043e \u0437\u0430 \u043f\u0440\u043e\u0433\u043e\u043d \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 &#171;\u041a\u0430\u0440\u043d\u043e&#187;, \u0432\u044b\u0447\u0438\u0442\u043a\u0443 \u0441\u0442\u0430\u0442\u044c\u0438 \u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043e\u043a.<\/p>\n<p><a class=\"anchor\" name=\"links\" id=\"links\"><\/a><\/p>\n<h2> \u0421\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438<\/h2>\n<p>\u041f\u043b\u0430\u0442\u0430 \u00ab\u041a\u0430\u0440\u043d\u043e\u00bb (KiCAD): <a href=\"https:\/\/github.com\/Fabmicro-LLC\/Karnix_ASB-254\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/Fabmicro-LLC\/Karnix_ASB-254<\/a><br \/>\u041f\u0440\u043e\u0435\u043a\u0442 \u00abbasics-graphics-music\u00bb: <a href=\"https:\/\/github.com\/yuri-panchul\/basics-graphics-music\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/yuri-panchul\/basics-graphics-music<\/a><br \/>YosysHQ: <a href=\"https:\/\/github.com\/YosysHQ\/yosys\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/YosysHQ\/yosys<\/a><br \/>Yosys Manual: <a href=\"https:\/\/yosyshq.readthedocs.io\/projects\/yosys\/en\/latest\/index.html#yosys-manual\" rel=\"noopener noreferrer nofollow\">https:\/\/yosyshq.readthedocs.io\/projects\/yosys\/en\/latest\/index.html#yosys-manual<\/a><br \/>SpinalHDL: <a href=\"https:\/\/github.com\/SpinalHDL\/SpinalHDL\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/SpinalHDL\/SpinalHDL<\/a><br \/>SpinalHDL Docs: <a href=\"https:\/\/spinalhdl.github.io\/SpinalDoc-RTD\/master\/index.html\" rel=\"noopener noreferrer nofollow\">https:\/\/spinalhdl.github.io\/SpinalDoc-RTD\/master\/index.html<\/a><br \/>SpinalTemplateSbtForKarnix: <a href=\"https:\/\/github.com\/Fabmicro-LLC\/SpinalTemplateSbtForKarnix\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/Fabmicro-LLC\/SpinalTemplateSbtForKarnix<\/a><br \/>VexRiscv: <a href=\"https:\/\/github.com\/SpinalHDL\/VexRiscv\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/SpinalHDL\/VexRiscv<\/a><br \/>VexRiscvWithKarnix: <a href=\"https:\/\/github.com\/Fabmicro-LLC\/VexRiscvWithKarnix\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/Fabmicro-LLC\/VexRiscvWithKarnix<\/a><br \/>VexRiscvWithHUB12ForKarnix: <a href=\"https:\/\/github.com\/Fabmicro-LLC\/VexRiscvWithHUB12ForKarnix\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/Fabmicro-LLC\/VexRiscvWithHUB12ForKarnix<\/a><\/p>\n<p>\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0441\u0442\u0430\u0442\u044c\u044e \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 PDF: <a href=\"http:\/\/www.fabmicro.ru\/pub\/articles\/Unconventional%20approach%20to%20digital%20hardware%20design%20-%20Yosys,%20SpinalHDL,%20VexRiscv.pdf\" rel=\"noopener noreferrer nofollow\">http:\/\/www.fabmicro.ru\/pub\/articles\/Unconventional approach to digital hardware design &#8212; Yosys, SpinalHDL, VexRiscv.pdf<\/a><\/p>\n<\/p>\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\/802127\/\"> https:\/\/habr.com\/ru\/articles\/802127\/<\/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-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u042d\u0442\u043e \u0432\u0442\u043e\u0440\u0430\u044f \u0438 \u0437\u0430\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438. <a href=\"https:\/\/habr.com\/ru\/articles\/801191\/\" rel=\"noopener noreferrer nofollow\">\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u044c\u044e \u043c\u043e\u0436\u043d\u043e \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435<\/a>. <\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043f\u0440\u0435\u043b\u0435\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u041f\u041b\u0418\u0421, \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c,  \u0447\u0442\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0443\u0440\u044b \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0435\u0433\u043e  \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438: \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0430 \u043a\u043e\u0434\u0430 \u043a\u0430\u043a \u0442\u0435\u043a\u0441\u0442\u0430 \u043d\u0430 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445  \u044f\u0437\u044b\u043a\u0430\u0445 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0443\u0440\u044b (HDL); \u043a\u043e\u0434 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435  \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 (IP-\u0431\u043b\u043e\u043a\u043e\u0432), \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0435\u0433\u043e \u043b\u0435\u0433\u043a\u043e  \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445; \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u0430\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0431\u0448\u0438\u0440\u043d\u044b\u043c  \u043a\u043e\u043b\u043b\u0435\u043a\u0442\u0438\u0432\u043e\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0432\u0435\u0440\u0441\u0438\u0439, \u0442\u0430\u043a\u043e\u0439 \u0436\u0435, \u043a\u0430\u043a \u0443  \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432 (Git); \u0438, \u043a\u0430\u043a \u0438 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438, \u043d\u0438\u0447\u0442\u043e\u0436\u043d\u043e \u043d\u0438\u0437\u043a\u0430\u044f  \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u0435\u0441\u043b\u0438 \u043f\u0440\u0438  \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043d\u0435\u0441\u0435\u0442 \u0432\u043f\u043e\u043b\u043d\u0435  \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u0442\u0440\u0430\u0442\u044b \u043d\u0430 \u0441\u0431\u043e\u0440\u043a\u0443 \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u0438\u0437\u0434\u0435\u043b\u0438\u044f,  \u0438 \u043b\u044e\u0431\u0430\u044f  \u0441\u0445\u0435\u043c\u043e\u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u0438\u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u0430 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u043f\u0435\u0447\u0430\u0442\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u044b \u2014 \u044d\u0442\u043e  \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u044b\u0445\u043e\u0434 \u043d\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u0443\u044e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e \u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u0435 \u043d\u0430 \u0434\u0435\u043d\u044c\u0433\u0438, \u0442\u043e \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441  \u041f\u041b\u0418\u0421 \u043e\u0448\u0438\u0431\u043a\u0438 \u043d\u0438\u0447\u0442\u043e\u0436\u043d\u044b \u043f\u043e \u0441\u0432\u043e\u0435\u0439 \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u0438 \u0438 \u043b\u0435\u0433\u043a\u043e \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u043c\u044b. \u0418 \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432  \u0441\u0435\u0440\u0438\u0439\u043d\u043e\u043c \u0438\u0437\u0434\u0435\u043b\u0438\u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u0430, \u0442\u043e \u0435\u0451 \u0432\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043c\u043e\u0436\u043d\u043e  \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u0442\u044c \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u044b\u043c \u0430\u043f\u0433\u0440\u0435\u0439\u0434\u043e\u043c \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u00ab\u0432 \u043f\u043e\u043b\u0435\u00bb \u0431\u0435\u0437 \u0437\u0430\u043c\u0435\u043d\u044b \u0438\u0437\u0434\u0435\u043b\u0438\u044f.  \u041a\u043e\u0440\u043e\u0447\u0435, \u0441 \u043f\u0440\u0438\u0445\u043e\u0434\u043e\u043c \u041f\u041b\u0418\u0421 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0443\u0440\u044b \u0432\u0441\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0438  \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0430 \u044d\u0442\u043e, \u043f\u043e\u043c\u0438\u043c\u043e \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0447\u0435\u0433\u043e,  \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u043e\u043d\u0438\u0436\u0430\u0435\u0442 \u043f\u043e\u0440\u043e\u0433 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0432 \u0442\u0435\u043c\u0443, \u0438 \u0432\u0441\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432  \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438 \u00ab\u0436\u0435\u043b\u0435\u0437\u0430\u00bb. \u0410 \u043d\u043e\u0432\u044b\u0435 \u043b\u044e\u0434\u0438, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c,  \u043f\u0440\u0438\u043d\u043e\u0441\u044f\u0442 \u0441 \u0441\u043e\u0431\u043e\u0439 \u0432 \u0438\u043d\u0434\u0443\u0441\u0442\u0440\u0438\u044e \u043d\u043e\u0432\u044b\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044b \u0438 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b.<\/p>\n<p>\u0412 \u044d\u0442\u043e\u0439  \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441\u0432\u043e\u0438\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043e\u043f\u044b\u0442\u043e\u043c \u00ab\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\u00bb  \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c \u041f\u041b\u0418\u0421 \u0438 \u0442\u0435\u043c, \u043a\u0430\u043a \u044f \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u043f\u043e\u0433\u0440\u0443\u0436\u0430\u043b\u0441\u044f \u0432 \u0442\u0435\u043c\u0443 \u041f\u041b\u0418\u0421\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430.  \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u044f \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0441\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0437\u0430\u043c\u0435\u0442\u043a\u0443 \u043f\u0440\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0443\u043b\u0447\u0435\u0439\u043d  \u0434\u043b\u044f \u0441\u0438\u043d\u0442\u0435\u0437\u0430 Yosys. \u041f\u043e\u0442\u043e\u043c \u2014 \u043f\u0440\u043e \u044f\u0437\u044b\u043a SpinalHDL \u0438 \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u0443\u0435\u043c\u043e\u0435  \u043c\u0438\u043a\u0440\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u043e\u0435 \u044f\u0434\u0440\u043e VexRiscv, \u043d\u0430 \u043d\u0451\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0435. \u041f\u043e\u0442\u043e\u043c \u2014 \u043f\u0440\u043e \u0437\u0430\u043c\u0435\u043d\u0443  \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0430\u043c\u0438 \u041f\u041b\u0418\u0421 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043c\u043e\u0435\u0439 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u044b  \u00ab\u041a\u0430\u0440\u043d\u043e\u00bb. \u041d\u043e \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u044f \u043f\u043e\u0433\u0440\u0443\u0437\u0438\u043b\u0441\u044f \u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f Hardware  Description Languages (HDL), \u0438 \u043a\u043e\u0433\u0434\u0430 \u044f \u043d\u0430\u0447\u0430\u043b \u043f\u0438\u0441\u0430\u0442\u044c, \u041e\u0441\u0442\u0430\u043f\u0430, \u043a\u0430\u043a \u044d\u0442\u043e  \u0447\u0430\u0441\u0442\u043e \u0431\u044b\u0432\u0430\u0435\u0442, \u043f\u043e\u043d\u0435\u0441\u043b\u043e&#8230; \u0412 \u043e\u0431\u0449\u0435\u043c, \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0442\u043e, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c.  <\/p>\n<figure class=\"full-width\"><\/figure>\n<p> <strong>\u0421\u041e\u0414\u0415\u0420\u0416\u0410\u041d\u0418\u0415<\/strong><\/p>\n<p>1. \u041a\u0440\u0430\u0442\u043a\u0438\u0439 \u044d\u043a\u0441\u043a\u0443\u0440\u0441 \u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u044e<\/p>\n<p>2. \u041f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432<\/p>\n<p>3. \u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c \u041f\u041b\u0418\u0421<\/p>\n<p>4. \u0421\u0438\u043d\u0442\u0435\u0437 \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u0445 \u0441\u0445\u0435\u043c \u0434\u043b\u044f \u041f\u041b\u0418\u0421<\/p>\n<p>5. Yosys Open SYnthesis Suite<\/p>\n<p>6. \u041a\u0430\u043a \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u0442\u0443\u043b\u0447\u0435\u0439\u043d\u0430 Yosys<\/p>\n<p>7. \u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u0442\u0443\u043b\u0447\u0435\u0439\u043d\u0430 Yosys<\/p>\n<p> 7.1. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u00abbasics-graphics-music\u00bb<\/p>\n<p> 7.2 \u041b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u00ab01_and_or_not_xor_de_morgan\u00bb<\/p>\n<p> 7.3 \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0431\u0438\u0442\u0441\u0442\u0440\u0438\u043c\u0430 \u0432 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0443 \u041f\u041b\u0418\u0421<\/p>\n<p>8. \u0422\u0438\u043f\u043e\u0432\u043e\u0439 Makefile \u0434\u043b\u044f \u0441\u0438\u043d\u0442\u0435\u0437\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Yosys<\/p>\n<p>9. \u0424\u0430\u0439\u043b \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 (LPF, PCF, CST)<\/p>\n<p>10. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 Yosys<\/p>\n<p> 10.1 \u041c\u0430\u043a\u0440\u043e YOSYS<\/p>\n<p> 10.2 \u041c\u043d\u043e\u0433\u043e\u043c\u0435\u0440\u043d\u044b\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432<\/p>\n<p> 10.3 \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u043e\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0432 \u0441\u0442\u0435\u043f\u0435\u043d\u044c ($POW) \u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 **<\/p>\n<p> 10.4 \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u0438\u0433\u043d\u0430\u043b\u0443, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u043c\u0443 \u0437\u0430 \u0435\u0451 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438<\/p>\n<p> 10.5 \u0421\u0438\u0433\u043d\u0430\u043b\u044b \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0438\u043b\u0438 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0438<\/p>\n<p> 10.6 \u0421\u043b\u043e\u0436\u043d\u044b\u0435 \u0431\u0438\u0442\u043e\u0432\u044b\u0435 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0438 \u0438\u043d\u043e\u0433\u0434\u0430 \u043c\u043e\u0433\u0443\u0442 \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443 \u043e loopback-\u0430\u0445<\/p>\n<p> 10.7 \u0413\u043b\u043e\u0431\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432<\/p>\n<p>11. \u0410\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0442 \u0442\u0443\u043b\u043e\u0432<\/p>\n<p> 11.1 \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0442 \u0443\u0442\u0438\u043b\u0438\u0442\u044b yosys<\/p>\n<p> 11.2 \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0442 \u0443\u0442\u0438\u043b\u0438\u0442\u044b nextpnr<\/p>\n<p>12. \u0421\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u0443\u0435\u043c\u0430\u044f \u042d\u0412\u041c<\/p>\n<p> 12.1 \u0421\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u0443\u0435\u043c\u043e\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u044f\u0434\u0440\u043e VexRiscv<\/p>\n<p> 12.2 \u0421\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b-\u043d\u0430-\u043a\u0440\u0438\u0441\u0442\u0430\u043b\u043b\u0435 \u043d\u0430 \u0431\u0430\u0437\u0435 VexRiscv<\/p>\n<p>13. \u042f\u0437\u044b\u043a \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0443\u0440\u044b SpinalHDL<\/p>\n<p> 13.1 \u0411\u0430\u0437\u043e\u0432\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u044f\u0437\u044b\u043a\u0430 SpinalHDL<\/p>\n<p> 13.2 FSM, \u043f\u043e\u0442\u043e\u043a\u0438, \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u044b, \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0435 \u0434\u043e\u043c\u0435\u043d\u044b<\/p>\n<p> 13.3 \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 SpinalHDL<\/p>\n<p> 13.4 \u0420\u0430\u0437\u0431\u043e\u0440 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 SpinalTemplateSbt<\/p>\n<p> 13.5 \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 Makefile-\u0430 \u0434\u043b\u044f \u0441\u0438\u043d\u0442\u0435\u0437\u0430 \u0438\u0437 SpinalHDL \u0432 \u0431\u0438\u0442\u0441\u0442\u0440\u0438\u043c<\/p>\n<p> 13.6 \u0410\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0432\u044b\u0432\u043e\u0434 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 SpinalHDL<\/p>\n<p> 13.7 \u0421\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u0438 \u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0432 SpinalHDL<\/p>\n<p>14. \u0421\u0438\u043d\u0442\u0435\u0437 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u044f\u0434\u0440\u0430 VexRiscv<\/p>\n<p> 14.1 \u0417\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u043e \u0441 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u043c VexRiscv<\/p>\n<p> 14.2 \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0434\u043b\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b RISC-V<\/p>\n<p> 14.3 \u041f\u043e\u0434\u0433\u043e\u0442\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c Makefile, LPF \u0438 toplevel.v<\/p>\n<p> 14.4 \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u043e\u0447\u043a\u0443 \u0432\u0445\u043e\u0434\u0430 \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0421\u043d\u041a Murax \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u044b \u00ab\u041a\u0430\u0440\u043d\u043e\u00bb<\/p>\n<p> 14.5 \u041c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u043c \u043a\u043e\u0434 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u00abhello_world\u00bb<\/p>\n<p> 14.6 \u0421\u0431\u043e\u0440\u043a\u0430 \u0421\u043d\u041a Murax \u0438 \u044f\u0434\u0440\u0430 VexRiscv<\/p>\n<p> 14.7 \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0421\u043d\u041a Murax \u043d\u0430 \u041f\u041b\u0418\u0421 \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c \u00abhello_world\u00bb<\/p>\n<p><a href=\"#15\" rel=\"noopener noreferrer nofollow\">15. \u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u0421\u043d\u041a Murax \u0438 \u044f\u0434\u0440\u0430 VexRiscv<\/a><\/p>\n<p> <a href=\"#15.1\" rel=\"noopener noreferrer nofollow\">15.1 \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0421\u043d\u041a Murax<\/a><\/p>\n<p> <a href=\"#15.2\" rel=\"noopener noreferrer nofollow\">15.2 \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u044f\u0434\u0440\u0430 VexRiscv<\/a><\/p>\n<p> <a href=\"#15.3\" rel=\"noopener noreferrer nofollow\">15.3 \u041f\u043b\u0430\u0433\u0438\u043d\u044b \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u044f\u0434\u0440\u0430 VexRiscv<\/a><\/p>\n<p><a href=\"#16\" rel=\"noopener noreferrer nofollow\">16. \u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b \u0441 \u044f\u0434\u0440\u043e\u043c VexRiscv \u0438 \u0421\u043d\u041a Murax<\/a><\/p>\n<p> <a href=\"#16.1\" rel=\"noopener noreferrer nofollow\">16.1 \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 RegFilePlugin<\/a><\/p>\n<p> <a href=\"#16.2\" rel=\"noopener noreferrer nofollow\">16.2 \u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u0442\u0430\u043a\u0442\u043e\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u044f\u0434\u0440\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 PLL<\/a><\/p>\n<p> <a href=\"#16.3\" rel=\"noopener noreferrer nofollow\">16.3 \u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0441\u0434\u0432\u0438\u0433\u0430<\/a><\/p>\n<p><a href=\"#17\" rel=\"noopener noreferrer nofollow\">17. \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u0432\u043e\u0438 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0438 (IP-\u0431\u043b\u043e\u043a\u0438)<\/a><\/p>\n<p> <a href=\"#17.1\" rel=\"noopener noreferrer nofollow\">17.1 \u041c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u043d\u044b\u0439 \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0439 \u0442\u0430\u0439\u043c\u0435\u0440 MTIME<\/a><\/p>\n<p> <a href=\"#17.2\" rel=\"noopener noreferrer nofollow\">17.2 \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0443 SRAM<\/a><\/p>\n<p><a href=\"#17.2.1\" rel=\"noopener noreferrer nofollow\">17.2.1 \u0420\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 SRAM<\/a><\/p>\n<p><a href=\"#17.2.2\" rel=\"noopener noreferrer nofollow\">17.2.2 \u0422\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c \u043f\u0430\u043c\u044f\u0442\u044c \u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 SRAM<\/a><\/p>\n<p><a href=\"#17.2.3\" rel=\"noopener noreferrer nofollow\">17.2.3 \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c SRAM \u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 malloc<\/a><\/p>\n<p><a href=\"#17.2.4\" rel=\"noopener noreferrer nofollow\">17.2.4 \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0431\u043b\u043e\u043a\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u0435\u0439 Div \u0438 Mul<\/a><\/p>\n<p><a href=\"#17.2.5\" rel=\"noopener noreferrer nofollow\">17.2.5 \u0417\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e printf<\/a><\/p>\n<p> <a href=\"#17.3\" rel=\"noopener noreferrer nofollow\">17.3 \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 PLIC<\/a><\/p>\n<p><a href=\"#17.3.1\" rel=\"noopener noreferrer nofollow\">17.3.1 \u0420\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 MicroPLIC<\/a><\/p>\n<p><a href=\"#17.3.2\" rel=\"noopener noreferrer nofollow\">17.3.2 \u0417\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 MicroPLIC \u0438\u0437 \u0421\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b<\/a><\/p>\n<p> <a href=\"#17.4\" rel=\"noopener noreferrer nofollow\">17.4 \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 FastEthernet (MAC)<\/a><\/p>\n<p><a href=\"#17.4.1\" rel=\"noopener noreferrer nofollow\">17.4.1 \u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 Ethernet<\/a><\/p>\n<p><a href=\"#17.4.2\" rel=\"noopener noreferrer nofollow\">17.4.2 \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 MacEth<\/a><\/p>\n<p><a href=\"#17.4.3\" rel=\"noopener noreferrer nofollow\">17.4.3 \u0420\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 MacEth<\/a><\/p>\n<p><a href=\"#17.4.4\" rel=\"noopener noreferrer nofollow\">17.4.4 \u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441 \u0432 DHCP \u0441\u0435\u0440\u0432\u0435\u0440<\/a><\/p>\n<p><a href=\"#18\" rel=\"noopener noreferrer nofollow\">18. \u041f\u043e\u0442\u0430\u043a\u0442\u043e\u0432\u0430\u044f \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u0421\u043d\u041a Murax<\/a><\/p>\n<p><a href=\"#19\" rel=\"noopener noreferrer nofollow\">19. \u0411\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440: VexRiscvWithHUB12ForKarnix<\/a><\/p>\n<p><a href=\"#20\" rel=\"noopener noreferrer nofollow\">20. \u042d\u043f\u0438\u043b\u043e\u0433<\/a><\/p>\n<p><a href=\"#links\" rel=\"noopener noreferrer nofollow\">\u0421\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438<\/a><\/p>\n<p><a class=\"anchor\" name=\"15\" id=\"15\"><\/a><\/p>\n<h2> 15. \u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u0421\u043d\u041a Murax \u0438 \u044f\u0434\u0440\u0430 VexRiscv<\/h2>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0438 \u043f\u0435\u0440\u0435\u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0421\u043d\u041a Murax \u0438 \u0421\u0438\u0448\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0434\u043b\u044f \u043d\u0435\u0433\u043e, \u043d\u0430\u0441\u0442\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0433\u0440\u0443\u0437\u0438\u0442\u044c\u0441\u044f \u0432 \u0434\u0435\u0442\u0430\u043b\u0438 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a \u043a\u043e\u0434 \u0421\u043d\u041a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 SpinalHDL, \u043a\u0430\u043a \u0437\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u044f\u0434\u0440\u0430 VexRiscv \u0438 \u043a\u0430\u043a \u043a \u043d\u0435\u043c\u0443 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u0430\u044f \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u044f.<\/p>\n<p><a class=\"anchor\" name=\"15.1\" id=\"15.1\"><\/a><\/p>\n<h3> 15.1 \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0421\u043d\u041a Murax<\/h3>\n<p>\u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u043a\u043e\u0434 \u0421\u043d\u041a Murax \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\u0435 <strong>.\/src\/main\/scala\/vexriscv\/demo\/Murax.scala<\/strong>, \u0432\u044b\u0448\u0435 \u043c\u044b \u0443\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u043b\u0438 \u0441\u0432\u043e\u0439 \u043a\u043e\u0434 \u0432 \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u2014 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u0432\u0445\u043e\u0434\u0430 \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438. \u0421\u0435\u0439\u0447\u0430\u0441 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0433\u043b\u0443\u0431\u0436\u0435.<\/p>\n<p>\u0421\u043d\u041a Murax \u043f\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 \u0421\u043d\u041a Briey, \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0430 <a href=\"https:\/\/habr.com\/ru\/articles\/801191\/#fig20\" rel=\"noopener noreferrer nofollow\">\u0440\u0438\u0441. 20<\/a>, \u043d\u043e \u0432\u043c\u0435\u0441\u0442\u043e <strong>AxiCrossbar<\/strong>  \u0432 \u0421\u043d\u041a Murax \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <strong>PipelinedMemoryBus<\/strong>.<\/p>\n<p>\u0412\u0435\u0441\u044c \u043a\u043e\u0434 \u0421\u043d\u041a Murax \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u0438\u043c \u043a\u043b\u0430\u0441\u0441\u043e\u043c <strong>Murax<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0430 <strong>Component<\/strong>, \u0442.\u00a0\u0435. Murax \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u043c. \u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u043a\u043b\u0430\u0441\u0441\u0430 Murax \u0438\u043c\u0435\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <strong>config<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439 \u0442\u0438\u043f\u0430 <strong>MuraxConfig<\/strong>, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0439 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0421\u043d\u041a (\u0442\u0430\u043a\u0442\u043e\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u043e\u0442\u0443, \u0440\u0430\u0437\u043c\u0435\u0440 \u041e\u0417\u0423 \u0438 \u0442.\u0434.)<\/p>\n<pre><code class=\"scala\">case class Murax(config : MuraxConfig) extends Component{    import config._    ...<\/code><\/pre>\n<p>\u041a\u0430\u043a \u0438 \u0443 \u0432\u0441\u044f\u043a\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430, \u0443 Murax \u0435\u0441\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0432\u0432\u043e\u0434\u0430\/\u0432\u044b\u0432\u043e\u0434\u0430, \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0441\u0431\u0440\u043e\u0441\u0430 \u0438 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f:<\/p>\n<pre><code class=\"scala\">  val io = new Bundle {      \/\/Clocks \/ reset      val asyncReset = in Bool()      val mainClk = in Bool()      \/\/Main components IO      val jtag = slave(Jtag())      \/\/Peripherals IO      val gpioA = master(TriStateArray(gpioWidth bits))      val uart = master(Uart())      val xip = ifGen(genXip)(master(SpiXdrMaster(xipConfig.ctrl.spi)))    } <\/code><\/pre>\n<p>\u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f <strong>ifGen(genXip)<\/strong> \u0434\u043e\u0431\u0430\u0432\u0438\u0442 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0437\u0430 \u043d\u0435\u0439 \u043a\u043e\u0434\u0430, \u0435\u0441\u043b\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <strong>genXip<\/strong> \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <strong>True<\/strong>. XiP \u044d\u0442\u043e \u0444\u043b\u044d\u0448 \u043f\u0430\u043c\u044f\u0442\u044c \u0441 SPI \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u00abeXecution In Place\u00bb \u2014 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u043f\u0440\u044f\u043c\u043e \u0438\u0437 \u0444\u043b\u044d\u0448 \u043f\u0430\u043c\u044f\u0442\u0438. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u043d\u0430 \u043d\u0435 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0430.<\/p>\n<p>Murax \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0434\u0432\u0430 \u0434\u043e\u043c\u0435\u043d\u0430 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f:<\/p>\n<pre><code class=\"scala\">  val systemClockDomain = ClockDomain(      clock = io.mainClk,      reset = resetCtrl.systemReset,      frequency = FixedFrequency(coreFrequency)    )    val debugClockDomain = ClockDomain(      clock = io.mainClk,      reset = resetCtrl.mainClkReset,      frequency = FixedFrequency(coreFrequency)    )  <\/code><\/pre>\n<p>\u0414\u043e\u043c\u0435\u043d \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f  <strong>debugClockDomain<\/strong> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 JTAG \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0438 \u0432\u0441\u0435 \u0447\u0442\u043e \u0441 \u043d\u0438\u043c \u0441\u0432\u044f\u0437\u0430\u043d\u043e. \u0412\u0441\u044f \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u044f, \u0430 \u0442\u0430\u043a\u0436\u0435 \u044f\u0434\u0440\u043e VexRiscv \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u0434\u043e\u043c\u0435\u043d\u0435 <strong>systemClockDomain<\/strong>. \u0414\u0430\u043b\u0435\u0435 \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u043c\u0435\u043d <strong>systemClockDomain<\/strong>.<\/p>\n<p>\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u044b\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c \u0434\u043e\u043c\u0435\u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0448\u0438\u043d\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <strong>PipelinedMemoryBus<\/strong>, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0448\u0438\u043d\u043d\u044b\u0439 \u0430\u0440\u0431\u0438\u0442\u0440 <strong>MuraxMasterArbiter<\/strong>:<\/p>\n<pre><code class=\"scala\">    val mainBusArbiter = new MuraxMasterArbiter(pipelinedMemoryBusConfig, bigEndianDBus) <\/code><\/pre>\n<p>\u0410\u0440\u0431\u0438\u0442\u0440 \u0438\u043c\u0435\u0435\u0442 \u0442\u0440\u0438 \u043f\u043e\u0440\u0442\u0430: \u0434\u0432\u0430 \u0432\u0435\u0434\u043e\u043c\u044b\u0445 (slave) \u043f\u043e\u0440\u0442\u0430 \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u044f\u0434\u0440\u0443 VexRiscv (\u043f\u043e\u0440\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 <strong>iBus<\/strong> \u0438 \u043f\u043e\u0440\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 <strong>dBus<\/strong>) \u0438 \u043e\u0434\u0438\u043d \u043f\u043e\u0440\u0442 \u043c\u0430\u0441\u0442\u0435\u0440 <strong>MainBus<\/strong>.<\/p>\n<pre><code class=\"scala\">    val mainBusMapping = ArrayBuffer[(PipelinedMemoryBus,SizeMapping)]()<\/code><\/pre>\n<p> \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u044f\u0434\u0440\u0430 VexRiscv \u043a \u0430\u0440\u0431\u0438\u0442\u0440\u0443 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0437\u0430\u0442\u0435\u0439\u043b\u0438\u0432\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u043d\u0441\u0442\u0430\u043d\u0446\u0438\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043a\u043b\u0430\u0441\u0441 <strong>VexRiscv<\/strong> \u0441 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435\u0439 \u0435\u043c\u0443 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 <strong>VexRiscvConfig<\/strong> \u2014 \u043e\u043d\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a\u0438\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u044b\/\u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u044b:<\/p>\n<pre><code class=\"scala\">    \/\/Instanciate the CPU      val cpu = new VexRiscv(          config = VexRiscvConfig(          plugins = cpuPlugins += new DebugPlugin(debugClockDomain, hardwareBreakpointCount)        )      ) <\/code><\/pre>\n<p> \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e, \u0432 \u0446\u0438\u043a\u043b\u0435 \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0435 \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u044f\u0434\u0440\u043e VexRiscv, \u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u043b\u0430\u0433\u0438\u043d \u043b\u0438\u043d\u043a\u0443\u0435\u0442\u0441\u044f \u0441 \u0448\u0438\u043d\u0430\u043c\u0438 <strong>iBus<\/strong> \u0438 <strong>dBus<\/strong> &#8212; \u043e\u043d\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 \u0442\u0438\u043f\u0430 <strong>Stream<\/strong>. \u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e <strong>Stream<\/strong> \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 <strong>cmd<\/strong> \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0438 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 <strong>rsp<\/strong> \u0434\u043b\u044f \u043e\u0442\u0432\u0435\u0442\u0430. \u041b\u0438\u043d\u043a\u043e\u0432\u043a\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430\u043c\u0438 <strong>&lt;><\/strong>, <strong>&lt;&lt;<\/strong> \u0438\u043b\u0438 <strong>>><\/strong>, \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"scala\">    \/\/Checkout plugins used to instanciate the CPU to connect them to the SoC      val timerInterrupt = False      val externalInterrupt = False      for(plugin &lt;- cpu.plugins) plugin match{        case plugin : IBusSimplePlugin =>          mainBusArbiter.io.iBus.cmd &lt;> plugin.iBus.cmd          mainBusArbiter.io.iBus.rsp &lt;> plugin.iBus.rsp        case plugin : DBusSimplePlugin => {          if(!pipelineDBus)            mainBusArbiter.io.dBus &lt;> plugin.dBus          else {            mainBusArbiter.io.dBus.cmd &lt;&lt; plugin.dBus.cmd.halfPipe()            mainBusArbiter.io.dBus.rsp &lt;> plugin.dBus.rsp          }        }        case plugin : CsrPlugin        => {          plugin.externalInterrupt := externalInterrupt          plugin.timerInterrupt := timerInterrupt        }        case plugin : DebugPlugin         => plugin.debugClockDomain{          resetCtrl.systemReset setWhen(RegNext(plugin.io.resetOut))          io.jtag &lt;> plugin.io.bus.fromJtag()        }        case _ =>      }  <\/code><\/pre>\n<p> \u0414\u043b\u044f \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a <strong>CsrPlugin<\/strong> \u0438 <strong>DebugPlugin<\/strong> \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-371514","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/371514","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=371514"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/371514\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=371514"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=371514"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=371514"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}