{"id":487359,"date":"2026-07-15T08:58:12","date_gmt":"2026-07-15T08:58:12","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=487359"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=487359","title":{"rendered":"\u0412\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0430. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c SDRAM \u043a \u041f\u041b\u0418\u0421"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>    \u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435, \u043a \u043c\u043e\u0435\u043c\u0443 \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043a\u043e\u0434 \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043d\u0435 \u0440\u0430\u0431\u043e\u0447\u0438\u0439. \u0418\u0437-\u0437\u0430 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0430 \u043e\u043f\u044b\u0442\u0430, \u044f \u0447\u0438\u0442\u0430\u043b \u0441\u0432\u043e\u0438 \u0436\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0448\u0438\u043d\u0435 \u0438 \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u044f\u043b \u044d\u0442\u043e \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u0438. \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u044e \u044d\u0442\u043e \u043d\u0435\u0434\u043e\u0440\u0430\u0437\u0443\u043c\u0435\u043d\u0438\u0435 \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435. \u041e\u043f\u044b\u0442\u043d\u044b\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u0447\u0438\u0442\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437 \u0441\u043f\u043e\u0440\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430 :-).<\/p>\n<p>    \u041d\u0435\u043c\u043d\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043c \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c. \u0418\u0442\u0430\u043a \u043f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0437\u0430\u0434\u0430\u0447\u0438. \u0411\u0443\u0434\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c\u0443 \u043a\u0430\u043d\u0430\u043b\u0443 (RS232) \u0441 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 \u043c\u0430\u0440\u043a\u0435\u0440 \u0430\u0434\u0440\u0435\u0441\u0430 0x80, \u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043e\u0436\u0438\u0434\u0430\u044e\u0442\u0441\u044f \u0434\u0432\u0430 \u0431\u0430\u0439\u0442\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0435 \u0430\u0434\u0440\u0435\u0441. \u041c\u0430\u0440\u043a\u0435\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 0x40, \u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043e\u0436\u0438\u0434\u0430\u044e\u0442\u0441\u044f \u0434\u0432\u0430 \u0431\u0430\u0439\u0442\u0430 \u0434\u0430\u043d\u043d\u044b\u0445. \u041a\u043e\u043c\u0430\u043d\u0434\u0430 0x20 \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u043f\u0430\u043c\u044f\u0442\u044c, \u043a\u043e\u043c\u0430\u043d\u0434\u0430 0x10 \u0447\u0442\u0435\u043d\u0438\u0435 \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438 (\u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f). \u041a\u0440\u043e\u043c\u0435 \u044d\u0442\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u043c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043d\u0430 \u0441\u0435\u043c\u0438 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043d\u043e\u043c \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0435 \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0435 \u0430\u0434\u0440\u0435\u0441, \u0434\u0430\u043d\u043d\u044b\u0435 (\u043a\u0430\u043a \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0435, \u0442\u0430\u043a \u0438 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435), \u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b. \u0414\u0430\u043b\u0435\u0435 \u0441\u0445\u0435\u043c\u044b. \u0410 \u0442\u0430\u043a \u0436\u0435 \u0438\u043c\u0435\u0439\u0442\u0435 \u0432\u0432\u0438\u0434\u0443, \u0442\u0430\u043a \u043a\u0430\u043a \u044f \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0439 \u0438 \u043e\u043f\u044b\u0442\u0430 \u0443 \u043c\u0435\u043d\u044f \u043c\u0430\u043b\u043e, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0439\u0442\u0435 \u0432\u0441\u0451, \u0435\u0441\u043b\u0438 \u0431\u0443\u0434\u0435\u0442\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/03d\/ec8\/7dc\/03dec87dc1954f6f90350e890f64c42d.jpg\" alt=\"\u041c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0430 \u043f\u0430\u043c\u044f\u0442\u0438 SDRAM.\" title=\"\u041c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0430 \u043f\u0430\u043c\u044f\u0442\u0438 SDRAM.\" width=\"529\" height=\"492\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/03d\/ec8\/7dc\/03dec87dc1954f6f90350e890f64c42d.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/03d\/ec8\/7dc\/03dec87dc1954f6f90350e890f64c42d.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0430 \u043f\u0430\u043c\u044f\u0442\u0438 SDRAM.<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e8b\/13a\/99d\/e8b13a99dc4165f36dd9b2728f099158.jpg\" alt=\"\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 RS232.\" title=\"\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 RS232.\" width=\"679\" height=\"313\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/e8b\/13a\/99d\/e8b13a99dc4165f36dd9b2728f099158.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e8b\/13a\/99d\/e8b13a99dc4165f36dd9b2728f099158.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 RS232.<\/figcaption><\/div>\n<\/figure>\n<p>    \u0414\u0430\u043d\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0430\u044f, \u043d\u0435 \u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0431\u044b\u0442\u0443\u044e\u0449\u0435\u0435 \u043c\u043d\u0435\u043d\u0438\u0435 \u043e \u0435\u0451 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438. \u042f \u0438\u043c\u0435\u044e \u0432\u0432\u0438\u0434\u0443 \u0437\u0430\u0434\u0430\u0447\u0443 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0447\u0442\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u043f\u0430\u043c\u044f\u0442\u044c. \u0422\u0430\u043a \u043a\u0430\u043a \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c &#171;\u0441\u0435\u0440\u044c\u0451\u0437\u043d\u044b\u0439&#187; \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, \u0442\u043e \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435 (\u0435\u0441\u0442\u044c \u0432\u0441\u044f\u043a\u0438\u0435 \u0440\u0435\u0436\u0438\u043c\u044b \u043e\u0431\u043c\u0435\u043d\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0440\u0435\u0440\u0432\u0430\u0442\u044c \u0447\u0442\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0438 \u0442.\u043f.). \u0422\u0430\u043a \u0436\u0435 \u0445\u043e\u0447\u0443 \u043d\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e, \u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440. \u0427\u0438\u0442\u0430\u0439\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0442\u0435\u043e\u0440\u0438\u044e \u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0443.<\/p>\n<p>\u041d\u0435 \u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0432\u044b\u0448\u0435\u0441\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435, \u0443 \u043c\u0435\u043d\u044f \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0438 \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u0438 \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438. \u0412\u043e \u043f\u0435\u0440\u0432\u044b\u0445, \u043d\u0435 \u0437\u0440\u044f \u0433\u043e\u0432\u043e\u0440\u044f\u0442, \u0447\u0442\u043e \u043f\u0440\u0438 \u043e\u0441\u0432\u043e\u0435\u043d\u0438\u0438 verilog \u043e\u043f\u044b\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u043e \u043c\u0435\u0448\u0430\u0435\u0442 (\u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435 \u043c\u043d\u0435 \u043e\u043d \u043c\u0435\u0448\u0430\u043b). \u0412\u0430\u0436\u043d\u043e \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u043a\u043e\u0434 \u043d\u0430 verilog \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430, \u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0445\u0435\u043c\u044b. \u0423 \u043c\u0435\u043d\u044f \u0431\u044b\u043b\u043e \u043c\u043d\u043e\u0433\u043e &#171;\u0434\u0435\u0442\u0441\u043a\u0438\u0445&#187; \u043e\u0448\u0438\u0431\u043e\u043a. \u041e\u0434\u043d\u0430 \u0438\u0437 \u043d\u0438\u0445 \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u0430 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f. \u041a\u0430\u043a \u044f \u043d\u0435 \u043f\u044b\u0442\u0430\u043b\u0441\u044f \u0435\u0451 \u043d\u0430\u0439\u0442\u0438, \u0432\u0441\u0435 \u0433\u043b\u0430\u0437\u0430 \u043f\u0440\u043e\u0433\u043b\u044f\u0434\u0435\u043b, \u043d\u0438 \u0432 \u043a\u0430\u043a\u0443\u044e. \u041f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u0441\u044f \u0441\u043e \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438.<\/p>\n<p>    \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b \u0443\u0440\u043e\u043a\u0438 \u043f\u043e Signal Tap. \u0425\u043e\u0440\u043e\u0448\u0430\u044f \u0448\u0442\u0443\u043a\u0430, \u0430 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u043d\u0435 \u043f\u0440\u0438\u0445\u043e\u0442\u043b\u0438\u0432\u0430\u044f. \u041f\u043e\u043f\u044b\u0442\u043a\u0438 \u043f\u0440\u0438\u043a\u0440\u0443\u0442\u0438\u0442\u044c \u0435\u0451 &#171;\u043b\u0435\u0432\u043e\u0439 \u043d\u043e\u0433\u043e\u0439&#187; \u0443\u0432\u0435\u043d\u0447\u0430\u043b\u0438\u0441\u044c \u0443\u0441\u043f\u0435\u0445\u043e\u043c. \u0418 \u0447\u0442\u043e \u0436\u0435 \u044f \u0443\u0432\u0438\u0434\u0435\u043b \u043d\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0435 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u0437\u0430\u043f\u0438\u0441\u0438? \u041a\u043e\u043c\u0430\u043d\u0434\u0443 \u0447\u0442\u0435\u043d\u0438\u044f! \u0412\u043e\u0442 \u044d\u0442\u043e \u043f\u043e\u0432\u043e\u0440\u043e\u0442. \u041e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u044f \u0443\u043c\u0443\u0434\u0440\u0438\u043b\u0441\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u043a\u043e\u0434\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u0434\u0432\u0443\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u0445 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0432\u044b\u0434\u0430\u0451\u0442\u0441\u044f \u043d\u0430 \u043e\u0434\u0438\u043d \u0442\u0430\u043a\u0442 \u0438 \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0435\u0451 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442. \u0410 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0431\u044b\u043b\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f: \u0435\u0441\u043b\u0438 \u0417\u0410\u041f\u0418\u0421\u042c \u043a\u043e\u0434 \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438, \u0438\u043d\u0430\u0447\u0435 \u043a\u043e\u0434 \u0434\u043b\u044f \u0427\u0422\u0415\u041d\u0418\u042f. \u041d\u0435 \u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u0442\u0430\u043a! \u0422\u0435\u043f\u0435\u0440\u044c \u043a\u043e\u0434\u044b, \u0430 \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0440\u0435\u0437\u044e\u043c\u0435 \u043f\u043e \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u044f\u043c.<\/p>\n<p>\u042d\u0442\u043e \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c.<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"vhdl\">`timescale 1ns \/ 1ps\/* \u0422\u0435\u0441\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 SDRAM. \u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c \u043f\u043e UART \u0430\u0434\u0440\u0435\u0441 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0443.\u0412 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 \u043f\u0438\u0448\u0435\u043c\/\u0447\u0438\u0442\u0430\u0435\u043c \u043f\u0430\u043c\u044f\u0442\u044c.\u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043d\u0430 \u0441\u0435\u043c\u0438\u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043d\u043e\u043c \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0435\u0447\u0442\u043e \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f.*\/module SDRAM3(output wire [3:0] dig_n,output wire [7:0] seg_n,(* chip_pin = \"114\" *) output wire TxD,(* chip_pin = \"73\"  *) output wire SD_BS0,(* chip_pin = \"74\"  *) output wire SD_BS1,(* chip_pin = \"42\"  *) output wire SD_LDQM,(* chip_pin = \"55\"  *) output wire SD_UDQM,(* chip_pin = \"72\"  *) output wire SD_CS_n,(* chip_pin = \"71\"  *) output wire SD_RAS_n,(* chip_pin = \"70\"  *) output wire SD_CAS_n,(* chip_pin = \"69\"  *) output wire SD_WE_n,(* chip_pin = \"58\"  *) output wire SD_CKE,(* chip_pin = \"43\"  *) output wire SD_CLK,\/\/ \u0444\u0430\u0437\u0430+30 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e clk_sys(* chip_pin = \"115\" *) input wire RxD,(* chip_pin = \"25\"  *) input wire rst_n,(* chip_pin = \"23\"  *) input wire clk,output wire [11:0] S_A,inout  wire [15:0] S_DQ);wire Button_Reset;\/\/ \u041a\u043d\u043e\u043f\u043a\u0430 \u0441\u0431\u0440\u043e\u0441wire reset;\/\/ \u042d\u0442\u043e \u043e\u0431\u0449\u0438\u0439 \u0441\u0431\u0440\u043e\u0441. \u041a\u0440\u043e\u043c\u0435 \u043a\u043d\u043e\u043f\u043a\u0438, \u0432\u043b\u0438\u044f\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 PLLwire clk_sys;    \/\/ 50 MHz (0 deg)wire clk_sdram;  \/\/ 50 MHz (30 deg)wire pll_locked; \/\/ 0 - PLL \u043d\u0435 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e, 1 - \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043ewire Empty;wire [7:0] dataRx;\/\/ \u0421\u0438\u0433\u043d\u0430\u043b\u044b \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u0447\u0438\u043a\u0430 UARTreg startTx;reg [7:0] dataTx;wire rdyTx;wire key_mode;reg  [15:0] dq_out_ioe;reg  dq_oe_ioe;reg  [15:0] dq_in_ioe;reg cmd_write;reg cmd_read;reg [15:0] data_from_ram;\/\/ \u0414\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438wire SD_Ready;\/\/ \u0413\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044breg [15:0] display_value;\/\/ = 16'h1235;reg fAReady = 1'd0; \/\/ \u0411\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0442 \u043f\u0440\u0438\u0451\u043c, \u0434\u043e \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 SDRAMreg fDReady = 1'd0; \/\/ \u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 SDRAM, \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043d\u043e\u043b\u044creg fCmdWrite;reg fCmdRead;reg [21:0] reg_addr; \/\/ bank[21:20], row[19:8], col[7:0]reg [15:0] reg_data; \/\/ \u0414\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u043f\u0430\u043c\u044f\u0442\u044creg nechet;reg rdRx_en;\/\/ \u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u0436\u0438\u043c\u0430\u043c\u0438reg [3:0] State;reg [2:0] pause;localparamSTATE_IDLE       = 4'd0,STATE_WAIT_ADDR  = 4'd1,STATE_WAIT_DATA  = 4'd2,STATE_ACK        = 4'd3,STATE_WAIT       = 4'd4,STATE_READ       = 4'd5,STATE_WRITE      = 4'd6,STATE_WRITE_WAIT = 4'd7,STATE_DISPLAY    = 4'd8; \/\/ 1 \u0442\u0430\u043a\u0442 \u043d\u0430 \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044e + 1 \u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 + 2 CL + 1 \u043d\u0430 \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u041f\u041b\u0418\u0421localparam RPause = 3'd5,           WPause = 3'd5; assign reset = Button_Reset | ~pll_locked;\/\/ \u0421\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u043d\u0430 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u044e (\u0432\u043d\u0443\u0442\u0440\u0438 IOE)always @(posedge clk_sys) begin  dq_out_ioe  &lt;= reg_data;  dq_in_ioe  &lt;= S_DQ;\/\/ \u0424\u0438\u043a\u0441\u0430\u0446\u0438\u044f \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438  dq_oe_ioe  &lt;= (State == STATE_WRITE); \/\/ dq_oe_ioe \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c  \/\/ \u0442\u0430\u043a\u0442\u0435. \u0412 (State == STATE_WRITE) \u0436\u0434\u0443 \u043e\u0434\u0438\u043d \u0442\u0430\u043a\u0442endassign S_DQ = dq_oe_ioe  ? dq_out_ioe : 16'bZ;assign SD_CKE  = 1'd1;assign SD_LDQM = 1'd0; \/\/ \u041d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043c\u0430\u0441\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435assign SD_UDQM = 1'd0; \/\/ \u041d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043c\u0430\u0441\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435Button BT_R(.TTrigQ(Button_Reset),.X(rst_n), .C(clk_sys));\/*-------------------------------------------------------------------------   \u0418\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0434\u0432\u0430:-\u043f\u0435\u0440\u0432\u044b\u0439 \u043a\u043e\u043f\u0438\u044f \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e,-\u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u043c\u0435\u0449\u0451\u043d\u043d\u044b\u0439 \u043f\u043e \u0444\u0430\u0437\u0435 \u043d\u0430 +30 \u0433\u0440\u0430\u0434\u0443\u0441\u043e\u0432. \u042d\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0434\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0430 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u0435.\u0422\u0430\u043a \u043a\u0430\u043a \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u0441\u0435 \u0434\u043e\u0440\u043e\u0436\u043a\u0438 \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u0438 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0435,\u0447\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430\u043c \u0438 \u043d\u0435\u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0441 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u0435. *\/PLL_SDRAM_30deg PLL1(.inclk0(clk),\/\/ \u0412\u0445\u043e\u0434\u043d\u043e\u0439 \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b.c0(clk_sys),\/\/ \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u0432\u0441\u0435\u0445, \u043a\u0440\u043e\u043c\u0435 SDRAM.c1(clk_sdram),\/\/ \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u044f SDRAM.locked(pll_locked));\/\/ 0- \u0441\u0438\u0433\u043d\u0430\u043b \u043d\u0435 \u0441\u0442\u0430\u0431\u0438\u043b\u0435\u043d\/* \u041f\u0435\u0440\u0435\u0434\u0430\u0442\u0447\u0438\u043a *\/RS232T transmitter(.clk(clk_sys),.rst(reset),.start(startTx),\/\/ \u0421\u0442\u0430\u0440\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438.data(dataTx),.TxD(TxD),.rdy(rdyTx));\/\/ \u0413\u043e\u0442\u043e\u0432 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c\/* \u041f\u0440\u0438\u0451\u043c\u043d\u0438\u043a \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043a\u043e\u043b\u044c\u0446\u0435\u0432\u043e\u0439 \u0431\u0443\u0444\u0435\u0440 \u043d\u0430 8-\u043c\u044c \u0431\u0430\u0439\u0442 *\/RS232R resiver(.clk(clk_sys),.rst(reset),.RxD(RxD),.done(rdRx_en),\/\/ \u041f\u0440\u043e\u0447\u0438\u0442\u0430\u043b\u0438, \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0432\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438.empty(Empty),\/\/ \u0411\u0443\u0444\u0435\u0440 \u043f\u0443\u0441\u0442\u043e\u0439.data(dataRx));\/\/ \u0422\u0435\u043a\u0443\u0449\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0431\u0443\u0444\u0435\u0440\u0430SemSeg S1(.clk(clk_sys),.rst(reset),.display_value(display_value),.seg(seg_n),.dig(dig_n));\/* \u0412\u044b\u0432\u043e\u0434\u0438\u043c \u0441\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0439 \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u043d\u0430\u0440\u0443\u0436\u0443 \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0443   \u0447\u0435\u0440\u0435\u0437 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 DDIO \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432 Intel\/Altera.   \u041e\u0431\u044b\u0447\u043d\u044b\u0439 assign \u0432\u044b\u0437\u043e\u0432\u0435\u0442 \u0434\u0436\u0438\u0442\u0442\u0435\u0440 \u0438 \u0444\u0430\u0437\u043e\u0432\u044b\u0439 \u0441\u0434\u0432\u0438\u0433, \u043b\u043e\u043c\u0430\u044e\u0449\u0438\u0439 Fast I\/O. *\/altddio_out #(.width(1)) sdram_clk_ddio_buf (.datain_h(1'b1),.datain_l(1'b0),.outclock(clk_sdram),.dataout(SD_CLK));\/\/-------------  UART - SDRAM -----------------------------------------------always @(posedge clk_sys) beginif (reset) beginstartTx   &lt;= 1'b0;  dataTx    &lt;= 8'd0;nechet    &lt;= 1'd0;  fAReady   &lt;= 1'd0;fDReady   &lt;= 1'd0;  reg_addr  &lt;= 22'd0;reg_data  &lt;= 16'd0; cmd_write &lt;= 1'd0;cmd_read  &lt;= 1'd0;  State     &lt;= STATE_IDLE;pause     &lt;= 3'd0;  rdRx_en   &lt;= 1'd0;data_from_ram &lt;= 16'd0;display_value &lt;= 16'h1235;end else beginstartTx   &lt;= 1'b0;  cmd_write &lt;= 1'd0;  cmd_read  &lt;= 1'd0;case (State)STATE_IDLE: begin \/\/ \u0416\u0434\u0451\u043c \u0430\u0434\u0440\u0435\u0441, \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044bif (!Empty) beginif (dataRx == 8'h80) beginif (!fAReady) beginState    &lt;= STATE_WAIT_ADDR;nechet   &lt;= 1'b0;endendif (dataRx == 8'h40) beginif (!fDReady) beginState    &lt;= STATE_WAIT_DATA;nechet   &lt;= 1'b0;endendif (dataRx == 8'h20) begin\/\/ \u041f\u0440\u0438\u0448\u043b\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430, \u0435\u0441\u043b\u0438 \u0432\u0441\u0451 \u0433\u043e\u0442\u043e\u0432\u043e, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043cif (fAReady &amp;&amp; fDReady) beginfCmdWrite &lt;= 1'd1;State     &lt;= STATE_ACK;endend\/\/ \u0438\u043d\u0430\u0447\u0435 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u043cif (dataRx == 8'h10) begin\/\/ \u041f\u0440\u0438\u0448\u043b\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430, \u0435\u0441\u043b\u0438 \u0432\u0441\u0451 \u0433\u043e\u0442\u043e\u0432\u043e, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043cif (fAReady) beginfCmdRead  &lt;= 1'd1;State     &lt;= STATE_ACK;endend\/\/ \u0438\u043d\u0430\u0447\u0435 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u043cdisplay_value[7:0] &lt;= dataRx;rdRx_en  &lt;= 1'd1;\/\/\u041f\u0440\u043e\u0447\u0438\u0442\u0430\u043b!\u041f\u0435\u0440\u0435\u0441\u0442\u0430\u0432\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0431\u0443\u0444\u0435\u0440\u0430endendSTATE_WAIT_ADDR: begin\/\/ \u0416\u0434\u0451\u043c \u0434\u0432\u0430 \u0431\u0430\u0439\u0442\u0430 \u0430\u0434\u0440\u0435\u0441\u0430, \u043f\u0435\u0440\u0432\u044b\u0439 \u043c\u043b\u0430\u0434\u0448\u0438\u0439if (rdRx_en == 1'd1) beginrdRx_en &lt;= 1'd0;end else beginif (!Empty) beginif (nechet == 1'd1) begin \/\/ \u0421\u0442\u0430\u0440\u0448\u0438\u0439 \u0431\u0430\u0439\u0442 \u0430\u0434\u0440\u0435\u0441\u0430reg_addr[21:8] &lt;= {10'd0, dataRx[3:0]};fAReady        &lt;= 1'd1;State          &lt;= STATE_ACK;display_value  &lt;= {4'd0, dataRx[3:0], reg_addr[7:0]};end else begin    \/\/ \u041c\u043b\u0430\u0434\u0448\u0438\u0439 \u0431\u0430\u0439\u0442 \u0430\u0434\u0440\u0435\u0441\u0430reg_addr[7:0]  &lt;= dataRx;endnechet  &lt;= ~nechet;rdRx_en &lt;= 1'd1;endendendSTATE_WAIT_DATA: begin\/\/ \u0416\u0434\u0451\u043c \u0434\u0432\u0430 \u0431\u0430\u0439\u0442\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u0435\u0440\u0432\u044b\u0439 \u043c\u043b\u0430\u0434\u0448\u0438\u0439if (rdRx_en == 1'd1) beginrdRx_en &lt;= 1'd0;end else beginif (!Empty) beginif (nechet) begin \/\/ \u0421\u0442\u0430\u0440\u0448\u0438\u0439 \u0431\u0430\u0439\u0442 \u0430\u0434\u0440\u0435\u0441\u0430reg_data[15:8] &lt;= dataRx;fDReady        &lt;= 1'd1;State          &lt;= STATE_ACK;display_value  &lt;= {dataRx, reg_data[7:0]};end else begin \/\/ \u041c\u043b\u0430\u0434\u0448\u0438\u0439 \u0431\u0430\u0439\u0442 \u0430\u0434\u0440\u0435\u0441\u0430reg_data[7:0]  &lt;= dataRx;endnechet  &lt;= ~nechet;rdRx_en &lt;= 1'd1;endendendSTATE_ACK: begin\/\/ \u041e\u0442\u0432\u0435\u0442 \u043d\u0430 \u043f\u0440\u0438\u0451\u043crdRx_en &lt;= 1'd0;if (fCmdWrite || fCmdRead) begindataTx    &lt;= 8'h5A;State     &lt;= STATE_WAIT;end else begindataTx    &lt;= 8'hA5;State     &lt;= STATE_IDLE;endstartTx   &lt;= 1'b1;endSTATE_WAIT: beginif (SD_Ready &amp;&amp; fAReady) beginif (fCmdWrite &amp;&amp; fDReady) beginState     &lt;= STATE_WRITE;cmd_write &lt;= 1'd1;pause     &lt;= 3'd0;endif (fCmdRead) begincmd_read &lt;= 1'd1;State    &lt;= STATE_READ;pause    &lt;= 3'd0;endendif (fCmdWrite) beginif (~fAReady || ~fDReady) beginState     &lt;= STATE_IDLE;fCmdWrite &lt;= 1'd0;endendif (fCmdRead) beginif (~fAReady) beginState    &lt;= STATE_IDLE;fCmdRead &lt;= 1'd0;endendendSTATE_READ: begin\/* \u041d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f Activete.         pause == 01 \u0442\u0430\u043a\u0442 tRCD \u043f\u043e\u0434\u0430\u0451\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 read pause == 12 \u0442\u0430\u043a\u0442\u0430 CL                      pause == 3 \u0447\u0438\u0442\u0430\u0435\u043c1 \u0442\u0430\u043a\u0442 tRP \u043f\u0440\u0435\u0434\u0437\u0430\u0440\u044f\u0434            pause == 4 *\/if (pause &gt;= RPause) begindata_from_ram &lt;= dq_in_ioe; \/\/ \u0427\u0438\u0442\u0430\u044e \u0434\u0430\u043d\u043d\u044b\u0435State         &lt;= STATE_DISPLAY;fAReady       &lt;= 1'd0;fCmdRead      &lt;= 1'd0;\/\/ \u0427\u0442\u0435\u043d\u0438\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043eend else beginpause         &lt;= pause + 3'd1;endendSTATE_DISPLAY: begin\/\/ \u0415\u0449\u0451 \u0442\u0430\u043a\u0442 \u0432 \u0441\u0447\u0451\u0442 prechargedisplay_value &lt;= data_from_ram;State         &lt;= STATE_IDLE;endSTATE_WRITE: begin\/* \u0414\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0448\u0438\u043d\u0443 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044ecmd_write, \u0447\u0435\u0440\u0435\u0437 \u0442\u0430\u043a\u0442 \u0431\u0443\u0434\u0435\u0442 activete, \u0435\u0449\u0451 \u0447\u0435\u0440\u0435\u0437 \u043e\u0434\u0438\u043d write\u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0442\u0430\u043a\u0442\u0435, (activete) \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043d\u0430 \u0448\u0438\u043d\u0435.1 \u0442\u0430\u043a\u0442 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u0434\u043e activete,1 \u0442\u0430\u043a\u0442 \u043e\u0442 \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438 \u0434\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u044b,2 \u0442\u0430\u043a\u0442\u0430 \u0432\u0440\u0435\u043c\u044f \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438,1 \u0442\u0430\u043a\u0442 \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u0435\u0434\u0437\u0430\u0440\u044f\u0434\u0430. \u0418\u0442\u043e\u0433\u043e 5-\u0442\u044c \u0442\u0430\u043a\u0442\u043e\u0432,\u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u0430\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u043a\u043e\u043c\u043c\u0430\u043d\u0434\u044b,\u0435\u0441\u043b\u0438 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u043d\u0430 \u043e\u0434\u0438\u043d \u0442\u0430\u043a\u0442 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 \u0432 Idle\u043d\u0435 \u0441\u0442\u0440\u0430\u0448\u043d\u043e!*\/if (pause == 3'd0) begincmd_write &lt;= 1'd0;endState &lt;= STATE_WRITE_WAIT;endSTATE_WRITE_WAIT: beginif (pause &gt;= WPause) beginState     &lt;= STATE_IDLE;fAReady   &lt;= 1'd0;fDReady   &lt;= 1'd0;fCmdWrite &lt;= 1'd0; \/\/ \u0417\u0430\u043f\u0438\u0441\u044c \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430end else beginpause     &lt;= pause + 3'd1;endenddefault: State &lt;= STATE_IDLE;endcaseendend\/\/------------------- UART - SDRAM ------------------------------------------\/* \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0432 \u0432\u0438\u0434\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0430. \u041d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0437\u0430\u0434\u0435\u0440\u0436\u0435\u043a. *\/CntrlSDRAM Controller_50MHz(.SD_CS(SD_CS_n),.SD_RAS(SD_RAS_n),.SD_CAS(SD_CAS_n),.SD_WE(SD_WE_n),.SD_BS0(SD_BS0),.SD_BS1(SD_BS1),.S_A(S_A),\/\/ \u0410\u0434\u0440\u0435\u0441 \u043d\u0430 \u0448\u0438\u043d\u0443.ready(SD_Ready),\/\/ 1- \u0433\u043e\u0442\u043e\u0432 \u043a \u043f\u0440\u0438\u0451\u043c\u0443 \u043a\u043e\u043c\u0430\u043d\u0434.cmd_read(cmd_read),.cmd_write(cmd_write),.addr(reg_addr),\/\/ \u0410\u0434\u0440\u0435\u0441 \u043e\u0442 \"\u043c\u0435\u043d\u044f\", \u043a\u0443\u0434\u0430 \u043f\u0438\u0441\u0430\u0442\u044c\/\u0447\u0438\u0442\u0430\u0442\u044c.clk(clk_sys),.rst(reset));endmodule<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<p>    \u041c\u043e\u0434\u0443\u043b\u044c \u043a\u043d\u043e\u043f\u043a\u0438.<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"vhdl\">`timescale 1ns \/ 1ps\/* \u041a\u043e\u0434 \u0434\u043b\u044f \u043a\u043d\u043e\u043f\u043e\u043a *\/module Button(output reg TTrigQ,              input X,  input C);initial TTrigQ &lt;= 1'd1;reg [18:0]CTQ; \/\/ \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u043f\u043e\u0434\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0440\u0435\u0431\u0435\u0437\u0433\u0430 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432reg XQ, RSTrigQ, BQ;wire FY = !RSTrigQ &amp; BQ; \/\/ \u0441\u0445\u0435\u043c\u0430 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0444\u0440\u043e\u043d\u0442\u0430always @(posedge C)beginXQ &lt;= !X;\/* &amp;CTQ - \u0432\u0441\u0435 \u0431\u0438\u0442\u044b \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430 \u0440\u0430\u0432\u043d\u044b \u0435\u0434\u0438\u043d\u0438\u0446\u0435, \u0442.\u0435. \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c, \u0434\u0430\u0451\u0442 \u0435\u0434\u0438\u043d\u0438\u0446\u0443      |CTQ - \u0432\u0441\u0435 \u0431\u0438\u0442\u044b \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430 \u0440\u0430\u0432\u043d\u044b \u043d\u0443\u043b\u044e, \u0442.\u0435. \u043c\u0438\u043d\u0438\u043c\u0443\u043c, \u0434\u0430\u0451\u0442 \u043d\u043e\u043b\u044c*\/if (XQ &amp; ~&amp;CTQ) CTQ &lt;= CTQ + 1'd1;else if (!XQ &amp; |CTQ) CTQ &lt;= CTQ - 1'd1;\/\/ \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0434\u043e\u0441\u0447\u0438\u0442\u0430\u043b \u0434\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c, \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c 1if (&amp;CTQ) RSTrigQ &lt;= 1'd1;\/\/ \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0434\u043e\u0441\u0447\u0438\u0442\u0430\u043b \u0434\u043e \u043c\u0438\u043d\u0438\u043c\u0443\u043c\u0430, \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c 0else if (~|CTQ) RSTrigQ &lt;= 1'd0;BQ &lt;= RSTrigQ;TTrigQ &lt;= FY;endendmodule<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<p>    \u041c\u043e\u0434\u0443\u043b\u044c \u0441\u0435\u043c\u0438 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043d\u043e\u0433\u043e \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430.<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"vhdl\">`timescale 1ns \/ 1psmodule SemSeg(output reg [7:0] seg,output reg [3:0] dig,input [15:0] display_value,input clk,input rst);\/* --------------------------------------------------------------------------- 1. \u0414\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0434\u043b\u044f \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u043a\u0438 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u0414\u043b\u044f 50 \u041c\u0413\u0446 \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u0440\u044f\u0434\u043e\u0432 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043e\u043a\u043e\u043b\u043e 1 \u041a\u0413\u0446 (250 \u0413\u0446 \u043d\u0430 \u0440\u0430\u0437\u0440\u044f\u0434) 50 000 000 \/ 2^16 = ~762 \u0413\u0446, \u0447\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 (\u043c\u0435\u0440\u0446\u0430\u043d\u0438\u044f \u043d\u0435 \u0431\u0443\u0434\u0435\u0442) *\/reg [15:0] clk_div = 16'd0;always @(posedge clk) begin  clk_div &lt;= clk_div + 1'b1;end \/\/ \u0421\u0442\u0430\u0440\u0448\u0438\u0435 2 \u0431\u0438\u0442\u0430 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u0441\u0447\u0435\u0442\u0447\u0438\u043a\/\/ \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0440\u044f\u0434\u0430 (0, 1, 2, 3)wire [1:0] refresh_counter = clk_div[15:14];reg  [3:0] mask = 4'b0000;\/\/ 2. \u0421\u0435\u043b\u0435\u043a\u0442\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 (\u041c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u043a\u0441\u043e\u0440)\/\/ \u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c, \u043a\u0430\u043a\u0443\u044e \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0435\u0442\u0440\u0430\u0434\u0443 (4 \u0431\u0438\u0442\u0430) \u0438\u0437 \u043e\u0431\u0449\u0435\u0433\u043e\/\/ \u0447\u0438\u0441\u043b\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0430 \u0434\u0435\u0448\u0438\u0444\u0440\u0430\u0442\u043e\u0440reg [4:0] current_digit;always @(*) begincase (refresh_counter)2'b00: current_digit = {mask[0], display_value[3:0]};  \/\/ \u0420\u0430\u0437\u0440\u044f\u0434 0 \u043f.2'b01: current_digit = {mask[1], display_value[7:4]};  \/\/ \u0420\u0430\u0437\u0440\u044f\u0434 12'b10: current_digit = {mask[2], display_value[11:8]}; \/\/ \u0420\u0430\u0437\u0440\u044f\u0434 22'b11: current_digit = {mask[3], display_value[15:12]};\/\/ \u0420\u0430\u0437\u0440\u044f\u0434 3 \u043b.default: current_digit = {1'd0, 4'h0};endcaseend \/\/ 3. \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0430\u043d\u043e\u0434\u0430\u043c\u0438 (\u0410\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u043a\u043e\u043c\u0435\u0441\u0442\u0430)\/\/ \u041f\u043e\u0434\u0430\u0435\u043c \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \"0\" \u043d\u0430 \u043e\u0431\u0449\u0438\u0439 \u0430\u043d\u043e\u0434 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430\/\/ (\u0434\u043b\u044f \u0441\u0445\u0435\u043c\u044b \u0441 \u043e\u0431\u0449\u0438\u043c \u0430\u043d\u043e\u0434\u043e\u043c)always @(*) begin  case (refresh_counter)2'b00: dig = 4'b1110; \/\/ \u0412\u043a\u043b\u044e\u0447\u0435\u043d \u0440\u0430\u0437\u0440\u044f\u0434 02'b01: dig = 4'b1101; \/\/ \u0412\u043a\u043b\u044e\u0447\u0435\u043d \u0440\u0430\u0437\u0440\u044f\u0434 12'b10: dig = 4'b1011; \/\/ \u0412\u043a\u043b\u044e\u0447\u0435\u043d \u0440\u0430\u0437\u0440\u044f\u0434 22'b11: dig = 4'b0111; \/\/ \u0412\u043a\u043b\u044e\u0447\u0435\u043d \u0440\u0430\u0437\u0440\u044f\u0434 3default: dig = 4'b1111; \/\/ \u0412\u0441\u0435 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u044b  endcaseend \/\/ 4. \u0414\u0435\u0448\u0438\u0444\u0440\u0430\u0442\u043e\u0440 4-\u0432-7 (HEX \u0432 \u043a\u043e\u0434 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432)\/\/ \u041f\u043e\u0440\u044f\u0434\u043e\u043a \u0431\u0438\u0442\u043e\u0432 \u0432 segments: [6:0] -&gt; {g, f, e, d, c, b, a}.\/\/ \u041b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \"0\" \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0441\u0435\u0433\u043c\u0435\u043d\u0442.always @(*) begincase (current_digit)5'h0: seg = 8'b11000000; \/\/ \"0\"5'h1: seg = 8'b11111001; \/\/ \"1\"5'h2: seg = 8'b10100100; \/\/ \"2\"5'h3: seg = 8'b10110000; \/\/ \"3\"5'h4: seg = 8'b10011001; \/\/ \"4\"5'h5: seg = 8'b10010010; \/\/ \"5\"5'h6: seg = 8'b10000010; \/\/ \"6\"5'h7: seg = 8'b11111000; \/\/ \"7\"5'h8: seg = 8'b10000000; \/\/ \"8\"5'h9: seg = 8'b10010000; \/\/ \"9\"5'hA: seg = 8'b10001000; \/\/ \"A\"5'hB: seg = 8'b10000011; \/\/ \"b\"5'hC: seg = 8'b11000110; \/\/ \"C\"5'hD: seg = 8'b10100001; \/\/ \"d\"5'hE: seg = 8'b10000110; \/\/ \"E\"5'hF: seg = 8'b10001110; \/\/ \"F\"default: seg = 8'b11111111; \/\/ \u0412\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043eendcaseend\/\/--------------------------------------------------------------------------------------endmodule<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<p>    \u041a\u043e\u0434 \u043c\u043e\u0434\u0443\u043b\u044f \u043f\u0440\u0438\u0451\u043c\u0430 \u043f\u043e UART.<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"vhdl\">`timescale 1ns \/ 1ps\/\/ RS232 \u041f\u0435\u0440\u0435\u0434\u0430\u0442\u0447\u0438\u043a \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c 19200 (\u0431\u0438\u0442\/\u0441\u0435\u043a), 8 bit data, \u0431\u0435\u0437 \u0447\u0451\u0442\/\u043d\u0435\u0447\u0435\u0442\/\/ clk 50 MHzmodule RS232R(    input clk, rst, input RxD, input done,\/\/ \u0414\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b\u0438 output empty,\/\/ \u0411\u0443\u0444\u0435\u0440 \u043f\u0443\u0441\u0442\u043e\u0439    output [7:0] data);wire endtick, midtick, endbit;wire [11:0] limit;\/\/ 1 \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u0451\u043creg run;\/\/ \u0414\u043b\u044f \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0444\u0440\u043e\u043d\u0442\u0430reg Q0, Q1;reg [11:0] tick;reg [3:0] bitcnt;reg [7:0] shreg;reg [2:0] rd_ptr;\/\/ \u0421\u0447\u0451\u0442 \u043e\u0442 \u043d\u0443\u043b\u044f \u0434\u043e \u0441\u0435\u043c\u0438 \u0438 \u0441\u043d\u043e\u0432\u0430 \u043d\u043e\u043b\u044c.reg [2:0] wr_ptr;reg [7:0] fifo[7:0];\/\/ \u041a\u043e\u043b\u044c\u0446\u0435\u0432\u043e\u0439 \u0431\u0443\u0444\u0435\u0440\/\/ \u0414\u043b\u0438\u043d\u043d\u0430 \u0431\u0438\u0442\u0430 \u0432 \u0442\u0430\u043a\u0442\u0430\u0445, \u043f\u0440\u0438 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043e\u0431\u043c\u0435\u043d\u0430assign limit = 12'd2604;\/\/ \u0424\u043b\u0430\u0433 \u043a\u043e\u043d\u0435\u0446 \u043f\u043e\u0441\u044b\u043b\u043a\u0438assign endtick = tick == limit;\/\/ limit\/2 \u0424\u043b\u0430\u0433 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0430 \u0431\u0438\u0442\u0430assign midtick = tick == {1'b0, limit[11:1]};\/\/ \u0424\u043b\u0430\u0433 \u043a\u043e\u043d\u0435\u0446 \u0431\u0438\u0442\u0430assign endbit = bitcnt == 4'd8;assign data = fifo[rd_ptr];assign empty = (wr_ptr == rd_ptr);always @ (posedge clk) beginif (rst) beginQ0      &lt;= 1'b1;Q1      &lt;= 1'b1;run     &lt;= 1'b0;tick    &lt;= 12'd0;bitcnt  &lt;= 4'd0;shreg   &lt;= 8'd0;rd_ptr  &lt;= 3'd0;wr_ptr  &lt;= 3'd0;end else begin\/* \u0424\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u043c \u0437\u0430\u0434\u043d\u0438\u0439 \u0444\u0440\u043e\u043d\u0442, \u043d\u0430\u0447\u0430\u043b\u043e \u043f\u043e\u0441\u044b\u043b\u043a\u0438 (\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f) *\/Q0 &lt;= RxD; Q1 &lt;= Q0;\/* \u0415\u0441\u0442\u044c \u0441\u043f\u0430\u0434, \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u043f\u0440\u0438\u0451\u043c.\u041a\u043e\u043d\u0435\u0446 \u0431\u0438\u0442\u0430 \u0438 \u043a\u043e\u043d\u0435\u0446 \u0432\u0441\u0435\u0439 \u043f\u043e\u0441\u044b\u043b\u043a\u0438, \u0441\u0442\u043e\u043f \u043f\u0440\u0438\u0451\u043c. (\u0438\u043d\u0430\u0447\u0435 \u0445\u0440\u0430\u043d\u0438\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435) *\/run &lt;= (Q1 &amp; ~Q0) ? 1'd1 : (endtick &amp; endbit) ? 1'd0 : run;tick &lt;= (run &amp; ~endtick) ? tick + 1'd1 : 1'd0;\/* \u0421\u0447\u0451\u0442\u0447\u0438\u043a \u0431\u0438\u0442 *\/bitcnt &lt;= (endtick &amp; ~endbit) ? bitcnt + 1'd1 : (endtick &amp; endbit) ? 1'd0 : bitcnt;\/* \u0412 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 \u0431\u0438\u0442\u0430 \u0437\u0430\u043d\u043e\u0441\u0438\u043c \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0439 \u0431\u0438\u0442 \u0432 \u0441\u0434\u0432\u0438\u0433\u043e\u0432\u044b\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 *\/shreg &lt;= midtick ? {Q1, shreg[7:1]} : shreg;\/* \u041a\u043e\u043d\u0435\u0446 \u0431\u0438\u0442\u0430 \u0438 \u043a\u043e\u043d\u0435\u0446 \u043f\u043e\u0441\u044b\u043b\u043a\u0438 *\/if (endtick &amp; endbit) beginfifo[wr_ptr] &lt;= shreg;wr_ptr &lt;= wr_ptr + 3'd1;end\/* \u0414\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u044b (done) *\/if (done &amp;&amp; ~empty) beginrd_ptr &lt;= rd_ptr + 3'd1;endendendendmodule<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<p>    \u041a\u043e\u0434 \u043c\u043e\u0434\u0443\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u043f\u043e UART.<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"vhdl\">`timescale 1ns \/ 1ps  \/\/ NW 4.5.09 \/ 15.8.10 \/ 15.11.10\/\/ RS232 transmitter for 19200 bps, 8 bit data, \u0431\u0435\u0437 \u0447\u0451\u0442\u043d\u043e\u0441\u0442\u0438\/\u043d\u0435\u0447\u0451\u0442\u043d\u043e\u0441\u0442\u0438\/\/ clock is 50 MHz; 50000 \/ 2604 = 19.2 KHzmodule RS232T(    input clk, rst,    input start, \/\/ request to accept and send a byte    input [7:0] data,    output rdy,    output TxD);wire endtick, endbit;wire [11:0] limit;reg run;reg [11:0] tick;reg [3:0] bitcnt;reg [8:0] shreg;assign limit = 12'd2604; \/\/ \u0414\u043b\u0438\u043d\u0430 \u0431\u0438\u0442\u0430 \u0432 \u0442\u0430\u043a\u0442\u0430\u0445, \u043f\u0440\u0438 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043e\u0431\u043c\u0435\u043d\u0430assign endtick = tick == limit; \/\/ \u0424\u043b\u0430\u0433 \u043a\u043e\u043d\u0446\u0430 \u0431\u0438\u0442\u0430assign endbit = bitcnt == 4'd9; \/\/ \u0424\u043b\u0430\u0433 \u043a\u043e\u043d\u0446\u0430 \u0431\u0438\u0442\u043e\u0432\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438assign rdy = ~run;     \/\/ \u041d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c? \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u0444\u043b\u0430\u0433 \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u044c \u043a \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435.assign TxD = shreg[0]; \/\/ \u0412\u044b\u0434\u0430\u0451\u043c \u0432 \u043b\u0438\u043d\u0438\u044e \u043c\u043b\u0430\u0434\u0448\u0438\u0439 \u0431\u0438\u0442 \u0441\u0434\u0432\u0438\u0433\u043e\u0432\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430always @ (posedge clk) begin\/* \u0415\u0441\u043b\u0438 \u0441\u0431\u0440\u043e\u0441, \u0438\u043b\u0438 \u043a\u043e\u043d\u0435\u0446 \u0442\u0438\u043a\u0430 \u0438 \u043a\u043e\u043d\u0435\u0446 \u0431\u0438\u0442\u0430, \u0442\u043e \u043d\u043e\u043b\u044c;       \u0438\u043d\u0430\u0447\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0441\u0442\u0430\u0440\u0442.\u0415\u0441\u043b\u0438 \u0441\u0442\u0430\u0440\u0442, \u0442\u043e \u0435\u0434\u0435\u043d\u0438\u0446\u0430,       \u0438\u043d\u0430\u0447\u0435 \u0445\u0440\u0430\u043d\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.*\/  run &lt;= (rst | endtick &amp; endbit) ? 1'd0 : start ? 1'd1 : run;\/* \u041f\u043e\u043a\u0430 run \u0438 \u043d\u0435 \u043a\u043e\u043d\u0435\u0446 \u0442\u0438\u043a\u0430, \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0442\u0438\u043a,        \u0438\u043d\u0430\u0447\u0435 \u043d\u043e\u043b\u044c. *\/  tick &lt;= (run &amp; ~endtick) ? tick + 1'd1 : 1'd0;\/* \u041a\u043e\u043d\u0435\u0446 \u0442\u0438\u043a\u0430 \u0438 \u043d\u0435 \u043a\u043e\u043d\u0435\u0446 \u0431\u0438\u0442\u0430, \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0431\u0438\u0442;\u0418\u043d\u0430\u0447\u0435, \u0435\u0441\u043b\u0438 \u043a\u043e\u043d\u0435\u0446 \u0442\u0438\u043a\u0430 \u0438 \u043a\u043e\u043d\u0435\u0446 \u0431\u0438\u0442\u0430, \u0442\u043e \u043d\u043e\u043b\u044c,      \u0438\u043d\u0430\u0447\u0435 \u0445\u0440\u0430\u043d\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. *\/  bitcnt &lt;= (endtick &amp; ~endbit) ? bitcnt + 1'd1 :    (endtick &amp; endbit) ? 1'd0 : bitcnt;\/* \u0412 \u0441\u0434\u0432\u0438\u0433\u043e\u0432\u043e\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435, \u0435\u0441\u043b\u0438 \u0441\u0431\u0440\u043e\u0441, \u0435\u0434\u0438\u043d\u0438\u0446\u0430 (\u0432\u044b\u0441\u043e\u043a\u0438\u0439 \u043d\u0430 \u043b\u0438\u043d\u0438\u0438)   \u0438\u043d\u0430\u0447\u0435, \u0435\u0441\u0442\u044c \u0441\u0442\u0430\u0440\u0442, \u0432\u044b\u0434\u0430\u0451\u043c \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u0439 \u0431\u0438\u0442  (\u043d\u043e\u043b\u044c \u0432 \u043c\u043b\u0430\u0434\u0448\u0435\u043c \u0440\u0430\u0437\u0440\u044f\u0434\u0435 \u0441\u0434\u0432\u0438\u0433\u043e\u0432\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430),            \u0438\u043d\u0430\u0447\u0435, \u0435\u0441\u043b\u0438 \u043a\u043e\u043d\u0435\u0446 \u0442\u0438\u043a\u0430, \u0441\u0434\u0432\u0438\u0433 \u0432\u043f\u0440\u0430\u0432\u043e (\u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u043c\u043b. \u0440\u0430\u0437\u0440\u044f\u0434\u0430),         \u0438\u043d\u0430\u0447\u0435 \u0445\u0440\u0430\u043d\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. *\/  shreg &lt;= (rst) ? 1'd1 : start ? {data, 1'b0} :    endtick ? {1'b1, shreg[8:1]} : shreg;endendmodule<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<p>    \u041a\u043e\u0434 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 SDRAM.<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"vhdl\">`timescale 1ns \/ 1psmodule CntrlSDRAM(outputreg SD_CS,outputreg SD_RAS,outputreg SD_CAS,outputreg SD_WE,outputreg SD_BS0,outputreg SD_BS1,outputreg [11:0] S_A,\/\/ \u0410\u0434\u0440\u0435\u0441 \u043d\u0430 \u0448\u0438\u043d\u0443outputreg ready,\/\/ 1 - \u0433\u043e\u0442\u043e\u0432 \u043a \u043f\u0440\u0438\u0451\u043c\u0443 \u043a\u043e\u043c\u0430\u043d\u0434inputcmd_read,inputcmd_write,\/* bank[21:20], row[19:8], col[7:0] *\/input[21:0] addr,\/\/ \u0410\u0434\u0440\u0435\u0441 \u043e\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044finputclk,inputrst);\/\/ \u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0430   localparam ST_INIT_NOP  = 4'd0,              ST_INIT_PRE  = 4'd1,              ST_INIT_REF  = 4'd2,              ST_INIT_MRS  = 4'd3,              ST_IDLE      = 4'd4,              ST_ACTIVATE  = 4'd5,              ST_WRITE     = 4'd6,              ST_READ      = 4'd7,              ST_PRECHARGE = 4'd8,              ST_REFRESH   = 4'd9;\/\/ \u041a\u043e\u043c\u0430\u043d\u0434\u044b SDRAM {CS, RAS, CAS, WE}   localparam CMD_NOP      = 4'b0111,              CMD_PRECHARGE= 4'b0010,              CMD_REFRESH  = 4'b0001,              CMD_LOAD_MODE= 4'b0000,              CMD_ACTIVATE = 4'b0011,              CMD_READ     = 4'b0101,              CMD_WRITE    = 4'b0100,              CMD_INHIBIT  = 4'b1111;\/\/ \u041a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0437\u0430\u0434\u0435\u0440\u0436\u0435\u043a \u0434\u043b\u044f 50 \u041c\u0413\u0446 \/\/ 1 \/ (50*10^6) = 20\u043d\u0441 =&gt; 20 * 10000 = 200\u043c\u043a\u0441localparam WAIT_200US = 14'd10000;localparam WAIT_TRP   = 14'd2; \/* \u0411\u044b\u043b\u043e 1, (20 ns) ?\u0434\u043e\u0431\u0430\u0432\u043b\u044e \u043e\u0434\u0438\u043d \u0442\u0430\u043a\u0442*\/localparam WAIT_TRFC  = 14'd4; \/* 65 ns - 4 \u0442\u0430\u043a\u0442\u0430 *\/localparam WAIT_TMRD  = 14'd2; localparam WAIT_TRCD  = 14'd1;\/* \u041c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0430 HY57V641620FTP-H \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 4096 \u0441\u0442\u0440\u043e\u043a,\u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0443\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f \u0437\u0430\u0440\u044f\u0434\u0430 \u0432 \u044f\u0447\u0435\u0439\u043a\u0430\u0445 \u043f\u0430\u043c\u044f\u0442\u0438\u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 64 \u043c\u0441. 64 \/ 4096 = 0.015625,\u043e\u043a\u0440\u0443\u0433\u043b\u044f\u0435\u043c \u0432 \u043c\u0435\u043d\u044c\u0448\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u0434\u043b\u044f \u043d\u0430\u0434\u0451\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c15.6 \u043c\u043a\u0441 - \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0430\u0432\u0442\u043e\u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u044f\u0447\u0435\u0435\u043a.15.6 \/ 20 \u043d\u0441 = 780 \u0442\u0430\u043a\u0442\u043e\u0432. *\/   localparam REFRESH_INTERVAL = 10'd779;\/* \u041f\u0438\u0448\u0443\u0442 \u0447\u0442\u043e 8-\u043c\u044c \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0432\u0440\u043e\u0434\u0435 \u0431\u044b \u044d\u0442\u043e \u0434\u043b\u044f DDR,\u041f\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043d\u0443\u0436\u043d\u043e \u0447\u0442\u043e \u0431\u044b \u0431\u043e\u043b\u044c\u0448\u0435 2-\u0445 \u0431\u044b\u043b\u043e. *\/localparam INIT_REFRESH_CNT = 4'd8;reg [9:0]  refresh_timer;reg        refresh_req;reg [3:0]  state;reg [13:0] delay_cnt;reg [3:0]  init_ref_cnt;reg        initOk;reg        fW;reg        fR;\/\/ --- \u0415\u0414\u0418\u041d\u042b\u0419 \u0421\u0418\u041d\u0425\u0420\u041e\u041d\u041d\u042b\u0419 \u0410\u0412\u0422\u041e\u041c\u0410\u0422 \u0423\u041f\u0420\u0410\u0412\u041b\u0415\u041d\u0418\u042f \u0418 \u041a\u041e\u041c\u0410\u041d\u0414 ---always @(posedge clk or posedge rst) beginif (rst) begininitOk       &lt;= 1'd0;state        &lt;= ST_INIT_NOP;delay_cnt    &lt;= 14'd0;init_ref_cnt &lt;= 4'd0;ready        &lt;= 1'b0;fW           &lt;= 1'd0;fR           &lt;= 1'd0;\/\/ \u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0440\u0438 \u0441\u0431\u0440\u043e\u0441\u0435: \u043f\u0430\u043c\u044f\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0430 (CS_n = 1){SD_CS, SD_RAS, SD_CAS, SD_WE} &lt;= CMD_INHIBIT;{SD_BS1, SD_BS0}               &lt;= 2'b00;S_A                            &lt;= 12'd0;refresh_timer &lt;= 10'd0;refresh_req   &lt;= 1'b0;end else beginif (initOk) beginif (refresh_timer &gt;= REFRESH_INTERVAL) beginrefresh_timer &lt;= 10'd0;refresh_req   &lt;= 1'b1; end else beginrefresh_timer &lt;= refresh_timer + 1'b1;endendcase (state)\/\/ ----------- \u0421\u0442\u0430\u0434\u0438\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 -----------ST_INIT_NOP: begin  {SD_CS, SD_RAS, SD_CAS, SD_WE} &lt;= CMD_INHIBIT;    if (delay_cnt &gt;= WAIT_200US) beginstate                          &lt;= ST_INIT_PRE;delay_cnt                      &lt;= 14'd0;\/* \u0412\u044b\u0434\u0430\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 PRECHARGE \u0437\u0430\u0440\u0430\u043d\u0435\u0435(\u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u043d\u0430 \u043f\u0438\u043d\u0430\u0445 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 \u0432 ST_INIT_PRE) *\/{SD_CS, SD_RAS, SD_CAS, SD_WE} &lt;= CMD_PRECHARGE;\/\/ A10=1 (Precharge All)               |S_A                            &lt;= 12'b0100_0000_0000;  end else begindelay_cnt &lt;= delay_cnt + 1'b1;  endendST_INIT_PRE: begin   if (delay_cnt &gt;= WAIT_TRP) beginstate                          &lt;= ST_INIT_REF;delay_cnt                      &lt;= 14'd0;\/\/ \u0417\u0430\u0440\u0430\u043d\u0435\u0435 \u0433\u043e\u0442\u043e\u0432\u0438\u043c \u043f\u0435\u0440\u0432\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443 REFRESH{SD_CS, SD_RAS, SD_CAS, SD_WE} &lt;= CMD_REFRESH;  end else begin{SD_CS, SD_RAS, SD_CAS, SD_WE} &lt;= CMD_NOP;delay_cnt                      &lt;= delay_cnt + 1'b1;  endendST_INIT_REF: begin  if (delay_cnt &gt;= WAIT_TRFC) begindelay_cnt &lt;= 14'd0;\/\/ \u0415\u0441\u043b\u0438 \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u043d\u0443\u0436\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0446\u0438\u043a\u043b\u043e\u0432 \u0440\u0435\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438if (init_ref_cnt == INIT_REFRESH_CNT) begin state                          &lt;= ST_INIT_MRS; {SD_CS, SD_RAS, SD_CAS, SD_WE} &lt;= CMD_LOAD_MODE; {SD_BS1, SD_BS0}               &lt;= 2'b00;  \/\/ CL=2, BL=1 S_A                       &lt;= 12'b0000_0010_0000;end else begin \/\/ \u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u0445 \u0440\u0435\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0439 init_ref_cnt              &lt;= init_ref_cnt + 1'b1; \/\/ \u041f\u043e\u0441\u044b\u043b\u0430\u0435\u043c \u0421\u041b\u0415\u0414\u0423\u042e\u0429\u0423\u042e \u043a\u043e\u043c\u0430\u043d\u0434\u0443 REFRESH {SD_CS, SD_RAS, SD_CAS, SD_WE} &lt;= CMD_REFRESH;end  end else begin{SD_CS, SD_RAS, SD_CAS, SD_WE} &lt;= CMD_NOP;S_A                            &lt;= 12'd0;delay_cnt                      &lt;= delay_cnt + 1'b1;  endendST_INIT_MRS: begin   if (delay_cnt &gt;= WAIT_TMRD) beginstate                          &lt;= ST_IDLE;delay_cnt                      &lt;= 14'd0;initOk                         &lt;= 1'd1;  end else begindelay_cnt                      &lt;= delay_cnt + 1'b1;  end  {SD_CS, SD_RAS, SD_CAS, SD_WE} &lt;= CMD_NOP;  S_A                            &lt;= 12'd0;end\/\/ ----------- \u0421\u0442\u0430\u0434\u0438\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430 -----------ST_IDLE: begin  ready                          &lt;= 1'b1;  delay_cnt                      &lt;= 14'd0;   {SD_CS, SD_RAS, SD_CAS, SD_WE} &lt;= CMD_NOP;  if (refresh_req) beginstate                          &lt;= ST_REFRESH;ready                          &lt;= 1'b0;\/\/ \u0417\u0430\u0440\u0430\u043d\u0435\u0435 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0440\u0435\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e{SD_CS, SD_RAS, SD_CAS, SD_WE} &lt;= CMD_REFRESH;S_A              &lt;= 12'd0;refresh_req                    &lt;= 1'd0;  end else beginif (cmd_read || cmd_write) beginstate                          &lt;= ST_ACTIVATE;ready                          &lt;= 1'b0;\/\/ \u0417\u0430\u0440\u0430\u043d\u0435\u0435 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u0435\u043c \u0441\u0442\u0440\u043e\u043a\u0443{SD_CS, SD_RAS, SD_CAS, SD_WE} &lt;= CMD_ACTIVATE;{SD_BS1, SD_BS0}               &lt;= addr[21:20];S_A                            &lt;= addr[19:8];end\/* \u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0442\u0430\u043a\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 cmd_read \u0441\u043d\u0438\u043c\u0443\u0442 *\/if (cmd_read) beginfR &lt;= 1'd1; \/\/ \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0430\u043c\u0435\u043d\u0438\u043c \u043d\u0430 \u044d\u0442\u043e\u0442 \u0444\u043b\u0430\u0433endif (cmd_write) beginfW &lt;= 1'd1;end  endendST_ACTIVATE: begin   if (delay_cnt &gt;= (WAIT_TRCD - 1)) begindelay_cnt &lt;= 14'd0;{SD_BS1, SD_BS0}             &lt;= addr[21:20];\/\/ A10=1 (\u0410\u0432\u0442\u043e-\u043f\u0440\u0435\u0447\u0430\u0440\u0434\u0436)S_A                          &lt;= {4'b0100, addr[7:0]};if (fW) beginstate                          &lt;= ST_WRITE;{SD_CS, SD_RAS, SD_CAS, SD_WE} &lt;= CMD_WRITE;fW                             &lt;= 1'd0;endif (fR) beginstate                          &lt;= ST_READ;{SD_CS, SD_RAS, SD_CAS, SD_WE} &lt;= CMD_READ;fR                             &lt;= 1'd0;end  end else begin{SD_CS, SD_RAS, SD_CAS, SD_WE} &lt;= CMD_NOP;S_A                            &lt;= 12'd0;delay_cnt                      &lt;= delay_cnt + 14'b1;  endendST_WRITE: begin{SD_CS, SD_RAS, SD_CAS, SD_WE} &lt;= CMD_NOP;\/\/ \u0423\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c \u0430\u0434\u0440\u0435\u0441 \u0438 \u0431\u0430\u043d\u043a\u0438, \u043f\u043e\u043a\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0437\u0430\u043f\u0438\u0441\u044c!{SD_BS1, SD_BS0}               &lt;= addr[21:20]; \/\/ A10=1 (\u0410\u0432\u0442\u043e-\u043f\u0440\u0435\u0447\u0430\u0440\u0434\u0436)S_A                            &lt;= {4'b0100, addr[7:0]};if (delay_cnt &gt;= 14'd2) begin\/\/tWR 2 tRP 1 - 1 \u0443\u0436\u0435 \u0431\u044b\u043b = 2delay_cnt            &lt;= 14'd0; state                &lt;= ST_IDLE;{SD_BS1, SD_BS0}     &lt;= 2'd0;S_A                  &lt;= 12'd0;end else begindelay_cnt &lt;= delay_cnt + 14'b1;endendST_READ: begin{SD_CS, SD_RAS, SD_CAS, SD_WE} &lt;= CMD_NOP;\/\/2CL + 1 \u043f\u0440\u0435\u0434\u0437\u0430\u0440\u044f\u0434-1 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430=2if (delay_cnt &gt;= 14'd2) begindelay_cnt            &lt;= 14'd0; state                &lt;= ST_IDLE;{SD_BS1, SD_BS0}     &lt;= 2'd0;S_A                  &lt;= 12'd0;end else begindelay_cnt &lt;= delay_cnt + 14'b1;endendST_REFRESH: begin  if (delay_cnt &gt;= WAIT_TRFC) begindelay_cnt                  &lt;= 14'd0;state                      &lt;= ST_IDLE;   end else begindelay_cnt                  &lt;= delay_cnt + 1'b1;  end{SD_CS, SD_RAS, SD_CAS, SD_WE} &lt;= CMD_NOP;S_A                            &lt;= 12'd0;enddefault: beginstate     &lt;= ST_INIT_NOP;delay_cnt &lt;= 14'd0;endendcase{SD_BS1, SD_BS0} &lt;= addr[21:20];\/\/??endendendmodule<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<p>    \u041f\u043e\u0432\u0442\u043e\u0440\u044e\u0441\u044c \u043f\u0440\u043e \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b \u043f\u0430\u043c\u044f\u0442\u0438, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u0434\u0432\u0438\u0433 \u043f\u043e \u0444\u0430\u0437\u0435, \u0447\u0442\u043e \u0431\u044b \u0441\u0438\u0433\u043d\u0430\u043b \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0443 \u0437\u0430\u043f\u0430\u0437\u0434\u044b\u0432\u0430\u043b. \u0422\u043e \u0435\u0441\u0442\u044c \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u043a\u043e\u0433\u0434\u0430 \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0443 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u0438\u0434\u0451\u0442 \u043d\u0430\u0440\u0430\u0441\u0442\u0430\u044e\u0449\u0438\u0439 \u0444\u0440\u043e\u043d\u0442 \u0441\u0438\u043d\u0445\u0440\u043e\u0441\u0438\u0433\u043d\u0430\u043b\u0430, \u0432\u0441\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u0436\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043a\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0432 \u043a\u043e\u0434\u0435, \u044d\u0442\u043e\u0442 \u0441\u0438\u0433\u043d\u0430\u043b \u0432\u044b\u0434\u0430\u0451\u0442\u0441\u044f \u043d\u0430\u0440\u0443\u0436\u0443.<\/p>\n<p>    \u041d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c, \u0447\u0442\u043e \u0432 \u041f\u041b\u0418\u0421 Altera \u0435\u0441\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0432\u044b\u0432\u043e\u0434\u0430 (\u043c\u043e\u0433\u0443 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043d\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0432 \u0447\u0430\u0441\u0442\u0438 \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c, \u043d\u0430\u0434\u0435\u044e\u0441\u044c \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u043c \u043f\u043e\u043d\u044f\u0442\u043d\u043e). \u0427\u0442\u043e \u0431\u044b \u0438\u0445 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u0432\u044b\u0432\u043e\u0434\u043e\u0432 \u043e\u043f\u0446\u0438\u0438 \u201cFast Input Register On\u201d, \u201cFast Output Enable Register On\u201d (\u0434\u043b\u044f \u0434\u0432\u0443\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0448\u0438\u043d\u044b \u0434\u0430\u043d\u043d\u044b\u0445) \u0438 \u201cFast Output Register On\u201d (\u0434\u043b\u044f \u0432\u044b\u0445\u043e\u0434\u043e\u0432 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f). \u041a\u0440\u043e\u043c\u0435 \u044d\u0442\u043e\u0433\u043e, \u0441\u043b\u0435\u0434\u0438\u0442\u0435 \u0437\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430, \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u043e\u043f\u0446\u0438\u0438. \u041e\u0434\u043d\u0430 \u0438\u0437 \u043f\u0440\u0438\u0447\u0438\u043d, \u0435\u0441\u043b\u0438 &#171;\u043d\u0430 \u0432\u0445\u043e\u0434\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u0430&#187; \u043d\u0435\u043a\u0430\u044f \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430.<\/p>\n<p>    \u0415\u0441\u043b\u0438 \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043a \u0432\u0430\u0448\u0435\u0439 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0435 \u043d\u0435\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0430\u043d\u0430\u043b\u043e\u0433\u0438. \u0412\u043e\u0442 \u044f \u043d\u0430\u0448\u0451\u043b \u0443 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432 \u0445\u043e\u0440\u043e\u0448\u0443\u044e \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0443.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b96\/d61\/493\/b96d61493c94ae2cc3f753176a58881a.jpg\" alt=\"\u0414\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430 \u0437\u0430\u043f\u0438\u0441\u0438 \u0441 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043f\u0440\u0435\u0434\u0437\u0430\u0440\u044f\u0434\u043e\u043c.\" title=\"\u0414\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430 \u0437\u0430\u043f\u0438\u0441\u0438 \u0441 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043f\u0440\u0435\u0434\u0437\u0430\u0440\u044f\u0434\u043e\u043c.\" width=\"1105\" height=\"675\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/b96\/d61\/493\/b96d61493c94ae2cc3f753176a58881a.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b96\/d61\/493\/b96d61493c94ae2cc3f753176a58881a.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0414\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430 \u0437\u0430\u043f\u0438\u0441\u0438 \u0441 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043f\u0440\u0435\u0434\u0437\u0430\u0440\u044f\u0434\u043e\u043c.<\/figcaption><\/div>\n<\/figure>\n<p> \u041d\u0430\u0434\u0435\u044e\u0441\u044c \u0432 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u043e\u0431\u043e\u0439\u0434\u0451\u043c\u0441\u044f \u0431\u0435\u0437 \u0444\u0438\u0430\u0441\u043a\u043e.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1059342\/\">https:\/\/habr.com\/ru\/articles\/1059342\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>    \u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435, \u043a \u043c\u043e\u0435\u043c\u0443 \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043a\u043e\u0434 \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043d\u0435 \u0440\u0430\u0431\u043e\u0447\u0438\u0439. \u0418\u0437-\u0437\u0430 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0430 \u043e\u043f\u044b\u0442\u0430, \u044f \u0447\u0438\u0442\u0430\u043b \u0441\u0432\u043e\u0438 \u0436\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0448\u0438\u043d\u0435 \u0438 \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u044f\u043b \u044d\u0442\u043e \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u0438. \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u044e \u044d\u0442\u043e \u043d\u0435\u0434\u043e\u0440\u0430\u0437\u0443\u043c\u0435\u043d\u0438\u0435 \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435. \u041e\u043f\u044b\u0442\u043d\u044b\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u0447\u0438\u0442\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437 \u0441\u043f\u043e\u0440\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430 :-).    \u041d\u0435\u043c\u043d\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043c \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c. \u0418\u0442\u0430\u043a \u043f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0437\u0430\u0434\u0430\u0447\u0438. \u0411\u0443\u0434\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c\u0443 \u043a\u0430\u043d\u0430\u043b\u0443 (RS232) \u0441 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 \u043c\u0430\u0440\u043a\u0435\u0440 \u0430\u0434\u0440\u0435\u0441\u0430 0x80, \u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043e\u0436\u0438\u0434\u0430\u044e\u0442\u0441\u044f \u0434\u0432\u0430 \u0431\u0430\u0439\u0442\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0435 \u0430\u0434\u0440\u0435\u0441. \u041c\u0430\u0440\u043a\u0435\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 0x40, \u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043e\u0436\u0438\u0434\u0430\u044e\u0442\u0441\u044f \u0434\u0432\u0430 \u0431\u0430\u0439\u0442\u0430 \u0434\u0430\u043d\u043d\u044b\u0445. \u041a\u043e\u043c\u0430\u043d\u0434\u0430 0x20 \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u043f\u0430\u043c\u044f\u0442\u044c, \u043a\u043e\u043c\u0430\u043d\u0434\u0430 0x10 \u0447\u0442\u0435\u043d\u0438\u0435 \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438 (\u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f). \u041a\u0440\u043e\u043c\u0435 \u044d\u0442\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u043c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043d\u0430 \u0441\u0435\u043c\u0438 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043d\u043e\u043c \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0435 \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0435 \u0430\u0434\u0440\u0435\u0441, \u0434\u0430\u043d\u043d\u044b\u0435 (\u043a\u0430\u043a \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0435, \u0442\u0430\u043a \u0438 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435), \u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b. \u0414\u0430\u043b\u0435\u0435 \u0441\u0445\u0435\u043c\u044b. \u0410 \u0442\u0430\u043a \u0436\u0435 \u0438\u043c\u0435\u0439\u0442\u0435 \u0432\u0432\u0438\u0434\u0443, \u0442\u0430\u043a \u043a\u0430\u043a \u044f \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0439 \u0438 \u043e\u043f\u044b\u0442\u0430 \u0443 \u043c\u0435\u043d\u044f \u043c\u0430\u043b\u043e, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0439\u0442\u0435 \u0432\u0441\u0451, \u0435\u0441\u043b\u0438 \u0431\u0443\u0434\u0435\u0442\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c.\u041c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0430 \u043f\u0430\u043c\u044f\u0442\u0438 SDRAM.\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 RS232.    \u0414\u0430\u043d\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0430\u044f, \u043d\u0435 \u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0431\u044b\u0442\u0443\u044e\u0449\u0435\u0435 \u043c\u043d\u0435\u043d\u0438\u0435 \u043e \u0435\u0451 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438. \u042f \u0438\u043c\u0435\u044e \u0432\u0432\u0438\u0434\u0443 \u0437\u0430\u0434\u0430\u0447\u0443 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0447\u0442\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u043f\u0430\u043c\u044f\u0442\u044c. \u0422\u0430\u043a \u043a\u0430\u043a \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c &#171;\u0441\u0435\u0440\u044c\u0451\u0437\u043d\u044b\u0439&#187; \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, \u0442\u043e \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435 (\u0435\u0441\u0442\u044c \u0432\u0441\u044f\u043a\u0438\u0435 \u0440\u0435\u0436\u0438\u043c\u044b \u043e\u0431\u043c\u0435\u043d\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0440\u0435\u0440\u0432\u0430\u0442\u044c \u0447\u0442\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0438 \u0442.\u043f.). \u0422\u0430\u043a \u0436\u0435 \u0445\u043e\u0447\u0443 \u043d\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e, \u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440. \u0427\u0438\u0442\u0430\u0439\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0442\u0435\u043e\u0440\u0438\u044e \u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0443.\u041d\u0435 \u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0432\u044b\u0448\u0435\u0441\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435, \u0443 \u043c\u0435\u043d\u044f \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0438 \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u0438 \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438. \u0412\u043e \u043f\u0435\u0440\u0432\u044b\u0445, \u043d\u0435 \u0437\u0440\u044f \u0433\u043e\u0432\u043e\u0440\u044f\u0442, \u0447\u0442\u043e \u043f\u0440\u0438 \u043e\u0441\u0432\u043e\u0435\u043d\u0438\u0438 verilog \u043e\u043f\u044b\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u043e \u043c\u0435\u0448\u0430\u0435\u0442 (\u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435 \u043c\u043d\u0435 \u043e\u043d \u043c\u0435\u0448\u0430\u043b). \u0412\u0430\u0436\u043d\u043e \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u043a\u043e\u0434 \u043d\u0430 verilog \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430, \u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0445\u0435\u043c\u044b. \u0423 \u043c\u0435\u043d\u044f \u0431\u044b\u043b\u043e \u043c\u043d\u043e\u0433\u043e &#171;\u0434\u0435\u0442\u0441\u043a\u0438\u0445&#187; \u043e\u0448\u0438\u0431\u043e\u043a. \u041e\u0434\u043d\u0430 \u0438\u0437 \u043d\u0438\u0445 \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u0430 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f. \u041a\u0430\u043a \u044f \u043d\u0435 \u043f\u044b\u0442\u0430\u043b\u0441\u044f \u0435\u0451 \u043d\u0430\u0439\u0442\u0438, \u0432\u0441\u0435 \u0433\u043b\u0430\u0437\u0430 \u043f\u0440\u043e\u0433\u043b\u044f\u0434\u0435\u043b, \u043d\u0438 \u0432 \u043a\u0430\u043a\u0443\u044e. \u041f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u0441\u044f \u0441\u043e \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438.    \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b \u0443\u0440\u043e\u043a\u0438 \u043f\u043e Signal Tap. \u0425\u043e\u0440\u043e\u0448\u0430\u044f \u0448\u0442\u0443\u043a\u0430, \u0430 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u043d\u0435 \u043f\u0440\u0438\u0445\u043e\u0442\u043b\u0438\u0432\u0430\u044f. \u041f\u043e\u043f\u044b\u0442\u043a\u0438 \u043f\u0440\u0438\u043a\u0440\u0443\u0442\u0438\u0442\u044c \u0435\u0451 &#171;\u043b\u0435\u0432\u043e\u0439 \u043d\u043e\u0433\u043e\u0439&#187; \u0443\u0432\u0435\u043d\u0447\u0430\u043b\u0438\u0441\u044c \u0443\u0441\u043f\u0435\u0445\u043e\u043c. \u0418 \u0447\u0442\u043e \u0436\u0435 \u044f \u0443\u0432\u0438\u0434\u0435\u043b \u043d\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0435 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u0437\u0430\u043f\u0438\u0441\u0438? \u041a\u043e\u043c\u0430\u043d\u0434\u0443 \u0447\u0442\u0435\u043d\u0438\u044f! \u0412\u043e\u0442 \u044d\u0442\u043e \u043f\u043e\u0432\u043e\u0440\u043e\u0442. \u041e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u044f \u0443\u043c\u0443\u0434\u0440\u0438\u043b\u0441\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u043a\u043e\u0434\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u0434\u0432\u0443\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u0445 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0432\u044b\u0434\u0430\u0451\u0442\u0441\u044f \u043d\u0430 \u043e\u0434\u0438\u043d \u0442\u0430\u043a\u0442 \u0438 \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0435\u0451 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442. \u0410 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0431\u044b\u043b\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f: \u0435\u0441\u043b\u0438 \u0417\u0410\u041f\u0418\u0421\u042c \u043a\u043e\u0434 \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438, \u0438\u043d\u0430\u0447\u0435 \u043a\u043e\u0434 \u0434\u043b\u044f \u0427\u0422\u0415\u041d\u0418\u042f. \u041d\u0435 \u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u0442\u0430\u043a! \u0422\u0435\u043f\u0435\u0440\u044c \u043a\u043e\u0434\u044b, \u0430 \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0440\u0435\u0437\u044e\u043c\u0435 \u043f\u043e \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u044f\u043c.\u042d\u0442\u043e \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c.\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442`timescale 1ns \/ 1ps\/* \u0422\u0435\u0441\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 SDRAM. \u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c \u043f\u043e UART \u0430\u0434\u0440\u0435\u0441 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0443.\u0412 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 \u043f\u0438\u0448\u0435\u043c\/\u0447\u0438\u0442\u0430\u0435\u043c \u043f\u0430\u043c\u044f\u0442\u044c.\u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043d\u0430 \u0441\u0435\u043c\u0438\u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043d\u043e\u043c \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0435\u0447\u0442\u043e \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f.*\/module SDRAM3(output wire [3:0] dig_n,output wire [7:0] seg_n,(* chip_pin = &#171;114&#187; *) output wire TxD,(* chip_pin = &#171;73&#187;  *) output wire SD_BS0,(* chip_pin = &#171;74&#187;  *) output wire SD_BS1,(* chip_pin = &#171;42&#187;  *) output wire SD_LDQM,(* chip_pin = &#171;55&#187;  *) output wire SD_UDQM,(* chip_pin = &#171;72&#187;  *) output wire SD_CS_n,(* chip_pin = &#171;71&#187;  *) output wire SD_RAS_n,(* chip_pin = &#171;70&#187;  *) output wire SD_CAS_n,(* chip_pin = &#171;69&#187;  *) output wire SD_WE_n,(* chip_pin = &#171;58&#187;  *) output wire SD_CKE,(* chip_pin = &#171;43&#187;  *) output wire SD_CLK,\/\/ \u0444\u0430\u0437\u0430+30 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e clk_sys(* chip_pin = &#171;115&#187; *) input wire RxD,(* chip_pin = &#171;25&#187;  *) input wire rst_n,(* chip_pin = &#171;23&#187;  *) input wire clk,output wire [11:0] S_A,inout  wire [15:0] S_DQ);wire Button_Reset;\/\/ \u041a\u043d\u043e\u043f\u043a\u0430 \u0441\u0431\u0440\u043e\u0441wire reset;\/\/ \u042d\u0442\u043e \u043e\u0431\u0449\u0438\u0439 \u0441\u0431\u0440\u043e\u0441. \u041a\u0440\u043e\u043c\u0435 \u043a\u043d\u043e\u043f\u043a\u0438, \u0432\u043b\u0438\u044f\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 PLLwire clk_sys;    \/\/ 50 MHz (0 deg)wire clk_sdram;  \/\/ 50 MHz (30 deg)wire pll_locked; \/\/ 0 &#8212; PLL \u043d\u0435 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e, 1 &#8212; \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043ewire Empty;wire [7:0] dataRx;\/\/ \u0421\u0438\u0433\u043d\u0430\u043b\u044b \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u0447\u0438\u043a\u0430 UARTreg startTx;reg [7:0] dataTx;wire rdyTx;wire key_mode;reg  [15:0] dq_out_ioe;reg  dq_oe_ioe;reg  [15:0] dq_in_ioe;reg cmd_write;reg cmd_read;reg [15:0] data_from_ram;\/\/ \u0414\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438wire SD_Ready;\/\/ \u0413\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044breg [15:0] display_value;\/\/ = 16&#8217;h1235;reg fAReady = 1&#8217;d0; \/\/ \u0411\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0442 \u043f\u0440\u0438\u0451\u043c, \u0434\u043e \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 SDRAMreg fDReady = 1&#8217;d0; \/\/ \u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 SDRAM, \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043d\u043e\u043b\u044creg fCmdWrite;reg fCmdRead;reg [21:0] reg_addr; \/\/ bank[21:20], row[19:8], col[7:0]reg [15:0] reg_data; \/\/ \u0414\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u043f\u0430\u043c\u044f\u0442\u044creg nechet;reg rdRx_en;\/\/ \u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u0436\u0438\u043c\u0430\u043c\u0438reg [3:0] State;reg [2:0] pause;localparamSTATE_IDLE       = 4&#8217;d0,STATE_WAIT_ADDR  = 4&#8217;d1,STATE_WAIT_DATA  = 4&#8217;d2,STATE_ACK        = 4&#8217;d3,STATE_WAIT       = 4&#8217;d4,STATE_READ       = 4&#8217;d5,STATE_WRITE      = 4&#8217;d6,STATE_WRITE_WAIT = 4&#8217;d7,STATE_DISPLAY    = 4&#8217;d8; \/\/ 1 \u0442\u0430\u043a\u0442 \u043d\u0430 \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044e + 1 \u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 + 2 CL + 1 \u043d\u0430 \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u041f\u041b\u0418\u0421localparam RPause = 3&#8217;d5,           WPause = 3&#8217;d5; assign reset = Button_Reset | ~pll_locked;\/\/ \u0421\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u043d\u0430 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u044e (\u0432\u043d\u0443\u0442\u0440\u0438 IOE)always @(posedge clk_sys) begin  dq_out_ioe  &lt;= reg_data;  dq_in_ioe  &lt;= S_DQ;\/\/ \u0424\u0438\u043a\u0441\u0430\u0446\u0438\u044f \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438  dq_oe_ioe  &lt;= (State == STATE_WRITE); \/\/ dq_oe_ioe \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c  \/\/ \u0442\u0430\u043a\u0442\u0435. \u0412 (State == STATE_WRITE) \u0436\u0434\u0443 \u043e\u0434\u0438\u043d \u0442\u0430\u043a\u0442endassign S_DQ = dq_oe_ioe  ? dq_out_ioe : 16&#8217;bZ;assign SD_CKE  = 1&#8217;d1;assign SD_LDQM = 1&#8217;d0; \/\/ \u041d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043c\u0430\u0441\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435assign SD_UDQM = 1&#8217;d0; \/\/ \u041d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043c\u0430\u0441\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435Button BT_R(.TTrigQ(Button_Reset),.X(rst_n), .C(clk_sys));\/*&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-   \u0418\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0434\u0432\u0430:-\u043f\u0435\u0440\u0432\u044b\u0439 \u043a\u043e\u043f\u0438\u044f \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e,-\u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u043c\u0435\u0449\u0451\u043d\u043d\u044b\u0439 \u043f\u043e \u0444\u0430\u0437\u0435 \u043d\u0430 +30 \u0433\u0440\u0430\u0434\u0443\u0441\u043e\u0432. \u042d\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0434\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0430 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u0435.\u0422\u0430\u043a \u043a\u0430\u043a \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u0441\u0435 \u0434\u043e\u0440\u043e\u0436\u043a\u0438 \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u0438 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0435,\u0447\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430\u043c \u0438 \u043d\u0435\u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0441 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u0435. *\/PLL_SDRAM_30deg PLL1(.inclk0(clk),\/\/ \u0412\u0445\u043e\u0434\u043d\u043e\u0439 \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b.c0(clk_sys),\/\/ \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u0432\u0441\u0435\u0445, \u043a\u0440\u043e\u043c\u0435 SDRAM.c1(clk_sdram),\/\/ \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u044f SDRAM.locked(pll_locked));\/\/ 0- \u0441\u0438\u0433\u043d\u0430\u043b \u043d\u0435 \u0441\u0442\u0430\u0431\u0438\u043b\u0435\u043d\/* \u041f\u0435\u0440\u0435\u0434\u0430\u0442\u0447\u0438\u043a *\/RS232T transmitter(.clk(clk_sys),.rst(reset),.start(startTx),\/\/ \u0421\u0442\u0430\u0440\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438.data(dataTx),.TxD(TxD),.rdy(rdyTx));\/\/ \u0413\u043e\u0442\u043e\u0432 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c\/* \u041f\u0440\u0438\u0451\u043c\u043d\u0438\u043a \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043a\u043e\u043b\u044c\u0446\u0435\u0432\u043e\u0439 \u0431\u0443\u0444\u0435\u0440 \u043d\u0430 8-\u043c\u044c \u0431\u0430\u0439\u0442 *\/RS232R resiver(.clk(clk_sys),.rst(reset),.RxD(RxD),.done(rdRx_en),\/\/ \u041f\u0440\u043e\u0447\u0438\u0442\u0430\u043b\u0438, \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0432\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438.empty(Empty),\/\/ \u0411\u0443\u0444\u0435\u0440 \u043f\u0443\u0441\u0442\u043e\u0439.data(dataRx));\/\/ \u0422\u0435\u043a\u0443\u0449\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0431\u0443\u0444\u0435\u0440\u0430SemSeg S1(.clk(clk_sys),.rst(reset),.display_value(display_value),.seg(seg_n),.dig(dig_n));\/* \u0412\u044b\u0432\u043e\u0434\u0438\u043c \u0441\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0439 \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u043d\u0430\u0440\u0443\u0436\u0443 \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0443   \u0447\u0435\u0440\u0435\u0437 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 DDIO \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432 Intel\/Altera.   \u041e\u0431\u044b\u0447\u043d\u044b\u0439 assign \u0432\u044b\u0437\u043e\u0432\u0435\u0442 \u0434\u0436\u0438\u0442\u0442\u0435\u0440 \u0438 \u0444\u0430\u0437\u043e\u0432\u044b\u0439 \u0441\u0434\u0432\u0438\u0433, \u043b\u043e\u043c\u0430\u044e\u0449\u0438\u0439 Fast I\/O. *\/altddio_out #(.width(1)) sdram_clk_ddio_buf (.datain_h(1&#8217;b1),.datain_l(1&#8217;b0),.outclock(clk_sdram),.dataout(SD_CLK));\/\/&#8212;&#8212;&#8212;&#8212;-  UART &#8212; SDRAM &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;always @(posedge clk_sys) beginif (reset) beginstartTx   &lt;= 1&#8217;b0;  dataTx    &lt;= 8&#8217;d0;nechet    &lt;= 1&#8217;d0;  fAReady   &lt;= 1&#8217;d0;fDReady   &lt;= 1&#8217;d0;  reg_addr  &lt;= 22&#8217;d0;reg_data  &lt;= 16&#8217;d0; cmd_write &lt;= 1&#8217;d0;cmd_read  &lt;= 1&#8217;d0;  State     &lt;= STATE_IDLE;pause     &lt;= 3&#8217;d0;  rdRx_en   &lt;= 1&#8217;d0;data_from_ram &lt;= 16&#8217;d0;display_value &lt;= 16&#8217;h1235;end else beginstartTx   &lt;= 1&#8217;b0;  cmd_write &lt;= 1&#8217;d0;  cmd_read  &lt;= 1&#8217;d0;case (State)STATE_IDLE: begin \/\/ \u0416\u0434\u0451\u043c \u0430\u0434\u0440\u0435\u0441, \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044bif (!Empty) beginif (dataRx == 8&#8217;h80) beginif (!fAReady) beginState    &lt;= STATE_WAIT_ADDR;nechet   &lt;= 1&#8217;b0;endendif (dataRx == 8&#8217;h40) beginif (!fDReady) beginState    &lt;= STATE_WAIT_DATA;nechet   &lt;= 1&#8217;b0;endendif (dataRx == 8&#8217;h20) begin\/\/ \u041f\u0440\u0438\u0448\u043b\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430, \u0435\u0441\u043b\u0438 \u0432\u0441\u0451 \u0433\u043e\u0442\u043e\u0432\u043e, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043cif (fAReady &amp;&amp; fDReady) beginfCmdWrite &lt;= 1&#8217;d1;State     &lt;= STATE_ACK;endend\/\/ \u0438\u043d\u0430\u0447\u0435 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u043cif (dataRx == 8&#8217;h10) begin\/\/ \u041f\u0440\u0438\u0448\u043b\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430, \u0435\u0441\u043b\u0438 \u0432\u0441\u0451 \u0433\u043e\u0442\u043e\u0432\u043e, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043cif (fAReady) beginfCmdRead  &lt;= 1&#8217;d1;State     &lt;= STATE_ACK;endend\/\/ \u0438\u043d\u0430\u0447\u0435 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u043cdisplay_value[7:0] &lt;= dataRx;rdRx_en  &lt;= 1&#8217;d1;\/\/\u041f\u0440\u043e\u0447\u0438\u0442\u0430\u043b!\u041f\u0435\u0440\u0435\u0441\u0442\u0430\u0432\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0431\u0443\u0444\u0435\u0440\u0430endendSTATE_WAIT_ADDR: begin\/\/ \u0416\u0434\u0451\u043c \u0434\u0432\u0430 \u0431\u0430\u0439\u0442\u0430 \u0430\u0434\u0440\u0435\u0441\u0430, \u043f\u0435\u0440\u0432\u044b\u0439 \u043c\u043b\u0430\u0434\u0448\u0438\u0439if (rdRx_en == 1&#8217;d1) beginrdRx_en &lt;= 1&#8217;d0;end else beginif (!Empty) beginif (nechet == 1&#8217;d1) begin \/\/ \u0421\u0442\u0430\u0440\u0448\u0438\u0439 \u0431\u0430\u0439\u0442 \u0430\u0434\u0440\u0435\u0441\u0430reg_addr[21:8] &lt;= {10&#8217;d0, dataRx[3:0]};fAReady        &lt;= 1&#8217;d1;State          &lt;= STATE_ACK;display_value  &lt;= {4&#8217;d0, dataRx[3:0], reg_addr[7:0]};end else begin    \/\/ \u041c\u043b\u0430\u0434\u0448\u0438\u0439 \u0431\u0430\u0439\u0442 \u0430\u0434\u0440\u0435\u0441\u0430reg_addr[7:0]  &lt;= dataRx;endnechet  &lt;= ~nechet;rdRx_en &lt;= 1&#8217;d1;endendendSTATE_WAIT_DATA: begin\/\/ \u0416\u0434\u0451\u043c \u0434\u0432\u0430 \u0431\u0430\u0439\u0442\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u0435\u0440\u0432\u044b\u0439 \u043c\u043b\u0430\u0434\u0448\u0438\u0439if (rdRx_en == 1&#8217;d1) beginrdRx_en &lt;= 1&#8217;d0;end else beginif (!Empty) beginif (nechet) begin \/\/ \u0421\u0442\u0430\u0440\u0448\u0438\u0439 \u0431\u0430\u0439\u0442 \u0430\u0434\u0440\u0435\u0441\u0430reg_data[15:8] &lt;= dataRx;fDReady        &lt;= 1&#8217;d1;State          &lt;= STATE_ACK;display_value  &lt;= {dataRx, reg_data[7:0]};end else begin \/\/ \u041c\u043b\u0430\u0434\u0448\u0438\u0439 \u0431\u0430\u0439\u0442 \u0430\u0434\u0440\u0435\u0441\u0430reg_data[7:0]  &lt;= dataRx;endnechet  &lt;= ~nechet;rdRx_en &lt;= 1&#8217;d1;endendendSTATE_ACK: begin\/\/ \u041e\u0442\u0432\u0435\u0442 \u043d\u0430 \u043f\u0440\u0438\u0451\u043crdRx_en &lt;= 1&#8217;d0;if (fCmdWrite || fCmdRead) begindataTx    &lt;= 8&#8217;h5A;State     &lt;= STATE_WAIT;end else begindataTx    &lt;= 8&#8217;hA5;State     &lt;= STATE_IDLE;endstartTx   &lt;= 1&#8217;b1;endSTATE_WAIT: beginif (SD_Ready &amp;&amp; fAReady) beginif (fCmdWrite &amp;&amp; fDReady) beginState     &lt;= STATE_WRITE;cmd_write &lt;= 1&#8217;d1;pause     &lt;= 3&#8217;d0;endif (fCmdRead) begincmd_read &lt;= 1&#8217;d1;State    &lt;= STATE_READ;pause    &lt;= 3&#8217;d0;endendif (fCmdWrite) beginif (~fAReady || ~fDReady) beginState     &lt;= STATE_IDLE;fCmdWrite &lt;= 1&#8217;d0;endendif (fCmdRead) beginif (~fAReady) beginState    &lt;= STATE_IDLE;fCmdRead &lt;= 1&#8217;d0;endendendSTATE_READ: begin\/* \u041d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f Activete.         pause == 01 \u0442\u0430\u043a\u0442 tRCD \u043f\u043e\u0434\u0430\u0451\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 read pause == 12 \u0442\u0430\u043a\u0442\u0430 CL                      pause == 3 \u0447\u0438\u0442\u0430\u0435\u043c1 \u0442\u0430\u043a\u0442 tRP \u043f\u0440\u0435\u0434\u0437\u0430\u0440\u044f\u0434            pause == 4 *\/if (pause &gt;= RPause) begindata_from_ram &lt;= dq_in_ioe; \/\/ \u0427\u0438\u0442\u0430\u044e \u0434\u0430\u043d\u043d\u044b\u0435State         &lt;= STATE_DISPLAY;fAReady       &lt;= 1&#8217;d0;fCmdRead      &lt;= 1&#8217;d0;\/\/ \u0427\u0442\u0435\u043d\u0438\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043eend else beginpause         &lt;= pause + 3&#8217;d1;endendSTATE_DISPLAY: begin\/\/ \u0415\u0449\u0451 \u0442\u0430\u043a\u0442 \u0432 \u0441\u0447\u0451\u0442 prechargedisplay_value &lt;= data_from_ram;State         &lt;= STATE_IDLE;endSTATE_WRITE: begin\/* \u0414\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0448\u0438\u043d\u0443 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044ecmd_write,&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-487359","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/487359","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=487359"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/487359\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=487359"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=487359"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=487359"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}