{"id":443397,"date":"2024-12-26T08:15:50","date_gmt":"2024-12-26T08:15:50","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=443397"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=443397","title":{"rendered":"<span>\u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0441\u0438\u043d\u0443\u0441\u0430 \u0438 \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0432\u043e\u043b\u043d\u043e\u0432\u044b\u0439 \u0440\u0430\u0434\u0438\u043e\u043f\u0435\u0440\u0435\u0434\u0430\u0442\u0447\u0438\u043a<\/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>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043e\u043f\u0438\u0441\u0430\u043d \u0441\u043f\u043e\u0441\u043e\u0431 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0438\u043d\u0443\u0441\u043e\u0438\u0434\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043d\u0430 \u041f\u041b\u0418\u0421 \u0447\u0435\u0440\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 ROM \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0434\u043b\u044f \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0432\u043e\u043b\u043d\u043e\u0432\u043e\u0433\u043e \u0440\u0430\u0434\u0438\u043e\u043f\u0435\u0440\u0435\u0434\u0430\u0442\u0447\u0438\u043a\u0430 RTTY (Radioteletype. &#8212; \u043f\u0440\u0438\u043c. \u0420\u0435\u0434.). \u0411\u0443\u0434\u0435\u0442 \u043e\u043f\u0438\u0441\u0430\u043d \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0438\u0437 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0432 \u041f\u041b\u0418\u0421 \u0447\u0435\u0440\u0435\u0437 SPI (\u0430\u043d\u0433\u043b.\u00a0<em>Serial Peripheral Interface, SPI bus<\/em>\u00a0\u2014 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0439\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u0448\u0438\u043d\u0430 SPI &#8212; \u043f\u0440\u0438\u043c. \u0420\u0435\u0434.). \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0430 LilyGO T-FPGA, \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u041f\u041b\u0418\u0421 GW1NSR-LV4CQN48PC6\/I5  \u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 ESP32-S3, \u0426\u0410\u041f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 DAC904, ide GOWIN FPGA Designer, Visual Studio Code \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c PlatformIO \u0438 matlab 2020.<\/p>\n<blockquote>\n<p><em>\u0414\u0438\u0441\u043a\u043b\u0435\u0439\u043c\u0435\u0440<br \/>\u0422\u0443\u0442\u043e\u0440\u0438\u0430\u043b \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0434\u0438\u043e\u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0448\u0430\u043b\u0438\u0442\u044c, \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 \u043d\u043e\u0440\u043c\u0430\u0442\u0438\u0432\u043d\u043e-\u043f\u0440\u0430\u0432\u043e\u0432\u043e\u0439 \u0431\u0430\u0437\u043e\u0439 \u0433\u043e\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u0430, \u043d\u0430 \u0442\u0435\u0440\u0440\u0438\u0442\u043e\u0440\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0448\u0430\u043b\u043e\u0441\u0442\u044c, \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 \u0440\u0430\u0434\u0438\u043e\u043f\u043e\u0437\u044b\u0432\u043d\u043e\u0439 \u0438 \u0438\u0437\u0431\u0430\u0432\u044c\u0442\u0435\u0441\u044c \u043e\u0442 \u043f\u0430\u0440\u0430\u0437\u0438\u0442\u043d\u044b\u0445 \u0433\u0430\u0440\u043c\u043e\u043d\u0438\u043a.<\/em><\/p>\n<p><em>\u0417\u0434\u0435\u0441\u044c \u0431\u0443\u0434\u0443\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043e\u043f\u044b\u0442 \u0437\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u043f\u0430\u0440\u0443 \u0434\u043d\u0435\u0439 \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432 \u0441 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u043c\u0438 \u043f\u043b\u0430\u0442\u0430\u043c\u0438. \u042d\u0442\u043e \u043d\u0435 \u043e\u043f\u044b\u0442 \u0438 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u043f\u043e\u0434 \u041f\u041b\u0418\u0421 \u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b. \u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c, \u044d\u0442\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u044e\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0445\u043e\u0440\u043e\u0448\u043e \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u0432 \u0442\u0435\u043c\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u0442\u044b \u0438 \u0434\u0430\u0434\u0443\u0442 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u0438\u0432\u043d\u0443\u044e \u043a\u0440\u0438\u0442\u0438\u043a\u0443.<\/em>  <\/p>\n<\/blockquote>\n<h2>\u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0441\u0438\u043d\u0443\u0441\u0430<\/h2>\n<p>\u041f\u0440\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 <a href=\"https:\/\/programmersought.com\/article\/97073878178\/\" rel=\"noopener noreferrer nofollow\">\u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438<\/a> (<em>\u0441\u0441\u044b\u043b\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 \u0440\u0430\u0437. \u0421 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 \u043d\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0430 \u0441 \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u0433\u043e \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f. &#8212; \u043f\u0440\u0438\u043c. \u0420\u0435\u0434.<\/em>). \u0411\u043e\u043b\u044c\u0448\u0443\u044e \u043f\u043e\u043c\u043e\u0449\u044c \u0432 \u043e\u0441\u0432\u043e\u0435\u043d\u0438\u0438 \u043f\u043b\u0438\u0441 GOWIN \u043c\u043e\u0436\u0435\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c <a href=\"https:\/\/marsohod.org\/\" rel=\"noopener noreferrer nofollow\">\u0431\u043b\u043e\u0433 \u041c\u0430\u0440\u0441\u043e\u0445\u043e\u0434<\/a>. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0434\u043b\u044f \u041f\u041b\u0418\u0421 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/github.com\/Xinyuan-LilyGO\/T-FPGA\/tree\/main\/example\/FPGA\/led\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u0438\u043c\u0435\u0440<\/a> \u0434\u043b\u044f T-FPGA. \u041d\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 Constraints \u0444\u0430\u0439\u043b. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0441\u0438\u0433\u043d\u0430\u043b clk \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d \u043a \u043a\u043d\u043e\u043f\u043a\u0435 (46 \u043d\u043e\u043c\u0435\u0440 \u043d\u0430 \u0441\u0445\u0435\u043c\u0435). \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043e\u0442 \u043a\u0432\u0430\u0440\u0446\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u043d\u043e\u043c\u0435\u0440\u0443 45. \u0412\u0441\u0451 \u044d\u0442\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u043d\u0430 <a href=\"https:\/\/github.com\/Xinyuan-LilyGO\/T-FPGA\/tree\/main\/schematic\" rel=\"noopener noreferrer nofollow\">\u0441\u0445\u0435\u043c\u0430\u0445<\/a>:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0ea\/86c\/73f\/0ea86c73f291a499959cf04b04595736.png\" alt=\"\u0420\u0438\u0441 1. \u0421\u0445\u0435\u043c\u0430 \u0434\u043b\u044f T-FPGA\" title=\"\u0420\u0438\u0441 1. \u0421\u0445\u0435\u043c\u0430 \u0434\u043b\u044f T-FPGA\" width=\"388\" height=\"308\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0ea\/86c\/73f\/0ea86c73f291a499959cf04b04595736.png\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441 1. \u0421\u0445\u0435\u043c\u0430 \u0434\u043b\u044f T-FPGA<\/figcaption><\/div>\n<\/figure>\n<pre><code class=\"cpp\">\/\/Copyright (C)2014-2021 Gowin Semiconductor Corporation. \/\/All rights reserved.  \/\/File Title: Physical Constraints file \/\/GOWIN Version: 1.9.8.01 \/\/Part Number: GW1NSR-LV4CQN48PC6\/I5 \/\/Device: GW1NSR-4C \/\/Created Time: Tue 02 21 14:47:43 2023  IO_LOC \"clk\" 45; \/\/ \u044d\u0442\u043e \u0432\u044b\u0445\u043e\u0434 \u043a\u0432\u0430\u0440\u0446\u0430 27 \u041c\u0413\u0446 IO_PORT \"clk\" IO_TYPE=LVCMOS33 PULL_MODE=UP;<\/code><\/pre>\n<p>\u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f ROM \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043c\u0435\u043d\u044e tools -&gt; IP Core Generator \u0438\u043b\u0438 \u043d\u0430\u0436\u0430\u0442\u044c \u0438\u043a\u043e\u043d\u043a\u0443 \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432. \u0414\u0430\u043b\u044c\u0448\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u044c Memory -&gt; Block Memory -&gt; pROM.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ca0\/e38\/7f1\/ca0e387f1277e99499e6c92ac7ab3c03.png\" alt=\"\u0420\u0438\u0441. 2. IP Core Generetor\" title=\"\u0420\u0438\u0441. 2. IP Core Generetor\" width=\"1920\" height=\"1080\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ca0\/e38\/7f1\/ca0e387f1277e99499e6c92ac7ab3c03.png\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441. 2. IP Core Generetor<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u043e \u0434\u0432\u043e\u0439\u043d\u043e\u043c\u0443 \u0449\u0435\u043b\u0447\u043a\u0443 \u043f\u043e pROM \u043e\u0442\u043a\u0440\u043e\u0435\u0442\u0441\u044f \u0434\u0438\u0430\u043b\u043e\u0433\u043e\u0432\u043e\u0435 \u043e\u043a\u043d\u043e, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b. \u0412 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b 4096 12-\u0431\u0438\u0442\u043d\u044b\u0445 \u043e\u0442\u0441\u0447\u0451\u0442\u043e\u0432. <\/p>\n<blockquote>\n<p>\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0426\u0410\u041f DAC904 14-\u0431\u0438\u0442\u043d\u044b\u0439 \u0438 \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c 14-\u0431\u0438\u0442\u043d\u044b\u0435 \u043e\u0442\u0441\u0447\u0451\u0442\u044b, \u043d\u043e \u043b\u0435\u043d\u044c.<\/p>\n<\/blockquote>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f20\/53f\/419\/f2053f4190b5db692dd894b5151aa504.png\" alt=\"\u0420\u0438\u0441. 3. \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 ROM \u043f\u0430\u043c\u044f\u0442\u0438.\" title=\"\u0420\u0438\u0441. 3. \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 ROM \u043f\u0430\u043c\u044f\u0442\u0438.\" width=\"968\" height=\"752\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f20\/53f\/419\/f2053f4190b5db692dd894b5151aa504.png\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441. 3. \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 ROM \u043f\u0430\u043c\u044f\u0442\u0438.<\/figcaption><\/div>\n<\/figure>\n<h2>\u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0438\u043d\u0443\u0441\u043e\u0438\u0434\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0432 matlab<\/h2>\n<p>\u0421\u0442\u043e\u0438\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u043d\u0430 Memory Initialization File. \u041d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0435\u043c\u0430\u043b\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c .mi \u0444\u0430\u0439\u043b. \u041f\u0440\u043e \u043d\u0435\u0433\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0432 7 \u0433\u043b\u0430\u0432\u0435 <a href=\"https:\/\/cdn.gowinsemi.com.cn\/UG285E.pdf\" rel=\"noopener noreferrer nofollow\">UG285E<\/a>. \u0417\u0434\u0435\u0441\u044c \u0436\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0439\u0442\u0438 \u043f\u043e \u043f\u0443\u0442\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0444\u0430\u0439\u043b\u0430 \u0432 matlab, \u0430 \u043f\u043e\u0442\u043e\u043c \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u0435\u0433\u043e \u043a \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u043c\u0443 \u0432\u0438\u0434\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043d\u0430 python.<\/p>\n<p>\u0412 matlab \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"matlab\">clear clc n = 0:4095 ; yn = sin(2*pi\/4096*n) ;   yn = round((yn+1)*2047);    plot(n,yn);   fid = fopen('C:\\work\\rom_test_3.coe','wt'); fprintf(fid,'#File_format=Hex,\\n#Address_depth=4096,\\n#Data_width=12,');   for i = 1 : 4096     if mod(i-1,1) == 0          fprintf(fid,'\\n');     end     fprintf(fid,'%03X,',yn(i)); end<\/code><\/pre>\n<p>\u041f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u044d\u0442\u043e\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d \u0433\u0440\u0430\u0444\u0438\u043a \u0438 \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0444\u0430\u0439\u043b \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 .coe. <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0bb\/2e0\/b47\/0bb2e0b47a9fb2f272e5cf6442a4ee2c.png\" alt=\"\u0420\u0438\u0441. 4. \u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 matlab \u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0433\u0440\u0430\u0444\u0438\u043a \u0441\u0438\u043d\u0443\u0441\u0430\" title=\"\u0420\u0438\u0441. 4. \u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 matlab \u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0433\u0440\u0430\u0444\u0438\u043a \u0441\u0438\u043d\u0443\u0441\u0430\" width=\"2556\" height=\"1440\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0bb\/2e0\/b47\/0bb2e0b47a9fb2f272e5cf6442a4ee2c.png\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441. 4. \u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 matlab \u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0433\u0440\u0430\u0444\u0438\u043a \u0441\u0438\u043d\u0443\u0441\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u0414\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u0430 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 Memory Initialization File \u0434\u043b\u044f pROM GOWIN \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u0437\u0430\u043f\u044f\u0442\u044b\u0445 \u0432 \u043a\u043e\u043d\u0446\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u043c \u043d\u0430 python:<\/p>\n<pre><code class=\"python\">import os import sys  res = ''  if len(sys.argv)&lt;2 : print(\"Not enough arguments, need file with data name param\") filename = sys.argv[1] print(filename)  def read_txt_file(filename):     output = \"\"  # \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f     with open(filename, 'r') as f:         for line in f:             output = output + line.replace(',\\n', '\\n') # strip() # rstrip(\",\\n\")     f.close()     return output      def write_txt_file(input):     with open('1.mi', 'w') as file:         file.write(input)  # \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u044c \u0444\u0430\u0439\u043b\u0430      res = read_txt_file(filename) write_txt_file(res)<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0441\u043a\u0440\u0438\u043f\u0442 \u043d\u0430 python \u043b\u0435\u0436\u0438\u0442 \u0432 \u0442\u043e\u043c \u0436\u0435 \u0441\u0430\u043c\u043e\u043c \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435, \u0447\u0442\u043e \u0438 \u0444\u0430\u0439\u043b \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432    \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432 matlab \u0438 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c <code>C:\\Users\\s.novikov\\Documents\\work\\271124&gt;python3 probe1.py rom_test_3.coe<\/code> , \u0442\u043e \u0432 \u0440\u0430\u0431\u043e\u0447\u0435\u043c \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0444\u0430\u0439\u043b 1.mi. \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0437\u0430\u043f\u044f\u0442\u0443\u044e \u0432 \u0441\u0430\u043c\u043e\u043c \u043a\u043e\u043d\u0446\u0435 \u0444\u0430\u0439\u043b\u0430:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/45b\/61d\/589\/45b61d58907330b4330b9d2a68d9aae5.png\" alt=\"\u0420\u0438\u0441. 5. \u041f\u0440\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u0437\u0430\u043f\u044f\u0442\u044b\u0445 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0437\u0430\u043f\u044f\u0442\u0443\u044e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e.\" title=\"\u0420\u0438\u0441. 5. \u041f\u0440\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u0437\u0430\u043f\u044f\u0442\u044b\u0445 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0437\u0430\u043f\u044f\u0442\u0443\u044e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e.\" width=\"1016\" height=\"764\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/45b\/61d\/589\/45b61d58907330b4330b9d2a68d9aae5.png\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441. 5. \u041f\u0440\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u0437\u0430\u043f\u044f\u0442\u044b\u0445 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0437\u0430\u043f\u044f\u0442\u0443\u044e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e.<\/figcaption><\/div>\n<\/figure>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0444\u0430\u0439\u043b \u0433\u043e\u0442\u043e\u0432 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 Memory Initialization File \u0432 \u0434\u0438\u0430\u043b\u043e\u0433\u043e\u0432\u043e\u043c \u043e\u043a\u043d\u0435 IP Customization pROM ide GOWIN FPGA Designer. GOWIN FPGA Designer \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0432 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043f\u0440\u043e\u0435\u043a\u0442. \u041e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u0433\u043b\u0430\u0441\u0438\u0442\u044c\u0441\u044f:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/93c\/535\/734\/93c535734cde733822276f6a0e32e3c7.png\" alt=\"\u0420\u0438\u0441. 6. \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e IP \u0432 \u043f\u0440\u043e\u0435\u043a\u0442.\" title=\"\u0420\u0438\u0441. 6. \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e IP \u0432 \u043f\u0440\u043e\u0435\u043a\u0442.\" width=\"968\" height=\"760\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/93c\/535\/734\/93c535734cde733822276f6a0e32e3c7.png\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441. 6. \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e IP \u0432 \u043f\u0440\u043e\u0435\u043a\u0442.<\/figcaption><\/div>\n<\/figure>\n<p>\u0412\u0435\u0440\u043d\u0451\u043c\u0441\u044f \u043a \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0443 \u0441\u0438\u043d\u0443\u0441\u0430. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0435\u0449\u0451 \u043e\u0434\u0438\u043d IP:<\/p>\n<pre><code class=\"cpp\">module dds_addr (clk, rst_n, addr_out, strobe, FWORD);     input clk, rst_n;          \/\/ Resetting the system clock     output [11: 0] addr_out;    \/\/ The output address corresponding to the data in the ROM     output strobe;     parameter N = 32;     parameter PWORD = 2048;     \/\/ Phase control word (x\/360) * 256     input [31:0] FWORD; \/\/    parameter FWORD = 159072862;  \/\/ \u0441\u043b\u043e\u0432\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 F_out = B * (F_clk \/ 2 ** 32), fword = B 5KHZ \/\/ 858994     reg [N-1: 0] addr;         \/\/ 32-bit battery          reg strobe_r;     always @ (posedge clk or negedge rst_n)     begin        if (!rst_n)            begin               addr &lt;= 0;              end       else           begin               \/\/Each word size outputs an address, if the word control frequency is 2, then the output of the address counter is 0, 2, 4...               addr &lt;= addr + FWORD;               if (addr[N-1:N-12] + PWORD == 12'hc00) begin                   strobe_r &lt;= 1'b1;               end               else begin                   strobe_r &lt;= 1'b0;               end           end          end      \/\/Assign the top eight bits of the battery address to the output address (ROM address     assign addr_out = addr[N-1:N-12] + PWORD;      assign strobe = strobe_r; endmodule<\/code><\/pre>\n<p>\u041e\u0442 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0438\u0437 <a href=\"https:\/\/programmersought.com\/article\/97073878178\/\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u0430\u0442\u044c\u0438<\/a> (<em>\u0441\u0441\u044b\u043b\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 \u0440\u0430\u0437. \u0421 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 \u043d\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0430 \u0441 \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u0433\u043e \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f. &#8212; \u043f\u0440\u0438\u043c. \u0420\u0435\u0434.<\/em>) \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u043c\u0435\u043d\u043e\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 FWORD \u043d\u0430 \u0432\u0445\u043e\u0434\u043d\u043e\u0439 32-\u0431\u0438\u0442\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b FWORD. \u042d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043c\u0435\u043d\u044f\u0442\u044c \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0432\u043e\u043b\u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u0447\u0438\u043a\u0430. \u0422\u0435\u043f\u0435\u0440\u044c \u044d\u0442\u0438 \u0434\u0432\u0430 IP \u043c\u043e\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432 \u043c\u043e\u0434\u0443\u043b\u044c \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0438\u043d\u0443\u0441\u043e\u0438\u0434\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430:<\/p>\n<pre><code class=\"cpp\">module top(     input          clk,     input   rst,     output [11: 0] sin,     output clk_o        \/\/ \u044d\u0442\u043e \u0432\u044b\u0445\u043e\u0434 \u0434\u043b\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0426\u0410\u041f );  reg [31:0] fword; wire [11: 0] addr_out; \/\/ 12-\u0431\u0438\u0442\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0434\u0430\u043d\u043d\u044b\u043c \u0432 \u041f\u0417\u0423 wire [11: 0] sin_out;  \/\/ --------------Phase-based  module------------------------    dds_addr dds_addr_inst (     .clk(clk),           \/\/ input wire clk     .rst_n(1'b1),        \/\/ input wire rst_n     .addr_out(addr_out), \/\/ output wire [7 : 0] addr_out     .strobe(),     .FWORD(397682157) );   \/\/----------------------------------------------------------  \/\/ Waveform Data Module        Gowin_pROM rom_inst (     .dout(sin),   \/\/output [11:0] dout     .clk(clk),    \/\/input clk     .oce(),       \/\/input oce     .ce(1'b1),    \/\/input ce     .reset(1'b0), \/\/input reset     .ad(addr_out) \/\/input [11:0] ad );  \/\/ assign clk_o = clk; \u044d\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0430\u0441\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0426\u0410\u041f \u043a T-FPGA  endmodule<\/code><\/pre>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b, \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f Gowin Analyzer Oscilloscope. \u042d\u0442\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0432 ide \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0432\u044b\u0431\u043e\u0440\u043e\u043a \u0438 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u043e\u0441\u0446\u0438\u043b\u043b\u043e\u0433\u0440\u0430\u043c\u043c \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u043a\u0430\u043a SignalTap \u0443 Altera \u0438\u043b\u0438 ChipScope \u0443 Xilinx. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u0440\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043d\u0430 <a href=\"https:\/\/marsohod.org\/projects\/marsohod3gw-prj\/442-gowinao\" rel=\"noopener noreferrer nofollow\">Marsohod<\/a>. \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0435 \u0448\u0430\u0433\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u043e <a href=\"https:\/\/marsohod.org\/projects\/marsohod3gw-prj\/442-gowinao\" rel=\"noopener noreferrer nofollow\">\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 Gowin Analyzer Osciloscope \u0432 FPGA \u043f\u0440\u043e\u0435\u043a\u0442\u0435<\/a> \u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u044d\u0442\u043e \u0432 Gtkwave \u043a\u0430\u043a \u0432 \u044d\u0442\u043e\u0439 <a href=\"https:\/\/marsohod.org\/projects\/marsohod3gw-prj\/447-cordic-nco\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u0430\u0442\u044c\u0435<\/a>, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0442\u0430\u043a\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d7c\/9d1\/f05\/d7c9d1f0519bf8873b79de67f0ff8953.png\" alt=\"\u0420\u0438\u0441. 7. \u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0432 Gtkwave\" title=\"\u0420\u0438\u0441. 7. \u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0432 Gtkwave\" width=\"2552\" height=\"1440\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d7c\/9d1\/f05\/d7c9d1f0519bf8873b79de67f0ff8953.png\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441. 7. \u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0432 Gtkwave<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u0441\u0438\u0433\u043d\u0430\u043b \u0441 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 2500 \u041a\u0413\u0446. \u0415\u0441\u043b\u0438 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0444\u043e\u0440\u043c\u0443\u043b\u043e\u0439 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0435 8 \u0432 \u043c\u043e\u0434\u0443\u043b\u0435 dds_addr <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"Fout = B * (Fclk \/ 2**32)\" alt=\"Fout = B * (Fclk \/ 2**32)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6fe\/431\/2bb\/6fe4312bbc082d51ac556f255f85e755.svg\" width=\"220\" height=\"22\"\/>, \u0438 \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 FWORD = 397682157, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f, \u0447\u0442\u043e F_out = 2500000 \u0413\u0446. \u0427\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0431\u0443\u0434\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430, \u0442\u0435\u043c \u0431\u0435\u0437\u043e\u0431\u0440\u0430\u0437\u043d\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432\u044b\u0431\u0440\u0430\u043d\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0441\u0435\u0433\u043e 27 \u041c\u0413\u0446. \u042d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u043e \u0432\u0438\u0434\u043d\u043e, \u0435\u0441\u043b\u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u0438 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0441\u0438\u0433\u043d\u0430\u043b. <\/p>\n<h2>\u041f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0439 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442. \u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043d\u0430 \u0426\u0410\u041f<\/h2>\n<p>\u0414\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432 \u0431\u044b\u043b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d \u0426\u0410\u041f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 DAC904. \u0427\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043f\u0440\u043e\u0435\u043a\u0442, \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0445\u043e\u0434 \u0434\u043b\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0426\u0410\u041f \u0438 \u0440\u0430\u0441\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c assign \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u044b\u0445\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043a \u0432\u0445\u043e\u0434\u043d\u043e\u043c\u0443 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u043c\u0443 \u0441\u0438\u0433\u043d\u0430\u043b\u0443. (<em>\u0426\u0410\u041f 14-\u0431\u0438\u0442\u043d\u044b\u0439, \u0430 \u0441\u0438\u0433\u043d\u0430\u043b \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f 12-\u0431\u0438\u0442\u043d\u044b\u0439, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u043c\u043b\u0430\u0434\u0448\u0438\u0435 \u0431\u0438\u0442\u044b. &#8212; \u043f\u0440\u0438\u043c. \u0410\u0432\u0442.<\/em>). \u0412 \u0444\u0430\u0439\u043b\u0435 constraints \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code class=\"cpp\">\/\/Copyright (C)2014-2021 Gowin Semiconductor Corporation. \/\/All rights reserved.  \/\/File Title: Physical Constraints file \/\/GOWIN Version: 1.9.8.01 \/\/Part Number: GW1NSR-LV4CQN48PC6\/I5 \/\/Device: GW1NSR-4C \/\/Created Time: Tue 02 21 14:47:43 2023  IO_LOC \"clk\" 45; IO_PORT \"clk\" IO_TYPE=LVCMOS33 PULL_MODE=UP;  IO_LOC \"clk_o\" 29; \/\/ 23 IO_PORT \"clk_o\" IO_TYPE=LVCMOS33 PULL_MODE=UP;  IO_LOC \"sin[0]\" 20; IO_PORT \"sin[0]\" IO_TYPE=LVCMOS33 PULL_MODE=NONE;  IO_LOC \"sin[1]\" 21; IO_PORT \"sin[1]\" IO_TYPE=LVCMOS33 PULL_MODE=NONE;  IO_LOC \"sin[2]\" 18; IO_PORT \"sin[2]\" IO_TYPE=LVCMOS33 PULL_MODE=NONE;  IO_LOC \"sin[3]\" 19; IO_PORT \"sin[3]\" IO_TYPE=LVCMOS33 PULL_MODE=NONE;  IO_LOC \"sin[4]\" 16; IO_PORT \"sin[4]\" IO_TYPE=LVCMOS33 PULL_MODE=NONE;  IO_LOC \"sin[5]\" 17; IO_PORT \"sin[5]\" IO_TYPE=LVCMOS33 PULL_MODE=NONE;  IO_LOC \"sin[6]\" 13; IO_PORT \"sin[6]\" IO_TYPE=LVCMOS33 PULL_MODE=NONE;  IO_LOC \"sin[7]\" 14; IO_PORT \"sin[7]\" IO_TYPE=LVCMOS33 PULL_MODE=NONE;  IO_LOC \"sin[8]\" 34; IO_PORT \"sin[8]\" IO_TYPE=LVCMOS33 PULL_MODE=NONE;  IO_LOC \"sin[9]\" 35; IO_PORT \"sin[9]\" IO_TYPE=LVCMOS33 PULL_MODE=NONE;  IO_LOC \"sin[10]\" 31; IO_PORT \"sin[10]\" IO_TYPE=LVCMOS33 PULL_MODE=NONE;  IO_LOC \"sin[11]\" 32; IO_PORT \"sin[11]\" IO_TYPE=LVCMOS33 PULL_MODE=NONE;<\/code><\/pre>\n<p>\u0412 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u0445 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0426\u0410\u041f \u0431\u044b\u043b\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0430 <a href=\"https:\/\/aliexpress.ru\/item\/1005005530113623.html?spm=a2g2w.orderdetail.0.0.f51a4aa6T5qngu&amp;sku_id=12000033430156346\" rel=\"noopener noreferrer nofollow\">\u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0430<\/a>. \u041e\u043d\u0430 \u0431\u044b\u043b\u0430 \u0437\u0430\u043f\u0438\u0442\u0430\u043d\u0430 \u043e\u0442 T-FPGA (\u043d\u0430 \u0444\u043e\u0442\u043e \u0441 \u043e\u0431\u043b\u043e\u0436\u043a\u0438 \u0432\u0438\u0434\u043d\u043e \u0434\u0432\u0430 \u0444\u0438\u043e\u043b\u0435\u0442\u043e\u0432\u044b\u0445 \u043f\u0440\u043e\u0432\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u043a \u0433\u0440\u0435\u0431\u0451\u043d\u043a\u0435 3.3V T-FPGA. &#8212; \u043f\u0440\u0438\u043c. \u0410\u0432\u0442.). <\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5b3\/3f9\/0b9\/5b33f90b9598fe8b9395ca6f95a785b7.png\" alt=\"\u0420\u0438\u0441. 8. \u041f\u0440\u043e\u0432\u043e\u0434\u0430 \u0434\u043b\u044f \u043f\u0438\u0442\u0430\u043d\u0438\u044f \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u044b \u0426\u0410\u041f.\" title=\"\u0420\u0438\u0441. 8. \u041f\u0440\u043e\u0432\u043e\u0434\u0430 \u0434\u043b\u044f \u043f\u0438\u0442\u0430\u043d\u0438\u044f \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u044b \u0426\u0410\u041f.\" width=\"340\" height=\"252\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5b3\/3f9\/0b9\/5b33f90b9598fe8b9395ca6f95a785b7.png\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441. 8. \u041f\u0440\u043e\u0432\u043e\u0434\u0430 \u0434\u043b\u044f \u043f\u0438\u0442\u0430\u043d\u0438\u044f \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u044b \u0426\u0410\u041f.<\/figcaption><\/div>\n<\/figure>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u0426\u0410\u041f \u043d\u0430 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0435 \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u0438\u0442\u0430\u043d\u0438\u044f \u0438 \u043b\u043e\u0433\u0438\u043a\u0438 3.3 \u0412. \u0427\u0442\u043e\u0431\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 I\/O \u043f\u0438\u043d\u0430\u0445 FPGA, \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f <a href=\"https:\/\/github.com\/Xinyuan-LilyGO\/T-FPGA\/blob\/main\/example\/ESP32-S3\/turn_on_power\/Factory.ino\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043c<\/a> LilyGO. <\/p>\n<blockquote>\n<p><em>\u041f\u0440\u0438 \u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 PlatformIO \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 &#171;arduino-esp32&#187; \u043d\u0430 2.0.6 \u0438\u043d\u0430\u0447\u0435 \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0435 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043b\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438<\/em><\/p>\n<p><code>platform_packages = framework-arduinoespressif32@https:\/\/github.com\/espressif\/arduino-esp32.git#2.0.6<\/code><\/p>\n<\/blockquote>\n<p>\u0414\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f \u043d\u0430 I\/O FPGA 3,3 \u0412 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0432 \u043c\u0435\u0442\u043e\u0434\u044b <code>setALDO3Voltage()<\/code> \u0438 <code>setALDO4Voltage()<\/code> \u043d\u0430 3300:<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#include \"Arduino.h\" #include \"Wire.h\" #include \"XPowersLib.h\" \/\/https:\/\/github.com\/lewisxhe\/XPowersLib #include \"pins_config.h\"  XPowersAXP2101 PMU;  void led_task(void *param);  void setup() {     Serial.begin(115200);     Serial.println(\"Hello T-FPGA-CORE\");     xTaskCreatePinnedToCore(led_task, \"led_task\", 1024, NULL, 1, NULL, 1);      bool result = PMU.begin(Wire, AXP2101_SLAVE_ADDRESS, PIN_IIC_SDA, PIN_IIC_SCL);      if (result == false) {         Serial.println(\"PMU is not online...\");         while (1)             delay(50);     }      PMU.setDC4Voltage(1200);   \/\/ Here is the FPGA core voltage. Careful review of the manual is required before modification.     PMU.setALDO1Voltage(3300); \/\/ BANK0 area voltage     PMU.setALDO2Voltage(3300); \/\/ BANK1 area voltage     PMU.setALDO3Voltage(3300); \/\/ BANK2 area voltage     PMU.setALDO4Voltage(3300); \/\/ BANK3 area voltage      PMU.enableALDO1();     PMU.enableALDO2();     PMU.enableALDO3();     PMU.enableALDO4(); }  void loop() {     PMU.setChargingLedMode(XPOWERS_CHG_LED_ON);     delay(20);     PMU.setChargingLedMode(XPOWERS_CHG_LED_OFF);     delay(random(300, 980)); }  void led_task(void *param) {     pinMode(PIN_LED, OUTPUT);     while (true) {         digitalWrite(PIN_LED, 1);         delay(20);         digitalWrite(PIN_LED, 0);         delay(random(300, 980));     } }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u042d\u0442\u0438\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c ESP32-S3 \u0434\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0426\u0410\u041f.<\/p>\n<p>\u0412\u044b\u0441\u043e\u043a\u043e\u0447\u0430\u0441\u0442\u043e\u0442\u043d\u044b\u0439 \u0432\u044b\u0445\u043e\u0434 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0433\u043e \u0426\u0410\u041f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f 50-\u043e\u043c\u043d\u044b\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0435\u0433\u043e \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u0449\u0443\u043f\u043e\u043c \u043e\u0441\u0446\u0438\u043b\u043b\u043e\u0433\u0440\u0430\u0444\u0430 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f. \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0449\u0443\u043f\u0430 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u0441\u0438\u0433\u043d\u0430\u043b:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0a0\/733\/aed\/0a0733aede8796dc4a2f01799aa00941.png\" alt=\"\u0420\u0438\u0441. 9. \u0421\u0438\u0433\u043d\u0430\u043b \u043d\u0430 \u0432\u044b\u0441\u043e\u043a\u043e\u0447\u0430\u0441\u0442\u043e\u0442\u043d\u043e\u043c \u0432\u044b\u0445\u043e\u0434\u0435 \u0426\u0410\u041f. FWORD =  397682157\" title=\"\u0420\u0438\u0441. 9. \u0421\u0438\u0433\u043d\u0430\u043b \u043d\u0430 \u0432\u044b\u0441\u043e\u043a\u043e\u0447\u0430\u0441\u0442\u043e\u0442\u043d\u043e\u043c \u0432\u044b\u0445\u043e\u0434\u0435 \u0426\u0410\u041f. FWORD =  397682157\" width=\"1024\" height=\"630\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0a0\/733\/aed\/0a0733aede8796dc4a2f01799aa00941.png\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441. 9. \u0421\u0438\u0433\u043d\u0430\u043b \u043d\u0430 \u0432\u044b\u0441\u043e\u043a\u043e\u0447\u0430\u0441\u0442\u043e\u0442\u043d\u043e\u043c \u0432\u044b\u0445\u043e\u0434\u0435 \u0426\u0410\u041f. FWORD =  397682157<\/figcaption><\/div>\n<\/figure>\n<p>\u0427\u0442\u043e\u0431\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u0432 \u043c\u043e\u0434\u0443\u043b\u044c dds_addr_inst (<em>\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d \u0432 \u043c\u043e\u0434\u0443\u043b\u0435 top. &#8212; \u043f\u0440\u0438\u043c. \u0410\u0432\u0442.<\/em>) \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u0430 5 \u041c\u0413\u0446. \u0418\u0437 \u0444\u043e\u0440\u043c\u0443\u043b\u044b <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"Fout = B * (Fclk \/ 2**32)\" alt=\"Fout = B * (Fclk \/ 2**32)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/82e\/6f4\/5ce\/82e6f45ce1bcfef6911e2572ead09792.svg\" width=\"220\" height=\"22\"\/>\u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0443\u044e <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"B = Fout * (2**32\/Fclk)\" alt=\"B = Fout * (2**32\/Fclk)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2cd\/fa3\/864\/2cdfa386442c6b8172a33dfbb0714ab9.svg\" width=\"220\" height=\"22\"\/>. 5000000 * 4294967296 \/ 27000000 =  795364314. \u0423\u043a\u0430\u0436\u0435\u043c \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u043e\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0435:<\/p>\n<pre><code class=\"cpp\">\/\/ ... \u044d\u0442\u043e \u043a\u0443\u0441\u043e\u043a \u043a\u043e\u0434\u0430 \u0438\u0437 top \u043c\u043e\u0434\u0443\u043b\u044f \/\/ --------------Phase-based  module------------------------    dds_addr dds_addr_inst (     .clk(clk),           \/\/ input wire clk     .rst_n(1'b1),        \/\/ input wire rst_n     .addr_out(addr_out), \/\/ output wire [7 : 0] addr_out     .strobe(),     .FWORD(795364314) );   \/\/---------------------------------------------------------- \/\/ ...<\/code><\/pre>\n<p>\u0418 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u0441\u0438\u0433\u043d\u0430\u043b:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/928\/49d\/15e\/92849d15e4ec319dd1ec6f20ca696f35.png\" alt=\"\u0420\u0438\u0441. 10. \u0421\u0438\u0433\u043d\u0430\u043b \u043d\u0430 \u0432\u044b\u0441\u043e\u043a\u043e\u0447\u0430\u0441\u0442\u043e\u0442\u043d\u043e\u043c \u0432\u044b\u0445\u043e\u0434\u0435 \u0426\u0410\u041f. FWORD =   795364314\" title=\"\u0420\u0438\u0441. 10. \u0421\u0438\u0433\u043d\u0430\u043b \u043d\u0430 \u0432\u044b\u0441\u043e\u043a\u043e\u0447\u0430\u0441\u0442\u043e\u0442\u043d\u043e\u043c \u0432\u044b\u0445\u043e\u0434\u0435 \u0426\u0410\u041f. FWORD =   795364314\" width=\"1024\" height=\"630\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/928\/49d\/15e\/92849d15e4ec319dd1ec6f20ca696f35.png\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441. 10. \u0421\u0438\u0433\u043d\u0430\u043b \u043d\u0430 \u0432\u044b\u0441\u043e\u043a\u043e\u0447\u0430\u0441\u0442\u043e\u0442\u043d\u043e\u043c \u0432\u044b\u0445\u043e\u0434\u0435 \u0426\u0410\u041f. FWORD =   795364314<\/figcaption><\/div>\n<\/figure>\n<p>\u0421\u0438\u0433\u043d\u0430\u043b \u0443\u0436\u0435 \u043d\u0435 \u0442\u0430\u043a\u043e\u0439 &#171;\u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0439&#187;, \u043d\u043e \u0435\u0433\u043e \u0447\u0430\u0441\u0442\u043e\u0442\u0430 5 \u041c\u0413\u0446.<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0414\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0435 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0434\u0435\u043b\u0430\u0435\u0442 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0435\u0449\u0451 \u0431\u043e\u043b\u0435\u0435 \u043d\u0435\u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/1f4\/faa\/38d\/1f4faa38da6508bdf25ba21423df2cc3.png\" alt=\"\u0420\u0438\u0441. 11. \u0421\u0438\u0433\u043d\u0430\u043b \u043d\u0430 \u0432\u044b\u0441\u043e\u043a\u043e\u0447\u0430\u0441\u0442\u043e\u0442\u043d\u043e\u043c \u0432\u044b\u0445\u043e\u0434\u0435 \u0426\u0410\u041f. FWORD = 1590728628\" title=\"\u0420\u0438\u0441. 11. \u0421\u0438\u0433\u043d\u0430\u043b \u043d\u0430 \u0432\u044b\u0441\u043e\u043a\u043e\u0447\u0430\u0441\u0442\u043e\u0442\u043d\u043e\u043c \u0432\u044b\u0445\u043e\u0434\u0435 \u0426\u0410\u041f. FWORD = 1590728628\" width=\"1024\" height=\"630\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1f4\/faa\/38d\/1f4faa38da6508bdf25ba21423df2cc3.png\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441. 11. \u0421\u0438\u0433\u043d\u0430\u043b \u043d\u0430 \u0432\u044b\u0441\u043e\u043a\u043e\u0447\u0430\u0441\u0442\u043e\u0442\u043d\u043e\u043c \u0432\u044b\u0445\u043e\u0434\u0435 \u0426\u0410\u041f. FWORD = 1590728628<\/figcaption><\/div>\n<\/figure>\n<p>\u0410 \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0435 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0441\u043d\u043e\u0432\u0430 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u043c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430\u043c:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/788\/03b\/441\/78803b441cbd98d4db3f78b0534bba43.png\" alt=\"\u0420\u0438\u0441. 12. \u0421\u0438\u0433\u043d\u0430\u043b \u043d\u0430 \u0432\u044b\u0441\u043e\u043a\u043e\u0447\u0430\u0441\u0442\u043e\u0442\u043d\u043e\u043c \u0432\u044b\u0445\u043e\u0434\u0435 \u0426\u0410\u041f. FWORD = 198841078  \" title=\"\u0420\u0438\u0441. 12. \u0421\u0438\u0433\u043d\u0430\u043b \u043d\u0430 \u0432\u044b\u0441\u043e\u043a\u043e\u0447\u0430\u0441\u0442\u043e\u0442\u043d\u043e\u043c \u0432\u044b\u0445\u043e\u0434\u0435 \u0426\u0410\u041f. FWORD = 198841078  \" width=\"1024\" height=\"630\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/788\/03b\/441\/78803b441cbd98d4db3f78b0534bba43.png\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441. 12. \u0421\u0438\u0433\u043d\u0430\u043b \u043d\u0430 \u0432\u044b\u0441\u043e\u043a\u043e\u0447\u0430\u0441\u0442\u043e\u0442\u043d\u043e\u043c \u0432\u044b\u0445\u043e\u0434\u0435 \u0426\u0410\u041f. FWORD = 198841078  <\/figcaption><\/div>\n<\/figure>\n<\/div>\n<\/details>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e, \u0438\u0437\u043c\u0435\u043d\u044f\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 FWORD, \u043c\u043e\u0436\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439.  \u0421\u0438\u0433\u043d\u0430\u043b \u0445\u043e\u0440\u043e\u0448\u043e \u0441\u043b\u044b\u0448\u043d\u043e \u0432 <a href=\"https:\/\/marsohod.org\/projects\/marsohod2\/331-sdr-radio\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u0438\u0451\u043c\u043d\u0438\u043a\u0435<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0442\u043e\u0438\u0442 \u0440\u044f\u0434\u043e\u043c \u043d\u0430 \u0441\u0442\u043e\u043b\u0435, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u043f\u043b\u043e\u0445\u0438\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043d\u0430 \u043e\u0441\u0446\u0438\u043b\u043b\u043e\u0433\u0440\u0430\u0444\u0435.<\/p>\n<h2>\u041a\u043e\u0440\u043e\u0442\u043a\u043e\u0432\u043e\u043b\u043d\u043e\u0432\u044b\u0439 \u0440\u0430\u0434\u0438\u043e\u043f\u0435\u0440\u0435\u0434\u0430\u0442\u0447\u0438\u043a \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0441\u0438\u043d\u0443\u0441\u0430<\/h2>\n<p>\u0414\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 ESP32-S3 \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 T-FPGA. \u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f <a href=\"https:\/\/github.com\/stefanolande\/RTTY-AD9850\/tree\/master\" rel=\"noopener noreferrer nofollow\">\u044d\u0442\u0438\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c<\/a>. \u0412 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0433\u043e DDS \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432. \u0427\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u0447\u0438\u043a \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 FWORD \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u041f\u041b\u0418\u0421. \u0412 <a href=\"https:\/\/github.com\/Xinyuan-LilyGO\/T-FPGA\/tree\/main\" rel=\"noopener noreferrer nofollow\">\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438<\/a> T-FPGA \u0435\u0441\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0434\u043b\u044f ESP32-S3 \u0438 FPGA, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u0438\u0433\u0430\u043d\u0438\u0435 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u043e\u0433\u043e \u043a FPGA, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0437 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430. \u0418\u0437 ESP32 \u0432 FPGA \u043f\u043e SPI \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f 8-\u0431\u0438\u0442\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u043b\u0438\u0431\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f, \u043b\u0438\u0431\u043e \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f. <\/p>\n<p>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0438\u0437 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c 32-\u0431\u0438\u0442\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0431\u0438\u0442\u044c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0435 \u043d\u0430 ESP32-S3 32-\u0431\u0438\u0442\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 4 \u0447\u0430\u0441\u0442\u0438 \u043f\u043e 8 \u0431\u0438\u0442, \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0438\u0445 \u043f\u043e SPI \u0432 \u041f\u041b\u0418\u0421, \u0430 \u0442\u0430\u043c \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0432 dds_addr_inst.<\/p>\n<p>\u041f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0441 <a href=\"https:\/\/github.com\/stefanolande\/RTTY-AD9850\/tree\/master\" rel=\"noopener noreferrer nofollow\">\u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c<\/a> \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>send_frequency(uint32_t &amp;freq)<\/code>:<\/p>\n<pre><code class=\"cpp\">void send_frequency(uint32_t &amp;freq){     uint32_t fword;     uint64_t tmp;     tmp = (uint64_t)freq*(uint64_t)4294967296;     fword = tmp \/ (uint32_t)27000000;      uint8_t buff[4];      buff[0] = fword       &amp; 0xff;     buff[1] = fword &gt;&gt;  8 &amp; 0xff;     buff[2] = fword &gt;&gt; 16 &amp; 0xff;     buff[3] = fword &gt;&gt; 24 &amp; 0xff; \/\/ \u0441\u0442\u0430\u0440\u0448\u0438\u0439      fpga_spi_blink(true);      for(uint8_t i=0;i&lt;4;++i){         digitalWrite(PIN_FPGA_CS, 0);         SPI.beginTransaction(SPISettings(1000000, SPI_MSBFIRST, SPI_MODE3));         uint8_t fpga_output = SPI.transfer(buff[i]);         SPI.endTransaction();         digitalWrite(PIN_FPGA_CS, 1);     } }<\/code><\/pre>\n<p>\u041d\u0430 14 \u0441\u0442\u0440\u043e\u043a\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 0x01 \u0434\u043b\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0441\u044b\u043b\u043a\u0438. \u0422\u043e\u0433\u0434\u0430 \u0434\u043b\u044f \u043f\u0440\u0438\u0451\u043c\u0430 \u043f\u043e\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 FPGA \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442:<\/p>\n<pre><code class=\"cpp\">always@(posedge clk)begin     if(ready_fword == 1'b1)  \/\/ \u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u043d\u044f\u043b\u0438 \u0432\u0441\u0435 4 \u0447\u0430\u0441\u0442\u0438         fword_valid = fword; \/\/ \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 end  reg [3:0] state_reg; always@(posedge rxd_flag or negedge rst)begin     if(!rst)         led&lt;=1'b0;     else if(rxd_out==8'h01) \/\/ \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 0x01 \u0434\u043b\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0441\u044b\u043b\u043a\u0438         begin             ready_fword &lt;= 1'b0;             state_reg &lt;= 0;             fword &lt;= 0;         end     else         begin             case(state_reg)                 4'd0: begin                     fword &lt;= fword + rxd_out;                     state_reg &lt;= 1;                 end                  4'd1: begin                     fword &lt;= fword + (rxd_out &lt;&lt; 8);                     state_reg &lt;= 2;                 end                  4'd2: begin                     fword &lt;= fword + (rxd_out &lt;&lt; 16);                     state_reg &lt;= 3;                 end                  4'd3: begin                     fword &lt;= fword + (rxd_out &lt;&lt; 24);                     state_reg &lt;= 0;                     ready_fword &lt;= 1'b1;                 end                  default: begin                     fword &lt;= 0;                     state_reg &lt;= 0;                     ready_fword &lt;= 1'b0;                 end             endcase         end end<\/code><\/pre>\n<p>\u0412\u0435\u0441\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043d\u0430 <a href=\"https:\/\/github.com\/NSV47\/T-FPGA-transmitter\/tree\/master\" rel=\"noopener noreferrer nofollow\">Github<\/a>. \u041f\u0440\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 ESP32 \u0438\u043d\u043e\u0433\u0434\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f FPGA. \u0422\u0435\u043f\u0435\u0440\u044c, \u0435\u0441\u043b\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a \u0432\u044b\u0441\u043e\u043a\u043e\u0447\u0430\u0441\u0442\u043e\u0442\u043d\u043e\u043c\u0443 \u0440\u0430\u0437\u044a\u0451\u043c\u0443 \u0426\u0410\u041f 50-\u043e\u043c\u043d\u0443\u044e \u0430\u043d\u0442\u0435\u043d\u043d\u0443 (<em>\u0430\u043d\u0442\u0435\u043d\u043d\u044b \u0434\u043b\u044f \u041a\u0412 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u044e\u0442 \u0432 \u0440\u0430\u0437\u043c\u0435\u0440\u0430\u0445 160-\u0442\u0438 \u043c\u0435\u0442\u0440\u043e\u0432. \u0414\u043b\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430 \u043d\u0430 \u0441\u0442\u043e\u043b\u0435 \u043f\u043e\u0434\u043e\u0439\u0434\u0451\u0442 \u0434\u0430\u0436\u0435 \u043e\u0431\u044b\u0447\u043d\u0430\u044f \u0442\u0435\u043b\u0435\u0441\u043a\u043e\u043f\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0430\u043d\u0442\u0435\u043d\u043d\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u0434\u0430\u0436\u0435 \u0438 \u043d\u0435 \u0432\u044b\u0434\u0432\u0438\u0433\u0430\u0442\u044c. &#8212; \u043f\u0440\u0438\u043c. \u0410\u0432\u0442.<\/em>) \u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0430 \u0441\u0442\u043e\u043b\u0435 \u0440\u044f\u0434\u043e\u043c \u0441 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u0447\u0438\u043a\u043e\u043c <a href=\"https:\/\/marsohod.org\/projects\/marsohod2\/331-sdr-radio\" rel=\"noopener noreferrer nofollow\">\u0440\u0430\u0434\u0438\u043e\u043f\u0440\u0438\u0451\u043c\u043d\u0438\u043a<\/a>, \u0442\u043e \u0432 \u0434\u0438\u043d\u0430\u043c\u0438\u043a \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u044b\u0448\u0435\u043d \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0437\u0432\u0443\u043a RTTY:<\/p>\n<div class=\"embed_link\">\n<div class=\"embed__thumb\" style=\"background-image: url(&quot;https:\/\/yastatic.net\/s3\/home-static\/_\/90\/9034470dfcb0bea0db29a281007b8a38.png&quot;);\"><\/div>\n<div class=\"embed__caption\">\n<div class=\"embed__caption-title\"><span>Yandex<\/span><\/div>\n<p><a href=\"https:\/\/disk.yandex.ru\/showcaptcha?cc=1&amp;mt=DBB8A959E5AF1D96FCEADB518A4943D1290A82747EB8A6A236BA671E6920B677F6BAE3D3D8ADDDCED09161E34D2DA70CF9F971711A15443F76E3027635900F74A73746BCF011E7B3A5ED2854E24A5187170A54B343C472A8FB8B6F0E0AB0E99C7E24A29F44B0499357CF16C76873C7442CC0343D138905322CD5794DE0466A771B567620A21CD96BE878159288C2137DE8364B17E1D200A16BCD2D864859CA6155C2F6F94DCA4848C4C35F5697E7C7A27FCF656C7B5656B4F6F4F26845A9227F5621B0AB074571F2FE77355D124CB1A7B17AC8FDDAE81E02A4200793B6&amp;retpath=aHR0cHM6Ly9kaXNrLnlhbmRleC5ydS9kL2JMNUFDQy1vWThibThnPw%2C%2C_885df95be7fe2901d4f67463c3d4e2ee&amp;t=2\/1733233170\/6719f95cc07cd4905a4f416efb57609b&amp;u=5634844655808999094&amp;s=3de20a72adc1114befbdb836717fdd43\" target=\"_blank\" rel=\"noopener noreferrer nofollow\" class=\"embed__caption-host\">disk.yandex.ru<\/a><\/div>\n<\/div>\n<p>\u0414\u043b\u044f \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f RTTY \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 MultiPSK:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4e1\/294\/482\/4e129448252e6d710cf9188335dd1a25.png\" alt=\"\u0420\u0438\u0441. 13. \u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b MultiPSK \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0430\u0434\u0438\u043e\u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438\" title=\"\u0420\u0438\u0441. 13. \u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b MultiPSK \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0430\u0434\u0438\u043e\u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438\" width=\"1920\" height=\"1080\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4e1\/294\/482\/4e129448252e6d710cf9188335dd1a25.png\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441. 13. \u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b MultiPSK \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0430\u0434\u0438\u043e\u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u0432\u0441\u0451. \u0422\u0430\u043a\u043e\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0441\u0438\u043d\u0443\u0441\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u043d\u0430 FPGA Xilinx \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0441\u043e\u0444\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0432\u0435\u0447\u0430\u043b \u0437\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443  \u043d\u0430 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u043f\u0440\u0438\u043d\u044f\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0440\u0430\u0434\u0438\u043e\u0447\u0430\u0441\u0442\u043e\u0442\u043d\u043e\u0439 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u043e\u0439. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0430 \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043d\u0430 \u043f\u0440\u0438\u0451\u043c, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0431\u044b\u043b\u043e \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0438\u0433\u043d\u0430\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043d\u0430 \u043f\u0440\u0438\u043d\u044f\u043b\u0430. \u0410 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0435\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0431\u044b\u043b\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043d\u0430 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440. \u0418 \u043a\u043e\u0433\u0434\u0430 \u0431\u044b\u043b\u043e \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0430 \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 &#8212; \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0430 \u043d\u0430 \u043f\u0440\u0438\u0451\u043c \u0438\u043b\u0438 \u043a\u0430\u043d\u0430\u043b \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0441\u0438\u043d\u0443\u0441\u0430 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043c\u043e\u0433, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0431\u044b\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0437\u0430\u0432\u0435\u0434\u043e\u043c\u043e\u0433\u043e \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u0430. \u0415\u0449\u0451 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0441\u0438\u043d\u0443\u0441\u0430 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u043b\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u043b\u0441\u044f \u043a\u0430\u043d\u0430\u043b \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u041f\u041b\u0418\u0421 Xilinx \u0447\u0435\u0440\u0435\u0437 USB-to-FIFO \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0443 \u043d\u0430 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440. \u0418\u043c\u0435\u044f \u0437\u0430\u0432\u0435\u0434\u043e\u043c\u043e \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0441\u0438\u0433\u043d\u0430\u043b\u0430, \u043c\u043e\u0436\u043d\u043e \u0441 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c\u044e \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u0430\u043d\u0430\u043b \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043b\u0438 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0412 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043f\u043e\u043c\u043e\u0433 \u0441 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 \u041a\u0412 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435. \u0425\u043e\u0447\u0435\u0442\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c, \u0447\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0430\u0437\u0431\u0443\u043a\u0438 \u041c\u043e\u0440\u0437\u0435, FT8 \u0438 \u0435\u0449\u0451 \u043c\u043d\u043e\u0433\u0438\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u0432\u0438\u0434\u043e\u0432 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0438 \u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u0439. \u041f\u0440\u0438\u0447\u0451\u043c \u0438\u043c\u0435\u044f \u0440\u0430\u0434\u0438\u043e\u043b\u044e\u0431\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043f\u043e\u0437\u044b\u0432\u043d\u043e\u0439, \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u0430\u043d\u0442\u0435\u043d\u043d\u0443, \u0443\u0441\u0438\u043b\u0438\u0442\u0435\u043b\u044c \u0438 \u0444\u0438\u043b\u044c\u0442\u0440, \u0443\u0434\u0430\u043b\u044f\u044e\u0449\u0438\u0439 \u043f\u0430\u0440\u0430\u0437\u0438\u0442\u043d\u044b\u0435 (\u0432\u0442\u043e\u0440\u044b\u0435, \u0442\u0440\u0435\u0442\u044c\u0438 \u0438 \u0442.\u0434.) \u0433\u0430\u0440\u043c\u043e\u043d\u0438\u043a\u0438 \u0438 \u0437\u0435\u0440\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u0430\u043d\u0430\u043b, \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u043d\u0430 \u043e\u0447\u0435\u043d\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u043d\u043e\u0447\u044c\u044e, \u043d\u043e \u044d\u0442\u043e \u0443\u0436\u0435 \u0434\u0440\u0443\u0433\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f.<\/p>\n<p>\u0421\u043f\u0430\u0441\u0438\u0431\u043e.<\/p>\n<p>\u0421. \u041d.<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/862842\/\"> https:\/\/habr.com\/ru\/articles\/862842\/<\/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>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043e\u043f\u0438\u0441\u0430\u043d \u0441\u043f\u043e\u0441\u043e\u0431 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0438\u043d\u0443\u0441\u043e\u0438\u0434\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043d\u0430 \u041f\u041b\u0418\u0421 \u0447\u0435\u0440\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 ROM \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0434\u043b\u044f \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0432\u043e\u043b\u043d\u043e\u0432\u043e\u0433\u043e \u0440\u0430\u0434\u0438\u043e\u043f\u0435\u0440\u0435\u0434\u0430\u0442\u0447\u0438\u043a\u0430 RTTY (Radioteletype. &#8212; \u043f\u0440\u0438\u043c. \u0420\u0435\u0434.). \u0411\u0443\u0434\u0435\u0442 \u043e\u043f\u0438\u0441\u0430\u043d \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0438\u0437 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0432 \u041f\u041b\u0418\u0421 \u0447\u0435\u0440\u0435\u0437 SPI (\u0430\u043d\u0433\u043b.\u00a0<em>Serial Peripheral Interface, SPI bus<\/em>\u00a0\u2014 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0439\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u0448\u0438\u043d\u0430 SPI &#8212; \u043f\u0440\u0438\u043c. \u0420\u0435\u0434.). \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0430 LilyGO T-FPGA, \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u041f\u041b\u0418\u0421 GW1NSR-LV4CQN48PC6\/I5  \u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 ESP32-S3, \u0426\u0410\u041f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 DAC904, ide GOWIN FPGA Designer, Visual Studio Code \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c PlatformIO \u0438 matlab 2020.<\/p>\n<blockquote>\n<p><em>\u0414\u0438\u0441\u043a\u043b\u0435\u0439\u043c\u0435\u0440<br \/>\u0422\u0443\u0442\u043e\u0440\u0438\u0430\u043b \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0434\u0438\u043e\u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0448\u0430\u043b\u0438\u0442\u044c, \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 \u043d\u043e\u0440\u043c\u0430\u0442\u0438\u0432\u043d\u043e-\u043f\u0440\u0430\u0432\u043e\u0432\u043e\u0439 \u0431\u0430\u0437\u043e\u0439 \u0433\u043e\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u0430, \u043d\u0430 \u0442\u0435\u0440\u0440\u0438\u0442\u043e\u0440\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0448\u0430\u043b\u043e\u0441\u0442\u044c, \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 \u0440\u0430\u0434\u0438\u043e\u043f\u043e\u0437\u044b\u0432\u043d\u043e\u0439 \u0438 \u0438\u0437\u0431\u0430\u0432\u044c\u0442\u0435\u0441\u044c \u043e\u0442 \u043f\u0430\u0440\u0430\u0437\u0438\u0442\u043d\u044b\u0445 \u0433\u0430\u0440\u043c\u043e\u043d\u0438\u043a.<\/em><\/p>\n<p><em>\u0417\u0434\u0435\u0441\u044c \u0431\u0443\u0434\u0443\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043e\u043f\u044b\u0442 \u0437\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u043f\u0430\u0440\u0443 \u0434\u043d\u0435\u0439 \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432 \u0441 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u043c\u0438 \u043f\u043b\u0430\u0442\u0430\u043c\u0438. \u042d\u0442\u043e \u043d\u0435 \u043e\u043f\u044b\u0442 \u0438 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u043f\u043e\u0434 \u041f\u041b\u0418\u0421 \u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b. \u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c, \u044d\u0442\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u044e\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0445\u043e\u0440\u043e\u0448\u043e \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u0432 \u0442\u0435\u043c\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u0442\u044b \u0438 \u0434\u0430\u0434\u0443\u0442 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u0438\u0432\u043d\u0443\u044e \u043a\u0440\u0438\u0442\u0438\u043a\u0443.<\/em>  <\/p>\n<\/blockquote>\n<h2>\u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0441\u0438\u043d\u0443\u0441\u0430<\/h2>\n<p>\u041f\u0440\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 <a href=\"https:\/\/programmersought.com\/article\/97073878178\/\" rel=\"noopener noreferrer nofollow\">\u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438<\/a> (<em>\u0441\u0441\u044b\u043b\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 \u0440\u0430\u0437. \u0421 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 \u043d\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0430 \u0441 \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u0433\u043e \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f. &#8212; \u043f\u0440\u0438\u043c. \u0420\u0435\u0434.<\/em>). \u0411\u043e\u043b\u044c\u0448\u0443\u044e \u043f\u043e\u043c\u043e\u0449\u044c \u0432 \u043e\u0441\u0432\u043e\u0435\u043d\u0438\u0438 \u043f\u043b\u0438\u0441 GOWIN \u043c\u043e\u0436\u0435\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c <a href=\"https:\/\/marsohod.org\/\" rel=\"noopener noreferrer nofollow\">\u0431\u043b\u043e\u0433 \u041c\u0430\u0440\u0441\u043e\u0445\u043e\u0434<\/a>. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0434\u043b\u044f \u041f\u041b\u0418\u0421 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/github.com\/Xinyuan-LilyGO\/T-FPGA\/tree\/main\/example\/FPGA\/led\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u0438\u043c\u0435\u0440<\/a> \u0434\u043b\u044f T-FPGA. \u041d\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 Constraints \u0444\u0430\u0439\u043b. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0441\u0438\u0433\u043d\u0430\u043b clk \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d \u043a \u043a\u043d\u043e\u043f\u043a\u0435 (46 \u043d\u043e\u043c\u0435\u0440 \u043d\u0430 \u0441\u0445\u0435\u043c\u0435). \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043e\u0442 \u043a\u0432\u0430\u0440\u0446\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u043d\u043e\u043c\u0435\u0440\u0443 45. \u0412\u0441\u0451 \u044d\u0442\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u043d\u0430 <a href=\"https:\/\/github.com\/Xinyuan-LilyGO\/T-FPGA\/tree\/main\/schematic\" rel=\"noopener noreferrer nofollow\">\u0441\u0445\u0435\u043c\u0430\u0445<\/a>:<\/p>\n<figure class=\"\">\n<div><figcaption>\u0420\u0438\u0441 1. \u0421\u0445\u0435\u043c\u0430 \u0434\u043b\u044f T-FPGA<\/figcaption><\/div>\n<\/figure>\n<pre><code class=\"cpp\">\/\/Copyright (C)2014-2021 Gowin Semiconductor Corporation. \/\/All rights reserved.  \/\/File Title: Physical Constraints file \/\/GOWIN Version: 1.9.8.01 \/\/Part Number: GW1NSR-LV4CQN48PC6\/I5 \/\/Device: GW1NSR-4C \/\/Created Time: Tue 02 21 14:47:43 2023  IO_LOC \"clk\" 45; \/\/ \u044d\u0442\u043e \u0432\u044b\u0445\u043e\u0434 \u043a\u0432\u0430\u0440\u0446\u0430 27 \u041c\u0413\u0446 IO_PORT \"clk\" IO_TYPE=LVCMOS33 PULL_MODE=UP;<\/code><\/pre>\n<p>\u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f ROM \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043c\u0435\u043d\u044e tools -&gt; IP Core Generator \u0438\u043b\u0438 \u043d\u0430\u0436\u0430\u0442\u044c \u0438\u043a\u043e\u043d\u043a\u0443 \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432. \u0414\u0430\u043b\u044c\u0448\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u044c Memory -&gt; Block Memory -&gt; pROM.<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0420\u0438\u0441. 2. IP Core Generetor<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u043e \u0434\u0432\u043e\u0439\u043d\u043e\u043c\u0443 \u0449\u0435\u043b\u0447\u043a\u0443 \u043f\u043e pROM \u043e\u0442\u043a\u0440\u043e\u0435\u0442\u0441\u044f \u0434\u0438\u0430\u043b\u043e\u0433\u043e\u0432\u043e\u0435 \u043e\u043a\u043d\u043e, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b. \u0412 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b 4096 12-\u0431\u0438\u0442\u043d\u044b\u0445 \u043e\u0442\u0441\u0447\u0451\u0442\u043e\u0432. <\/p>\n<blockquote>\n<p>\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0426\u0410\u041f DAC904 14-\u0431\u0438\u0442\u043d\u044b\u0439 \u0438 \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c 14-\u0431\u0438\u0442\u043d\u044b\u0435 \u043e\u0442\u0441\u0447\u0451\u0442\u044b, \u043d\u043e \u043b\u0435\u043d\u044c.<\/p>\n<\/blockquote>\n<figure class=\"full-width\">\n<div><figcaption>\u0420\u0438\u0441. 3. \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 ROM \u043f\u0430\u043c\u044f\u0442\u0438.<\/figcaption><\/div>\n<\/figure>\n<h2>\u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0438\u043d\u0443\u0441\u043e\u0438\u0434\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0432 matlab<\/h2>\n<p>\u0421\u0442\u043e\u0438\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u043d\u0430 Memory Initialization File. \u041d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0435\u043c\u0430\u043b\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c .mi \u0444\u0430\u0439\u043b. \u041f\u0440\u043e \u043d\u0435\u0433\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0432 7 \u0433\u043b\u0430\u0432\u0435 <a href=\"https:\/\/cdn.gowinsemi.com.cn\/UG285E.pdf\" rel=\"noopener noreferrer nofollow\">UG285E<\/a>. \u0417\u0434\u0435\u0441\u044c \u0436\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0439\u0442\u0438 \u043f\u043e \u043f\u0443\u0442\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0444\u0430\u0439\u043b\u0430 \u0432 matlab, \u0430 \u043f\u043e\u0442\u043e\u043c \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u0435\u0433\u043e \u043a \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u043c\u0443 \u0432\u0438\u0434\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043d\u0430 python.<\/p>\n<p>\u0412 matlab \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"matlab\">clear clc n = 0:4095 ; yn = sin(2*pi\/4096*n) ;   yn = round((yn+1)*2047);    plot(n,yn);   fid = fopen('C:\\work\\rom_test_3.coe','wt'); fprintf(fid,'#File_format=Hex,\\n#Address_depth=4096,\\n#Data_width=12,');   for i = 1 : 4096     if mod(i-1,1) == 0          fprintf(fid,'\\n');     end     fprintf(fid,'%03X,',yn(i)); end<\/code><\/pre>\n<p>\u041f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u044d\u0442\u043e\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d \u0433\u0440\u0430\u0444\u0438\u043a \u0438 \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0444\u0430\u0439\u043b \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 .coe. <\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0420\u0438\u0441. 4. \u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 matlab \u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0433\u0440\u0430\u0444\u0438\u043a \u0441\u0438\u043d\u0443\u0441\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u0414\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u0430 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 Memory Initialization File \u0434\u043b\u044f pROM GOWIN \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u0437\u0430\u043f\u044f\u0442\u044b\u0445 \u0432 \u043a\u043e\u043d\u0446\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u043c \u043d\u0430 python:<\/p>\n<pre><code class=\"python\">import os import sys  res = ''  if len(sys.argv)&lt;2 : print(\"Not enough arguments, need file with data name param\") filename = sys.argv[1] print(filename)  def read_txt_file(filename):     output = \"\"  # \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f     with open(filename, 'r') as f:         for line in f:             output = output + line.replace(',\\n', '\\n') # strip() # rstrip(\",\\n\")     f.close()     return output      def write_txt_file(input):     with open('1.mi', 'w') as file:         file.write(input)  # \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u044c \u0444\u0430\u0439\u043b\u0430      res = read_txt_file(filename) write_txt_file(res)<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0441\u043a\u0440\u0438\u043f\u0442 \u043d\u0430 python \u043b\u0435\u0436\u0438\u0442 \u0432 \u0442\u043e\u043c \u0436\u0435 \u0441\u0430\u043c\u043e\u043c \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435, \u0447\u0442\u043e \u0438 \u0444\u0430\u0439\u043b \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432    \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432 matlab \u0438 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c <code>C:\\Users\\s.novikov\\Documents\\work\\271124&gt;python3 probe1.py rom_test_3.coe<\/code> , \u0442\u043e \u0432 \u0440\u0430\u0431\u043e\u0447\u0435\u043c \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0444\u0430\u0439\u043b 1.mi. \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0437\u0430\u043f\u044f\u0442\u0443\u044e \u0432 \u0441\u0430\u043c\u043e\u043c \u043a\u043e\u043d\u0446\u0435 \u0444\u0430\u0439\u043b\u0430:<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0420\u0438\u0441. 5. \u041f\u0440\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u0437\u0430\u043f\u044f\u0442\u044b\u0445 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0437\u0430\u043f\u044f\u0442\u0443\u044e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e.<\/figcaption><\/div>\n<\/figure>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0444\u0430\u0439\u043b \u0433\u043e\u0442\u043e\u0432 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 Memory Initialization File \u0432 \u0434\u0438\u0430\u043b\u043e\u0433\u043e\u0432\u043e\u043c \u043e\u043a\u043d\u0435 IP Customization pROM ide GOWIN FPGA Designer. GOWIN FPGA Designer \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0432 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043f\u0440\u043e\u0435\u043a\u0442. \u041e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u0433\u043b\u0430\u0441\u0438\u0442\u044c\u0441\u044f:<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0420\u0438\u0441. 6. \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e IP \u0432 \u043f\u0440\u043e\u0435\u043a\u0442.<\/figcaption><\/div>\n<\/figure>\n<p>\u0412\u0435\u0440\u043d\u0451\u043c\u0441\u044f \u043a \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0443 \u0441\u0438\u043d\u0443\u0441\u0430. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0435\u0449\u0451 \u043e\u0434\u0438\u043d IP:<\/p>\n<pre><code class=\"cpp\">module dds_addr (clk, rst_n, addr_out, strobe, FWORD);     input clk, rst_n;          \/\/ Resetting the system clock     output [11: 0] addr_out;    \/\/ The output address corresponding to the data in the ROM     output strobe;     parameter N = 32;     parameter PWORD = 2048;     \/\/ Phase control word (x\/360) * 256     input [31:0] FWORD; \/\/    parameter FWORD = 159072862;  \/\/ \u0441\u043b\u043e\u0432\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 F_out = B * (F_clk \/ 2 ** 32), fword = B 5KHZ \/\/ 858994     reg [N-1: 0] addr;         \/\/ 32-bit battery          reg strobe_r;     always @ (posedge clk or negedge rst_n)     begin        if (!rst_n)            begin               addr &lt;= 0;              end       else           begin               \/\/Each word size outputs an address, if the word control frequency is 2, then the output of the address counter is 0, 2, 4...               addr &lt;= addr + FWORD;               if (addr[N-1:N-12] + PWORD == 12'hc00) begin                   strobe_r &lt;= 1'b1;               end               else begin                   strobe_r &lt;= 1'b0;               end           end          end      \/\/Assign the top eight bits of the battery address to the output address (ROM address     assign addr_out = addr[N-1:N-12] + PWORD;      assign strobe = strobe_r; endmodule<\/code><\/pre>\n<p>\u041e\u0442 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0438\u0437 <a href=\"https:\/\/programmersought.com\/article\/97073878178\/\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u0430\u0442\u044c\u0438<\/a> (<em>\u0441\u0441\u044b\u043b\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 \u0440\u0430\u0437. \u0421 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 \u043d\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0430 \u0441 \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u0433\u043e \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f. &#8212; \u043f\u0440\u0438\u043c. \u0420\u0435\u0434.<\/em>) \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u043c\u0435\u043d\u043e\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 FWORD \u043d\u0430 \u0432\u0445\u043e\u0434\u043d\u043e\u0439 32-\u0431\u0438\u0442\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b FWORD. \u042d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043c\u0435\u043d\u044f\u0442\u044c \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0432\u043e\u043b\u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u0447\u0438\u043a\u0430. \u0422\u0435\u043f\u0435\u0440\u044c \u044d\u0442\u0438 \u0434\u0432\u0430 IP \u043c\u043e\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432 \u043c\u043e\u0434\u0443\u043b\u044c \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0438\u043d\u0443\u0441\u043e\u0438\u0434\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430:<\/p>\n<pre><code class=\"cpp\">module top(     input          clk,     input   rst,     output [11: 0] sin,     output clk_o        \/\/ \u044d\u0442\u043e \u0432\u044b\u0445\u043e\u0434 \u0434\u043b\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0426\u0410\u041f );  reg [31:0] fword; wire [11: 0] addr_out; \/\/ 12-\u0431\u0438\u0442\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0434\u0430\u043d\u043d\u044b\u043c \u0432 \u041f\u0417\u0423 wire [11: 0] sin_out;  \/\/ --------------Phase-based  module------------------------    dds_addr dds_addr_inst (     .clk(clk),           \/\/ input wire clk     .rst_n(1'b1),        \/\/ input wire rst_n     .addr_out(addr_out), \/\/ output wire [7 : 0] addr_out     .strobe(),     .FWORD(397682157) );   \/\/----------------------------------------------------------  \/\/ Waveform Data Module        Gowin_pROM rom_inst (     .dout(sin),   \/\/output [11:0] dout     .clk(clk),    \/\/input clk     .oce(),       \/\/input oce     .ce(1'b1),    \/\/input ce     .reset(1'b0), \/\/input reset     .ad(addr_out) \/\/input [11:0] ad );  \/\/ assign clk_o = clk; \u044d\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0430\u0441\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0426\u0410\u041f \u043a T-FPGA  endmodule<\/code><\/pre>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b, \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f Gowin Analyzer Oscilloscope. \u042d\u0442\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0432 ide \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0432\u044b\u0431\u043e\u0440\u043e\u043a \u0438 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u043e\u0441\u0446\u0438\u043b\u043b\u043e\u0433\u0440\u0430\u043c\u043c \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u043a\u0430\u043a SignalTap \u0443 Altera \u0438\u043b\u0438 ChipScope \u0443 Xilinx. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u0440\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043d\u0430 <a href=\"https:\/\/marsohod.org\/projects\/marsohod3gw-prj\/442-gowinao\" rel=\"noopener noreferrer nofollow\">Marsohod<\/a>. \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0435 \u0448\u0430\u0433\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u043e <a href=\"https:\/\/marsohod.org\/projects\/marsohod3gw-prj\/442-gowinao\" rel=\"noopener noreferrer nofollow\">\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 Gowin Analyzer Osciloscope \u0432 FPGA \u043f\u0440\u043e\u0435\u043a\u0442\u0435<\/a> \u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u044d\u0442\u043e \u0432 Gtkwave \u043a\u0430\u043a \u0432 \u044d\u0442\u043e\u0439 <a href=\"https:\/\/marsohod.org\/projects\/marsohod3gw-prj\/447-cordic-nco\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u0430\u0442\u044c\u0435<\/a>, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0442\u0430\u043a\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435:<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0420\u0438\u0441. 7. \u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0432 Gtkwave<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u0441\u0438\u0433\u043d\u0430\u043b \u0441 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 2500 \u041a\u0413\u0446. \u0415\u0441\u043b\u0438 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0444\u043e\u0440\u043c\u0443\u043b\u043e\u0439 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0435 8 \u0432 \u043c\u043e\u0434\u0443\u043b\u0435 dds_addr , \u0438 \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 FWORD = 397682157, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f, \u0447\u0442\u043e F_out = 2500000 \u0413\u0446. \u0427\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0431\u0443\u0434\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430, \u0442\u0435\u043c \u0431\u0435\u0437\u043e\u0431\u0440\u0430\u0437\u043d\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432\u044b\u0431\u0440\u0430\u043d\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0441\u0435\u0433\u043e 27 \u041c\u0413\u0446. \u042d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u043e \u0432\u0438\u0434\u043d\u043e, \u0435\u0441\u043b\u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u0438 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0441\u0438\u0433\u043d\u0430\u043b. <\/p>\n<h2>\u041f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0439 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442. \u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043d\u0430 \u0426\u0410\u041f<\/h2>\n<p>\u0414\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432 \u0431\u044b\u043b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d \u0426\u0410\u041f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 DAC904. \u0427\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043f\u0440\u043e\u0435\u043a\u0442, \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0445\u043e\u0434 \u0434\u043b\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0426\u0410\u041f \u0438 \u0440\u0430\u0441\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c assign \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u044b\u0445\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043a \u0432\u0445\u043e\u0434\u043d\u043e\u043c\u0443 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u043c\u0443 \u0441\u0438\u0433\u043d\u0430\u043b\u0443. (<em>\u0426\u0410\u041f 14-\u0431\u0438\u0442\u043d\u044b\u0439, \u0430 \u0441\u0438\u0433\u043d\u0430\u043b \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f 12-\u0431\u0438\u0442\u043d\u044b\u0439, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u043c\u043b\u0430\u0434\u0448\u0438\u0435 \u0431\u0438\u0442\u044b. &#8212; \u043f\u0440\u0438\u043c. \u0410\u0432\u0442.<\/em>). \u0412 \u0444\u0430\u0439\u043b\u0435 constraints \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code class=\"cpp\">\/\/Copyright (C)2014-2021 Gowin Semiconductor Corporation. \/\/All rights reserved.  \/\/File Title: Physical Constraints file \/\/GOWIN Version: 1.9.8.01 \/\/Part Number: GW1NSR-LV4CQN48PC6\/I5 \/\/Device: GW1NSR-4C \/\/Created Time: Tue 02 21 14:47:43 2023  IO_LOC \"clk\" 45; IO_PORT \"clk\" IO_TYPE=LVCMOS33 PULL_MODE=UP;  IO_LOC \"clk_o\" 29; \/\/ 23 IO_PORT \"clk_o\" IO_TYPE=LVCMOS33 PULL_MODE=UP;  IO_LOC \"sin[0]\" 20; IO_PORT \"sin[0]\" IO_TYPE=LVCMOS33 PULL_MODE=NONE;  IO_LOC \"sin[1]\" 21; IO_PORT \"sin[1]\" IO_TYPE=LVCMOS33 PULL_MODE=NONE;  IO_LOC \"sin[2]\" 18; IO_PORT \"sin[2]\" IO_TYPE=LVCMOS33 PULL_MODE=NONE;  IO_LOC \"sin[3]\" 19; IO_PORT \"sin[3]\" IO_TYPE=LVCMOS33 PULL_MODE=NONE;  IO_LOC \"sin[4]\" 16; IO_PORT \"sin[4]\" IO_TYPE=LVCMOS33 PULL_MODE=NONE;  IO_LOC \"sin[5]\" 17; IO_PORT \"sin[5]\" IO_TYPE=LVCMOS33 PULL_MODE=NONE;  IO_LOC \"sin[6]\" 13; IO_PORT \"sin[6]\" IO_TYPE=LVCMOS33 PULL_MODE=NONE;  IO_LOC \"sin[7]\" 14; IO_PORT \"sin[7]\" IO_TYPE=LVCMOS33 PULL_MODE=NONE;  IO_LOC \"sin[8]\"<\/code><\/pre>\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-443397","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/443397","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=443397"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/443397\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=443397"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=443397"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=443397"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}