{"id":364709,"date":"2024-05-21T02:22:42","date_gmt":"2024-05-21T02:22:42","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=364709"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=364709","title":{"rendered":"<span>In RISC-V Rust<\/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>Enterprise Muisc Graphics \u0438\u043b\u0438 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043e \u0442\u043e\u043c \u043a\u0430\u043a \u044f \u043f\u0440\u0438\u043a\u0440\u0443\u0447\u0438\u0432\u0430\u043b Rust \u0434\u043b\u044f RISC-V \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 YRV-Plus.<\/p>\n<h2>\u041d\u0430\u0447\u0430\u043b\u043e \u0438\u0441\u0442\u043e\u0440\u0438\u0438<\/h2>\n<p>\u042d\u0442\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0441 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043e\u0434\u043d\u0430\u0436\u0434\u044b \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0448\u0438\u0445 \u0432\u043e\u0441\u043a\u0440\u0435\u0441\u043d\u044b\u0445 \u0432\u0441\u0442\u0440\u0435\u0447 \u0432 Zoom \u042e\u0440\u0438\u0439 \u041f\u0430\u043d\u0447\u0443\u043b \/ Yuri Panchul <a class=\"mention\" href=\"\/users\/YuriPanchul\">@YuriPanchul<\/a> \u043e\u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0437\u043e\u0432\u0430\u043b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 YRV, \u043a\u0430\u043a \u201c\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0442\u043e\u0438\u0442 \u0433\u0434\u0435-\u043d\u0438\u0431\u0443\u0434\u044c \u0432 \u0442\u0435\u0440\u043c\u043e\u043c\u0435\u0442\u0440\u0435\u201d (\u0437\u0430 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0446\u0438\u0442\u0430\u0442\u044b \u043d\u0435 \u0440\u0443\u0447\u0430\u044e\u0441\u044c). \u0421\u0430\u043c \u043a\u0435\u0439\u0441 \u043c\u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c:\u00a0 \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u043d\u0435 \u0432\u0437\u044f\u0442\u044c DHT-11 \u0438 \u043d\u0435 \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0442 \u043d\u0435\u0433\u043e \u0447\u0435\u0440\u0435\u0437 ModBus. \u0422\u0430\u043a \u043a\u0430\u043a \u0443 \u043d\u0430\u0441 \u041f\u041b\u0418\u0421, \u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430 SystemVerilog \u0438\u00a0 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0443\u0447\u0435\u0431\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 &#8212; \u0431\u0435\u0440\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u0442\u0430 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439, \u043e\u0431\u0430 \u0432\u0438\u0434\u0430 \u043f\u043e\u0440\u0442\u043e\u0432 \u0432 YRV \u0435\u0441\u0442\u044c.\u00a0\u00a0<\/p>\n<p>\u041d\u043e \u0432 \u0441\u0431\u043e\u0440\u043d\u0438\u043a\u0435 \u043b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u044b\u0445 \u0440\u0430\u0431\u043e\u0442 Basic Graphics Music (<a href=\"https:\/\/habr.com\/ru\/articles\/762108\/\" rel=\"noopener noreferrer nofollow\">https:\/\/habr.com\/ru\/articles\/762108\/<\/a>) \u0435\u0441\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 &#8212; \u044d\u0442\u043e \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435 \u043d\u043e\u0442 \u0438 \u043c\u0435\u043b\u043e\u0434\u0438\u0438. \u041f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u043b\u0435\u0439\u0442\u0443, \u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u0442\u0430 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c MIDI \u043f\u043e\u0440\u0442 &#8212; \u044d\u0442\u043e \u0432\u0435\u0434\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u0442? \u0422\u0435\u043c \u0431\u043e\u043b\u0435\u0435, \u0447\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u044b \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0434\u043b\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u0435 \u043d\u0430 \u0444\u043e\u0440\u0442\u0435\u043f\u0438\u0430\u043d\u043e. \u0418, \u0442\u0430\u043a \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u0432 \u0441 \u042e\u0440\u0438\u0435\u043c \u0438\u0434\u0435\u044e,\u00a0 proof of concept \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439: \u0437\u0432\u0443\u043a \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u043d\u044b\u0439 \u0438\u0437 \u0444\u043b\u0435\u0439\u0442\u044b \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d \u043d\u043e\u0442\u043e\u0439 \u0432 MuseScore 4.<\/p>\n<p>\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0434\u0440\u0443\u0433\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043d\u0435 \u0434\u0430\u0432\u0430\u043b\u0430 \u043f\u043e\u043a\u043e\u044f &#8212;\u00a0 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0438 \u0441\u0440\u0435\u0434\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 YRV-Plus. \u041f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u043d\u0430\u0434\u00a0 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c\u00a0 \u201c\u0420\u0435\u0442\u0440\u043e-\u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u0443\u0440\u043e\u0432\u043d\u044f \u00ab\u0420\u0430\u0434\u0438\u043e-86\u0420\u041a\u00bb \u0441 RISC-V \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u043c \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 OMDAZZ\u201d \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0432\u043e\u0437\u043d\u0438\u043a \u0432\u043e\u043f\u0440\u043e\u0441 &#8212; \u0433\u0434\u0435 \u0431\u0440\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440, \u0442\u0435\u043c \u0431\u043e\u043b\u0435\u0435, \u0447\u0442\u043e \u0438\u0445 \u0434\u0432\u0430. \u0414\u043b\u044f \u0441\u0435\u0431\u044f\u00a0 \u044f \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0435\u0433\u043e \u0441\u043e\u0431\u0440\u0430\u043b \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432,\u00a0 \u043d\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u0442\u044c \u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0434\u0440\u0443\u0433\u0438\u043c &#8212; \u044d\u0442\u043e \u0447\u0435\u0440\u0435\u0441\u0447\u0443\u0440. \u0411\u0440\u0430\u0442\u044c \u0441\u0431\u043e\u0440\u043a\u0438 \u0443 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 &#8212; \u0441\u0442\u044b\u0434\u043d\u043e. \u0422\u0430\u043a\u0436\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0438\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441 \u0441\u043e \u0441\u0440\u0435\u0434\u043e\u0439, \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043d\u0435 \u0445\u0443\u0436\u0435 \u0447\u0435\u043c \u0443 SiFive, \u043d\u043e \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043a\u0440\u043e\u043c\u0435 C, \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u201c\u0443\u043c\u043d\u043e\u0433\u043e \u043f\u0430\u044f\u043b\u044c\u043d\u0438\u043a\u0430\u201d\u00a0 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0435\u0449\u0435 \u0438 Verilog.<\/p>\n<p>\u041e\u0434\u0438\u043d \u0438\u0437 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u0439 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0439 \u043e\u0431\u043c\u043e\u043b\u0432\u0438\u043b\u0441\u044f,\u00a0 \u0447\u0442\u043e \u0434\u043b\u044f \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u043d\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u043f\u043e\u0442\u0438\u0445\u043e\u043d\u044c\u043a\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Rust.\u00a0 \u041f\u0440\u043e Rust \u044f \u043d\u0430 \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0437\u043d\u0430\u043b, \u043a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u044d\u0442\u043e \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u043a\u0440\u0443\u0442\u0430\u044f \u0448\u0442\u0443\u043a\u0430, \u0434\u0430 \u0438 \u041b\u0438\u043d\u0443\u0441 \u0422\u043e\u0440\u0432\u0430\u043b\u044c\u0434\u0441 \u043d\u0435 \u043f\u0440\u043e\u0442\u0438\u0432 Rust. \u0411\u044b\u0441\u0442\u0440\u043e\u0435 \u0433\u0443\u0433\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u043e, \u0447\u0442\u043e Rust \u0434\u043b\u044f RISC-V \u0432\u0440\u043e\u0434\u0435 \u0431\u044b \u0435\u0441\u0442\u044c, \u0438 \u0432\u0440\u043e\u0434\u0435 \u0431\u044b \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043e\u0434\u0438\u043d, \u0430 \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f \u0432\u0441\u0435 \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 &#8212; \u0442\u043e \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e, \u043d\u0443 \u0430 \u0441\u043e \u0441\u0440\u0435\u0434\u043e\u0439 \u043a\u0430\u043a \u043d\u0438\u0431\u0443\u0434\u044c \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f, \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u0447\u0442\u043e \u044d\u0442\u043e \u043d\u0435 C\/C++ c\u00a0 Eclipse Embedded CDT.\u00a0\u00a0<\/p>\n<p>\u0418 \u0442\u0430\u043a \u0440\u0435\u0448\u0435\u043d\u043e: \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0431\u0443\u0434\u0435\u0442\u00a0 RISC-V \u044f\u0434\u0440\u043e, \u0430 \u043a\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 Rust,\u00a0 \u0430 \u0432\u0441\u0435 \u044d\u0442\u043e \u0432 \u0448\u0443\u0442\u043a\u0443 \u043d\u0430\u0437\u043e\u0432\u0435\u043c\u00a0 &#8212; Enterprise Graphics Music.\u00a0<\/p>\n<h2>\u0410\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435<\/h2>\n<h3>\u041f\u0440\u043e \u043f\u0430\u043c\u044f\u0442\u044c<\/h3>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043f\u043b\u0430\u0442\u043e\u0439 OMDAZZ, \u043c\u043d\u0435 \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u043f\u043e\u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0430\u043c\u044f\u0442\u0438.\u00a0<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6ba\/d87\/63c\/6bad8763ccce4e0c51a05e2bd4f8e5d6.png\" width=\"419\" height=\"320\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6ba\/d87\/63c\/6bad8763ccce4e0c51a05e2bd4f8e5d6.png\"\/><\/figure>\n<p>\u0414\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0431\u044b\u043b\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u0430\u00a0 \u043f\u043b\u0430\u0442\u0430 Terasic DE0-CV, \u043b\u044e\u0431\u0435\u0437\u043d\u043e \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u0430\u044f FPGA-Systems.ru. \u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u041f\u041b\u0418\u0421 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\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 \u0434\u043b\u044f \u0441\u0438\u043d\u0442\u0435\u0437\u0430 RISC-V \u044f\u0434\u0440\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043d\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f. \u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0431\u043b\u043e\u0447\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u0432 \u043f\u043b\u0430\u0442\u0435 DE0-CV \u041f\u041b\u0418\u0421 Cyclone V \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u00a0 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 &#8212;\u00a0 3080 Kbits.\u00a0<\/p>\n<p>\u00a0\u041f\u0440\u0438 \u0432\u0441\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0435 \u043a GOWIN, \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u0434\u043b\u044f \u043b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u043e\u0433\u043e \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0438 \u0440\u0435\u0442\u0440\u043e\u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0438\u043d\u0433\u0430 \u00a0 \u0433\u0434\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043b\u0438\u043c\u0438\u0442 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 &#8212; \u044d\u0442\u043e \u0431\u043b\u043e\u0447\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u041f\u041b\u0418\u0421, \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0441\u00a0 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u043e\u0439 Cyclone V &#8212; \u0441\u0430\u043c\u043e\u0435\u00a0 \u0443\u0434\u0430\u0447\u043d\u043e\u0435 \u0432\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432,\u0430 \u0432\u043e\u0442 \u0434\u043b\u044f \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0445 \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u0445 \u0438\u0437\u0434\u0435\u043b\u0438\u0439,\u00a0 \u043a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b,\u00a0 GOWIN \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043b\u0443\u0447\u0448\u0438\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u043c.\u00a0\u00a0<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\">\u041f\u043b\u0430\u0442\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0427\u0438\u043f<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u0430\u043c\u044f\u0442\u044c (\u0431\u0438\u0442)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">DE0-CV<\/p>\n<\/td>\n<td>\n<p align=\"left\">5CEBA4F23C7<\/p>\n<\/td>\n<td>\n<p align=\"left\">3383K\u00a0<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">DE10\u00a0<\/p>\n<\/td>\n<td>\n<p align=\"left\">5CSXFC6D6F31C6N<\/p>\n<\/td>\n<td>\n<p align=\"left\">5440K\u00a0<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">DE1-SoC\u00a0<\/p>\n<\/td>\n<td>\n<p align=\"left\">5CSEMA5F31C6<\/p>\n<\/td>\n<td>\n<p align=\"left\">4450K<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">DE0-Nano-Soc<\/p>\n<\/td>\n<td>\n<p align=\"left\">5CSEMA4U23C6<\/p>\n<\/td>\n<td>\n<p align=\"left\">2640K\u00a0<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">DE10-Nano<\/p>\n<\/td>\n<td>\n<p align=\"left\">5CSEBA6U23I7<\/p>\n<\/td>\n<td>\n<p align=\"left\">5440K\u00a0<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Tang Nano 9K<\/p>\n<\/td>\n<td>\n<p align=\"left\">GW1NR-9<\/p>\n<\/td>\n<td>\n<p align=\"left\">468K<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Tang Nano 20K<\/p>\n<\/td>\n<td>\n<p align=\"left\">GW2AR-18 QN88<\/p>\n<\/td>\n<td>\n<p align=\"left\">828K<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Tang Primer 20K<\/p>\n<\/td>\n<td>\n<p align=\"left\">GW2A-LV18PG256C8\/I7<\/p>\n<\/td>\n<td>\n<p align=\"left\">828K<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e \u0441\u0435\u0440\u0438\u044e Nano (\u0438 \u043f\u0443\u0441\u0442\u044c \u0412\u0430\u0441 \u043d\u0435 \u043f\u0443\u0433\u0430\u0435\u0442 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 SoC). \u042d\u0442\u0438 \u043f\u043b\u0430\u0442\u044b \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u0435\u0434\u043d\u0435\u0435\u00a0 \u0432 \u0447\u0430\u0441\u0442\u0438 \u043e\u0431\u0432\u0435\u0441\u0430, \u0447\u0442\u043e \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u044f\u043b\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u043b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u044b\u0445 \u0440\u0430\u0431\u043e\u0442 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e \u043a\u043d\u0438\u0433\u0435 \u201c\u0426\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u0441\u0438\u043d\u0442\u0435\u0437. \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u0443\u0440\u0441\u201d, \u043d\u043e \u0437\u0430\u0442\u043e \u043f\u0440\u043e\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u043e \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0446\u0435\u043d\u0435. \u0412 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 Basic Graphics Music \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u044f \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b \u0438 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0434\u0438\u043a\u0430\u0446\u0438\u0438 TM1638, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u0435\u0439 \u0438 \u0441\u0435\u043c\u0438\u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043d\u044b\u0445 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u044b\u0445 \u0440\u0430\u0431\u043e\u0442, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0431\u044b\u043b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d VGA 666 \u043c\u043e\u0434\u0443\u043b\u044c. (\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u0442\u0443\u0442 <a href=\"https:\/\/habr.com\/ru\/articles\/762108\/\" rel=\"noopener noreferrer nofollow\"><u>https:\/\/habr.com\/ru\/articles\/762108\/<\/u><\/a>)<\/p>\n<h3>\u0415\u0441\u043b\u0438 SDRAM \u043f\u0440\u0438\u043f\u0430\u044f\u043b\u0438, \u0437\u043d\u0430\u0447\u0438\u0442 \u044d\u0442\u043e \u043a\u043e\u043c\u0443-\u0442\u043e \u043d\u0443\u0436\u043d\u043e<\/h3>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0421\u0442\u0430\u043d\u0438\u0441\u043b\u0430\u0432\u0430 \u0416\u0435\u043b\u044c\u043d\u0438\u043e @SparF\u00a0 \u043f\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044e SDRAM \u043a MIPSfpga \u0434\u043e\u043b\u0433\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0435 \u0434\u0430\u0432\u0430\u043b \u043f\u043e\u043a\u043e\u044f (\u0434\u0430 \u0438 \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0435 \u0434\u0430\u0435\u0442). \u041d\u043e \u043f\u0440\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0441\u043e\u0431\u043b\u044e\u0441\u0442\u0438 \u0434\u0432\u0430 \u0443\u0441\u043b\u043e\u0432\u0438\u044f: \u043f\u0435\u0440\u0432\u043e\u0435 &#8212; \u043f\u0440\u043e\u0435\u043a\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u0443\u0435\u043c \u0432 \u201c\u0436\u0435\u043b\u0435\u0437\u0435\u201d, \u0432\u0442\u043e\u0440\u043e\u0435 &#8212; \u043a\u044d\u0448 \u0431\u0443\u0434\u0435\u0442 \u0432\u0441\u0435 \u0442\u0430\u043a\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c(\u043d\u043e \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u0434\u043b\u044f \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430).<\/p>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0432 \u0440\u0435\u0430\u043b\u0435, \u043d\u0435 \u043d\u0430 \u041f\u041b\u0418\u0421,\u0438 \u0442\u043e\u0433\u0434\u0430\u00a0 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435 \u043d\u0430 \u0443\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u00a0 Sky130 PDK, \u0430 \u0442\u0430\u043a\u0436\u0435 Skywater \/ Efabless. \u041d\u043e \u043f\u043e\u0441\u043b\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u0430 \u0441\u043e \u0441\u0442\u0430\u0442\u044c\u0435\u0439\u00a0 \u201cYosys &#8212; A Free Verilog Synthesis Suite\u201d (<a href=\"https:\/\/yosyshq.net\/yosys\/files\/yosys-austrochip2013.pdf\" rel=\"noopener noreferrer nofollow\"><u>https:\/\/yosyshq.net\/yosys\/files\/yosys-austrochip2013.pdf<\/u><\/a>) \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u0447\u0442\u043e \u0434\u043b\u044f \u0441\u0438\u043d\u0442\u0435\u043d\u0437\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u043d\u0435\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u0441\u0435\u0433\u043e \u0447\u0435\u0442\u044b\u0440\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: \u0431\u0443\u0444\u0435\u0440, NOR,\u00a0 NAND \u0438 NOT. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u044f\u0434\u0440\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u043d\u0430 74 \u0438\u043b\u0438 155 \u0441\u0435\u0440\u0438\u0438. \u0418 \u0434\u0430, \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u0445 Yosys \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 <a href=\"https:\/\/github.com\/YosysHQ\/yosys\/blob\/master\/examples\/cmos\" rel=\"noopener noreferrer nofollow\"><u>https:\/\/github.com\/YosysHQ\/yosys\/blob\/master\/examples\/cmos<\/u><\/a> . <br \/>\u0421\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c SDRAM-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0434\u043e\u0441\u0442\u043e\u0439\u043d\u044b\u0439 \u0441\u0438\u043d\u0442\u0435\u0437\u0430 \u0432 \u0436\u0435\u043b\u0435\u0437\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u0441\u043b\u043e\u0436\u043d\u0430\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 SDRAM \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0434\u043b\u044f \u0432\u0438\u0434\u0435\u043e \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0430 \u0432 \u0432\u0438\u0434\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f, \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043d\u0438\u043c \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u0440\u0442\u044b \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430 \u043f\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443, \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430,\u00a0 \u043a\u0430\u043a \u044d\u0442\u043e \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0432 \u041c\u0430\u0440\u0441\u043e\u0445\u043e\u0434\u0435 &#8212; <a href=\"https:\/\/marsohod.org\/projects\/mcy112-prj\/429-vga-framebuffer-mcy112\" rel=\"noopener noreferrer nofollow\"><u>https:\/\/marsohod.org\/projects\/mcy112-prj\/429-vga-framebuffer-mcy112<\/u><\/a>\u00a0<\/p>\n<p>\u0412\u00a0 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u00a0 RISC-V \u044f\u0434\u0440\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f\u00a0 YRV \u0441 16 \u0431\u0438\u0442\u043d\u043e\u0439 \u0448\u0438\u043d\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0439, \u0442\u0430\u043a\u043e\u0435 \u044f\u0434\u0440\u043e \u0432 \u043f\u043e\u043b\u0442\u043e\u0440\u0430 \u0440\u0430\u0437\u0430 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0439 \u043f\u043e \u0442\u0435\u0441\u0442\u0430\u043c CoreMark \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 32 \u0431\u0438\u0442\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439, \u043d\u043e \u0437\u0430\u0442\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u0443\u0435\u043c\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u044c\u044e. \u041d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0440\u0435\u0448\u0435\u043d\u043e \u0431\u044b\u043b\u043e \u043d\u0435 \u043c\u0435\u043d\u044f\u0442\u044c \u0448\u0438\u043d\u0443 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u00a0 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c 64\u041a\u0431 \u041e\u0417\u0423. \u041f\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043d\u0430 Embedded Rust \u0442\u0430\u043a\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043c\u0430 \u0434\u043e\u043b\u0436\u043d\u043e \u0445\u0432\u0430\u0442\u0438\u0442\u044c \u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435.<\/p>\n<h3>\u041f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0440\u0442\u044b<\/h3>\n<p>\u0411\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0434\u0438\u0437\u0430\u0439\u043d \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u0442\u0430 \u043e\u0442 \u041c\u043e\u043d\u0442\u0435\u00a0 \u0438\u0434\u0443\u0449\u0435\u0433\u043e \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043d\u0430 \u0434\u0438\u0437\u0430\u0439\u043d \u0438\u0437 \u043a\u043d\u0438\u0433\u0438 \u041f\u043e\u043d\u0433 \u0427\u0443. \u041c\u043e\u043d\u0442\u0435 \u0441\u0432\u043e\u0439 \u0434\u0438\u0437\u0430\u0439\u043d\u00a0 \u0432 \u043a\u043d\u0438\u0433\u0435 \u043d\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442 \u0438, \u043a\u0430\u043a \u043e\u043d \u0441\u0430\u043c \u0441\u043a\u0430\u0437\u0430\u043b, \u0434\u0438\u0437\u0430\u0439\u043d \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430. \u0410 \u0432\u00a0\u043a\u043d\u0438\u0433\u0435\u00a0 \u041f\u043e\u043d\u0433 \u0427\u0443 \u043a\u0440\u043e\u043c\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u044f\u00a0 \u0435\u0449\u0435 \u0435\u0441\u0442\u044c \u0438 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 FIFO, \u0447\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u044e. \u0412 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043c\u043d\u0435 \u0441\u0442\u0430\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e,\u00a0 \u043a\u0430\u043a YRV \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u0434\u0438\u0437\u0430\u0439\u043d\u044b \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u043e\u0440\u0442\u043e\u0432,\u00a0 \u0438 \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432\u00a0 \u044f \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0441\u044f \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 \u043e\u0442 Ben Marshall.<\/p>\n<p>\u0421\u0438\u0433\u043d\u0430\u043b TX enable (wr_uart, uart_tx_en) \u0434\u043b\u044f \u043c\u043e\u0434\u0443\u043b\u044f UART \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438\u0437 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 HWRITE \u0448\u0438\u043d\u044b AHB-Lite, \u0432 YRV \u044d\u0442\u043e \u0441\u0438\u0433\u043d\u0430\u043b mem_write.\u00a0 \u0421\u0438\u0433\u043d\u0430\u043b mem_trans[1:0] \u0440\u0430\u0432\u043d\u044b\u0439 2\u2019b11 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0447\u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f.\u00a0<\/p>\n<pre><code class=\"vhdl\">io_wr_reg &lt;=mem_write &amp;&amp; &amp;mem_trans \u00a0 &amp;&amp; (mem_addr[31:16] == `IO_BASE);<\/code><\/pre>\n<p>\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0431\u0430\u0439\u0442\u0430, \u0432\u044b\u0431\u043e\u0440 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u043c mem_ble<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/856\/969\/cb5\/856969cb5ee6372545d966183b41b808.png\" width=\"476\" height=\"188\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/856\/969\/cb5\/856969cb5ee6372545d966183b41b808.png\"\/><\/figure>\n<pre><code class=\"vhdl\">ld_wdata\u00a0 = io_wr_reg &amp;&amp; port7_dec &amp;&amp; mem_ble_reg[0] &amp;&amp; mem_ready;<\/code><\/pre>\n<p>\u0412\u044b\u0432\u043e\u0434 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u0442\u0430, \u043c\u043b\u0430\u0434\u0448\u0438\u0439 \u0431\u0430\u0439\u0442 \u0434\u0430\u043d\u043d\u044b\u0435, \u0441\u0442\u0430\u0440\u0448\u0438\u0439 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u043e\u0440\u0442\u0430:\u00a0<\/p>\n<pre><code class=\"vhdl\">assign port7_dat = {5'h0, bufr_ovr, bufr_full, bufr_empty, rx_rdata};<\/code><\/pre>\n<p>MIDI \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043d\u0435 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442 \u0432\u044b\u0432\u043e\u0434\u0430 \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u0442\u0430\u043c \u0432\u0441\u0435 \u043f\u0440\u043e\u0449\u0435:<\/p>\n<pre><code class=\"vhdl\">assign portMIDI_dat = {7'h0, midi_bufr_full, 8'b0};<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u043e\u0440\u0442\u043e\u0432 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0434\u0432\u0430: \u043f\u0435\u0440\u0432\u044b\u0439 &#8212; \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0432\u0432\u043e\u0434\u0430 \u0432\u044b\u0432\u043e\u0434\u0430, \u0432\u0442\u043e\u0440\u0430\u044f &#8212; MIDI \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441. \u041d\u043e \u043d\u0438\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e, \u0447\u0442\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435\u00a0 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432 \u0432\u0438\u0434\u0435 \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0433\u043e baud rate 32500 \u0434\u043b\u044f MIDI \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0431\u0443\u0434\u0443\u0442 \u043d\u0435 \u0432\u0430\u0436\u043d\u044b.<\/p>\n<h3>\u041e\u0431\u0449\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430<\/h3>\n<p>\u00a0\u0422\u0430\u043a \u043a\u0430\u043a \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u0442, \u0434\u043b\u044f \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0445\u0432\u043e\u0441\u0442\u043e\u0432 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u0442, \u0440\u0435\u0436\u0438\u043c\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e\u0440\u0442\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u0435\u043c.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/660\/460\/8e1\/6604608e1029a8c65ccfeba4c61974af.png\" width=\"1048\" height=\"784\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/660\/460\/8e1\/6604608e1029a8c65ccfeba4c61974af.png\"\/><\/figure>\n<p>\u041c\u043e\u0434\u0443\u043b\u044c \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f \u043d\u043e\u0442 \u0431\u044b\u043b \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043d \u0438\u0437 \u043b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b 11_note_recognition Basics graphics music , \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u043c\u043e\u0434\u0443\u043b\u0435\u043c \u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d \u0441 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u043c \u043f\u043e\u0440\u0442\u043e\u043c YRV.<\/p>\n<pre><code class=\"vhdl\">module note ( \u00a0\u00a0\u00a0\u00a0input clk, \u00a0\u00a0\u00a0\u00a0input rst, \u00a0\u00a0\u00a0\u00a0input\u00a0 \u00a0 \u00a0 \u00a0 [ \u00a0 \u00a0 \u00a0 \u00a0 23:0] mic, \u00a0\u00a0\u00a0\u00a0output\u00a0 \u00a0 \u00a0 \u00a0 [w_note - 1:0] o_note );<\/code><\/pre>\n<h2>Rust \u0438 RISC-V<\/h2>\n<h3>\u0421\u0431\u043e\u0440\u043a\u0430 \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b<\/h3>\n<p>\u0414\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043a\u043e\u0434\u0430 \u043d\u0430 Rust\u00a0 \u043f\u043e\u0434 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 RISC-V \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u0441\u044f \u043d\u0430 \u043d\u043e\u0447\u043d\u043e\u0439 \u043a\u0430\u043d\u0430\u043b \u0432\u044b\u043f\u0443\u0441\u043a\u0430 Rust<\/p>\n<pre><code class=\"bash\">$ rustup toolchain install nightly  $ rustup override set nightly<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b RISC-V. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439<\/p>\n<pre><code class=\"bash\">$\u00a0 rustc --print target-list<\/code><\/pre>\n<p>\u0412 \u0441\u043f\u0438\u0441\u043a\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440 \u043d\u0435\u0442 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b riscv32ic, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c\u0441\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 riscv32i<\/p>\n<pre><code class=\"bash\">$ rustup target add riscv32i-unknown-none-elf\u00a0<\/code><\/pre>\n<p>\u0414\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0430\u044f \u0441\u0431\u043e\u0440\u043a\u0430 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438\u00a0<\/p>\n<pre><code class=\"bash\">$ cargo build -Z build-std=core --target riscv32i-unknown-none-elf --release<\/code><\/pre>\n<p>\u0414\u043b\u044f \u0438\u0437\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f objcopy \u0438\u0437 \u0441\u043e\u0441\u0442\u0430\u0432\u0430 GCC \u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u043e\u0439 bin2hex \u043e\u0442 \u043e\u0442 SiFive:<\/p>\n<pre><code class=\"bash\">$ riscv-none-elf-objcopy.exe -O binary ..\/target\/riscv32i-unknown-none-elf\/release\/app app.bin  $ python bin2hex\/freedom-bin2hex.py -w16 app.bin >code.mem16<\/code><\/pre>\n<p>\u0412 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u044f \u0440\u0435\u0448\u0438\u043b \u0432\u0441\u044e \u0441\u0431\u043e\u0440\u043a\u0443 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u0434 WIndows, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u043c load.bat \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f\u00a0<\/p>\n<pre><code class=\"bash\">rem The port number should be adjusted set a=6 mode com%a% baud=57600 parity=n data=8 stop=1 to=off xon=off odsr=off octs=off dtr=off rts=off idsr=off type code.mem16 >\\.\\COM%a%<\/code><\/pre>\n<h3>Runtime \u0434\u043b\u044f\u00a0 YRV-Plus<\/h3>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 runtime \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u0440\u0435\u0439\u0442 riscv-rt (<a href=\"https:\/\/github.com\/rust-embedded\/riscv-rt\" rel=\"noopener noreferrer nofollow\"><u>https:\/\/github.com\/rust-embedded\/riscv-rt<\/u><\/a>) \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u0442\u0430\u0440\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 0.11.0. \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0438 \u043e\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 master \u0432\u0435\u0442\u043a\u0438, \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u0439 \u043a\u043e\u0434 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d \u0432 \u0432\u0438\u0434\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 asm.S, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u0441 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0438\u0437 \u043a\u043d\u0438\u0433\u0438 Inside an Open-Source Processor. \u041a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u0439 \u043a\u043e\u0434 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d \u0432 \u0432\u0438\u0434\u0435 \u0444\u0430\u0439\u043b\u0430 yrv.S \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0441\u0442\u0430\u0440\u0442\u0430 \u0438\u00a0 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 YRV.\u00a0 \u0422\u0430\u043a\u0436\u0435 \u0431\u044b\u043b \u0438\u0437\u043c\u0435\u043d\u0435\u043d \u043b\u0438\u043d\u043a\u0435\u0440 \u0441\u043a\u0440\u0438\u043f\u0442 link.x \u043f\u043e\u0434 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430.<\/p>\n<p>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a\u0440\u0435\u0439\u0442\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e, \u0432 \u0444\u0430\u0439\u043b\u0435 Cargo.toml \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0437\u0430\u0432\u0438\u0441\u043c\u043e\u0441\u0442\u044c:<\/p>\n<pre><code class=\"lua\">[dependencies]  riscv-rt = { path = \"..\/riscv-rt\" }<\/code><\/pre>\n<p>\u0422\u0430\u043c \u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e .cargo \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0444\u0430\u0439\u043b config \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=\"lua\">[target.riscv32i-unknown-none-elf]  rustflags = [  \u00a0\u00a0\"-C\", \"link-arg=-Tlink.x\"  ]  [build]  target = \"riscv32i-unknown-none-elf\"<\/code><\/pre>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u0432 RISC-V \u043f\u043e\u0440\u0442\u044b \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0430\u043c\u044f\u0442\u044c, \u0442\u043e \u0441 \u043d\u0438\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432 unsafe \u0431\u043b\u043e\u043a\u0430\u0445. \u0421\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043f\u043e\u0441\u043e\u0431 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442, \u0442\u043e\u0447\u043d\u0435\u0435 \u0431\u0443\u0434\u0435\u0442, \u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437:<\/p>\n<pre><code class=\"rust\">pub fn tm()-> u16 {\u00a0\u00a0\u00a0\u00a0 let\u00a0 buffer: &amp;mut u16 = unsafe { &amp;mut *(0xFFFF000A as *mut u16) }; *buffer }<\/code><\/pre>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 read_volatile()<\/p>\n<pre><code class=\"rust\">pub fn get_data_mem()-> u16 {\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0let addr = 0xFFFF0016u32; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0unsafe { \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0(addr as *mut u16).read_volatile() \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} }<\/code><\/pre>\n<p>\u041d\u043e \u043c\u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u0441\u044f \u0441\u043f\u043e\u0441\u043e\u0431 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043f\u043e\u0440\u0442\u0430\u043c\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440, \u0442\u0430\u043a \u043a\u0430\u043a \u0430\u043d\u0430\u043b\u0438\u0437 \u043a\u043e\u0434\u0430 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 objdump \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u0447\u0442\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0432 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434:\u00a0<\/p>\n<pre><code class=\"rust\">pub fn get_data()-> u16 {\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0let mut out_half; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0unsafe { \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0core::arch::asm!( \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"lui\u00a0 \u00a0 t0,0xffff0\", \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"lh {}, 16(t0)\", \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0out(reg) out_half\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0); } \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0out_half }<\/code><\/pre>\n<p>\u0417\u0430\u043f\u0438\u0441\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e:<\/p>\n<pre><code class=\"rust\">\u00a0unsafe { \u00a0\u00a0\u00a0\u00a0core::arch::asm!(       \u00a0\u00a0\"lui \u00a0 \u00a0 t0,0xffff0\",   \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"sb {0}, 14(t0)\", \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0in(reg) byte\u00a0\u00a0\u00a0\u00a0 ); }<\/code><\/pre>\n<p>\u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0438 \u043e\u0442 \u043f\u0435\u0440\u0432\u044b\u0445 \u0434\u0432\u0443\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 unsafe \u0431\u043b\u043e\u043a\u0430 \u0445\u043e\u0442\u044c \u043a\u0430\u043a-\u0442\u043e \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043d\u043e- \u0432\u0441\u0435 \u0442\u0430\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440, \u0434\u0430 \u0438 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043f\u043e\u0440\u0442\u043e\u043c \u0432 \u044d\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u0430. \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Rust \u0441 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u043c YRV-Plus \u043f\u043e\u043b\u0443\u0447\u0435\u043d.\u00a0<\/p>\n<h2>\u0410\u0442\u043e\u043c\u043d\u044b\u0439 \u043c\u0430\u043a\u0440\u043e\u0441 println!<\/h2>\n<p>\u0418 \u0442\u0430\u043a \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u0442, \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435 \u0436\u0438\u0437\u043d\u044c \u0431\u0435\u0437 \u043c\u0430\u043a\u0440\u043e\u0441\u0430 println! \u0441\u043a\u0443\u0447\u043d\u0430. \u0422\u0443\u0442 \u044f \u043e\u0431\u0440\u0430\u0442\u0438\u043b\u0441\u044f \u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0443 Writing an OS in Rust (<a href=\"https:\/\/os.phil-opp.com\/\" rel=\"noopener noreferrer nofollow\"><u>https:\/\/os.phil-opp.com\/<\/u><\/a>), \u0441\u0442\u0430\u0442\u044c\u044f VGA Text Mode. \u0418 \u0442\u0443\u0442 \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u043e\u0441\u044c \u0441\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 &#8212; \u043c\u0430\u043a\u0440\u043e\u0441 lazy_static! \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u043d\u0430 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 RV32I \u0432\u0432\u0438\u0434\u0443 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f Atomic \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439.\u00a0<\/p>\n<p>\u0418 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434 \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043d\u0435 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0434 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 RV32I, \u0442\u0430\u043a \u043a\u0430\u043a \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 Mutex \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 atomic \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439<\/p>\n<pre><code class=\"rust\">  \/\/ in src\/vga_buffer.rs  use spin::Mutex;  ...  lazy_static! { \u00a0\u00a0\u00a0\u00a0pub static ref WRITER: Mutex&lt;Writer> = Mutex::new(Writer { \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0column_position: 0, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0color_code: ColorCode::new(Color::Yellow, Color::Black), \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0buffer: unsafe { &amp;mut *(0xb8000 as *mut Buffer) }, \u00a0\u00a0\u00a0\u00a0}); }<\/code><\/pre>\n<p>    \u042f\u0434\u0440\u043e YRV \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 \u201cA\u201d, \u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0447\u0430\u0441\u0442\u0438 Atomic Memory Operations, \u043d\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 Mutex \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 Load-Reserved\/Store-Conditional \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439.\u00a0<\/p>\n<p>\u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f lr.w rd,rs1 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0441\u043b\u043e\u0432\u043e \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 \u0432 rs1, \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u043a\u043e\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 rd \u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 \u043f\u0430\u043c\u044f\u0442\u0438. \u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f sc.w rd,rs1,rs2 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0441\u043b\u043e\u0432\u043e \u0432 rs2 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 \u0432 rs1, \u043f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438, \u0447\u0442\u043e \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443 \u0432\u0441\u0435 \u0435\u0449\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0440\u0435\u0437\u0435\u0440\u0432\u0430\u0446\u0438\u044f, sc \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043d\u043e\u043b\u044c \u0432 rd \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0441\u043f\u0435\u0445\u0430 \u0438\u043b\u0438 \u043d\u0435\u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u043a\u043e\u0434 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435\u0443\u0434\u0430\u0447\u0438. \u0412\u043e\u0442 \u0442\u0443\u0442 \u0442\u043e \u0438 \u043d\u0443\u0436\u0435\u043d \u043a\u044d\u0448, \u044d\u0442\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u043a\u044d\u0448\u0430, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0436\u0435 \u0435\u0433\u043e \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0449\u0430\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0422\u0430\u043a \u043a\u0430\u043a \u0443 \u043d\u0430\u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043e\u0434\u043d\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u0430\u044f, \u0442\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430\u043c \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b \u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0443\u0441\u043f\u0435\u0448\u043d\u044b\u043c\u0438.<\/p>\n<p>\u0414\u0435\u043a\u043e\u0434\u0435\u0440\u00a0 \u0434\u043b\u044f AMO \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442, \u0430 \u0441\u0430\u043c\u0438 AMO \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u043d\u0430 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c ALU.\u00a0<\/p>\n<pre><code class=\"vhdl\">\u00a0\u00a0always @ (imm_6_reg or ls_amo_add or ls_amo_reg or ls_data_reg or mem_rdat) begin \u00a0\u00a0\u00a0\u00a0case ({ls_amo_reg, imm_6_reg[11:7]}) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a06'b100000: ls_amo_out = ls_amo_add; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a06'b100100: ls_amo_out = ls_data_reg ^ mem_rdat; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a06'b101000: ls_amo_out = ls_data_reg | mem_rdat; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a06'b101100: ls_amo_out = ls_data_reg &amp; mem_rdat; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0default: \u00a0 ls_amo_out = ls_data_reg; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0endcase \u00a0\u00a0\u00a0\u00a0end<\/code><\/pre>\n<p>\u0424\u043e\u0440\u043c\u0430\u0442 LR\/SC \u0438 AMO \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u0435\u043d, \u0438 \u0435\u0441\u043b\u0438 \u043c\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 AMO, \u0442\u043e \u0432\u0441\u0435 \u043e\u043d\u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044e\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u043f\u0430\u043c\u044f\u0442\u044c. \u0422\u0430\u043a \u043a\u0430\u043a \u0443 \u043d\u0430\u0441 \u043e\u0434\u043d\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430, \u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c LR\/SC \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 AMO.\u00a0<\/p>\n<h3>lr.w<\/h3>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\">31-27<\/p>\n<\/td>\n<td>\n<p align=\"left\">26<\/p>\n<\/td>\n<td>\n<p align=\"left\">25<\/p>\n<\/td>\n<td>\n<p align=\"left\">24-20<\/p>\n<\/td>\n<td>\n<p align=\"left\">19-15<\/p>\n<\/td>\n<td>\n<p align=\"left\">14-12<\/p>\n<\/td>\n<td>\n<p align=\"left\">11-7<\/p>\n<\/td>\n<td>\n<p align=\"left\">6-2<\/p>\n<\/td>\n<td>\n<p align=\"left\">1-0<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">00010<\/p>\n<\/td>\n<td>\n<p align=\"left\">aq<\/p>\n<\/td>\n<td>\n<p align=\"left\">rl<\/p>\n<\/td>\n<td>\n<p align=\"left\">00000<\/p>\n<\/td>\n<td>\n<p align=\"left\">rs1<\/p>\n<\/td>\n<td>\n<p align=\"left\">010<\/p>\n<\/td>\n<td>\n<p align=\"left\">rd<\/p>\n<\/td>\n<td>\n<p align=\"left\">01011<\/p>\n<\/td>\n<td>\n<p align=\"left\">11<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h3>amoadd.w<\/h3>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\">31-27<\/p>\n<\/td>\n<td>\n<p align=\"left\">26<\/p>\n<\/td>\n<td>\n<p align=\"left\">25<\/p>\n<\/td>\n<td>\n<p align=\"left\">24-20<\/p>\n<\/td>\n<td>\n<p align=\"left\">19-15<\/p>\n<\/td>\n<td>\n<p align=\"left\">14-12<\/p>\n<\/td>\n<td>\n<p align=\"left\">11-7<\/p>\n<\/td>\n<td>\n<p align=\"left\">6-2<\/p>\n<\/td>\n<td>\n<p align=\"left\">1-0<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">00000<\/p>\n<\/td>\n<td>\n<p align=\"left\">aq<\/p>\n<\/td>\n<td>\n<p align=\"left\">rl<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>rs2<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">rs1<\/p>\n<\/td>\n<td>\n<p align=\"left\">010<\/p>\n<\/td>\n<td>\n<p align=\"left\">rd<\/p>\n<\/td>\n<td>\n<p align=\"left\">01011<\/p>\n<\/td>\n<td>\n<p align=\"left\">11<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c lr.w rd,rs1\u00a0 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u0432\u0438\u0434\u0435\u00a0 amoadd.w rd,zero,(rs1) \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0435\u0441\u043b\u0438 \u043c\u044b \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u043c ALU \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e. \u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u044c.<\/p>\n<pre><code class=\"vhdl\">\u00a0\u00a0always @ (imm_6_reg or ls_amo_add or ls_amo_reg or ls_data_reg or mem_rdat) begin \u00a0\u00a0\u00a0\u00a0case ({ls_amo_reg, imm_6_reg[11:7]}) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a06'b100000: ls_amo_out = ls_amo_add; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a06'b100100: ls_amo_out = ls_data_reg ^ mem_rdat; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a06'b101000: ls_amo_out = ls_data_reg | mem_rdat; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a06'b101100: ls_amo_out = ls_data_reg &amp; mem_rdat; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a06'b100010: ls_amo_out = mem_rdat; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0default: \u00a0 ls_amo_out = ls_data_reg; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0endcase \u00a0\u00a0\u00a0\u00a0end<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u043c\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 ALU \u0434\u043b\u044f AMO \u0442\u043e \u0443\u0432\u0438\u0434\u0438\u043c \u0447\u0442\u043e, \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f sc.w \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u043d\u043e\u0432\u0438\u0434\u043d\u043e\u0441\u0442\u044c\u044e amoswap \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u043d\u0443\u043b\u0435\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 ALU \u044f\u0434\u0440\u0430 YRV \u0438\u043c\u0435\u0435\u0442 \u0434\u0432\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0441\u043a\u0432\u043e\u0437\u043d\u043e\u0439\u00a0 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430, \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 AMO. \u0425\u043e\u0442\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e ALU \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u20180 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u0434\u043b\u044f ALU \u0435\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u00a0 sc.w , \u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c 0 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u00a0 <strong><em>a_zero_5_reg<\/em><\/strong><\/p>\n<pre><code class=\"vhdl\">assign amo_4_dec_sc = (opc_4_amo\u00a0 &amp;&amp; fn3_4_2 &amp;&amp; fn7_4_sc);\u00a0\u00a0\u00a0\u00a0 a_zero_5_reg &lt;= amo_4_dec_sc; \u00a0\u00a0always @ (...) begin \u00a0\u00a0\u00a0\u00a0casex ({a_ext_5_reg, a_tst_5_reg, a_xor_5_reg, a_and_5_reg, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0a_or_5_reg,\u00a0 a_add_5_reg, a_bin_5_reg, a_ain_5_reg, a_zero_5_reg}) \/\/synthesis parallel_case \u00a0\u00a0\u00a0\u00a0\u00a0\u00a09'bxxxxxxxx1: alu_5_out = 32'h0; \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/* zero for sc *\/ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a09'bxxxxxxx1x: alu_5_out = alu_5_ain; \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/* pass a\u00a0 \u00a0 *\/ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a09'bxxxxxx1xx: alu_5_out = alu_5_bin; \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/* pass b\u00a0 \u00a0 *\/ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a09'bxxxxx1xxx: alu_5_out = alu_5_add; \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/* add\/sub \u00a0 *\/ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a09'bxxxx1xxxx: alu_5_out = alu_5_ain | alu_5_bin; \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/* or\u00a0 \u00a0 \u00a0 \u00a0 *\/ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a09'bxxx1xxxxx: alu_5_out = alu_5_ain &amp; alu_5_bin; \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/* and \u00a0 \u00a0 \u00a0 *\/ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a09'bxx1xxxxxx: alu_5_out = alu_5_ain ^ alu_5_bin; \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/* xor \u00a0 \u00a0 \u00a0 *\/ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a09'bx1xxxxxxx: alu_5_out = {31'h0, \u00a0 \u00a0 alu_5_tst};\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/* test\u00a0 \u00a0 \u00a0 *\/ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a09'b1xxxxxxxx: alu_5_out = alu_5_ext; \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/* external\u00a0 *\/ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0default: \u00a0 \u00a0 alu_5_out = 32'h0; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0endcase \u00a0\u00a0\u00a0\u00a0end<\/code><\/pre>\n<h2>\u041d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430<\/h2>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u0432 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430\u0445 \u043d\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b RC32IA, \u0442\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 JSON \u0444\u0430\u0439\u043b<\/p>\n<pre><code class=\"bash\">\u00a0rustc -Z unstable-options --target=riscv32i-unknown-none-elf --print target-spec-json<\/code><\/pre>\n<p>\u0412 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 JSON \u0444\u0430\u0439\u043b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0444\u043b\u0430\u0433 atomic \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 &#171;features&#187;: &#171;+a&#187;, \u0442\u0430\u043a \u0436\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0447\u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u0442\u0438\u043f\u043e\u0432\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430\u00a0 &#171;is-builtin&#187;: false.<\/p>\n<pre><code class=\"json\">{ \u00a0\u00a0\"arch\": \"riscv32\", \u00a0\u00a0\"cpu\": \"generic-rv32\", \u00a0\u00a0\"data-layout\": \"e-m:e-p:32:32-i64:64-n32-S128\", \u00a0\u00a0\"eh-frame-header\": false, \u00a0\u00a0\"emit-debug-gdb-scripts\": false, \u00a0\u00a0\"features\": \"+a\", \u00a0\u00a0\"is-builtin\": false, \u00a0\u00a0\"linker\": \"rust-lld\", \u00a0\u00a0\"linker-flavor\": \"ld.lld\", \u00a0\u00a0\"llvm-target\": \"riscv32\", \u00a0\u00a0\"max-atomic-width\": 32, \u00a0\u00a0\"panic-strategy\": \"abort\", \u00a0\u00a0\"relocation-model\": \"static\", \u00a0\u00a0\"target-pointer-width\": \"32\" }<\/code><\/pre>\n<p>\u0421\u0431\u043e\u0440\u043a\u0430 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e JSON \u0444\u0430\u0439\u043b\u0430.<\/p>\n<pre><code class=\"bash\">$ cargo build -Z build-std=core --target riscv32ia-unknown-none-elf.json --release<\/code><\/pre>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0441 <em>lazy_static!<\/em> \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f , \u0438 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 objdump \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0447\u0442\u043e \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0435\u043c \u043a\u043e\u0434\u0435 \u0435\u0441\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438\u00a0 <em>LR\/SC.<\/em> \u0427\u0442\u043e \u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c.<\/p>\n<h3>Global allocator<\/h3>\n<p>\u0414\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u0441\u0447\u0430\u0441\u0442\u044c\u044f \u043d\u0430\u043c \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u0443\u0447\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c global allocator. \u0422\u0430\u043a \u043a\u0430\u043a \u043d\u0430\u0448 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043c\u044c\u044e\u0442\u0435\u043a\u0441\u044b \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 linked_allocator.\u00a0<\/p>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u043b\u0438\u043d\u043a\u0435\u0440 \u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0440\u0430\u0437\u0434\u0435\u043b heap<\/p>\n<pre><code class=\"lua\">\u00a0\u00a0.heap (NOLOAD) : \u00a0\u00a0{ \u00a0\u00a0\u00a0\u00a0_sheap = .; \u00a0\u00a0\u00a0\u00a0. += _heap_size; \u00a0\u00a0\u00a0\u00a0. = ALIGN(4); \u00a0\u00a0\u00a0\u00a0_eheap = .; \u00a0\u00a0} > BRAM<\/code><\/pre>\n<p>\u0418 \u0434\u043e\u0431\u0430\u0432\u0438\u043c allocator<\/p>\n<pre><code class=\"rust\">#[global_allocator]  static ALLOCATOR: LockedHeap = LockedHeap::empty();  extern \"C\" { \u00a0\u00a0\u00a0\u00a0static _sheap: u8; \u00a0\u00a0\u00a0\u00a0static _heap_size: u8; }  pub fn init_heap() { \u00a0\u00a0\u00a0\u00a0unsafe { \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0let heap_start = &amp;_sheap\u00a0 as *const u8 as *mut u8; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0let heap_size = &amp;_heap_size as *const u8 as usize; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0ALLOCATOR.lock().init(heap_start, heap_size); \u00a0\u00a0\u00a0\u00a0} }<\/code><\/pre>\n<p>\u0422\u0430\u043a \u0436\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0431\u0440\u0430\u043b\u0441\u044f alloc<\/p>\n<pre><code class=\"bash\">cargo build -Z build-std=core,alloc --target riscv32ia-unknown-none-elf.json --release<\/code><\/pre>\n<p>\u0418 \u0423\u0440\u0430! \u0443 \u043d\u0430\u0441 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f<\/p>\n<pre><code class=\"rust\">let mut xs: Vec&lt;u32> = Vec::new();<\/code><\/pre>\n<h3>MIDI<\/h3>\n<p>\u0421\u0430\u043c\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u043a\u043e\u043c\u0430\u043d\u0434 MIDI \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u0430 \u0438 \u043d\u0435 \u043f\u0440\u0435\u0442\u0435\u043d\u0434\u0443\u0435\u0442 \u043d\u0430 \u044d\u0442\u0430\u043b\u043e\u043d. \u041a\u043e\u043c\u0430\u043d\u0434\u0443 MIDI \u043c\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043c \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435<\/p>\n<pre><code class=\"rust\">pub struct Message {  \u00a0\u00a0\u00a0\u00a0pub size: usize,  \u00a0\u00a0\u00a0\u00a0pub command: [u8;3],  }<\/code><\/pre>\n<p>\u0418 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f &#8212; \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043d\u043e\u0442:\u00a0<\/p>\n<pre><code class=\"rust\">\u00a0\u00a0\u00a0let note_A_on = Message::new( [0x90,0x45,0x40], 3); \u00a0\u00a0\u00a0let note_B_on = Message::new( [0x90,0x47,0x40], 3); ... \u00a0\u00a0\u00a0let note_A_off = Message::new( [0x80,0x45,0x00], 3); \u00a0\u00a0\u00a0let note_B_off = Message::new( [0x80,0x47,0x00], 3);<\/code><\/pre>\n<p>\u0418 \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438\u00a0 match \u0431\u0443\u0434\u0435\u043c \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043d\u043e\u0442\u044b (\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u0432 \u043a\u043e\u0434\u0435)<\/p>\n<pre><code class=\"rust\">match note { \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a04 => midi::send_message(&amp;note_A_on), \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a01 => midi::send_message(&amp;note_B_on), \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a02048 => midi::send_message(&amp;note_C_on), \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0512 => midi::send_message(&amp;note_D_on), \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0128 => midi::send_message(&amp;note_E_on), \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a064 => midi::send_message(&amp;note_F_on), \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a016 => midi::send_message(&amp;note_G_on), \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0_ =>\u00a0 sleep(1), \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0};<\/code><\/pre>\n<pre><code class=\"rust\">pub fn write(byte: u8) {     for _ in 0..700 {         unsafe { core::arch::asm!(\"nop\"); }     }      unsafe {          core::arch::asm!(         \"lui     t0,0xffff0\",         \"sb {0}, 20(t0)\",         in(reg) byte     ); } }  pub fn send_message(message:&amp;Message) {     for n in 0..message.size {         write(message.command[n]);     } }<\/code><\/pre>\n<p>\u041d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0438 \u043d\u0435 \u0441\u0442\u0430\u043b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u043e\u0440\u0442\u0430 \u0438 \u0441\u0434\u0435\u043b\u0430\u043b \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044e \u0447\u0435\u0440\u0435\u0437 NOP.<\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c &#8212; \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a \u0447\u0442\u043e\u0431\u044b MIDI \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u0432 Windows. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u0432\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 loopMIDI\u00a0 (<a href=\"https:\/\/www.tobias-erichsen.de\/software\/loopmidi.html\" rel=\"noopener noreferrer nofollow\"><u>https:\/\/www.tobias-erichsen.de\/software\/loopmidi.html<\/u><\/a>) \u0438 Hairless MIDI&lt;->Serial Bridge \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0432 loopMIDI:<\/p>\n<p>\u00a0<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/367\/438\/5de\/3674385deb77657bb03c0aa7d2c3a70a.png\" width=\"606\" height=\"310\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/367\/438\/5de\/3674385deb77657bb03c0aa7d2c3a70a.png\"\/><\/figure>\n<p>\u0414\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c MIDI-OX , \u0438 \u043c\u043e\u0436\u0435\u043c \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 &#8212; \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043d\u043e\u0442<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a18\/085\/a06\/a18085a06563bcec5e1b0d25cb20138e.png\" width=\"721\" height=\"479\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a18\/085\/a06\/a18085a06563bcec5e1b0d25cb20138e.png\"\/><\/figure>\n<p>\u0410 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0443\u044e \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u00a0<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5da\/584\/21c\/5da58421c3499a9f6c2b62b1d7256ad8.png\" width=\"660\" height=\"417\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5da\/584\/21c\/5da58421c3499a9f6c2b62b1d7256ad8.png\"\/><\/figure>\n<h2>\u0412\u044b\u0432\u043e\u0434<\/h2>\n<p>\u041c\u044b \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 YRV \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0438\u043c\u0435\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438 \u043d\u0430 Rust. \u041a\u0430\u043a \u043c\u044b \u0443\u0432\u0438\u0434\u0435\u043b\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 atomic \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u043a\u0443\u0434\u0430 \u0431\u043e\u043b\u0435\u0435 \u0432\u0430\u0436\u043d\u0430 \u0447\u0435\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0434\u0435\u043b\u0435\u043d\u0438\u044f. \u0412 \u0442\u043e\u0436\u0435 \u0432\u0440\u0435\u043c\u044f \u0435\u0441\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 Rust \u043d\u0430 \u0433\u043e\u043b\u043e\u043c \u0436\u0435\u043b\u0435\u0437\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u043b\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u0438\u043b\u0438\u00a0 \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043b\u044f \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043a\u0443\u0440\u0441\u0430 \u043f\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u043c \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u0447\u0435\u043c-\u0442\u043e \u044d\u043a\u0437\u043e\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c, \u0442\u043e \u043d\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u043e\u043a\u0443\u043f\u043a\u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430, \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u043e\u0432\u0430\u043d \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u041f\u041b\u0418\u0421. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0435\u0435 \u0432\u0430\u0441 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0440\u0442\u043e\u0432, \u0442\u0430\u043a \u043a\u0430\u043a \u041f\u041b\u0418\u0421 \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 ASIC \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0432\u0438\u0442\u043e\u0439 \u0440\u0430\u0437\u043b\u0430\u043f\u0438\u0441\u0442\u043e\u0441\u0442\u044c\u044e.<\/p>\n<p>\u041d\u0443 \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0432\u0438\u0434\u0435\u043e!<\/p>\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/659ac7ef627c4d30973cc1f1\" data-style=\"\" id=\"659ac7ef627c4d30973cc1f1\" width=\"\"><\/div>\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/659ac793627c4d30973cc1b1\" data-style=\"\" id=\"659ac793627c4d30973cc1b1\" width=\"\"><\/div>\n<p>\u0410\u0432\u0442\u043e\u0440 \u0432\u044b\u0440\u0430\u0436\u0430\u0435\u0442 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u043d\u043e\u0441\u0442\u044c <a class=\"mention\" href=\"\/users\/YuriPanchul\">@YuriPanchul<\/a>, <a href=\"https:\/\/habr.com\/ru\/users\/KeisN13\/\" rel=\"noopener noreferrer nofollow\">@KeisN13<\/a>  , \u0430 \u0442\u0430\u043a\u0436\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 OTUS \u043f\u043e \u043a\u0443\u0440\u0441\u0443 Rust Developer. Professional.<\/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\/784942\/\"> https:\/\/habr.com\/ru\/articles\/784942\/<\/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>Enterprise Muisc Graphics \u0438\u043b\u0438 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043e \u0442\u043e\u043c \u043a\u0430\u043a \u044f \u043f\u0440\u0438\u043a\u0440\u0443\u0447\u0438\u0432\u0430\u043b Rust \u0434\u043b\u044f RISC-V \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 YRV-Plus.<\/p>\n<h2>\u041d\u0430\u0447\u0430\u043b\u043e \u0438\u0441\u0442\u043e\u0440\u0438\u0438<\/h2>\n<p>\u042d\u0442\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0441 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043e\u0434\u043d\u0430\u0436\u0434\u044b \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0448\u0438\u0445 \u0432\u043e\u0441\u043a\u0440\u0435\u0441\u043d\u044b\u0445 \u0432\u0441\u0442\u0440\u0435\u0447 \u0432 Zoom \u042e\u0440\u0438\u0439 \u041f\u0430\u043d\u0447\u0443\u043b \/ Yuri Panchul <a class=\"mention\" href=\"\/users\/YuriPanchul\">@YuriPanchul<\/a> \u043e\u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0437\u043e\u0432\u0430\u043b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 YRV, \u043a\u0430\u043a \u201c\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0442\u043e\u0438\u0442 \u0433\u0434\u0435-\u043d\u0438\u0431\u0443\u0434\u044c \u0432 \u0442\u0435\u0440\u043c\u043e\u043c\u0435\u0442\u0440\u0435\u201d (\u0437\u0430 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0446\u0438\u0442\u0430\u0442\u044b \u043d\u0435 \u0440\u0443\u0447\u0430\u044e\u0441\u044c). \u0421\u0430\u043c \u043a\u0435\u0439\u0441 \u043c\u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c:\u00a0 \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u043d\u0435 \u0432\u0437\u044f\u0442\u044c DHT-11 \u0438 \u043d\u0435 \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0442 \u043d\u0435\u0433\u043e \u0447\u0435\u0440\u0435\u0437 ModBus. \u0422\u0430\u043a \u043a\u0430\u043a \u0443 \u043d\u0430\u0441 \u041f\u041b\u0418\u0421, \u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430 SystemVerilog \u0438\u00a0 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0443\u0447\u0435\u0431\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 &#8212; \u0431\u0435\u0440\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u0442\u0430 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439, \u043e\u0431\u0430 \u0432\u0438\u0434\u0430 \u043f\u043e\u0440\u0442\u043e\u0432 \u0432 YRV \u0435\u0441\u0442\u044c.\u00a0\u00a0<\/p>\n<p>\u041d\u043e \u0432 \u0441\u0431\u043e\u0440\u043d\u0438\u043a\u0435 \u043b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u044b\u0445 \u0440\u0430\u0431\u043e\u0442 Basic Graphics Music (<a href=\"https:\/\/habr.com\/ru\/articles\/762108\/\" rel=\"noopener noreferrer nofollow\">https:\/\/habr.com\/ru\/articles\/762108\/<\/a>) \u0435\u0441\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 &#8212; \u044d\u0442\u043e \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435 \u043d\u043e\u0442 \u0438 \u043c\u0435\u043b\u043e\u0434\u0438\u0438. \u041f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u043b\u0435\u0439\u0442\u0443, \u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u0442\u0430 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c MIDI \u043f\u043e\u0440\u0442 &#8212; \u044d\u0442\u043e \u0432\u0435\u0434\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u0442? \u0422\u0435\u043c \u0431\u043e\u043b\u0435\u0435, \u0447\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u044b \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0434\u043b\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u0435 \u043d\u0430 \u0444\u043e\u0440\u0442\u0435\u043f\u0438\u0430\u043d\u043e. \u0418, \u0442\u0430\u043a \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u0432 \u0441 \u042e\u0440\u0438\u0435\u043c \u0438\u0434\u0435\u044e,\u00a0 proof of concept \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439: \u0437\u0432\u0443\u043a \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u043d\u044b\u0439 \u0438\u0437 \u0444\u043b\u0435\u0439\u0442\u044b \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d \u043d\u043e\u0442\u043e\u0439 \u0432 MuseScore 4.<\/p>\n<p>\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0434\u0440\u0443\u0433\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043d\u0435 \u0434\u0430\u0432\u0430\u043b\u0430 \u043f\u043e\u043a\u043e\u044f &#8212;\u00a0 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0438 \u0441\u0440\u0435\u0434\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 YRV-Plus. \u041f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u043d\u0430\u0434\u00a0 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c\u00a0 \u201c\u0420\u0435\u0442\u0440\u043e-\u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u0443\u0440\u043e\u0432\u043d\u044f \u00ab\u0420\u0430\u0434\u0438\u043e-86\u0420\u041a\u00bb \u0441 RISC-V \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u043c \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 OMDAZZ\u201d \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0432\u043e\u0437\u043d\u0438\u043a \u0432\u043e\u043f\u0440\u043e\u0441 &#8212; \u0433\u0434\u0435 \u0431\u0440\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440, \u0442\u0435\u043c \u0431\u043e\u043b\u0435\u0435, \u0447\u0442\u043e \u0438\u0445 \u0434\u0432\u0430. \u0414\u043b\u044f \u0441\u0435\u0431\u044f\u00a0 \u044f \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0435\u0433\u043e \u0441\u043e\u0431\u0440\u0430\u043b \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432,\u00a0 \u043d\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u0442\u044c \u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0434\u0440\u0443\u0433\u0438\u043c &#8212; \u044d\u0442\u043e \u0447\u0435\u0440\u0435\u0441\u0447\u0443\u0440. \u0411\u0440\u0430\u0442\u044c \u0441\u0431\u043e\u0440\u043a\u0438 \u0443 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 &#8212; \u0441\u0442\u044b\u0434\u043d\u043e. \u0422\u0430\u043a\u0436\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0438\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441 \u0441\u043e \u0441\u0440\u0435\u0434\u043e\u0439, \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043d\u0435 \u0445\u0443\u0436\u0435 \u0447\u0435\u043c \u0443 SiFive, \u043d\u043e \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043a\u0440\u043e\u043c\u0435 C, \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u201c\u0443\u043c\u043d\u043e\u0433\u043e \u043f\u0430\u044f\u043b\u044c\u043d\u0438\u043a\u0430\u201d\u00a0 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0435\u0449\u0435 \u0438 Verilog.<\/p>\n<p>\u041e\u0434\u0438\u043d \u0438\u0437 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u0439 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0439 \u043e\u0431\u043c\u043e\u043b\u0432\u0438\u043b\u0441\u044f,\u00a0 \u0447\u0442\u043e \u0434\u043b\u044f \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u043d\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u043f\u043e\u0442\u0438\u0445\u043e\u043d\u044c\u043a\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Rust.\u00a0 \u041f\u0440\u043e Rust \u044f \u043d\u0430 \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0437\u043d\u0430\u043b, \u043a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u044d\u0442\u043e \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u043a\u0440\u0443\u0442\u0430\u044f \u0448\u0442\u0443\u043a\u0430, \u0434\u0430 \u0438 \u041b\u0438\u043d\u0443\u0441 \u0422\u043e\u0440\u0432\u0430\u043b\u044c\u0434\u0441 \u043d\u0435 \u043f\u0440\u043e\u0442\u0438\u0432 Rust. \u0411\u044b\u0441\u0442\u0440\u043e\u0435 \u0433\u0443\u0433\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u043e, \u0447\u0442\u043e Rust \u0434\u043b\u044f RISC-V \u0432\u0440\u043e\u0434\u0435 \u0431\u044b \u0435\u0441\u0442\u044c, \u0438 \u0432\u0440\u043e\u0434\u0435 \u0431\u044b \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043e\u0434\u0438\u043d, \u0430 \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f \u0432\u0441\u0435 \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 &#8212; \u0442\u043e \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e, \u043d\u0443 \u0430 \u0441\u043e \u0441\u0440\u0435\u0434\u043e\u0439 \u043a\u0430\u043a \u043d\u0438\u0431\u0443\u0434\u044c \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f, \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u0447\u0442\u043e \u044d\u0442\u043e \u043d\u0435 C\/C++ c\u00a0 Eclipse Embedded CDT.\u00a0\u00a0<\/p>\n<p>\u0418 \u0442\u0430\u043a \u0440\u0435\u0448\u0435\u043d\u043e: \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0431\u0443\u0434\u0435\u0442\u00a0 RISC-V \u044f\u0434\u0440\u043e, \u0430 \u043a\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 Rust,\u00a0 \u0430 \u0432\u0441\u0435 \u044d\u0442\u043e \u0432 \u0448\u0443\u0442\u043a\u0443 \u043d\u0430\u0437\u043e\u0432\u0435\u043c\u00a0 &#8212; Enterprise Graphics Music.\u00a0<\/p>\n<h2>\u0410\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435<\/h2>\n<h3>\u041f\u0440\u043e \u043f\u0430\u043c\u044f\u0442\u044c<\/h3>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043f\u043b\u0430\u0442\u043e\u0439 OMDAZZ, \u043c\u043d\u0435 \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u043f\u043e\u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0430\u043c\u044f\u0442\u0438.\u00a0<\/p>\n<figure class=\"\"><\/figure>\n<p>\u0414\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0431\u044b\u043b\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u0430\u00a0 \u043f\u043b\u0430\u0442\u0430 Terasic DE0-CV, \u043b\u044e\u0431\u0435\u0437\u043d\u043e \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u0430\u044f FPGA-Systems.ru. \u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u041f\u041b\u0418\u0421 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\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 \u0434\u043b\u044f \u0441\u0438\u043d\u0442\u0435\u0437\u0430 RISC-V \u044f\u0434\u0440\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043d\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f. \u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0431\u043b\u043e\u0447\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u0432 \u043f\u043b\u0430\u0442\u0435 DE0-CV \u041f\u041b\u0418\u0421 Cyclone V \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u00a0 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 &#8212;\u00a0 3080 Kbits.\u00a0<\/p>\n<p>\u00a0\u041f\u0440\u0438 \u0432\u0441\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0435 \u043a GOWIN, \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u0434\u043b\u044f \u043b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u043e\u0433\u043e \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0438 \u0440\u0435\u0442\u0440\u043e\u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0438\u043d\u0433\u0430 \u00a0 \u0433\u0434\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043b\u0438\u043c\u0438\u0442 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 &#8212; \u044d\u0442\u043e \u0431\u043b\u043e\u0447\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u041f\u041b\u0418\u0421, \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0441\u00a0 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u043e\u0439 Cyclone V &#8212; \u0441\u0430\u043c\u043e\u0435\u00a0 \u0443\u0434\u0430\u0447\u043d\u043e\u0435 \u0432\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432,\u0430 \u0432\u043e\u0442 \u0434\u043b\u044f \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0445 \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u0445 \u0438\u0437\u0434\u0435\u043b\u0438\u0439,\u00a0 \u043a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b,\u00a0 GOWIN \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043b\u0443\u0447\u0448\u0438\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u043c.\u00a0\u00a0<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\">\u041f\u043b\u0430\u0442\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0427\u0438\u043f<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u0430\u043c\u044f\u0442\u044c (\u0431\u0438\u0442)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">DE0-CV<\/p>\n<\/td>\n<td>\n<p align=\"left\">5CEBA4F23C7<\/p>\n<\/td>\n<td>\n<p align=\"left\">3383K\u00a0<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">DE10\u00a0<\/p>\n<\/td>\n<td>\n<p align=\"left\">5CSXFC6D6F31C6N<\/p>\n<\/td>\n<td>\n<p align=\"left\">5440K\u00a0<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">DE1-SoC\u00a0<\/p>\n<\/td>\n<td>\n<p align=\"left\">5CSEMA5F31C6<\/p>\n<\/td>\n<td>\n<p align=\"left\">4450K<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">DE0-Nano-Soc<\/p>\n<\/td>\n<td>\n<p align=\"left\">5CSEMA4U23C6<\/p>\n<\/td>\n<td>\n<p align=\"left\">2640K\u00a0<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">DE10-Nano<\/p>\n<\/td>\n<td>\n<p align=\"left\">5CSEBA6U23I7<\/p>\n<\/td>\n<td>\n<p align=\"left\">5440K\u00a0<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Tang Nano 9K<\/p>\n<\/td>\n<td>\n<p align=\"left\">GW1NR-9<\/p>\n<\/td>\n<td>\n<p align=\"left\">468K<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Tang Nano 20K<\/p>\n<\/td>\n<td>\n<p align=\"left\">GW2AR-18 QN88<\/p>\n<\/td>\n<td>\n<p align=\"left\">828K<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Tang Primer 20K<\/p>\n<\/td>\n<td>\n<p align=\"left\">GW2A-LV18PG256C8\/I7<\/p>\n<\/td>\n<td>\n<p align=\"left\">828K<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e \u0441\u0435\u0440\u0438\u044e Nano (\u0438 \u043f\u0443\u0441\u0442\u044c \u0412\u0430\u0441 \u043d\u0435 \u043f\u0443\u0433\u0430\u0435\u0442 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 SoC). \u042d\u0442\u0438 \u043f\u043b\u0430\u0442\u044b \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u0435\u0434\u043d\u0435\u0435\u00a0 \u0432 \u0447\u0430\u0441\u0442\u0438 \u043e\u0431\u0432\u0435\u0441\u0430, \u0447\u0442\u043e \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u044f\u043b\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u043b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u044b\u0445 \u0440\u0430\u0431\u043e\u0442 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e \u043a\u043d\u0438\u0433\u0435 \u201c\u0426\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u0441\u0438\u043d\u0442\u0435\u0437. \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u0443\u0440\u0441\u201d, \u043d\u043e \u0437\u0430\u0442\u043e \u043f\u0440\u043e\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u043e \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0446\u0435\u043d\u0435. \u0412 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 Basic Graphics Music \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u044f \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b \u0438 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0434\u0438\u043a\u0430\u0446\u0438\u0438 TM1638, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u0435\u0439 \u0438 \u0441\u0435\u043c\u0438\u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043d\u044b\u0445 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u044b\u0445 \u0440\u0430\u0431\u043e\u0442, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0431\u044b\u043b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d VGA 666 \u043c\u043e\u0434\u0443\u043b\u044c. (\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u0442\u0443\u0442 <a href=\"https:\/\/habr.com\/ru\/articles\/762108\/\" rel=\"noopener noreferrer nofollow\"><u>https:\/\/habr.com\/ru\/articles\/762108\/<\/u><\/a>)<\/p>\n<h3>\u0415\u0441\u043b\u0438 SDRAM \u043f\u0440\u0438\u043f\u0430\u044f\u043b\u0438, \u0437\u043d\u0430\u0447\u0438\u0442 \u044d\u0442\u043e \u043a\u043e\u043c\u0443-\u0442\u043e \u043d\u0443\u0436\u043d\u043e<\/h3>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0421\u0442\u0430\u043d\u0438\u0441\u043b\u0430\u0432\u0430 \u0416\u0435\u043b\u044c\u043d\u0438\u043e @SparF\u00a0 \u043f\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044e SDRAM \u043a MIPSfpga \u0434\u043e\u043b\u0433\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0435 \u0434\u0430\u0432\u0430\u043b \u043f\u043e\u043a\u043e\u044f (\u0434\u0430 \u0438 \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0435 \u0434\u0430\u0435\u0442). \u041d\u043e \u043f\u0440\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0441\u043e\u0431\u043b\u044e\u0441\u0442\u0438 \u0434\u0432\u0430 \u0443\u0441\u043b\u043e\u0432\u0438\u044f: \u043f\u0435\u0440\u0432\u043e\u0435 &#8212; \u043f\u0440\u043e\u0435\u043a\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u0443\u0435\u043c \u0432 \u201c\u0436\u0435\u043b\u0435\u0437\u0435\u201d, \u0432\u0442\u043e\u0440\u043e\u0435 &#8212; \u043a\u044d\u0448 \u0431\u0443\u0434\u0435\u0442 \u0432\u0441\u0435 \u0442\u0430\u043a\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c(\u043d\u043e \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u0434\u043b\u044f \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430).<\/p>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0432 \u0440\u0435\u0430\u043b\u0435, \u043d\u0435 \u043d\u0430 \u041f\u041b\u0418\u0421,\u0438 \u0442\u043e\u0433\u0434\u0430\u00a0 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435 \u043d\u0430 \u0443\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u00a0 Sky130 PDK, \u0430 \u0442\u0430\u043a\u0436\u0435 Skywater \/ Efabless. \u041d\u043e \u043f\u043e\u0441\u043b\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u0430 \u0441\u043e \u0441\u0442\u0430\u0442\u044c\u0435\u0439\u00a0 \u201cYosys &#8212; A Free Verilog Synthesis Suite\u201d (<a href=\"https:\/\/yosyshq.net\/yosys\/files\/yosys-austrochip2013.pdf\" rel=\"noopener noreferrer nofollow\"><u>https:\/\/yosyshq.net\/yosys\/files\/yosys-austrochip2013.pdf<\/u><\/a>) \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u0447\u0442\u043e \u0434\u043b\u044f \u0441\u0438\u043d\u0442\u0435\u043d\u0437\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u043d\u0435\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u0441\u0435\u0433\u043e \u0447\u0435\u0442\u044b\u0440\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: \u0431\u0443\u0444\u0435\u0440, NOR,\u00a0 NAND \u0438 NOT. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u044f\u0434\u0440\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u043d\u0430 74 \u0438\u043b\u0438 155 \u0441\u0435\u0440\u0438\u0438. \u0418 \u0434\u0430, \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u0445 Yosys \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 <a href=\"https:\/\/github.com\/YosysHQ\/yosys\/blob\/master\/examples\/cmos\" rel=\"noopener noreferrer nofollow\"><u>https:\/\/github.com\/YosysHQ\/yosys\/blob\/master\/examples\/cmos<\/u><\/a> . <br \/>\u0421\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c SDRAM-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0434\u043e\u0441\u0442\u043e\u0439\u043d\u044b\u0439 \u0441\u0438\u043d\u0442\u0435\u0437\u0430 \u0432 \u0436\u0435\u043b\u0435\u0437\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u0441\u043b\u043e\u0436\u043d\u0430\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 SDRAM \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0434\u043b\u044f \u0432\u0438\u0434\u0435\u043e \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0430 \u0432 \u0432\u0438\u0434\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f, \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043d\u0438\u043c \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u0440\u0442\u044b \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430 \u043f\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443, \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430,\u00a0 \u043a\u0430\u043a \u044d\u0442\u043e \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0432 \u041c\u0430\u0440\u0441\u043e\u0445\u043e\u0434\u0435 &#8212; <a href=\"https:\/\/marsohod.org\/projects\/mcy112-prj\/429-vga-framebuffer-mcy112\" rel=\"noopener noreferrer nofollow\"><u>https:\/\/marsohod.org\/projects\/mcy112-prj\/429-vga-framebuffer-mcy112<\/u><\/a>\u00a0<\/p>\n<p>\u0412\u00a0 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u00a0 RISC-V \u044f\u0434\u0440\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f\u00a0 YRV \u0441 16 \u0431\u0438\u0442\u043d\u043e\u0439 \u0448\u0438\u043d\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0439, \u0442\u0430\u043a\u043e\u0435 \u044f\u0434\u0440\u043e \u0432 \u043f\u043e\u043b\u0442\u043e\u0440\u0430 \u0440\u0430\u0437\u0430 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0439 \u043f\u043e \u0442\u0435\u0441\u0442\u0430\u043c CoreMark \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 32 \u0431\u0438\u0442\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439, \u043d\u043e \u0437\u0430\u0442\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u0443\u0435\u043c\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u044c\u044e. \u041d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0440\u0435\u0448\u0435\u043d\u043e \u0431\u044b\u043b\u043e \u043d\u0435 \u043c\u0435\u043d\u044f\u0442\u044c \u0448\u0438\u043d\u0443 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u00a0 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c 64\u041a\u0431 \u041e\u0417\u0423. \u041f\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043d\u0430 Embedded Rust \u0442\u0430\u043a\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043c\u0430 \u0434\u043e\u043b\u0436\u043d\u043e \u0445\u0432\u0430\u0442\u0438\u0442\u044c \u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435.<\/p>\n<h3>\u041f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0440\u0442\u044b<\/h3>\n<p>\u0411\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0434\u0438\u0437\u0430\u0439\u043d \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u0442\u0430 \u043e\u0442 \u041c\u043e\u043d\u0442\u0435\u00a0 \u0438\u0434\u0443\u0449\u0435\u0433\u043e \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043d\u0430 \u0434\u0438\u0437\u0430\u0439\u043d \u0438\u0437 \u043a\u043d\u0438\u0433\u0438 \u041f\u043e\u043d\u0433 \u0427\u0443. \u041c\u043e\u043d\u0442\u0435 \u0441\u0432\u043e\u0439 \u0434\u0438\u0437\u0430\u0439\u043d\u00a0 \u0432 \u043a\u043d\u0438\u0433\u0435 \u043d\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442 \u0438, \u043a\u0430\u043a \u043e\u043d \u0441\u0430\u043c \u0441\u043a\u0430\u0437\u0430\u043b, \u0434\u0438\u0437\u0430\u0439\u043d \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430. \u0410 \u0432\u00a0\u043a\u043d\u0438\u0433\u0435\u00a0 \u041f\u043e\u043d\u0433 \u0427\u0443 \u043a\u0440\u043e\u043c\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u044f\u00a0 \u0435\u0449\u0435 \u0435\u0441\u0442\u044c \u0438 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 FIFO, \u0447\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u044e. \u0412 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043c\u043d\u0435 \u0441\u0442\u0430\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e,\u00a0 \u043a\u0430\u043a YRV \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u0434\u0438\u0437\u0430\u0439\u043d\u044b \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u043e\u0440\u0442\u043e\u0432,\u00a0 \u0438 \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432\u00a0 \u044f \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0441\u044f \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 \u043e\u0442 Ben Marshall.<\/p>\n<p>\u0421\u0438\u0433\u043d\u0430\u043b TX enable (wr_uart, uart_tx_en) \u0434\u043b\u044f \u043c\u043e\u0434\u0443\u043b\u044f UART \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438\u0437 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 HWRITE \u0448\u0438\u043d\u044b AHB-Lite, \u0432 YRV \u044d\u0442\u043e \u0441\u0438\u0433\u043d\u0430\u043b mem_write.\u00a0 \u0421\u0438\u0433\u043d\u0430\u043b mem_trans[1:0] \u0440\u0430\u0432\u043d\u044b\u0439 2\u2019b11 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0447\u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f.\u00a0<\/p>\n<pre><code class=\"vhdl\">io_wr_reg &lt;=mem_write &amp;&amp; &amp;mem_trans \u00a0 &amp;&amp; (mem_addr[31:16] == `IO_BASE);<\/code><\/pre>\n<p>\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0431\u0430\u0439\u0442\u0430, \u0432\u044b\u0431\u043e\u0440 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u043c mem_ble<\/p>\n<figure class=\"\"><\/figure>\n<pre><code class=\"vhdl\">ld_wdata\u00a0 = io_wr_reg &amp;&amp; port7_dec &amp;&amp; mem_ble_reg[0] &amp;&amp; mem_ready;<\/code><\/pre>\n<p>\u0412\u044b\u0432\u043e\u0434 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u0442\u0430, \u043c\u043b\u0430\u0434\u0448\u0438\u0439 \u0431\u0430\u0439\u0442 \u0434\u0430\u043d\u043d\u044b\u0435, \u0441\u0442\u0430\u0440\u0448\u0438\u0439 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u043e\u0440\u0442\u0430:\u00a0<\/p>\n<pre><code class=\"vhdl\">assign port7_dat = {5'h0, bufr_ovr, bufr_full, bufr_empty, rx_rdata};<\/code><\/pre>\n<p>MIDI \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043d\u0435 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442 \u0432\u044b\u0432\u043e\u0434\u0430 \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u0442\u0430\u043c \u0432\u0441\u0435 \u043f\u0440\u043e\u0449\u0435:<\/p>\n<pre><code class=\"vhdl\">assign portMIDI_dat = {7'h0, midi_bufr_full, 8'b0};<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u043e\u0440\u0442\u043e\u0432 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0434\u0432\u0430: \u043f\u0435\u0440\u0432\u044b\u0439 &#8212; \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0432\u0432\u043e\u0434\u0430 \u0432\u044b\u0432\u043e\u0434\u0430, \u0432\u0442\u043e\u0440\u0430\u044f &#8212; MIDI \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441. \u041d\u043e \u043d\u0438\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e, \u0447\u0442\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435\u00a0 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432 \u0432\u0438\u0434\u0435 \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0433\u043e baud rate 32500 \u0434\u043b\u044f MIDI \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0431\u0443\u0434\u0443\u0442 \u043d\u0435 \u0432\u0430\u0436\u043d\u044b.<\/p>\n<h3>\u041e\u0431\u0449\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430<\/h3>\n<p>\u00a0\u0422\u0430\u043a \u043a\u0430\u043a \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u0442, \u0434\u043b\u044f \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0445\u0432\u043e\u0441\u0442\u043e\u0432 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u0442, \u0440\u0435\u0436\u0438\u043c\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e\u0440\u0442\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u0435\u043c.<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u041c\u043e\u0434\u0443\u043b\u044c \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f \u043d\u043e\u0442 \u0431\u044b\u043b \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043d \u0438\u0437 \u043b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b 11_note_recognition Basics graphics music , \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u043c\u043e\u0434\u0443\u043b\u0435\u043c \u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d \u0441 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u043c \u043f\u043e\u0440\u0442\u043e\u043c YRV.<\/p>\n<pre><code class=\"vhdl\">module note ( \u00a0\u00a0\u00a0\u00a0input clk, \u00a0\u00a0\u00a0\u00a0input rst, \u00a0\u00a0\u00a0\u00a0input\u00a0 \u00a0 \u00a0 \u00a0 [ \u00a0 \u00a0 \u00a0 \u00a0 23:0] mic, \u00a0\u00a0\u00a0\u00a0output\u00a0 \u00a0 \u00a0 \u00a0 [w_note - 1:0] o_note );<\/code><\/pre>\n<h2>Rust \u0438 RISC-V<\/h2>\n<h3>\u0421\u0431\u043e\u0440\u043a\u0430 \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b<\/h3>\n<p>\u0414\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043a\u043e\u0434\u0430 \u043d\u0430 Rust\u00a0 \u043f\u043e\u0434 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 RISC-V \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u0441\u044f \u043d\u0430 \u043d\u043e\u0447\u043d\u043e\u0439 \u043a\u0430\u043d\u0430\u043b \u0432\u044b\u043f\u0443\u0441\u043a\u0430 Rust<\/p>\n<pre><code class=\"bash\">$ rustup toolchain install nightly  $ rustup override set nightly<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b RISC-V. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439<\/p>\n<pre><code class=\"bash\">$\u00a0 rustc --print target-list<\/code><\/pre>\n<p>\u0412 \u0441\u043f\u0438\u0441\u043a\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440 \u043d\u0435\u0442 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b riscv32ic, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c\u0441\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 riscv32i<\/p>\n<pre><code class=\"bash\">$ rustup target add riscv32i-unknown-none-elf\u00a0<\/code><\/pre>\n<p>\u0414\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0430\u044f \u0441\u0431\u043e\u0440\u043a\u0430 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438\u00a0<\/p>\n<pre><code class=\"bash\">$ cargo build -Z build-std=core --target riscv32i-unknown-none-elf --release<\/code><\/pre>\n<p>\u0414\u043b\u044f \u0438\u0437\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f objcopy \u0438\u0437 \u0441\u043e\u0441\u0442\u0430\u0432\u0430 GCC \u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u043e\u0439 bin2hex \u043e\u0442 \u043e\u0442 SiFive:<\/p>\n<pre><code class=\"bash\">$ riscv-none-elf-objcopy.exe -O binary ..\/target\/riscv32i-unknown-none-elf\/release\/app app.bin  $ python bin2hex\/freedom-bin2hex.py -w16 app.bin >code.mem16<\/code><\/pre>\n<p>\u0412 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u044f \u0440\u0435\u0448\u0438\u043b \u0432\u0441\u044e \u0441\u0431\u043e\u0440\u043a\u0443 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u0434 WIndows, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u043c load.bat \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f\u00a0<\/p>\n<pre><code class=\"bash\">rem The port number should be adjusted set a=6 mode com%a% baud=57600 parity=n data=8 stop=1 to=off xon=off odsr=off octs=off dtr=off rts=off idsr=off type code.mem16 >\\.\\COM%a%<\/code><\/pre>\n<h3>Runtime \u0434\u043b\u044f\u00a0 YRV-Plus<\/h3>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 runtime \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u0440\u0435\u0439\u0442 riscv-rt (<a href=\"https:\/\/github.com\/rust-embedded\/riscv-rt\" rel=\"noopener noreferrer nofollow\"><u>https:\/\/github.com\/rust-embedded\/riscv-rt<\/u><\/a>) \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u0442\u0430\u0440\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 0.11.0. \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0438 \u043e\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 master \u0432\u0435\u0442\u043a\u0438, \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u0439 \u043a\u043e\u0434 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d \u0432 \u0432\u0438\u0434\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 asm.S, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u0441 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0438\u0437 \u043a\u043d\u0438\u0433\u0438 Inside an Open-Source Processor. \u041a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u0439 \u043a\u043e\u0434 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d \u0432 \u0432\u0438\u0434\u0435 \u0444\u0430\u0439\u043b\u0430 yrv.S \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0441\u0442\u0430\u0440\u0442\u0430 \u0438\u00a0 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 YRV.\u00a0 \u0422\u0430\u043a\u0436\u0435 \u0431\u044b\u043b \u0438\u0437\u043c\u0435\u043d\u0435\u043d \u043b\u0438\u043d\u043a\u0435\u0440 \u0441\u043a\u0440\u0438\u043f\u0442 link.x \u043f\u043e\u0434 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430.<\/p>\n<p>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a\u0440\u0435\u0439\u0442\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e, \u0432 \u0444\u0430\u0439\u043b\u0435 Cargo.toml \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0437\u0430\u0432\u0438\u0441\u043c\u043e\u0441\u0442\u044c:<\/p>\n<pre><code class=\"lua\">[dependencies]  riscv-rt = { path = \"..\/riscv-rt\" }<\/code><\/pre>\n<p>\u0422\u0430\u043c \u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e .cargo \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0444\u0430\u0439\u043b config \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=\"lua\">[target.riscv32i-unknown-none-elf]  rustflags = [  \u00a0\u00a0\"-C\", \"link-arg=-Tlink.x\"  ]  [build]  target = \"riscv32i-unknown-none-elf\"<\/code><\/pre>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u0432 RISC-V \u043f\u043e\u0440\u0442\u044b \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0430\u043c\u044f\u0442\u044c, \u0442\u043e \u0441 \u043d\u0438\u043c\u0438<\/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-364709","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/364709","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=364709"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/364709\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=364709"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=364709"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=364709"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}