{"id":350328,"date":"2023-07-16T09:00:32","date_gmt":"2023-07-16T09:00:32","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=350328"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=350328","title":{"rendered":"<span>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u043d\u0430 FPGA: \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u041b\u0443\u043d\u0430<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p><strong>\u041f\u041b\u0418\u0421-\u043a\u0443\u043b\u044c\u0442 \u043f\u0440\u0438\u0432\u0435\u0442, \u0445\u0430\u0431\u0440\u0443\u043d\u0438\u0442\u0438!<\/strong><\/p>\n<p>\u0417\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u043b\u0438 \u0432\u044b \u043a\u043e\u0433\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c \u043d\u0430\u0434 \u0442\u0435\u043c, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0431\u0449\u0435\u0433\u043e \u0443 \u0431\u0430\u043d\u043a\u043e\u0432\u0441\u043a\u043e\u0439 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438, IMEI \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430 \u0438 \u0432\u0430\u0433\u043e\u043d\u0430 \u0420\u0416\u0414? \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0432\u044b \u043d\u0430\u0439\u0434\u0435\u0442\u0435 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u044d\u0442\u043e\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u0438 \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u0435\u0433\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u041f\u041b\u0418\u0421. <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/f2e\/57c\/18e\/f2e57c18e0b3c6daffc0cbab192e6167.jpg\" width=\"1920\" height=\"1080\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f2e\/57c\/18e\/f2e57c18e0b3c6daffc0cbab192e6167.jpg\" data-blurred=\"true\"\/><\/figure>\n<p>\u041a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b, \u043e\u0431\u044b\u0447\u043d\u0430\u044f \u043f\u043b\u0430\u0441\u0442\u0438\u043a\u043e\u0432\u0430\u044f \u043a\u0430\u0440\u0442\u0430.  \u041c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0435\u0451 \u0435\u0436\u0435\u0434\u043d\u0435\u0432\u043d\u043e \u043f\u0440\u0438 \u043e\u043f\u043b\u0430\u0442\u0435 \u0437\u0430\u043a\u0430\u0437\u043e\u0432 \u043d\u0430 \u0440\u0430\u0437\u043d\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u043e\u043d\u043b\u0430\u0439\u043d \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0430\u0445, \u043f\u0440\u0438 \u043e\u043f\u043b\u0430\u0442\u0435 \u0448\u0442\u0440\u0430\u0444\u043e\u0432 \u0432 \u0413\u0418\u0411\u0414\u0414 \u0438\u043b\u0438 \u0434\u043b\u044f <a href=\"https:\/\/boosty.to\/fpgasystems\" rel=\"noopener noreferrer nofollow\">\u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0434\u043e\u043d\u0430\u0442\u043e\u0432<\/a>. \u041d\u043e \u0437\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u043b\u0438 \u0432\u044b \u043d\u0430\u0434 \u0442\u0435\u043c, \u043a\u0430\u043a \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u0430\u043c \u043d\u043e\u043c\u0435\u0440 \u0432\u0430\u0448\u0435\u0439 \u043a\u0430\u0440\u0442\u044b \u0438 \u0447\u0442\u043e \u043e\u043d \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442? <\/p>\n<p>\u0427\u0435\u0441\u0442\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u044f \u043d\u0438\u043a\u043e\u0433\u0434\u0430, \u043d\u043e \u0434\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u2026 \u043c\u043e\u043c\u0435\u043d\u0442\u0430, \u043a\u043e\u0433\u0434\u0430 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u044e\u0442\u0443\u0431\u0430 \u0432\u044b\u0434\u0430\u043b \u043c\u043d\u0435 \u0440\u043e\u043b\u0438\u043a \u0441 \u043a\u0430\u043d\u0430\u043b\u0430 <a href=\"https:\/\/www.youtube.com\/watch?v=EMiAotwmYNI\" rel=\"noopener noreferrer nofollow\">VitalMath<\/a>.<\/p>\n<p>\u0427\u0442\u043e \u0431\u044b\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u0432 \u044d\u0442\u043e\u043c \u043f\u044f\u0442\u0438\u043c\u0438\u043d\u0443\u0442\u043d\u043e\u043c \u0440\u043e\u043b\u0438\u043a\u0435 \u043e \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u043e\u0439 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0435? \u0412 \u0432\u0438\u0434\u0435\u043e \u0431\u044b\u043b \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u043e\u0434\u0438\u043d \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441: \u043a\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0444\u043e\u0440\u043c\u0430 \u0432\u0432\u043e\u0434\u0430 \u043d\u043e\u043c\u0435\u0440\u0430 \u0431\u0430\u043d\u043a\u043e\u0432\u0441\u043a\u043e\u0439 \u043a\u0430\u0440\u0442\u044b \u0437\u043d\u0430\u0435\u0442, \u0447\u0442\u043e \u043e\u043d \u0431\u044b\u043b \u0432\u0432\u0435\u0434\u0451\u043d \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e?<\/p>\n<p>\u0421 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b, \u043d\u0443 \u0447\u0442\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0433\u043e \u0432 \u043d\u0430\u0448 \u0432\u0435\u043a \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430: \u0432\u0432\u043e\u0434\u0438\u0448\u044c \u043d\u043e\u043c\u0435\u0440, \u043e\u043d \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440, \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441 \u043c\u0435\u0441\u0442\u043d\u043e\u0439 \u0431\u0430\u0437\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0432\u044b\u0434\u0430\u0451\u0442 \u043e\u0442\u0432\u0435\u0442. \u0412\u0440\u043e\u0434\u0435 \u0431\u044b \u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u043d\u043e \u043d\u0435\u0442. \u041d\u0438\u043a\u0430\u043a\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043a \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f, \u0442\u043e\u0433\u0434\u0430 \u043a\u0430\u043a\u0438\u043c \u0436\u0435 \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u044c \u0432\u0432\u043e\u0434\u0430?<\/p>\n<p>\u0410 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u043d \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439, \u0432 \u043f\u043b\u0430\u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043b \u0435\u0449\u0451 \u0432 1954 \u0433\u043e\u0434\u0443 \u0425\u0430\u043d\u0441\u043e\u043d \u041f\u0438\u0442\u0435\u0440 \u041b\u0443\u043d.<\/p>\n<p>\u042d\u0442\u043e\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0446\u0438\u0444\u0440 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u043e\u0439 \u0446\u0438\u0444\u0440\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u043e \u0444\u0430\u043c\u0438\u043b\u0438\u0438 \u0430\u0432\u0442\u043e\u0440\u0430 \u0438 \u0431\u043e\u043b\u0435\u0435 \u0448\u0438\u0440\u043e\u043a\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d \u043a\u0430\u043a <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D1%83%D0%BD%D0%B0\" rel=\"noopener noreferrer nofollow\">\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u041b\u0443\u043d\u0430<\/a>. \u041e\u043d \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u0442\u0440\u0430\u0442 \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430 \u043b\u0435\u0442\u0443 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443 \u043f\u0440\u0438 \u0432\u0432\u043e\u0434\u0435 \u0434\u0430\u043d\u043d\u044b\u0445. \u0414\u0430, \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0435\u0441\u043c\u0435\u0442\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e, \u043d\u043e \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0438\u043c\u0435\u043d\u043d\u043e \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u041b\u0443\u043d\u0430 \u043d\u0430 \u041f\u041b\u0418\u0421, \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u043a \u0441\u043b\u043e\u0432\u0443, \u043d\u0435 \u043b\u0438\u0448\u0451\u043d \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u043e\u0432, \u043f\u0440\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0437\u043d\u0430\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u0432 \u0442\u043e\u0439 \u0436\u0435 \u0432\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u0438. \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u041b\u0443\u043d\u0430 \u0448\u0438\u0440\u043e\u043a\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043d\u0430\u0448\u0435\u0439 \u043f\u043e\u0432\u0441\u0435\u0434\u043d\u0435\u0432\u043d\u043e\u0439 \u0436\u0438\u0437\u043d\u0438 \u0438 \u043f\u043e\u0441\u043b\u0443\u0436\u0438\u0442 \u043d\u0430\u043c \u043e\u0442\u043f\u0440\u0430\u0432\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u043a \u0441\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0442\u0435\u0439, \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u043d\u044b\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u043d\u0430 \u041f\u041b\u0418\u0421.<\/p>\n<h2>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u041b\u0443\u043d\u0430: \u043a\u0440\u0430\u0442\u043a\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e<\/h2>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u0430\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c.<\/p>\n<p>\u0421\u0440\u0430\u0437\u0443 \u043e\u0442\u043c\u0435\u0447\u0443, \u0447\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0432\u0430 \u0432\u0438\u0434\u0430 \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u041b\u0443\u043d\u0430: \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0438 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u044b\u0439, \u0432 \u0447\u0435\u043c \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u044f \u0441\u043a\u0430\u0436\u0443 \u0447\u0443\u0442\u044c \u043f\u043e\u0437\u0434\u043d\u0435\u0435.<\/p>\n<p>\u0418\u0442\u0430\u043a \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0446\u0438\u0444\u0440, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u0430\u0442\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043c\u044c\u044e\u043d\u0438\u0442\u0438 <a href=\"https:\/\/fpga-systems.ru\/\" rel=\"noopener noreferrer nofollow\">FPGA-Systems<\/a> : \u043f\u0435\u0440\u0432\u043e\u0435 \u0430\u043f\u0440\u0435\u043b\u044f 2017 \u0433\u043e\u0434\u0430, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0430\u0434\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u043f\u043e \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443 \u041b\u0443\u043d\u0430. \u0427\u0442\u043e \u043d\u0430\u043c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c?<\/p>\n<p><strong>\u041e\u0431\u044b\u0447\u043d\u044b\u0439 \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u041b\u0443\u043d\u0430<\/strong><\/p>\n<ol>\n<li>\n<p> \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0446\u0438\u0444\u0440 \u0432 \u043d\u0430\u0448\u0435\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 01042017. \u041f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0447\u0435\u0442\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0446\u0438\u0444\u0440, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e 8<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0446\u0438\u0444\u0440 \u0447\u0451\u0442\u043d\u043e\u0435, \u0442\u043e \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0446\u0438\u0444\u0440 \u0432 \u0447\u0435\u0442\u043d\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0434\u0435\u043b\u0430\u0435\u043c \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 \u0434\u0432\u0430 (\u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0446\u0438\u044f \u0446\u0438\u0444\u0440 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 1)<\/p>\n<p>1     2      3      4      5     6      7      8   &#8212;\u0438\u043d\u0434\u0435\u043a\u0441 <br \/>0\u00a0\u00a0   1\u00a0\u00a0\u00a0\u00a0\u00a0 0\u00a0\u00a0\u00a0\u00a0\u00a0 4\u00a0\u00a0\u00a0 \u00a0\u00a02\u00a0\u00a0 \u00a0\u00a00\u00a0\u00a0 \u00a0\u00a0\u00a01\u00a0\u00a0    7   &#8212;\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c<br \/>\u00a0\u00a0\u00a0\u00a0   1&#215;2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0  4&#215;2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a00x2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0    7&#215;2\u00a0 <br \/>0     2      0      8       2    0       1    14<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u043d\u0430 \u0432\u0442\u043e\u0440\u043e\u043c \u0448\u0430\u0433\u0435 \u0447\u0438\u0441\u043b\u043e \u043f\u043e\u0441\u043b\u0435 \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 2 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u043e\u043b\u044c\u0448\u0435 9, \u0442\u043e \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u043c \u0435\u0433\u043e \u043d\u0430 \u0441\u0443\u043c\u043c\u0443 \u0446\u0438\u0444\u0440 \u044d\u0442\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0438\u043b\u0438 \u0432\u044b\u0447\u0438\u0442\u0430\u0435\u043c 9<\/p>\n<p>0     2      0     8       2     0       1    1+4<br \/>0     2      0     8       2     0       1     5<\/p>\n<\/li>\n<li>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u043c \u0432\u0441\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430<br \/>0+2+0+8+2+0+1+5 = 18<\/p>\n<\/li>\n<li>\n<p>\u0414\u043e\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0434\u043e \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0432 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0434\u0435\u043b\u0438\u0442\u0441\u044f \u043d\u0430 10.<br \/>\u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 18, \u0437\u043d\u0430\u0447\u0438\u0442 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0435 \u043a\u0440\u0430\u0442\u043d\u043e\u0435 10 \u0431\u0443\u0434\u0435\u0442 20.<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u0447\u0438\u0442\u0430\u0435\u043c \u0438\u0437 20 \u043d\u0430\u0448\u0443 \u0441\u0443\u043c\u043c\u0443 18 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c 2. \u042d\u0442\u043e \u0438 \u0431\u0443\u0434\u0435\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0446\u0438\u0444\u0440\u0430 \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0439 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 01042017<\/p>\n<\/li>\n<\/ol>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u043a \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 01042017 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0443\u044e \u0446\u0438\u0444\u0440\u0443 2 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443 \u043f\u0440\u0438 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u043c \u0432\u0432\u043e\u0434\u0435 010420172<\/p>\n<p>\u0427\u0442\u043e \u0436\u0435 \u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0441\u043b\u0438 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0446\u0438\u0444\u0440 \u043d\u0435\u0447\u0451\u0442\u043d\u043e\u0435? \u0414\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u043d\u043e \u0434\u043b\u044f \u0446\u0438\u0444\u0440 \u0432 \u043d\u0435\u0447\u0435\u0442\u043d\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code>1    2   3    4    5 --\u0438\u043d\u0434\u0435\u043a\u0441 5    7   3    9    5 --\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c 5x2  7   3x2  9    5x2 10   7   6    9    10 1+0  7   6    9    1+0 1  + 7 + 6  + 9 +  1 = 24<\/code><\/pre>\n<p>\u0411\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0435 \u0431\u043e\u043b\u044c\u0448\u0435\u0435 \u043a\u0440\u0430\u0442\u043d\u043e\u0435 10 \u043a 24 \u044d\u0442\u043e 30<br \/>30 &#8212; 24 = 6 &#8212; \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0446\u0438\u0444\u0440\u0430 \u0434\u043b\u044f 57395<br \/>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043c\u043e\u0436\u043d\u043e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/www.dcode.fr\/luhn-algorithm\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0435\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0443\u044e \u0446\u0438\u0444\u0440\u0443 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0432\u043e \u043c\u043d\u043e\u0433\u043e \u0442\u0430\u043a\u0436\u0435, \u043d\u043e \u0432 \u0440\u0430\u0441\u0447\u0451\u0442 \u043f\u043e\u043a\u0430 \u043d\u0435 \u0431\u0435\u0440\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0446\u0438\u0444\u0440\u0430<\/p>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430    <br \/>1     2      3      4      5     6      7      8           &#8212;\u0438\u043d\u0434\u0435\u043a\u0441 <br \/>0\u00a0\u00a0   1\u00a0\u00a0\u00a0\u00a0\u00a0 0\u00a0\u00a0\u00a0\u00a0\u00a0 4\u00a0\u00a0\u00a0 \u00a0\u00a02\u00a0\u00a0 \u00a0\u00a00\u00a0\u00a0 \u00a0\u00a0\u00a01\u00a0\u00a0    7      2   &#8212;\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u043e\u0439 \u0446\u0438\u0444\u0440\u043e\u0439 2<br \/>       1&#215;2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0  4&#215;2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a00x2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0     7&#215;2\u00a0 <br \/>0     2      0      8       2    0      1      14<br \/>0     2      0     8        2    0      1      1+4<br \/>0     2      0     8        2    0     1       5<br \/>0 +  2  +  0 +  8  +   2 +  0 +  1  +  5 = 18<br \/>\u041a \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0439 \u0441\u0443\u043c\u043c\u0435 \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0443\u044e \u0446\u0438\u0444\u0440\u0443 2<br \/>18 + 2 = 20 &#8212; \u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0447\u0438\u0441\u043b\u043e, \u043a\u0440\u0430\u0442\u043d\u043e\u0435 10, \u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432\u0435\u0440\u043d\u0430<\/p>\n<p>\u0412\u0441\u0435 \u0434\u043e \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e. \u0415\u0449\u0435 \u0440\u0430\u0437 \u043e\u0442\u043c\u0435\u0447\u0443, \u0447\u0442\u043e \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u041b\u0443\u043d\u0430 \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0438 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438 \u0438 \u043d\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u0435\u043d \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438.<\/p>\n<p><strong>\u0423\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u044b\u0439 \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u041b\u0443\u043d\u0430<\/strong><\/p>\n<p>\u0412 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f \u0441\u043f\u0440\u0430\u0432\u0430-\u043d\u0430\u043b\u0435\u0432\u043e, \u0442\u043e \u0435\u0441\u0442\u044c \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0446\u0438\u0444\u0440\u044b \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0447\u0435\u0440\u0435\u0437 \u043e\u0434\u043d\u0443. \u041f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0435 \u0431\u0435\u0440\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0446\u0438\u0444\u0440\u0430, \u0442\u043e\u043b\u044c\u043a\u043e \u0446\u0438\u0444\u0440\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0446\u0438\u0444\u0440\u0430 \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u0448\u0430\u0433\u0435 \u0434\u043b\u044f \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0439 \u0441\u0443\u043c\u043c\u044b.<\/p>\n<p>\u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0438\u0437 \u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0446\u0438\u0444\u0440 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c (\u0438\u0437 \u0447\u0435\u0442\u043d\u043e\u0433\u043e \u0438\u043b\u0438 \u043d\u0435\u0447\u0435\u0442\u043d\u043e\u0433\u043e), \u043d\u043e \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c\/\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0446\u0438\u0444\u0440\u044b. \u041d\u043e \u0432 \u0446\u0435\u043b\u043e\u043c \u044d\u0442\u043e \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439.<\/p>\n<h2>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438<\/h2>\n<p>\u0414\u0435\u043b\u0430\u0442\u044c \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u043e\u0440 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0435\u0439 \u043f\u043e \u043e\u0431\u044b\u0447\u043d\u043e\u043c\u0443 \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443 \u041b\u0443\u043d\u0430, \u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0430 \u0432\u0445\u043e\u0434 \u043d\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u043e\u0439 \u0446\u0438\u0444\u0440\u043e\u0439, \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 VHDL. \u041f\u0440\u0438\u0432\u0435\u0434\u0443 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<p>PS: \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430 Verilog\/SystemVerilog \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e \u0432\u0430\u043c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u0433\u043e \u0437\u0430\u0434\u0430\u043d\u0438\u044f.<\/p>\n<p><strong>\u0412\u0430\u0440\u0438\u0430\u043d\u0442 1<\/strong><\/p>\n<p>\u00a0\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0432\u0438\u0434 \u0438 \u043f\u043e\u0440\u0442\u044b \u0432\u0432\u043e\u0434\u0430 \u0432\u044b\u0432\u043e\u0434\u0430 \u043d\u0430\u0448\u0435\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f. \u041c\u043e\u0434\u0443\u043b\u044c \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0446\u0438\u0444\u0440\u044b \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043d\u0430 \u043b\u0435\u0442\u0443, \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0446\u0438\u0444\u0440\u044b \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e. \u041e\u0434\u043d\u0443 \u0437\u0430 \u043e\u0434\u043d\u043e\u0439 \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u043f\u0435\u0440\u0432\u043e\u0439.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4d4\/6ab\/686\/4d46ab6863c8387c8496f8b71c37146b.png\" width=\"1190\" height=\"349\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4d4\/6ab\/686\/4d46ab6863c8387c8496f8b71c37146b.png\"\/><\/figure>\n<pre><code>\u0412\u0445\u043e\u0434\u044b iclk   - \u0412\u0445\u043e\u0434\u043d\u043e\u0439 \u043f\u043e\u0440\u0442 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b ireset - \u0412\u0445\u043e\u0434 \u0441\u0431\u0440\u043e\u0441\u0430 istart - \u041f\u043e\u0440\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043e\u043d \u0436\u0435 \u043f\u043e\u0441\u043b\u0443\u0436\u0438\u0442 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 idigit[3:0]  - \u0412\u0445\u043e\u0434\u043d\u043e\u0439 \u043f\u043e\u0440\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u0439 \u0446\u0438\u0444\u0440\u044b. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0446\u0438\u0444\u0440\u044b \u043f\u043e\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0442\u043e \u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442 0 \u0434\u043e 9, \u0447\u0442\u043e \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e 4-\u043c \u0440\u0430\u0437\u0440\u044f\u0434\u0430\u043c idigit_valid - \u0421\u0438\u0433\u043d\u0430\u043b \u0432\u0430\u043b\u0438\u0434\u043d\u043e\u0441\u0442\u0438. \u041f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u0430\u0443\u0437\u044b \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 inum_of_digits[10:0] - \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0446\u0438\u0444\u0440 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c. \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0446\u0438\u0444\u0440 \u0431\u0435\u0437 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u2013 \u044d\u0442\u043e \u0432\u0430\u0436\u043d\u043e!  \u0412\u044b\u0445\u043e\u0434\u044b odone    - \u041f\u043e\u0440\u0442 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0440\u0430\u0441\u0447\u0435\u0442\u043e\u0432 ocorrect - \u041f\u043e\u0440\u0442 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 oerror   - \u041f\u043e\u0440\u0442 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 oready   - \u041f\u043e\u0440\u0442 \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438 \u043a \u043f\u0440\u0438\u0435\u043c\u0443 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0446\u0438\u0444\u0440\u044b \u0438\u043b\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438  <\/code><\/pre>\n<p>\u0411\u044b\u0441\u0442\u0440\u0435\u043d\u044c\u043a\u043e \u043e\u043f\u0438\u0448\u0435\u043c \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u043f\u043e\u0440\u0442\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438<\/p>\n<pre><code class=\"vhdl\">library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use ieee.std_logic_unsigned.all;  entity luhn_checker_v1 is     port (         iclk   : in std_logic;         ireset : in std_logic;         inum_of_digits: std_logic_vector(10 downto 0); --how much digits in checking number !!!whitout control digit         istart : in std_logic; --set pulse, like write enable, for current checking sequence                                --used as start signal         idigit : in std_logic_vector(3 downto 0); --current digit in sequence         idigit_valid: in std_logic; --valid signal for new digit                  oready  : out std_logic; --ready to receive next digit         ocorrect: out std_logic; --checked sequence is correct ('1' - correct)         oerror  : out std_logic; --checked sequence is incorrect ('1' - incorrect)         odone   : out std_logic  --complete computation     ); end luhn_checker_v1;<\/code><\/pre>\n<p>\u0427\u0442\u043e\u0431\u044b \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043c\u044b \u043f\u043e\u0439\u0434\u0435\u043c \u043d\u0430 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0445\u0438\u0442\u0440\u043e\u0441\u0442\u044c. \u041a\u0430\u043a \u0432\u044b \u043f\u043e\u043c\u043d\u0438\u0442\u0435, \u0435\u0441\u043b\u0438 \u0447\u0438\u0441\u043b\u043e \u0431\u043e\u043b\u044c\u0448\u0435 9, \u043f\u043e\u0441\u043b\u0435 \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 2, \u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u043b\u043e\u0436\u0438\u0442\u044c \u0434\u0432\u0435 \u0446\u0438\u0444\u0440\u044b \u044d\u0442\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430. \u041d\u043e \u043c\u044b \u0437\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u0447\u0438\u0441\u043b\u043e \u0431\u0443\u0434\u0435\u0442 \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 10 \u2013 18, \u044d\u0442\u043e \u043e\u0442  5&#215;2 \u0434\u043e 9&#215;2. \u0414\u0440\u0443\u0433\u0438\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043d\u0435\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u043c \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 2, \u043f\u0440\u043e\u0441\u0443\u043c\u043c\u0438\u0440\u0443\u0435\u043c \u0446\u0438\u0444\u0440\u044b \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u043c\u0430\u0441\u0441\u0438\u0432, \u0442\u043e \u0435\u0441\u0442\u044c \u0432 \u043f\u0430\u043c\u044f\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430 \u043c\u0430\u043b\u044b\u043c \u0447\u0438\u0441\u043b\u043e\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439, \u0442\u043e \u0435\u0441\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043d\u0430 LUT\u0430\u0445.<\/p>\n<pre><code class=\"vhdl\">type rom is array (0 to 9) of natural range 0 to 9;     --Luhn algorith requires double the value of digits, if result more then 9 => add digits     --example      -- 2   3   4   5   6     -- 2x2 3x2 4x2 5x2 6x2     -- 4   6   8   10  12     -- 4   6   8   1+0 1+2     -- 4   6   8   1   3  -> this result     -- To skip arithmetic computation we place result in table,     --0x2 = 0                   --1x2 = 2                   --2x2 = 4                   --3x2 = 6                   --4x2 = 8                   --5x2 = 10 => 1 + 0 = 1     --6x2 = 12 => 1 + 2 = 3     --7x2 = 14 => 1 + 4 = 5     --8x2 = 16 => 1 + 6 = 7     --9x2 = 18 => 1 + 8 = 9     constant luhn_rom: rom := (0, 2, 4, 6, 8, 1, 3, 5, 7, 9 );<\/code><\/pre>\n<p>\u00a0\u0414\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0443\u0434\u0432\u043e\u0435\u043d\u043d\u044b\u0445 \u0438 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e tmp. \u042f \u043f\u043e\u0437\u0436\u0435 \u043f\u043e\u044f\u0441\u043d\u044e, \u043f\u043e\u0447\u0435\u043c\u0443 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0439 \u0441\u0443\u043c\u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 18.<\/p>\n<pre><code class=\"vhdl\">--save temporaly result of sums signal tmp: natural range 0 to 31;<\/code><\/pre>\n<p>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043d\u043e\u043c\u0435\u0440\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0446\u0438\u0444\u0440\u044b \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 <\/p>\n<pre><code class=\"vhdl\">signal k: natural range 0 to 2**inum_of_digits'left - 1 := 0; --current index of checking digit<\/code><\/pre>\n<p>\u00a0\u0418 \u0432 \u043a\u043e\u043d\u0446\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438 \u0431\u0443\u0434\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0432\u0441\u0435\u043c\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f\u043c\u0438.<\/p>\n<pre><code class=\"vhdl\">--main manager  type state_type is (s0, s1, s2, s3, s4, s5, s6); signal state : state_type := s0;<\/code><\/pre>\n<p>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0437\u0430\u043a\u043e\u043d\u0447\u0435\u043d\u0430, \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439<\/p>\n<p>\u041d\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u0441\u0435\u0433\u043e \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430. \u041f\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0443 \u0441\u0431\u0440\u043e\u0441\u0430 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u0432\u0441\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0432 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u0417\u0430\u0442\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0441\u0430\u043c \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442:<\/p>\n<p>\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 s0 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438 \u0432 \u044d\u0442\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u043c\u044b \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u0432\u0441\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0438 \u043f\u043e\u0440\u0442\u044b \u0432 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.\u00a0<\/p>\n<p>\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 s1 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0441\u0443\u043c\u043c\u044b \u0441 \u0443\u0434\u0432\u043e\u0435\u043d\u043d\u044b\u043c \u0447\u0438\u0441\u043b\u043e\u043c\u00a0<\/p>\n<p>\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 s2 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u0443\u043c\u043c\u044b<\/p>\n<p>\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 s3 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043a\u0440\u0430\u0442\u043d\u043e\u0441\u0442\u0438 10 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430<\/p>\n<pre><code class=\"vhdl\"> process(iclk) begin     if rising_edge(iclk) then         if ireset = '1' then             state &lt;= s0;             tmp &lt;= 0;             k &lt;= 0;             oready &lt;= '1';             oerror &lt;= '0';             ocorrect &lt;= '0';             odone    &lt;= '0';         else             case (state) is              when s0 => ;--idle              when s1 => ;--x2              when s2 => ;--sum              when s3 => ;--mod10              when others => state &lt;= s0;            end case;         end if;      end if;   end process;<\/code><\/pre>\n<p><strong>\u0422\u0430\u043a \u0441\u0442\u043e\u043f!<\/strong><\/p>\n<p>\u041a\u0430\u043a \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043a\u0440\u0430\u0442\u043d\u043e\u0441\u0442\u044c 10 \u0432 \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435? \u042f \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0441\u043b\u044b\u0448\u0430\u043b \u043e \u0442\u0430\u043a\u043e\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0435, \u043d\u0430\u0445\u043e\u0434\u0438\u043b \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u043a\u0440\u0430\u0442\u043d\u043e\u0441\u0442\u0438 \u0434\u0440\u0443\u0433\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c, \u043d\u043e \u043d\u0435 10. \u041c\u043e\u0435 \u043f\u0435\u0440\u0432\u043e\u0435 \u043e\u0447\u0435\u043d\u044c \u0437\u0430\u0448\u043a\u0432\u0430\u0440\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430 \u0441\u0442\u0440\u0438\u043c\u0435 \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 \u0438\u0437 \u0447\u0438\u0441\u0435\u043b, \u043a\u0440\u0430\u0442\u043d\u044b\u0445 10 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435. \u041d\u043e \u0442\u0430\u043a\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0442\u0435\u0441\u0442\u043e\u0432.<\/p>\n<p>\u041d\u043e \u043d\u0430 \u0441\u0442\u0440\u0438\u043c\u0435 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0415\u0432\u0433\u0435\u043d\u0438\u0439 \u0438 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ea7\/0c9\/008\/ea70c9008706f5a2d8d5f156dd2c0c23.png\" width=\"357\" height=\"174\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ea7\/0c9\/008\/ea70c9008706f5a2d8d5f156dd2c0c23.png\"\/><\/figure>\n<p>\u0415\u0449\u0435 \u0440\u0430\u0437 \u0441\u043f\u0430\u0441\u0438\u0431\u043e \u0415\u0432\u0433\u0435\u043d\u0438\u044e \u0437\u0430 \u0438\u0434\u0435\u044e! \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0445\u0440\u0430\u043d\u0438\u043c \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 tmp \u0431\u0443\u0434\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 10, \u0442\u043e \u043c\u044b \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0431\u0443\u0434\u0435\u043c \u0432\u044b\u0447\u0438\u0442\u0430\u0442\u044c 10, \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u0441 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0446\u0438\u0444\u0440\u043e\u0439 \u0438\u043b\u0438 \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b (\u044d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0432 s1 \u0438 s2). \u041f\u043e \u044d\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 tmp \u0437\u0430\u0434\u0430\u043d \u043a\u0430\u043a 0 to 31, \u0432\u0435\u0434\u044c \u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 18 (9+9). <\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0433\u043e \u043b\u0438\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043e\u0442\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u043d\u0430\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442 \u0441\u043c\u044b\u0441\u043b\u043e\u043c.<\/p>\n<p>\u041e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0441 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u043c \u0441\u0442\u0430\u0440\u0442, \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0446\u0438\u0444\u0440 \u0432 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430.<\/p>\n<p>\u00a0\u0417\u0434\u0435\u0441\u044c \u0436\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0447\u0435\u0442\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0446\u0438\u0444\u0440 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u041a\u0430\u043a \u043c\u044b \u0437\u043d\u0430\u0435\u043c \u0432 \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u0432\u0441\u0435 \u0447\u0435\u0442\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 \u0438\u043c\u0435\u044e\u0442 \u0432 \u043c\u043b\u0430\u0434\u0448\u0435\u043c \u0440\u0430\u0437\u0440\u044f\u0434\u0435 0, \u0430 \u043d\u0435 \u0447\u0435\u0442\u043d\u044b\u0435 1. <\/p>\n<pre><code>0 0000    1 0001 2 0010    3 0011 4 0100    5 0101 6 0110    7 0111 8 1000    9 1001 .         . .         . .         .<\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u0436\u0435 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0447\u0435\u0442\u043d\u043e\u0441\u0442\u0438 \u043d\u0435 \u0447\u0435\u0442\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0435\u0441\u0442\u044c \u043b\u0438 \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e  \u0441 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u043c istart \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0439 \u0441\u0443\u043c\u043c\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0435\u0441\u043b\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u0437 \u043d\u0435\u0447\u0435\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0446\u0438\u0444\u0440 \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0446\u0438\u0444\u0440\u0443 \u0435\u0441\u043b\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u0437 \u0447\u0435\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0446\u0438\u0444\u0440. \u0418 \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u043f\u0440\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 k, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0435\u0439 \u0437\u0430 \u043e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0445 \u0446\u0438\u0444\u0440 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<pre><code class=\"vhdl\">when s0 =>                              oready &lt;= '1';     oerror &lt;= '0';     ocorrect &lt;= '0';     k &lt;= 0;     tmp &lt;= 0;     odone    &lt;= '0';          if istart = '1' then                --check even or odd digits in sequence !!!whitout control digit         if inum_of_digits(0) = '0' then -- even             if idigit_valid = '1' then                 tmp &lt;= to_integer(unsigned(idigit));                 k &lt;= k + 1;                 state &lt;= s1;             else                 state &lt;= s2;             end if;               else             if idigit_valid = '1' then                 tmp &lt;= luhn_rom(to_integer(unsigned(idigit)));                 k &lt;= k + 1;                 state &lt;= s2;             else                 state &lt;= s1;             end if;         end if;     end if;<\/code><\/pre>\n<p>\u0412 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 s1 \u0436\u0434\u0435\u043c \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0432\u0430\u043b\u0438\u0434\u043d\u043e\u0441\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u043c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u0443\u043c\u043c\u044b \u0441 \u0443\u0434\u0432\u043e\u0435\u043d\u043d\u044b\u043c \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b.<\/p>\n<p>\u0421\u0440\u0430\u0437\u0443 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0438\u0441\u043b\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043a \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0434\u043b\u0438\u043d\u044b \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u0435 \u043e\u043a\u043e\u043d\u0447\u0435\u043d\u0430, \u0442\u043e, \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 s2, \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 s3 \u0438 \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043a\u0440\u0430\u0442\u043d\u043e\u0441\u0442\u044c.<\/p>\n<pre><code class=\"vhdl\">when s1 =>      if idigit_valid = '1' then         if tmp > 10 then             tmp &lt;= tmp + luhn_rom(to_integer(unsigned(idigit))) - 10;         else             tmp &lt;= tmp + luhn_rom(to_integer(unsigned(idigit)));         end if;                  k &lt;= k + 1;                  if k = to_integer(unsigned(inum_of_digits)) then             oready &lt;= '0';                                                 state &lt;= s3;         else             state &lt;= s2;                                         end if;     end if;<\/code><\/pre>\n<p>\u0412 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 s2 \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u043c \u0446\u0438\u0444\u0440\u0443 \u0441 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0438 \u043e\u043f\u044f\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u0447\u0438\u0441\u043b\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c.<\/p>\n<pre><code class=\"vhdl\">when s2 => --add digit     if idigit_valid = '1' then         k &lt;= k + 1;                  if tmp > 10 then             tmp &lt;= tmp + to_integer(unsigned(idigit)) - 10;         else             tmp &lt;= tmp + to_integer(unsigned(idigit));         end if;                      if k = to_integer(unsigned(inum_of_digits)) then             oready &lt;= '0';             state &lt;= s3;         else             state &lt;= s1;                                         end if;            end if;<\/code><\/pre>\n<p>\u0412 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 s3 \u0436\u0434\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043d\u0430 \u043a\u0440\u0430\u0442\u043d\u043e\u0441\u0442\u044c 10 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0439 \u0441\u0443\u043c\u043c\u044b. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043c\u044b \u0432\u044b\u0447\u0438\u0442\u0430\u043b\u0438 10 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f tmp \u0431\u044b\u043b\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 10, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441 0 \u0438 10.<\/p>\n<pre><code class=\"vhdl\">when s3 =>     oready &lt;= '0';     odone &lt;= '1';      if tmp = 0 or tmp = 10 then         ocorrect &lt;= '1';      else         oerror &lt;= '1';      end if;      state &lt;= s0;<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"vhdl\"> library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use ieee.std_logic_unsigned.all;  entity luhn_checker_v1 is     port (         iclk : in std_logic;         ireset : in std_logic;         inum_of_digits: std_logic_vector(10 downto 0); --how much digits in checking number !!!whitout control digit         istart : in std_logic; --set pulse, like write enable, for current checking sequence                                            --used as start signal         idigit: in std_logic_vector(3 downto 0); --current digit in sequence         idigit_valid: in std_logic; --valid signal for new digit                  oready  : out std_logic; --ready to receive next digit         ocorrect: out std_logic; --checked sequence is correct ('1' - correct)         oerror  : out std_logic; --checked sequence is incorrect ('1' - incorrect)         odone   : out std_logic  --complete computation     ); end luhn_checker_v1;  architecture rtl of luhn_checker_v1 is          type rom is array (0 to 9) of natural range 0 to 9;     --Luhn algorith requires double the value of digits, if result more then 9 => add digits     --example      -- 2   3   4   5   6     -- 2x2 3x2 4x2 5x2 6x2     -- 4   6   8   10  12     -- 4   6   8   1+0 1+2     -- 4   6   8   1   3  -> this result     -- To skip arithmetic computation we place result in table,     --0x2 = 0                   --1x2 = 2                   --2x2 = 4                   --3x2 = 6                   --4x2 = 8                   --5x2 = 10 => 1 + 0 = 1     --6x2 = 12 => 1 + 2 = 3     --7x2 = 14 => 1 + 4 = 5     --8x2 = 16 => 1 + 6 = 7     --9x2 = 18 => 1 + 8 = 9     constant luhn_rom: rom := (0, 2, 4, 6, 8, 1, 3, 5, 7, 9 );          --save temporaly result of sums     signal tmp: natural range 0 to 31;--need to set correct tmp width to exclude overflow          --main manager      type state_type is (s0, s1, s2, s3, s4, s5, s6);     signal state : state_type := s0;          signal k: natural range 0 to 2**inum_of_digits'left - 1 := 0; --current index of checking digit      begin          --     --Important notice     --Instead of finding mod10 of result after computation     --we will substract 10 every time when tmp is more then 10     --Thanks Evgeny Sidelnikov for this genious solution!     --          process(iclk) begin         if rising_edge(iclk) then             if ireset = '1' then                 state &lt;= s0;                 tmp &lt;= 0;                 k &lt;= 0;                 oready &lt;= '1';                 oerror &lt;= '0';                 ocorrect &lt;= '0';                 odone    &lt;= '0';             else                 case (state) is                     when s0 =>                                                  oready &lt;= '1';                         oerror &lt;= '0';                         ocorrect &lt;= '0';                         k &lt;= 0;                         tmp &lt;= 0;                         odone    &lt;= '0';                                                  if istart = '1' then                                                                                                            --check even or odd digits in sequence !!!whitout control digit                             if inum_of_digits(0) = '0' then -- even                                 if idigit_valid = '1' then                                     tmp &lt;= to_integer(unsigned(idigit));                                     k &lt;= k + 1;                                     state &lt;= s1;                                 else                                     state &lt;= s2;                                 end if;                                                                                               else                                 if idigit_valid = '1' then                                     tmp &lt;= luhn_rom(to_integer(unsigned(idigit)));                                     k &lt;= k + 1;                                     state &lt;= s2;                                 else                                     state &lt;= s1;                                 end if;                                                              end if;                         end if;                                                  when s1 =>                              if idigit_valid = '1' then                                 if tmp > 10 then                                     tmp &lt;= tmp + luhn_rom(to_integer(unsigned(idigit))) - 10;                                 else                                     tmp &lt;= tmp + luhn_rom(to_integer(unsigned(idigit)));                                 end if;                                                                  k &lt;= k + 1;                                                                  if k = to_integer(unsigned(inum_of_digits)) then oready &lt;= '0';                                     state &lt;= s3;                                 else                                     state &lt;= s2;                                                                 end if;                                                                                               end if;                                                      when s2 => --skip digit                             if idigit_valid = '1' then                                 k &lt;= k + 1;                                                                  if tmp > 10 then                                     tmp &lt;= tmp + to_integer(unsigned(idigit)) - 10;                                 else                                     tmp &lt;= tmp + to_integer(unsigned(idigit));                                 end if;                                                                                                   if k = to_integer(unsigned(inum_of_digits)) then                                     oready &lt;= '0';                                     state &lt;= s3;                                 else                                     state &lt;= s1;                                                                 end if;                                                                                               end if;                                                      when s3 =>                         oready &lt;= '0';                         odone &lt;= '1';                          if tmp = 0 or tmp = 10 then                             ocorrect &lt;= '1';                          else                             oerror &lt;= '1';                          end if;                          state &lt;= s0;                                              when others => state &lt;= s0;                end case;             end if;         end if;     end process;  end rtl; <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p><strong>\u0422\u0435\u0441\u0442\u0431\u0435\u043d\u0447<\/strong><\/p>\n<p>\u041e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0442\u0435\u0441\u0442\u0431\u0435\u043d\u0447 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438. \u042f \u043e\u0431\u044a\u044f\u0432\u0438\u043b \u043d\u0435\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u0438\u0437 \u043d\u0430\u0442\u0443\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u043d\u043e\u0441\u0438\u043b \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438<\/p>\n<pre><code class=\"vhdl\">type sequence_type is array (natural range &lt;>) of natural range 0 to 9;     constant s0 : sequence_type := (0,1,2,3,4,5,6);--incorrect     constant s1 : sequence_type := (4,5,6,1,2,6,1,2,1,2,3,4,5,4,6,7);     constant s2 : sequence_type := (3,0,1,1,8,9,7);     constant s3 : sequence_type := (4,6,2,1,4,6,2,6,2,6,7,2,6,7,1,6,7,6,4,6,7,4,6,1,7,6,5,2,7,6,1,6,7,2,6,4,2,1,6,7);     constant s4 : sequence_type := (4,6,2,1,4,6,2,6,2,6,7,2,6,7,1,6,7,6,4,6,7,4,6,1,7,6,5,2,7,6,1,6,7,2,6,4,2,1,6,7,3);     constant s5 : sequence_type := (7,4,1,2,3,3,1);--correct     <\/code><\/pre>\n<p>\u0410 \u0441\u0430\u043c\u0443 \u043f\u043e\u0434\u0430\u0447\u0443 \u0432\u043e\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043d\u0430 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u0440\u0435\u0448\u0438\u043b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443. \u0422\u0430\u043a\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043c\u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u043e\u043b\u0435\u0435 \u043c\u0435\u043d\u0435\u0435 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u043c. \u042f \u0441\u0434\u0435\u043b\u0430\u043b \u0434\u0432\u0435 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b: \u043e\u0434\u043d\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043f\u0440\u0438\u0448\u0435\u0434\u0448\u0438\u0445 \u0441 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u043c istart \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0438 \u0434\u043b\u044f \u0441\u043b\u0443\u0447\u0430\u044f, \u043a\u043e\u0433\u0434\u0430 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u043f\u043e\u0441\u043b\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0441\u0442\u0430\u0440\u0442 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0430\u043a\u0442\u043e\u0432.<\/p>\n<details class=\"spoiler\">\n<summary>Hidden text<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"vhdl\">procedure execute  (      s : in sequence_type;      signal start: out std_logic;      signal num_of_digits: out std_logic_vector(10 downto 0);      signal digit: out std_logic_vector(3 downto 0);      signal digit_valid: out std_logic  ) is begin          wait for 10*clk_period;     start &lt;= '1';     num_of_digits &lt;= std_logic_vector(to_unsigned(s'length-1, 11));     --wait for    clk_period;           for i in s'range loop                  digit &lt;= std_logic_vector(to_unsigned(s(i),4));         digit_valid &lt;= '1';         wait for clk_period;         start &lt;= '0';     end loop;          wait for clk_period;     digit_valid &lt;= '0';     digit &lt;= std_logic_vector(to_unsigned(0,4)); end procedure;<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>Hidden text<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"vhdl\">procedure execute_delayed_data  (      s : in sequence_type;      signal start: out std_logic;      signal num_of_digits: out std_logic_vector(10 downto 0);      signal digit: out std_logic_vector(3 downto 0);      signal digit_valid: out std_logic  ) is begin          wait for 10*clk_period;     start &lt;= '1';     num_of_digits &lt;= std_logic_vector(to_unsigned(s'length-1, 11));           wait for clk_period;     start &lt;= '0';          wait for 2*clk_period;             for i in s'range loop         wait for clk_period;         digit &lt;= std_logic_vector(to_unsigned(s(i),4));         digit_valid &lt;= '1';              end loop;          wait for clk_period;     digit_valid &lt;= '0';     digit &lt;= std_logic_vector(to_unsigned(0,4)); end procedure;<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u042d\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0442\u0435\u043b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0438 \u0437\u0430\u0434\u0430\u044e\u0442 \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0432\u043e\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043d\u0430 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c<\/p>\n<pre><code class=\"vhdl\">process     begin         wait for 10*clk_period;         ireset &lt;= '1';         wait for 3*clk_period;         ireset &lt;= '0';                  execute(s0, istart, inum_of_digits, idigit, idigit_valid);         execute_delayed_data(s0, istart, inum_of_digits, idigit, idigit_valid);                  execute(s1, istart, inum_of_digits, idigit, idigit_valid);         execute_delayed_data(s1, istart, inum_of_digits, idigit, idigit_valid);          execute(s5, istart, inum_of_digits, idigit, idigit_valid);         execute_delayed_data(s5, istart, inum_of_digits, idigit, idigit_valid);         wait;     end process;<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u0442\u0435\u0441\u0442\u0431\u0435\u043d\u0447\u0430 \u0434\u043b\u044f \u043c\u043e\u0434\u0443\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"vhdl\">library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use ieee.std_logic_unsigned.all;  library work; use work.all;  entity tb_luhn_checker_v1 is end tb_luhn_checker_v1;  architecture tb of tb_luhn_checker_v1 is      signal iclk : std_logic := '1';     signal ireset : std_logic := '0';     signal inum_of_digits: std_logic_vector(10 downto 0);     signal istart : std_logic := '0';     signal idigit : std_logic_vector(3 downto 0) := (others => '0');     signal idigit_valid : std_logic := '0';     signal oready : std_logic;     signal ocorrect: std_logic;     signal oerror : std_logic;          constant clk_period : time := 10ns;          type sequence_type is array (natural range &lt;>) of natural range 0 to 9;     constant s0 : sequence_type := (0,1,2,3,4,5,6);--incorrect     constant s1 : sequence_type := (4,5,6,1,2,6,1,2,1,2,3,4,5,4,6,7);     constant s2 : sequence_type := (3,0,1,1,8,9,7);     constant s3 : sequence_type := (4,6,2,1,4,6,2,6,2,6,7,2,6,7,1,6,7,6,4,6,7,4,6,1,7,6,5,2,7,6,1,6,7,2,6,4,2,1,6,7);     constant s4 : sequence_type := (4,6,2,1,4,6,2,6,2,6,7,2,6,7,1,6,7,6,4,6,7,4,6,1,7,6,5,2,7,6,1,6,7,2,6,4,2,1,6,7,3);     constant s5 : sequence_type := (7,4,1,2,3,3,1);--correct               procedure execute  (          s : in sequence_type;          signal start: out std_logic;          signal num_of_digits: out std_logic_vector(10 downto 0);          signal digit: out std_logic_vector(3 downto 0);          signal digit_valid: out std_logic      ) is     begin                  wait for 10*clk_period;         start &lt;= '1';         num_of_digits &lt;= std_logic_vector(to_unsigned(s'length-1, 11));         --wait for    clk_period;                   for i in s'range loop                          digit &lt;= std_logic_vector(to_unsigned(s(i),4));             digit_valid &lt;= '1';             wait for clk_period;             start &lt;= '0';         end loop;                  wait for clk_period;         digit_valid &lt;= '0';         digit &lt;= std_logic_vector(to_unsigned(0,4));                       end procedure;          procedure execute_delayed_data  (          s : in sequence_type;          signal start: out std_logic;          signal num_of_digits: out std_logic_vector(10 downto 0);          signal digit: out std_logic_vector(3 downto 0);          signal digit_valid: out std_logic      ) is     begin                  wait for 10*clk_period;         start &lt;= '1';         num_of_digits &lt;= std_logic_vector(to_unsigned(s'length-1, 11));                   wait for clk_period;         start &lt;= '0';                  wait for 2*clk_period;                     for i in s'range loop             wait for clk_period;             digit &lt;= std_logic_vector(to_unsigned(s(i),4));             digit_valid &lt;= '1';                      end loop;                  wait for clk_period;         digit_valid &lt;= '0';         digit &lt;= std_logic_vector(to_unsigned(0,4));                       end procedure;      begin          --https:\/\/www.dcode.fr\/luhn-algorithm     --test sequence 301189 control digit 7     --will check 3011897            iclk &lt;= not iclk after clk_period\/2;                    process     begin         wait for 10*clk_period;         ireset &lt;= '1';         wait for 3*clk_period;         ireset &lt;= '0';          --        execute(s0, istart, inum_of_digits, idigit, idigit_valid); --        execute(s1, istart, inum_of_digits, idigit, idigit_valid); --        execute(s2, istart, inum_of_digits, idigit, idigit_valid); --        execute(s3, istart, inum_of_digits, idigit, idigit_valid); --        execute(s4, istart, inum_of_digits, idigit, idigit_valid);                  execute(s0, istart, inum_of_digits, idigit, idigit_valid);         execute_delayed_data(s0, istart, inum_of_digits, idigit, idigit_valid);                  execute(s1, istart, inum_of_digits, idigit, idigit_valid);         execute_delayed_data(s1, istart, inum_of_digits, idigit, idigit_valid);          execute(s5, istart, inum_of_digits, idigit, idigit_valid);         execute_delayed_data(s5, istart, inum_of_digits, idigit, idigit_valid);         wait;     end process;                    dut: entity work.luhn_checker_v1(rtl)     port map (         iclk           => iclk          ,         ireset         => ireset        ,         inum_of_digits => inum_of_digits,         istart         => istart        ,         idigit         => idigit        ,         idigit_valid   => idigit_valid  ,         oready         => oready        ,         ocorrect       => ocorrect      ,         oerror         => oerror           );   end architecture tb;<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u043d\u0430 <a href=\"https:\/\/github.com\/FPGA-Systems\/algorithms\" rel=\"noopener noreferrer nofollow\">git<\/a> \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e \u043d\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430\u0445 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e \u043d\u0430 \u0432\u0430\u0448\u0435 \u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0435.<\/p>\n<p><strong>\u0412\u0430\u0440\u0438\u0430\u043d\u0442 2<\/strong><\/p>\n<p>\u0412\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u044f \u0440\u0435\u0448\u0438\u043b \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0446\u0438\u0444\u0440 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u043b \u044d\u0442\u043e\u0442 \u043f\u043e\u0440\u0442 \u043d\u0430 \u0434\u0432\u0430 \u0434\u0440\u0443\u0433\u0438\u0445<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/66e\/f4a\/5cf\/66ef4a5cf889b5ff387d3c9352fbc5d5.png\" width=\"1199\" height=\"455\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/66e\/f4a\/5cf\/66ef4a5cf889b5ff387d3c9352fbc5d5.png\"\/><\/figure>\n<pre><code>iodd_even - \u0447\u0451\u0442\u043d\u043e\u0435 \u0438\u043b\u0438 \u043d\u0435\u0447\u0451\u0442\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0446\u0438\u0444\u0440 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 idone - \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0432 '1' \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0446\u0438\u0444\u0440\u044b<\/code><\/pre>\n<p>\u0421\u0430\u043c \u043a\u043e\u0434 \u043f\u0440\u0435\u0442\u0435\u0440\u043f\u0435\u043b \u043b\u0438\u0448\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043a\u043e\u0441\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u043d\u043e \u0435\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043f\u0440\u0435\u0436\u043d\u0435\u0439<\/p>\n<details class=\"spoiler\">\n<summary>Hidden text<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"vhdl\"> library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use ieee.std_logic_unsigned.all;  entity luhn_checker_v2 is     port (         iclk : in std_logic;         ireset : in std_logic;         istart : in std_logic; --set pulse, like write enable, for current checking sequence                                            --used as start signal         iodd_even: in std_logic; --is it even or odd number of digits in sequence, exclude control number         idigit: in std_logic_vector(3 downto 0); --current digit in sequence         idigit_valid: in std_logic; --valid signal for new digit         idone: in std_logic; --done with number, rise up when all numbers include control uploaded                  oready  : out std_logic; --ready to receive next digit         ocorrect: out std_logic; --checked number is correct ('1' - correct)         oerror  : out std_logic; --checked number is incorrect ('1' - incorrect)         odone   : out std_logic  --complete computation     ); end luhn_checker_v2;  architecture rtl of luhn_checker_v2 is          type rom is array (0 to 9) of natural range 0 to 9;     --Luhn algorith requires double the value of digits, if result more then 9 => add digits     --example      -- 2   3   4   5   6          -- 2x2 3x2 4x2 5x2 6x2     -- 4   6   8   10  12     -- 4   6   8   1+0 1+2     -- 4   6   8   1   3  -> this result     -- To skip arithmetic computation we place result in table,     --0x2 = 0                   --1x2 = 2                   --2x2 = 4                   --3x2 = 6                   --4x2 = 8                   --5x2 = 10 => 1 + 0 = 1     --6x2 = 12 => 1 + 2 = 3     --7x2 = 14 => 1 + 4 = 5     --8x2 = 16 => 1 + 6 = 7     --9x2 = 18 => 1 + 8 = 9     constant luhn_rom: rom := (0, 2, 4, 6, 8, 1, 3, 5, 7, 9 );          --save temporaly result of sums     --     --Important notice     --Instead of finding mod10 of result after computation     --we will substract 10 every time when tmp is more then 10     --Thanks Evgeny Sidelnikov for this genious solution!     --     signal tmp: natural range 0 to 20;          --main manager      type state_type is (s0, s1, s2, s3, s4, s5, s6);     signal state : state_type := s0;      begin                    process(iclk) begin         if rising_edge(iclk) then             if ireset = '1' then                 state &lt;= s0;                 tmp &lt;= 0;                 oready &lt;= '1';                 oerror &lt;= '0';                 ocorrect &lt;= '0';                 odone    &lt;= '0';             else                 case (state) is                     when s0 =>                                                  oready &lt;= '1';                         oerror &lt;= '0';                         ocorrect &lt;= '0';                         tmp &lt;= 0;                         odone    &lt;= '0';                                                  if istart = '1' then                                                      --check even or odd digits in sequence !!!whitout control digit                             if iodd_even = '0' then -- even                                 if idigit_valid = '1' then                                     tmp &lt;= to_integer(unsigned(idigit));                                     state &lt;= s1;                                 else                                     state &lt;= s2;                                 end if;                                                              else                                 if idigit_valid = '1' then                                     tmp &lt;= luhn_rom(to_integer(unsigned(idigit)));                                     state &lt;= s2;                                 else                                     state &lt;= s1;                                 end if;                             end if;                         end if;                                                  when s1 =>                              if idigit_valid = '1' then                                 if tmp > 10 then                                     tmp &lt;= tmp + luhn_rom(to_integer(unsigned(idigit))) - 10;                                 else                                     tmp &lt;= tmp + luhn_rom(to_integer(unsigned(idigit)));                                 end if;                                                                  state &lt;= s2;                              end if;                                                            if idone = '1' then                                oready &lt;= '0';                                state &lt;= s3;                              end if;                                                      when s2 => --skip digit                             if idigit_valid = '1' then                                                                 if tmp > 10 then                                     tmp &lt;= tmp + to_integer(unsigned(idigit)) - 10;                                 else                                     tmp &lt;= tmp + to_integer(unsigned(idigit));                                 end if;                                 state &lt;= s1;                             end if;                                                          if idone = '1' then                                oready &lt;= '0';                                state &lt;= s3;                             end if;                                                      when s3 =>                         oready &lt;= '0';                         odone &lt;= '1';                          if tmp = 0 or tmp = 10 then                             ocorrect &lt;= '1';                          else                             oerror &lt;= '1';                          end if;                          state &lt;= s0;                                              when others => state &lt;= s0;                end case;             end if;         end if;     end process;  end rtl; <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u044f \u0432\u043d\u0435\u0441 \u0432 \u0444\u0430\u0439\u043b \u0442\u0435\u0441\u0442\u0431\u0435\u043d\u0447\u0430<\/p>\n<details class=\"spoiler\">\n<summary>Hidden text<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"vhdl\">library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use ieee.std_logic_unsigned.all;  library work; use work.all;  entity tb_luhn_checker_v2 is end tb_luhn_checker_v2;  architecture tb of tb_luhn_checker_v2 is      signal iclk : std_logic := '1';     signal ireset : std_logic := '0';     signal istart : std_logic := '0';     signal iodd_even:  std_logic := '0';     signal idigit : std_logic_vector(3 downto 0) := (others => '0');     signal idigit_valid : std_logic := '0';     signal idone: std_logic := '0';     signal oready : std_logic;     signal ocorrect: std_logic;     signal oerror : std_logic;          constant clk_period : time := 10ns;          type sequence_type is array (natural range &lt;>) of natural range 0 to 9;     constant s0 : sequence_type := (0,1,2,3,4,5,6);--incorrect     constant s1 : sequence_type := (4,5,6,1,2,6,1,2,1,2,3,4,5,4,6,7);--correct     constant s2 : sequence_type := (3,0,1,1,8,9,7);--correct     constant s3 : sequence_type := (4,6,2,1,4,6,2,6,2,6,7,2,6,7,1,6,7,6,4,6,7,4,6,1,7,6,5,2,7,6,1,6,7,2,6,4,2,1,6,7); -- incorrect     constant s4 : sequence_type := (4,6,2,1,4,6,2,6,2,6,7,2,6,7,1,6,7,6,4,6,7,4,6,1,7,6,5,2,7,6,1,6,7,2,6,4,2,1,6,7,3); -- correct     constant s5 : sequence_type := (7,4,1,2,3,3,1);--correct               procedure execute  (          s : in sequence_type;          signal start: out std_logic;          signal odd_even: out std_logic;          signal digit: out std_logic_vector(3 downto 0);          signal digit_valid: out std_logic;          signal done: out std_logic      ) is     begin                  wait for 10*clk_period;                   start &lt;= '1';         if ( (s'length - 1) mod 2 = 0) then             odd_even &lt;= '0';         else             odd_even &lt;= '1';         end if;                  for i in s'range loop             digit &lt;= std_logic_vector(to_unsigned(s(i),4));             digit_valid &lt;= '1';             wait for clk_period;              start &lt;= '0';             odd_even &lt;= '0';         end loop;                  digit_valid &lt;= '0';         done &lt;= '1';         digit &lt;= std_logic_vector(to_unsigned(0,4));                  wait for clk_period;         done &lt;= '0';              end procedure;                  procedure execute_data_delayed  (          s : in sequence_type;          signal start: out std_logic;          signal odd_even: out std_logic;          signal digit: out std_logic_vector(3 downto 0);          signal digit_valid: out std_logic;          signal done: out std_logic      ) is     begin                  wait for 10*clk_period;                   start &lt;= '1';         if ( (s'length - 1) mod 2 = 0) then             odd_even &lt;= '0';         else             odd_even &lt;= '1';         end if;                  wait for clk_period;          start &lt;= '0';         odd_even &lt;= '0';                  wait for 2*clk_period;                  for i in s'range loop             wait for clk_period;             digit &lt;= std_logic_vector(to_unsigned(s(i),4));             digit_valid &lt;= '1';         end loop;                  wait for clk_period;         digit_valid &lt;= '0';         done &lt;= '1';         digit &lt;= std_logic_vector(to_unsigned(0,4));                  wait for clk_period;         done &lt;= '0';              end procedure;      begin          --https:\/\/www.dcode.fr\/luhn-algorithm     --test sequence 301189 control digit 7     --will check 3011897            iclk &lt;= not iclk after clk_period\/2;                    process     begin         wait for 10*clk_period;         ireset &lt;= '1';         wait for 3*clk_period;         ireset &lt;= '0';                  execute(s0, istart, iodd_even, idigit, idigit_valid, idone);         execute_data_delayed(s0, istart, iodd_even, idigit, idigit_valid, idone);                  execute(s1, istart, iodd_even, idigit, idigit_valid, idone);         execute_data_delayed(s1, istart, iodd_even, idigit, idigit_valid, idone);                  execute(s5, istart, iodd_even, idigit, idigit_valid, idone);         execute_data_delayed(s5, istart, iodd_even, idigit, idigit_valid, idone);                           wait;     end process;                    dut: entity work.luhn_checker_v2(rtl)     port map (         iclk           => iclk          ,         ireset         => ireset        ,         iodd_even =>   iodd_even,         istart         => istart        ,         idigit         => idigit        ,         idigit_valid   => idigit_valid  ,         idone          => idone,         oready         => oready        ,         ocorrect       => ocorrect      ,         oerror         => oerror           );   end architecture tb;<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u043d\u0430 <a href=\"https:\/\/github.com\/FPGA-Systems\/algorithms\" rel=\"noopener noreferrer nofollow\">git<\/a> \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e \u043d\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430\u0445 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e \u043d\u0430 \u0432\u0430\u0448\u0435 \u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0435.<\/p>\n<h2>\u0418 \u0432 \u043a\u043e\u043d\u0446\u0435<\/h2>\n<p>\u042f \u043f\u0440\u0438\u0432\u0435\u043b \u043f\u0430\u0440\u0443 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u041b\u0443\u043d\u0430 \u043d\u0430 VHDL, \u043a\u043e\u0442\u043e\u0440\u044b\u0435, \u0440\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f \u043c\u043e\u0436\u043d\u043e \u0438 \u043d\u0443\u0436\u043d\u043e \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u043a\u0430\u043a \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0441\u0430\u043c\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f \u0442\u0430\u043a \u0438 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0442\u0435\u0441\u0442\u0431\u0435\u043d\u0447\u0430.<\/p>\n<p>\u0417\u0430 \u0440\u0430\u043c\u043a\u0430\u043c\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u043e\u0441\u0442\u0430\u043b\u0438\u0441\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u043e\u0433\u043e \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u041b\u0443\u043d\u0430, \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430 Verilog\/SV \u0438 \u043c\u043d\u043e\u0433\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435. \u041d\u043e \u044d\u0442\u043e\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043a\u0440\u0430\u0439\u043d\u0435 \u043f\u0440\u043e\u0441\u0442 \u0438 \u043f\u043e\u043d\u044f\u0442\u0435\u043d, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u043f\u043e\u043b\u043d\u0435 \u0433\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u043c \u043f\u043b\u0438\u0441\u043e\u0432\u043e\u0434\u0430\u043c.<\/p>\n<p>\u041d\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u0438, \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0412\u0435\u0440\u0445\u043e\u0444\u0444\u0430, <a href=\"https:\/\/youtu.be\/VKDaawSL6IA\" rel=\"noopener noreferrer nofollow\">\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u044b \u0443\u0436\u0435 \u0437\u0430\u043f\u0438\u043b\u0438\u043b\u0438<\/a> \u043d\u0430 \u0441\u0443\u0431\u0431\u043e\u0442\u043d\u0435\u043c FPGA \u0441\u0442\u0440\u0438\u043c\u0435.<\/p>\n<p><strong>\u0421\u0441\u044b\u043b\u043a\u0438<\/strong><\/p>\n<ol>\n<li>\n<p><a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D1%83%D0%BD%D0%B0\" rel=\"noopener noreferrer nofollow\">\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u041b\u0443\u043d\u0430 wiki<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/FPGA-Systems\/algorithms\" rel=\"noopener noreferrer nofollow\">\u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043d\u0430 git<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/youtu.be\/jhLz-ZCikjI\" rel=\"noopener noreferrer nofollow\">\u0412\u0438\u0434\u0435\u043e \u043f\u0440\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043d\u0430 \u041f\u041b\u0418\u0421<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/youtu.be\/E175Yiz43mw\" rel=\"noopener noreferrer nofollow\">\u0421\u0442\u0440\u0438\u043c, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u044f \u0434\u0435\u043b\u0430\u043b \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u041b\u0443\u043d\u0430<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/www.dcode.fr\/luhn-algorithm\" rel=\"noopener noreferrer nofollow\">\u041e\u043d\u043b\u0430\u0439\u043d \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u043e\u0440 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0435\u0439<\/a><\/p>\n<\/li>\n<\/ol>\n<\/div>\n<\/div>\n<\/div>\n<p> <!----> <!----><\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/748292\/\"> https:\/\/habr.com\/ru\/articles\/748292\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p><strong>\u041f\u041b\u0418\u0421-\u043a\u0443\u043b\u044c\u0442 \u043f\u0440\u0438\u0432\u0435\u0442, \u0445\u0430\u0431\u0440\u0443\u043d\u0438\u0442\u0438!<\/strong><\/p>\n<p>\u0417\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u043b\u0438 \u0432\u044b \u043a\u043e\u0433\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c \u043d\u0430\u0434 \u0442\u0435\u043c, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0431\u0449\u0435\u0433\u043e \u0443 \u0431\u0430\u043d\u043a\u043e\u0432\u0441\u043a\u043e\u0439 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438, IMEI \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430 \u0438 \u0432\u0430\u0433\u043e\u043d\u0430 \u0420\u0416\u0414? \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0432\u044b \u043d\u0430\u0439\u0434\u0435\u0442\u0435 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u044d\u0442\u043e\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u0438 \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u0435\u0433\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u041f\u041b\u0418\u0421. <\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u041a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b, \u043e\u0431\u044b\u0447\u043d\u0430\u044f \u043f\u043b\u0430\u0441\u0442\u0438\u043a\u043e\u0432\u0430\u044f \u043a\u0430\u0440\u0442\u0430.  \u041c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0435\u0451 \u0435\u0436\u0435\u0434\u043d\u0435\u0432\u043d\u043e \u043f\u0440\u0438 \u043e\u043f\u043b\u0430\u0442\u0435 \u0437\u0430\u043a\u0430\u0437\u043e\u0432 \u043d\u0430 \u0440\u0430\u0437\u043d\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u043e\u043d\u043b\u0430\u0439\u043d \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0430\u0445, \u043f\u0440\u0438 \u043e\u043f\u043b\u0430\u0442\u0435 \u0448\u0442\u0440\u0430\u0444\u043e\u0432 \u0432 \u0413\u0418\u0411\u0414\u0414 \u0438\u043b\u0438 \u0434\u043b\u044f <a href=\"https:\/\/boosty.to\/fpgasystems\" rel=\"noopener noreferrer nofollow\">\u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0434\u043e\u043d\u0430\u0442\u043e\u0432<\/a>. \u041d\u043e \u0437\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u043b\u0438 \u0432\u044b \u043d\u0430\u0434 \u0442\u0435\u043c, \u043a\u0430\u043a \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u0430\u043c \u043d\u043e\u043c\u0435\u0440 \u0432\u0430\u0448\u0435\u0439 \u043a\u0430\u0440\u0442\u044b \u0438 \u0447\u0442\u043e \u043e\u043d \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442? <\/p>\n<p>\u0427\u0435\u0441\u0442\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u044f \u043d\u0438\u043a\u043e\u0433\u0434\u0430, \u043d\u043e \u0434\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u2026 \u043c\u043e\u043c\u0435\u043d\u0442\u0430, \u043a\u043e\u0433\u0434\u0430 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u044e\u0442\u0443\u0431\u0430 \u0432\u044b\u0434\u0430\u043b \u043c\u043d\u0435 \u0440\u043e\u043b\u0438\u043a \u0441 \u043a\u0430\u043d\u0430\u043b\u0430 <a href=\"https:\/\/www.youtube.com\/watch?v=EMiAotwmYNI\" rel=\"noopener noreferrer nofollow\">VitalMath<\/a>.<\/p>\n<p>\u0427\u0442\u043e \u0431\u044b\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u0432 \u044d\u0442\u043e\u043c \u043f\u044f\u0442\u0438\u043c\u0438\u043d\u0443\u0442\u043d\u043e\u043c \u0440\u043e\u043b\u0438\u043a\u0435 \u043e \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u043e\u0439 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0435? \u0412 \u0432\u0438\u0434\u0435\u043e \u0431\u044b\u043b \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u043e\u0434\u0438\u043d \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441: \u043a\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0444\u043e\u0440\u043c\u0430 \u0432\u0432\u043e\u0434\u0430 \u043d\u043e\u043c\u0435\u0440\u0430 \u0431\u0430\u043d\u043a\u043e\u0432\u0441\u043a\u043e\u0439 \u043a\u0430\u0440\u0442\u044b \u0437\u043d\u0430\u0435\u0442, \u0447\u0442\u043e \u043e\u043d \u0431\u044b\u043b \u0432\u0432\u0435\u0434\u0451\u043d \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e?<\/p>\n<p>\u0421 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b, \u043d\u0443 \u0447\u0442\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0433\u043e \u0432 \u043d\u0430\u0448 \u0432\u0435\u043a \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430: \u0432\u0432\u043e\u0434\u0438\u0448\u044c \u043d\u043e\u043c\u0435\u0440, \u043e\u043d \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440, \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441 \u043c\u0435\u0441\u0442\u043d\u043e\u0439 \u0431\u0430\u0437\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0432\u044b\u0434\u0430\u0451\u0442 \u043e\u0442\u0432\u0435\u0442. \u0412\u0440\u043e\u0434\u0435 \u0431\u044b \u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u043d\u043e \u043d\u0435\u0442. \u041d\u0438\u043a\u0430\u043a\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043a \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f, \u0442\u043e\u0433\u0434\u0430 \u043a\u0430\u043a\u0438\u043c \u0436\u0435 \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u044c \u0432\u0432\u043e\u0434\u0430?<\/p>\n<p>\u0410 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u043d \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439, \u0432 \u043f\u043b\u0430\u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043b \u0435\u0449\u0451 \u0432 1954 \u0433\u043e\u0434\u0443 \u0425\u0430\u043d\u0441\u043e\u043d \u041f\u0438\u0442\u0435\u0440 \u041b\u0443\u043d.<\/p>\n<p>\u042d\u0442\u043e\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0446\u0438\u0444\u0440 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u043e\u0439 \u0446\u0438\u0444\u0440\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u043e \u0444\u0430\u043c\u0438\u043b\u0438\u0438 \u0430\u0432\u0442\u043e\u0440\u0430 \u0438 \u0431\u043e\u043b\u0435\u0435 \u0448\u0438\u0440\u043e\u043a\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d \u043a\u0430\u043a <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D1%83%D0%BD%D0%B0\" rel=\"noopener noreferrer nofollow\">\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u041b\u0443\u043d\u0430<\/a>. \u041e\u043d \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u0442\u0440\u0430\u0442 \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430 \u043b\u0435\u0442\u0443 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443 \u043f\u0440\u0438 \u0432\u0432\u043e\u0434\u0435 \u0434\u0430\u043d\u043d\u044b\u0445. \u0414\u0430, \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0435\u0441\u043c\u0435\u0442\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e, \u043d\u043e \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0438\u043c\u0435\u043d\u043d\u043e \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u041b\u0443\u043d\u0430 \u043d\u0430 \u041f\u041b\u0418\u0421, \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u043a \u0441\u043b\u043e\u0432\u0443, \u043d\u0435 \u043b\u0438\u0448\u0451\u043d \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u043e\u0432, \u043f\u0440\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0437\u043d\u0430\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u0432 \u0442\u043e\u0439 \u0436\u0435 \u0432\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u0438. \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u041b\u0443\u043d\u0430 \u0448\u0438\u0440\u043e\u043a\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043d\u0430\u0448\u0435\u0439 \u043f\u043e\u0432\u0441\u0435\u0434\u043d\u0435\u0432\u043d\u043e\u0439 \u0436\u0438\u0437\u043d\u0438 \u0438 \u043f\u043e\u0441\u043b\u0443\u0436\u0438\u0442 \u043d\u0430\u043c \u043e\u0442\u043f\u0440\u0430\u0432\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u043a \u0441\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0442\u0435\u0439, \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u043d\u044b\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u043d\u0430 \u041f\u041b\u0418\u0421.<\/p>\n<h2>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u041b\u0443\u043d\u0430: \u043a\u0440\u0430\u0442\u043a\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e<\/h2>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u0430\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c.<\/p>\n<p>\u0421\u0440\u0430\u0437\u0443 \u043e\u0442\u043c\u0435\u0447\u0443, \u0447\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0432\u0430 \u0432\u0438\u0434\u0430 \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u041b\u0443\u043d\u0430: \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0438 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u044b\u0439, \u0432 \u0447\u0435\u043c \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u044f \u0441\u043a\u0430\u0436\u0443 \u0447\u0443\u0442\u044c \u043f\u043e\u0437\u0434\u043d\u0435\u0435.<\/p>\n<p>\u0418\u0442\u0430\u043a \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0446\u0438\u0444\u0440, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u0430\u0442\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043c\u044c\u044e\u043d\u0438\u0442\u0438 <a href=\"https:\/\/fpga-systems.ru\/\" rel=\"noopener noreferrer nofollow\">FPGA-Systems<\/a> : \u043f\u0435\u0440\u0432\u043e\u0435 \u0430\u043f\u0440\u0435\u043b\u044f 2017 \u0433\u043e\u0434\u0430, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0430\u0434\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u043f\u043e \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443 \u041b\u0443\u043d\u0430. \u0427\u0442\u043e \u043d\u0430\u043c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c?<\/p>\n<p><strong>\u041e\u0431\u044b\u0447\u043d\u044b\u0439 \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u041b\u0443\u043d\u0430<\/strong><\/p>\n<ol>\n<li>\n<p> \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0446\u0438\u0444\u0440 \u0432 \u043d\u0430\u0448\u0435\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 01042017. \u041f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0447\u0435\u0442\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0446\u0438\u0444\u0440, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e 8<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0446\u0438\u0444\u0440 \u0447\u0451\u0442\u043d\u043e\u0435, \u0442\u043e \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0446\u0438\u0444\u0440 \u0432 \u0447\u0435\u0442\u043d\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0434\u0435\u043b\u0430\u0435\u043c \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 \u0434\u0432\u0430 (\u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0446\u0438\u044f \u0446\u0438\u0444\u0440 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 1)<\/p>\n<p>1     2      3      4      5     6      7      8   &#8212;\u0438\u043d\u0434\u0435\u043a\u0441 <br \/>0\u00a0\u00a0   1\u00a0\u00a0\u00a0\u00a0\u00a0 0\u00a0\u00a0\u00a0\u00a0\u00a0 4\u00a0\u00a0\u00a0 \u00a0\u00a02\u00a0\u00a0 \u00a0\u00a00\u00a0\u00a0 \u00a0\u00a0\u00a01\u00a0\u00a0    7   &#8212;\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c<br \/>\u00a0\u00a0\u00a0\u00a0   1&#215;2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0  4&#215;2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a00x2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0    7&#215;2\u00a0 <br \/>0     2      0      8       2    0       1    14<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u043d\u0430 \u0432\u0442\u043e\u0440\u043e\u043c \u0448\u0430\u0433\u0435 \u0447\u0438\u0441\u043b\u043e \u043f\u043e\u0441\u043b\u0435 \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 2 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u043e\u043b\u044c\u0448\u0435 9, \u0442\u043e \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u043c \u0435\u0433\u043e \u043d\u0430 \u0441\u0443\u043c\u043c\u0443 \u0446\u0438\u0444\u0440 \u044d\u0442\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0438\u043b\u0438 \u0432\u044b\u0447\u0438\u0442\u0430\u0435\u043c 9<\/p>\n<p>0     2      0     8       2     0       1    1+4<br \/>0     2      0     8       2     0       1     5<\/p>\n<\/li>\n<li>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u043c \u0432\u0441\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430<br \/>0+2+0+8+2+0+1+5 = 18<\/p>\n<\/li>\n<li>\n<p>\u0414\u043e\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0434\u043e \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0432 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0434\u0435\u043b\u0438\u0442\u0441\u044f \u043d\u0430 10.<br \/>\u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 18, \u0437\u043d\u0430\u0447\u0438\u0442 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0435 \u043a\u0440\u0430\u0442\u043d\u043e\u0435 10 \u0431\u0443\u0434\u0435\u0442 20.<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u0447\u0438\u0442\u0430\u0435\u043c \u0438\u0437 20 \u043d\u0430\u0448\u0443 \u0441\u0443\u043c\u043c\u0443 18 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c 2. \u042d\u0442\u043e \u0438 \u0431\u0443\u0434\u0435\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0446\u0438\u0444\u0440\u0430 \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0439 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 01042017<\/p>\n<\/li>\n<\/ol>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u043a \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 01042017 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0443\u044e \u0446\u0438\u0444\u0440\u0443 2 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443 \u043f\u0440\u0438 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u043c \u0432\u0432\u043e\u0434\u0435 010420172<\/p>\n<p>\u0427\u0442\u043e \u0436\u0435 \u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0441\u043b\u0438 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0446\u0438\u0444\u0440 \u043d\u0435\u0447\u0451\u0442\u043d\u043e\u0435? \u0414\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u043d\u043e \u0434\u043b\u044f \u0446\u0438\u0444\u0440 \u0432 \u043d\u0435\u0447\u0435\u0442\u043d\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code>1    2   3    4    5 --\u0438\u043d\u0434\u0435\u043a\u0441 5    7   3    9    5 --\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c 5x2  7   3x2  9    5x2 10   7   6    9    10 1+0  7   6    9    1+0 1  + 7 + 6  + 9 +  1 = 24<\/code><\/pre>\n<p>\u0411\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0435 \u0431\u043e\u043b\u044c\u0448\u0435\u0435 \u043a\u0440\u0430\u0442\u043d\u043e\u0435 10 \u043a 24 \u044d\u0442\u043e 30<br \/>30 &#8212; 24 = 6 &#8212; \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0446\u0438\u0444\u0440\u0430 \u0434\u043b\u044f 57395<br \/>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043c\u043e\u0436\u043d\u043e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/www.dcode.fr\/luhn-algorithm\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0435\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0443\u044e \u0446\u0438\u0444\u0440\u0443 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0432\u043e \u043c\u043d\u043e\u0433\u043e \u0442\u0430\u043a\u0436\u0435, \u043d\u043e \u0432 \u0440\u0430\u0441\u0447\u0451\u0442 \u043f\u043e\u043a\u0430 \u043d\u0435 \u0431\u0435\u0440\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0446\u0438\u0444\u0440\u0430<\/p>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430    <br \/>1     2      3      4      5     6      7      8           &#8212;\u0438\u043d\u0434\u0435\u043a\u0441 <br \/>0\u00a0\u00a0   1\u00a0\u00a0\u00a0\u00a0\u00a0 0\u00a0\u00a0\u00a0\u00a0\u00a0 4\u00a0\u00a0\u00a0 \u00a0\u00a02\u00a0\u00a0 \u00a0\u00a00\u00a0\u00a0 \u00a0\u00a0\u00a01\u00a0\u00a0    7      2   &#8212;\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u043e\u0439 \u0446\u0438\u0444\u0440\u043e\u0439 2<br \/>       1&#215;2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0  4&#215;2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a00x2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0     7&#215;2\u00a0 <br \/>0     2      0      8       2    0      1      14<br \/>0     2      0     8        2    0      1      1+4<br \/>0     2      0     8        2    0     1       5<br \/>0 +  2  +  0 +  8  +   2 +  0 +  1  +  5 = 18<br \/>\u041a \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0439 \u0441\u0443\u043c\u043c\u0435 \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0443\u044e \u0446\u0438\u0444\u0440\u0443 2<br \/>18 + 2 = 20 &#8212; \u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0447\u0438\u0441\u043b\u043e, \u043a\u0440\u0430\u0442\u043d\u043e\u0435 10, \u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432\u0435\u0440\u043d\u0430<\/p>\n<p>\u0412\u0441\u0435 \u0434\u043e \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e. \u0415\u0449\u0435 \u0440\u0430\u0437 \u043e\u0442\u043c\u0435\u0447\u0443, \u0447\u0442\u043e \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u041b\u0443\u043d\u0430 \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0438 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438 \u0438 \u043d\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u0435\u043d \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438.<\/p>\n<p><strong>\u0423\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u044b\u0439 \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u041b\u0443\u043d\u0430<\/strong><\/p>\n<p>\u0412 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f \u0441\u043f\u0440\u0430\u0432\u0430-\u043d\u0430\u043b\u0435\u0432\u043e, \u0442\u043e \u0435\u0441\u0442\u044c \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0446\u0438\u0444\u0440\u044b \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0447\u0435\u0440\u0435\u0437 \u043e\u0434\u043d\u0443. \u041f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0435 \u0431\u0435\u0440\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0446\u0438\u0444\u0440\u0430, \u0442\u043e\u043b\u044c\u043a\u043e \u0446\u0438\u0444\u0440\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0446\u0438\u0444\u0440\u0430 \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u0448\u0430\u0433\u0435 \u0434\u043b\u044f \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0439 \u0441\u0443\u043c\u043c\u044b.<\/p>\n<p>\u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0438\u0437 \u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0446\u0438\u0444\u0440 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c (\u0438\u0437 \u0447\u0435\u0442\u043d\u043e\u0433\u043e \u0438\u043b\u0438 \u043d\u0435\u0447\u0435\u0442\u043d\u043e\u0433\u043e), \u043d\u043e \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c\/\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0446\u0438\u0444\u0440\u044b. \u041d\u043e \u0432 \u0446\u0435\u043b\u043e\u043c \u044d\u0442\u043e \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439.<\/p>\n<h2>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438<\/h2>\n<p>\u0414\u0435\u043b\u0430\u0442\u044c \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u043e\u0440 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0435\u0439 \u043f\u043e \u043e\u0431\u044b\u0447\u043d\u043e\u043c\u0443 \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443 \u041b\u0443\u043d\u0430, \u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0430 \u0432\u0445\u043e\u0434 \u043d\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u043e\u0439 \u0446\u0438\u0444\u0440\u043e\u0439, \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 VHDL. \u041f\u0440\u0438\u0432\u0435\u0434\u0443 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<p>PS: \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430 Verilog\/SystemVerilog \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e \u0432\u0430\u043c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u0433\u043e \u0437\u0430\u0434\u0430\u043d\u0438\u044f.<\/p>\n<p><strong>\u0412\u0430\u0440\u0438\u0430\u043d\u0442 1<\/strong><\/p>\n<p>\u00a0\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0432\u0438\u0434 \u0438 \u043f\u043e\u0440\u0442\u044b \u0432\u0432\u043e\u0434\u0430 \u0432\u044b\u0432\u043e\u0434\u0430 \u043d\u0430\u0448\u0435\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f. \u041c\u043e\u0434\u0443\u043b\u044c \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0446\u0438\u0444\u0440\u044b \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043d\u0430 \u043b\u0435\u0442\u0443, \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0446\u0438\u0444\u0440\u044b \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e. \u041e\u0434\u043d\u0443 \u0437\u0430 \u043e\u0434\u043d\u043e\u0439 \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u043f\u0435\u0440\u0432\u043e\u0439.<\/p>\n<figure class=\"full-width\"><\/figure>\n<pre><code>\u0412\u0445\u043e\u0434\u044b iclk   - \u0412\u0445\u043e\u0434\u043d\u043e\u0439 \u043f\u043e\u0440\u0442 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b ireset - \u0412\u0445\u043e\u0434 \u0441\u0431\u0440\u043e\u0441\u0430 istart - \u041f\u043e\u0440\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043e\u043d \u0436\u0435 \u043f\u043e\u0441\u043b\u0443\u0436\u0438\u0442 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 idigit[3:0]  - \u0412\u0445\u043e\u0434\u043d\u043e\u0439 \u043f\u043e\u0440\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u0439 \u0446\u0438\u0444\u0440\u044b. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0446\u0438\u0444\u0440\u044b \u043f\u043e\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0442\u043e \u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442 0 \u0434\u043e 9, \u0447\u0442\u043e \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e 4-\u043c \u0440\u0430\u0437\u0440\u044f\u0434\u0430\u043c idigit_valid - \u0421\u0438\u0433\u043d\u0430\u043b \u0432\u0430\u043b\u0438\u0434\u043d\u043e\u0441\u0442\u0438. \u041f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u0430\u0443\u0437\u044b \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 inum_of_digits[10:0] - \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0446\u0438\u0444\u0440 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c. \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0446\u0438\u0444\u0440 \u0431\u0435\u0437 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u2013 \u044d\u0442\u043e \u0432\u0430\u0436\u043d\u043e!  \u0412\u044b\u0445\u043e\u0434\u044b odone    - \u041f\u043e\u0440\u0442 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0440\u0430\u0441\u0447\u0435\u0442\u043e\u0432 ocorrect - \u041f\u043e\u0440\u0442 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 oerror   - \u041f\u043e\u0440\u0442 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 oready   - \u041f\u043e\u0440\u0442 \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438 \u043a \u043f\u0440\u0438\u0435\u043c\u0443 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0446\u0438\u0444\u0440\u044b \u0438\u043b\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438  <\/code><\/pre>\n<p>\u0411\u044b\u0441\u0442\u0440\u0435\u043d\u044c\u043a\u043e \u043e\u043f\u0438\u0448\u0435\u043c \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u043f\u043e\u0440\u0442\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438<\/p>\n<pre><code class=\"vhdl\">library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use ieee.std_logic_unsigned.all;  entity luhn_checker_v1 is     port (         iclk   : in std_logic;         ireset : in std_logic;         inum_of_digits: std_logic_vector(10 downto 0); --how much digits in checking number !!!whitout control digit         istart : in std_logic; --set pulse, like write enable, for current checking sequence                                --used as start signal         idigit : in std_logic_vector(3 downto 0); --current digit in sequence         idigit_valid: in std_logic; --valid signal for new digit                  oready  : out std_logic; --ready to receive next digit         ocorrect: out std_logic; --checked sequence is correct ('1' - correct)         oerror  : out std_logic; --checked sequence is incorrect ('1' - incorrect)         odone   : out std_logic  --complete computation     ); end luhn_checker_v1;<\/code><\/pre>\n<p>\u0427\u0442\u043e\u0431\u044b \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043c\u044b \u043f\u043e\u0439\u0434\u0435\u043c \u043d\u0430 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0445\u0438\u0442\u0440\u043e\u0441\u0442\u044c. \u041a\u0430\u043a \u0432\u044b \u043f\u043e\u043c\u043d\u0438\u0442\u0435, \u0435\u0441\u043b\u0438 \u0447\u0438\u0441\u043b\u043e \u0431\u043e\u043b\u044c\u0448\u0435 9, \u043f\u043e\u0441\u043b\u0435 \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 2, \u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u043b\u043e\u0436\u0438\u0442\u044c \u0434\u0432\u0435 \u0446\u0438\u0444\u0440\u044b \u044d\u0442\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430. \u041d\u043e \u043c\u044b \u0437\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u0447\u0438\u0441\u043b\u043e \u0431\u0443\u0434\u0435\u0442 \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 10 \u2013 18, \u044d\u0442\u043e \u043e\u0442  5&#215;2 \u0434\u043e 9&#215;2. \u0414\u0440\u0443\u0433\u0438\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043d\u0435\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u043c \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 2, \u043f\u0440\u043e\u0441\u0443\u043c\u043c\u0438\u0440\u0443\u0435\u043c \u0446\u0438\u0444\u0440\u044b \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u043c\u0430\u0441\u0441\u0438\u0432, \u0442\u043e \u0435\u0441\u0442\u044c \u0432 \u043f\u0430\u043c\u044f\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430 \u043c\u0430\u043b\u044b\u043c \u0447\u0438\u0441\u043b\u043e\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439, \u0442\u043e \u0435\u0441\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043d\u0430 LUT\u0430\u0445.<\/p>\n<pre><code class=\"vhdl\">type rom is array (0 to 9) of natural range 0 to 9;     --Luhn algorith requires double the value of digits, if result more then 9 => add digits     --example      -- 2   3   4   5   6     -- 2x2 3x2 4x2 5x2 6x2     -- 4   6   8   10  12     -- 4   6   8   1+0 1+2     -- 4   6   8   1   3  -> this result     -- To skip arithmetic computation we place result in table,     --0x2 = 0                   --1x2 = 2                   --2x2 = 4                   --3x2 = 6                   --4x2 = 8                   --5x2 = 10 => 1 + 0 = 1     --6x2 = 12 => 1 + 2 = 3     --7x2 = 14 => 1 + 4 = 5     --8x2 = 16 => 1 + 6 = 7     --9x2 = 18 => 1 + 8 = 9     constant luhn_rom: rom := (0, 2, 4, 6, 8, 1, 3, 5, 7, 9 );<\/code><\/pre>\n<p>\u00a0\u0414\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0443\u0434\u0432\u043e\u0435\u043d\u043d\u044b\u0445 \u0438 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e tmp. \u042f \u043f\u043e\u0437\u0436\u0435 \u043f\u043e\u044f\u0441\u043d\u044e, \u043f\u043e\u0447\u0435\u043c\u0443 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0439 \u0441\u0443\u043c\u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 18.<\/p>\n<pre><code class=\"vhdl\">--save temporaly result of sums signal tmp: natural range 0 to 31;<\/code><\/pre>\n<p>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043d\u043e\u043c\u0435\u0440\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0446\u0438\u0444\u0440\u044b \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 <\/p>\n<pre><code class=\"vhdl\">signal k: natural range 0 to 2**inum_of_digits'left - 1 := 0; --current index of checking digit<\/code><\/pre>\n<p>\u00a0\u0418 \u0432 \u043a\u043e\u043d\u0446\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438 \u0431\u0443\u0434\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0432\u0441\u0435\u043c\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f\u043c\u0438.<\/p>\n<pre><code class=\"vhdl\">--main manager  type state_type is (s0, s1, s2, s3, s4, s5, s6); signal state : state_type := s0;<\/code><\/pre>\n<p>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0437\u0430\u043a\u043e\u043d\u0447\u0435\u043d\u0430, \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439<\/p>\n<p>\u041d\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u0441\u0435\u0433\u043e \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430. \u041f\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0443 \u0441\u0431\u0440\u043e\u0441\u0430 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u0432\u0441\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0432 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u0417\u0430\u0442\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0441\u0430\u043c \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442:<\/p>\n<p>\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 s0 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043d\u0430\u0447\u0430\u043b\u0430<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-350328","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/350328","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=350328"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/350328\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=350328"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=350328"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=350328"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}