{"id":281949,"date":"2016-12-03T17:35:04","date_gmt":"2016-12-03T14:35:04","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=281949"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=281949","title":{"rendered":"\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0439\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u043a MIPSfpga, \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0443\u043b\u044c\u0442\u0440\u0430\u0437\u0432\u0443\u043a\u043e\u0432\u044b\u0445 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f"},"content":{"rendered":"<p>\u0414\u043e\u0431\u0440\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u0443\u0442\u043e\u043a. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043a\u0430\u043a \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u0438, \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0434\u0432\u0443\u0445 \u0443\u043b\u044c\u0442\u0440\u0430\u0437\u0432\u0443\u043a\u043e\u0432\u044b\u0445 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432 HC-SR04 \u0438 Pmod MAXSONAR, \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043d\u0430 \u043a\u0440\u0438\u0441\u0442\u0430\u043b\u043b\u0435 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 MIPSfpga. \u0422\u0430\u043a\u0436\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043a\u0430\u043a \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439.<br \/>  \u041e\u0441\u043d\u043e\u0432\u044b\u0432\u0430\u044f\u0441\u044c \u043d\u0430 \u043c\u043e\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u0430\u0448\u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u043c\u0438 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u0421\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0441\u043e \u0441\u0432\u043e\u0438\u043c \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438, \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 MIPSfpga.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/d55\/726\/637\/d5572663735848adbe8d9c368bd9c64f.jpg\"\/><br \/>  <a name=\"habracut\"><\/a><br \/>  \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0431\u0443\u0434\u0435\u043c \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u0434\u0430\u0442\u0447\u0438\u043a: <br \/>  <a href=\"http:\/\/store.digilentinc.com\/pmodmaxsonar-maxbotix-ultrasonic-range-finder\/\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/6d6\/305\/af5\/6d6305af56484242a5c343a9aea441dc.jpg\" align=\"left\" width=\"155\" height=\"130\"\/><\/a><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/45e\/599\/e35\/45e599e356954379a3f6731b542a5dc8.jpg\" align=\"right\" width=\"140\" height=\"130\"\/><br \/>  \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u043d\u0430 \u043d\u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 <a href=\"http:\/\/maxbotix.com\/documents\/LV-MaxSonar-EZ_Datasheet.pdf\"> \u0437\u0434\u0435\u0441\u044c<\/a>. \u0414\u0430\u043d\u043d\u044b\u0435 \u0431\u0443\u0434\u0435\u043c \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0430 \u0441\u0435\u043c\u0438\u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043d\u044b\u0435 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u043d\u0430 \u043f\u043b\u0430\u0442\u0435. \u0422\u0430\u043a\u0436\u0435 \u0431\u0443\u0434\u0435\u043c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u0432\u0443\u043a\u043e\u0432\u044b\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u043e\u0439 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043f\u044c\u0435\u0437\u043e\u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0430. <\/p>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 MIPSfpga. \u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u043f\u043e \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044e:<br \/>  <a href=\"http:\/\/www.silicon-russia.com\/2015\/12\/11\/mipsfpga-download-instructions\">www.silicon-russia.com\/2015\/12\/11\/mipsfpga-download-instructions<\/a><br \/>  \u0414\u0430\u043b\u0435\u0435, \u043d\u0443\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u043d\u0430\u0434\u0441\u0442\u0440\u043e\u0439\u043a\u0443 MIPSfpga-plus, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043f\u043e UART\u0443:<br \/>  <a href=\"https:\/\/github.com\/MIPSfpga\/mipsfpga-plus\">github.com\/MIPSfpga\/mipsfpga-plus<\/a>.<br \/>  \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043f\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442, \u0435\u0441\u043b\u0438 \u043a\u043e\u0440\u043e\u0442\u043a\u043e, \u0442\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442 \u0438 \u043f\u0440\u043e\u0435\u043a\u0442 \u0441\u043e\u0431\u0440\u0430\u043b\u0441\u044f, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e:<br \/>  \u041f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 MIPSfpga \u0432 \u043f\u0430\u043f\u043a\u0443:  <\/p>\n<pre><code class=\"1c\">C:\\MIPSfpga<\/code><\/pre>\n<p> \u0410 MIPSfpga-plus \u0432:  <\/p>\n<pre><code class=\"1c\">C:\\github\\mipsfpga-plus<\/code><\/pre>\n<p> \u0414\u0430\u043b\u0435\u0435 \u0432 \u043f\u0430\u043f\u043a\u0435 <i>C:\\github\\mipsfpga-plus\\boards<\/i> \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u043f\u043b\u0430\u0442\u0443, \u0443 \u043c\u0435\u043d\u044f \u044d\u0442\u043e de0_cv, \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442 <i>make_project<\/i>. \u041f\u0440\u043e\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432 <i>C:\\github\\mipsfpga-plus\\boards\\de0_cv\\project<\/i>. <br \/>  \u0415\u0441\u043b\u0438 \u0432\u0430\u0448\u0435\u0439 \u043f\u043b\u0430\u0442\u044b \u043d\u0435\u0442, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0443\u044e \u043f\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u044f\u0447\u0435\u0435\u043a \u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440, \u043b\u0438\u043d\u043a\u043e\u0432\u0449\u0438\u043a <a href=\"https:\/\/community.imgtec.com\/developers\/mips\/tools\/codescape-mips-sdk\/download-codescape-mips-sdk-essentials\/\"> Codescape<\/a>.<br \/>  \u0418 USB UART \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, pl2303hx \u0438\u043b\u0438 ch340.<\/p>\n<p>  \u0414\u0430\u0442\u0447\u0438\u043a \u0438\u043c\u0435\u0435\u0442 \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u044b\u0439 \u0432\u044b\u0445\u043e\u0434, \u0432\u044b\u0445\u043e\u0434 \u0448\u0438\u0440\u043e\u0442\u043d\u043e-\u0438\u043c\u043f\u0443\u043b\u044c\u0441\u043d\u043e\u0439 \u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u0438, \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 UART, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u043a MIPSfpga.<br \/>  \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0443\u0442\u0435\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u0434\u0430\u0442\u0447\u0438\u043a\u0430, \u043a \u0448\u0438\u043d\u0435, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u043e\u0431\u0449\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u0430\u043c\u044f\u0442\u044c\u044e.<\/p>\n<h4>\u041e\u043f\u0438\u0448\u0435\u043c \u043c\u043e\u0434\u0443\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u0434\u0430\u0442\u0447\u0438\u043a\u0430.<\/h4>\n<p>  UART \u043f\u0440\u0438\u0435\u043c\u043d\u0438\u043a \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0443\u0436\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0437\u0430\u0448\u0438\u0432\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c, \u0438\u0437\u043c\u0435\u043d\u0438\u0432 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 baud_rate \u043d\u0430 9600, \u0442\u0430\u043a\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0434\u0430\u0442\u0447\u0438\u043a.   <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041c\u043e\u0434\u0443\u043b\u044c uart receiver<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code>module uart_receiver (     input  clock,     input  reset_n,     input  rx,     output reg [7:0] byte_data,     output           byte_ready );       parameter  clock_frequency        = 50000000;      parameter  baud_rate              = 9600;     localparam clock_cycles_in_symbol = clock_frequency \/ baud_rate;      \/\/ Synchronize rx input to clock      reg rx_sync1, rx_sync;      always @(posedge clock or negedge reset_n)     begin         if (! reset_n)         begin             rx_sync1 &lt;= 1;             rx_sync  &lt;= 1;         end         else         begin             rx_sync1 &lt;= rx;             rx_sync  &lt;= rx_sync1;         end     end      \/\/ Finding edge for start bit      reg prev_rx_sync;      always @(posedge clock or negedge reset_n)     begin         if (! reset_n)             prev_rx_sync &lt;= 1;         else             prev_rx_sync &lt;= rx_sync;     end      wire start_bit_edge = prev_rx_sync & ! rx_sync;      \/\/ Counter to measure distance between symbols      reg [31:0] counter;     reg        load_counter;     reg [31:0] load_counter_value;      always @(posedge clock or negedge reset_n)     begin         if (! reset_n)             counter &lt;= 0;         else if (load_counter)             counter &lt;= load_counter_value;         else if (counter != 0)             counter &lt;= counter - 1;     end      wire counter_done = counter == 1;      \/\/ Shift register to accumulate data      reg       shift;     reg [7:0] shifted_1;     assign    byte_ready = shifted_1 [0];      always @ (posedge clock or negedge reset_n)     begin         if (! reset_n)         begin             shifted_1 &lt;= 0;         end         else if (shift)         begin             if (shifted_1 == 0)                 shifted_1 &lt;= 8'b10000000;             else                 shifted_1 &lt;= shifted_1 &gt;&gt; 1;              byte_data &lt;= { rx, byte_data [7:1] };         end         else if (byte_ready)         begin             shifted_1 &lt;= 0;         end     end      reg idle, idle_r;      always @*     begin         idle  = idle_r;         shift = 0;          load_counter        = 0;         load_counter_value  = 0;          if (idle)         begin             if (start_bit_edge)             begin                 load_counter       = 1;                 load_counter_value = clock_cycles_in_symbol * 3 \/ 2;                             idle = 0;             end         end         else if (counter_done)         begin             shift = 1;              load_counter       = 1;             load_counter_value = clock_cycles_in_symbol;         end         else if (byte_ready)         begin             idle = 1;         end     end      always @ (posedge clock or negedge reset_n)     begin         if (! reset_n)             idle_r &lt;= 1;         else             idle_r &lt;= idle;     end  endmodule<\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0434\u0430\u0442\u0430\u0448\u0438\u0442\u0443[1], \u043a\u0430\u0436\u0434\u044b\u0435 49\u043c\u0441, \u0441\u043e\u043d\u0430\u0440 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0447\u0435\u0442\u044b\u0440\u0435 \u0431\u0430\u0439\u0442\u0430 \u0432 ASCII \u0444\u043e\u0440\u043c\u0430\u0442\u0435, \u0441\u0438\u043c\u0432\u043e\u043b \u201cR\u201d \u0438 \u0442\u0440\u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u0441\u0442\u0430\u0440\u0448\u0438\u043c\u0438 \u0440\u0430\u0437\u0440\u044f\u0434\u0430\u043c\u0438 \u0432\u043f\u0435\u0440\u0435\u0434.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041c\u043e\u0434\u0443\u043b\u044c sonar<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code>module sonn (     input  clock,     input  reset_n,     input  rx, \t output reg [15:0] hword );  reg [1:0] count2; wire [7:0] byte_data; reg [31:0] wordd;  always @(posedge clock)     if (! reset_n) \t     wordd &lt;= 32'b0; \t  else if (byte_ready) \t     \tcase(count2) \t\t\t2'd0:begin  \t\t\t\twordd[31:24]&lt;=byte_data; \t\t\t\t    if(byte_data==8'h52) \t\t\t\t\tcount2&lt;=2'd1; \t\t\t\tend \t\t\t2'd1:begin wordd[23:16]&lt;=byte_data; count2&lt;=2'd2;end \t\t\t2'd2:begin wordd[15:8]&lt;=byte_data; count2&lt;=2'd3;end \t\t\t2'd3:begin wordd[7:0]&lt;=byte_data; count2&lt;=2'd0; \t\t\t           hword={4'b0000,wordd[19:16],wordd[11:8],wordd[3:0]};end \t\t\tdefault begin  \t\t\t\twordd[31:24]&lt;=byte_data; \t\t\t\t    if(byte_data==8'h52) \t\t\t\t\tcount2&lt;=count2+1'b1; \t\t\t\tend \t\t\tendcase \t uart_receiver uart(clock,reset_n,rx,byte_data,byte_ready); endmodule<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  \u041f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0442\u0430\u043a\u0442\u0443 \u0438 \u0444\u043b\u0430\u0433\u0443 byte_ready(\u0432\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0431\u044b\u043b \u043f\u0440\u0438\u043d\u044f\u0442 \u0431\u0430\u0439\u0442) \u043e\u0436\u0438\u0434\u0430\u0435\u043c \u0441\u0438\u043c\u0432\u043e\u043b \u201cR\u201d \u2013 52 \u0432 \u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043d\u043e\u043c, \u0434\u0430\u043b\u0435\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u043f\u0440\u0438\u0435\u043c\u0443 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0442\u0440\u0435\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432. \u041f\u043e \u043f\u0440\u0438\u0435\u043c\u0443 \u0442\u0440\u0435\u0445 \u0431\u0430\u0439\u0442 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0432 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u043c\u043b\u0430\u0434\u0448\u0438\u0435 \u043f\u043e\u043b\u0443\u0431\u0430\u0439\u0442\u044b, \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u0438\u0437 ASCII \u0432 \u0434\u0432\u043e\u0438\u0447\u043d\u043e-\u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442.<\/p>\n<p>  \u041c\u043e\u0434\u0443\u043b\u044c \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u044c\u0435\u0437\u043e\u0434\u0438\u043d\u0430\u043c\u0438\u043a\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0434\u0432\u0443\u0445, \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u044b \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0432\u044b\u0431\u043e\u0440\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u044b:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041c\u043e\u0434\u0443\u043b\u044c tone<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code>module note(clk,reset_n,notein,noteout); input clk,reset_n; input [6:0]notein; output reg noteout;  reg [19:0]div; reg [19:0]cnt; reg eocnt;   always @* begin   case (notein)     0: div = 191114; \/\/ C     1: div = 180385; \/\/ C#     2: div = 170262; \/\/ D     3: div = 160705; \/\/ D#     4: div = 151686; \/\/ E     5: div = 143173; \/\/ F     6: div = 135136; \/\/ F#     7: div = 127552; \/\/ G     8: div = 120389; \/\/ G#     9: div = 113636; \/\/ A     10:div = 107259; \/\/ A#     11:div = 101239; \/\/ H     12:div = 95558; \/\/ C      13:div = 90194; \/\/ C#     14:div = 85132; \/\/ D     15:div = 80354; \/\/ D#     16:div = 75845; \/\/ E     17:div = 71558; \/\/ F     18:div = 67567; \/\/ F#     19:div = 63775; \/\/ G     20:div = 60197; \/\/ G#     21:div = 28403; \/\/ A        22:div = 53629; \/\/ A#     23:div = 50619; \/\/ H     24:div = 47777; \/\/ C     25:div = 45097; \/\/ C#     26:div = 42566; \/\/ D     27:div = 40176; \/\/ D#     28:div = 37921; \/\/ E             default: div = 1; \/\/   endcase end        always @(posedge clk) begin  if(~reset_n) begin   noteout&lt;=0;   cnt &lt;= 0; end     if(cnt == div) \t begin         cnt &lt;= 0; \t\t  noteout &lt;= ~noteout; \t end     else         cnt &lt;= cnt + 1'b1; end  endmodule <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0421\u0447\u0438\u0442\u0430\u0435\u043c \u0434\u043e div \u0438 \u0438\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0438\u0433\u043d\u0430\u043b. Div \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0432\u0445\u043e\u0434\u043d\u044b\u043c notein. <br \/>  <i>Div = Fclk\/Fnote\/2<\/i><br \/>  \u0413\u0434\u0435 Fclk \u2013 \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430, Fnote \u2013 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u0430\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430. <\/p>\n<p>  \u0418 \u043c\u043e\u0434\u0443\u043b\u044c \u0433\u0434\u0435 \u0440\u0435\u0433\u0443\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0437\u0432\u0443\u043a\u043e\u0432\u044b\u0445 \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u043e\u0432:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041c\u043e\u0434\u0443\u043b\u044c buzz<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code>module buzz(clk,reset_n,en,tim,tone); input clk,reset_n,en; input [1:0]tim; output reg tone;  wire [6:0]notein; wire noteout; assign notein=21;  reg [27:0]counter,div,div1; reg ene;  note note1(clk,reset_n,notein,noteout);  always@(posedge clk) if(~reset_n) begin  counter&lt;=28'b0;  ene&lt;=1'b0; end else begin   case(tim) \t0:begin div&lt;=28'd 5_000_000; div1&lt;=28'd 12_000_000; end \t1:begin div&lt;=28'd 10_000_000; div1&lt;=28'd 20_000_000; end \t2:begin div&lt;=28'd 25_000_000; div1&lt;=28'd 35_000_000; end \t3:begin div&lt;=28'd 50_000_000; div1&lt;=28'd 60_000_000; end    default begin div&lt;=28'd 10_000_000; div1&lt;=28'd 20_000_000; end   endcase      counter&lt;=counter+1;   if(counter==div) \t ene&lt;=1'b1;   if(counter==div1 | counter&gt;60_000_000)    begin \t counter&lt;=28'b0; \t ene&lt;=1'b0;    end end  always@(posedge clk) tone&lt;=en&noteout&ene; endmodule<\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041a\u0430\u0436\u0434\u044b\u0439 \u0442\u0430\u043a\u0442 \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u043f\u0440\u0438 \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f div \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u0437\u0432\u0443\u043a\u043e\u0432\u043e\u0439 \u0441\u0438\u0433\u043d\u0430\u043b, \u043f\u0440\u0438 \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f div1 \u0437\u0430\u043f\u0440\u0435\u0449\u0430\u0435\u0442\u0441\u044f. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0437\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u0438 \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0437\u0432\u0443\u043a\u043e\u0432\u044b\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432. \u0422\u0430\u043a\u0436\u0435 \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d 60000000 \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 div1 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442, \u043a\u043e\u0433\u0434\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430 \u043c\u0435\u0436\u0434\u0443 div \u0438 div1.<\/p>\n<h4>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0443 \u0444\u0430\u0439\u043b\u044b \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c\u0438 \u0432\u044b\u0448\u0435 \u043c\u043e\u0434\u0443\u043b\u044f\u043c\u0438.<\/h4>\n<p>  <\/p>\n<ul>\n<li> \u0412 \u0444\u0430\u0439\u043b\u0435 \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0443 \u043c\u0435\u043d\u044f \u044d\u0442\u043e <i>de0_cv.v<\/i> \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u0442\u0440\u043e\u0447\u043a\u0438:<br \/> \n<pre><code>wire [15:0]hword; wire [31:0]control;  sonn sonna (  .clock\t\t( CLOCK_50  ),  .reset_n \t\t( RESET_N   ),  .rx\t\t\t( GPIO_0[7] ),\t  .hword \t\t( hword     ) );  buzz buzz (  .clk\t\t\t( CLOCK_50\t\t),  .reset_n\t\t( RESET_N\t\t),  .en\t\t\t(control [0]\t\t),  .tim\t\t\t(control [2:1]\t),  .tone\t\t\t( GPIO_0[35]\t) );<\/code><\/pre>\n<p>  \u0414\u043b\u044f \u0432\u0445\u043e\u0434\u0430 RX UART \u043f\u0440\u0438\u0435\u043c\u043d\u0438\u043a\u0430 \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u043f\u0438\u043d GPIO_0[7] \u0438 \u0434\u043b\u044f \u0432\u044b\u0445\u043e\u0434\u0430 tone GPIO_0[35]. \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u044b hword \u0438 control \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043a \u0448\u0438\u043d\u0435.  <\/p>\n<pre><code> assign GPIO_0 [1] = 1'b1; \/\/VCC for Sensor  assign GPIO_0 [3] = 1'b0; \/\/GND for Sensor  assign GPIO_0 [34] = 1'b0; \/\/GND for buzz<\/code><\/pre>\n<p>  \u0412\u044b\u0434\u0435\u043b\u0438\u043c \u043d\u043e\u0436\u043a\u0438 GPIO_0 [1], GPIO_0 [3], GPIO_0 [34] \u0434\u043b\u044f \u043f\u0438\u0442\u0430\u043d\u0438\u044f \u0441\u0435\u043d\u0441\u043e\u0440\u0430, \u043e\u0431\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0432\u043e\u0434\u0430 \u0434\u043b\u044f \u0441\u0435\u043d\u0441\u043e\u0440\u0430 \u0438 \u043f\u044c\u0435\u0437\u043e\u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e.<\/p>\n<p>  \u0412 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u043c\u043e\u0434\u0443\u043b\u044f <i>mfp_system<\/i> \u0434\u043e\u0431\u0430\u0432\u0438\u043c:  <\/p>\n<pre><code>.IO_Sonar\t( hword    ),  .IO_control     ( control  ),<\/code><\/pre>\n<p>  <\/li>\n<li>\u0412 \u0444\u0430\u0439\u043b\u0435 <i>mfp_system.v<\/i> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u0445\u043e\u0434\u044b \u0432\u044b\u0445\u043e\u0434\u044b:<br \/> \n<pre><code> input [15:0]  IO_Sonar,  output [31:0] IO_control, <\/code><\/pre>\n<p>  \u0412 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u043c\u043e\u0434\u0443\u043b\u044f <i>mfp_ahb_lite_matrix_with_loader:<\/i>  <\/p>\n<pre><code>.IO_Sonar         (   IO_Sonar   ),  .IO_control       (   IO_control ),<\/code><\/pre>\n<p>  <\/li>\n<li>\u0412 \u0444\u0430\u0439\u043b\u0435 <i>mfp_ahb_lite_matrix_with_loader.v:<\/i><br \/> \n<pre><code> input  [15:0] IO_Sonar,  output  [31:0] IO_control,<\/code><\/pre>\n<p>  \u0412 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u043c\u043e\u0434\u0443\u043b\u044f <i>mfp_ahb_lite_matrix:<\/i>  <\/p>\n<pre><code> .IO_Sonar\t( IO_Sonar        ),   .IO_control       ( IO_control      ),<\/code><\/pre>\n<p>  <\/li>\n<li>\u0412 \u0444\u0430\u0439\u043b\u0435 <i>mfp_ahb_lite_matrix.v:<\/i>\n<pre><code> input  [15:0] IO_Sonar,  output [31:0] IO_control,<\/code><\/pre>\n<p>   \u0412 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u043c\u043e\u0434\u0443\u043b\u044f <i>mfp_ahb_gpio_slave<\/i>  <\/p>\n<pre><code> .IO_Sonar\t ( IO_Sonar ),  .IO_control       ( IO_control)<\/code><\/pre>\n<p>  <\/li>\n<li>\u0412 \u0444\u0430\u0439\u043b\u0435 <i>mfp_ahb_gpio_slave.v:<\/i><br \/> \n<pre><code> input [15:0]IO_Sonar,  output reg[31:0]IO_control,<\/code><\/pre>\n<p>   \u0432 \u043f\u0440\u0435\u0434\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c <i>always \u043f\u043e! HRESETn<\/i>  <\/p>\n<pre><code> IO_control      &lt;=32'b0;<\/code><\/pre>\n<p>   \u0418 \u0432 <i>case (write_ionum)<\/i>  <\/p>\n<pre><code> `MFP_CONTROL_IONUM       : IO_control      &lt;=HWDATA;<\/code><\/pre>\n<p>   \u0412 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c <i>always \u0432 case (read_ionum)<\/i>  <\/p>\n<pre><code>`MFP_SONAR_SENSOR_IONUM  : HRDATA = { 16'b0, IO_Sonar };<\/code><\/pre>\n<\/li>\n<\/ul>\n<p>  \u0412 \u0444\u0430\u0439\u043b\u0435 <i>mfp_ahb_lite_matrix_config.vh<\/i> \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043f\u0430\u043f\u043a\u0435 <i> C:\\github\\mipsfpga-plus<\/i><br \/>  \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u0442\u0440\u043e\u0447\u043a\u0438:   <\/p>\n<pre><code>`define MFP_SONAR_SENSOR_IONUM      4'h6 `define MFP_CONTROL_IONUM           4'h9  `define MFP_SONAR_SENSOR_ADDR     32'h1f800018 `define MFP_CONTROL_ADDR          32'h1f800024<\/code><\/pre>\n<p>  \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c \u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0431\u0443\u0434\u0443\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b.<\/p>\n<p>  \u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043c\u043e\u0434\u0443\u043b\u0435\u0439, \u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0437\u0434\u0435\u0441\u044c:<br \/>  <a href=\"https:\/\/github.com\/Denis-Kingit\/UltraSonicToMIPSfpga\">github.com\/Denis-Kingit\/UltraSonicToMIPSfpga<\/a><\/p>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u0430\u0435\u043c \u043f\u043b\u0430\u0442\u0443. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0434\u0430\u0442\u0447\u0438\u043a, \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c, \u043f\u044c\u0435\u0437\u043e\u0434\u0438\u043d\u0430\u043c\u0438\u043a:<br \/>  \u041f\u0438\u043d <i>GND<\/i> \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043a <i>GPIO_1[26]<\/i>, \u043f\u0438\u043d <i>TX<\/i> \u043a <i>GPIO_1[31]<\/i>.<br \/>  \u041f\u044c\u0435\u0437\u043e\u0434\u0438\u043d\u0430\u043c\u0438\u043a \u043a <i>GPIO_0[34]<\/i>,<i> GPIO_0[35]<\/i>.<br \/>  \u041f\u0438\u043d <i>GND<\/i> \u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u043a <i>GPIO_0[3]<\/i>, <i>VCC \u2013 GPIO_0[1], TX \u2013 GPIO_0[7]<\/i>.<br \/>  \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0447\u0442\u043e-\u0442\u043e \u0432\u0440\u043e\u0434\u0435:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/ff8\/4e2\/a46\/ff84e2a46acc4d089c9de044b5bdbb86.jpg\"\/><\/p>\n<h4>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c<\/h4>\n<p>  \u041a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043f\u0430\u043f\u043a\u0438 <i>C:\\github\\mipsfpga-plus\\programs\\01_light_sensor<\/i> \u0438\u043b\u0438 \u043f\u043e\u043f\u0440\u043e\u0441\u0442\u0443 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0432 \u043d\u0435\u0439.<br \/>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u0444\u0430\u0439\u043b <i>mfp_memory_mapped_registers.h<\/i> \u0430\u0434\u0440\u0435\u0441\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432:<\/p>\n<pre><code>#define MFP_SONAR_SENSOR_ADDR   0xBF800018 #define MFP_CONTROL_ADDR        0xBF800024  #define MFP_SONAR_SENSOR        (* (volatile unsigned *) MFP_SONAR_SENSOR_ADDR  ) #define MFP_CONTROL\t        (* (volatile unsigned *) MFP_CONTROL_ADDR  ) <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u043c \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0430 \u0441\u0435\u043c\u0438\u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043d\u044b\u0435 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u044b. \u0418 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0441\u0447\u0438\u0442\u0430\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0437\u0432\u0443\u043a\u043e\u0432\u044b\u043c \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u043c. \u0418\u0437\u043c\u0435\u043d\u0438\u043c main.c:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code>#include &quot;mfp_memory_mapped_registers.h&quot;  int main () {     MFP_CONTROL = 1;     for (;;)     {         MFP_7_SEGMENT_HEX = MFP_SONAR_SENSOR; \t  if(MFP_SONAR_SENSOR&lt;0x10) \t\tMFP_CONTROL = 1; \t  else if (MFP_SONAR_SENSOR&lt;0x12) \t\tMFP_CONTROL = 3; \t  else if (MFP_SONAR_SENSOR&lt;0x14) \t\tMFP_CONTROL = 5; \t  else if (MFP_SONAR_SENSOR&lt;0x16) \t\tMFP_CONTROL = 7; \t  else \t\tMFP_CONTROL = 0;     }      return 0; }<\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0432 \u0441\u043a\u0440\u0438\u043f\u0442   <\/p>\n<pre><code> 02_compile_and_link<\/code><\/pre>\n<p>  \u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c motorola_s_record \u0444\u0430\u0439\u043b  <\/p>\n<pre><code> 08_generate_motorola_s_record_file<\/code><\/pre>\n<p>  \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043a \u043a\u0430\u043a\u043e\u043c\u0443 \u0421\u041e\u041c \u043f\u043e\u0440\u0442\u0443 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d USB UART \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c  <\/p>\n<pre><code> 11_check_which_com_port_is_used<\/code><\/pre>\n<p>  \u0418\u0437\u043c\u0435\u043d\u044f\u0435\u043c \u0444\u0430\u0439\u043b <i>12_upload_to_the_board_using_uart<\/i>  <\/p>\n<pre><code>set a=7  mode com%a% baud=115200 parity=n data=8 stop=1 to=off xon=off odsr=off octs=off dtr=off rts=off idsr=off type program.rec &gt;\\.\\COM%a%<\/code><\/pre>\n<p>  \u0433\u0434\u0435 \u0430 \u2013 \u043d\u043e\u043c\u0435\u0440 \u0421\u041e\u041c \u043f\u043e\u0440\u0442\u0430, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d USB UART \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c.<br \/>  \u0418 \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443  <\/p>\n<pre><code> 12_upload_to_the_board_using_uart<\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/138\/f0f\/429\/138f0f429d7c49b685e3d7de68e8e209.jpg\"\/><\/p>\n<h4>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c Ultrasonic HC-SR04<\/h4>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/813\/a37\/d20\/813a37d20d3d4155bdcd13f423c346bb.jpg\" \/><\/div>\n<p>  \u0418\u0434\u0435\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0442\u0430\u043a\u0430\u044f \u0436\u0435, \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0435 \u043a \u0448\u0438\u043d\u0435. <\/p>\n<p>  \u0414\u043b\u044f \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0434\u0430\u0442\u044c \u0438\u043c\u043f\u0443\u043b\u044c\u0441 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e 10\u043c\u043a\u0441 \u043d\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0438\u043d Trig, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0443\u043b\u044c\u0442\u0440\u0430\u0437\u0432\u0443\u043a\u043e\u0432\u043e\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u0431\u0443\u0434\u0435\u0442 \u0438\u0437\u043b\u0443\u0447\u0430\u0442\u044c \u0432\u043e\u0441\u0435\u043c\u044c \u043f\u0430\u0447\u0435\u043a \u0443\u043b\u044c\u0442\u0440\u0430\u0437\u0432\u0443\u043a\u043e\u0432\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0441 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 40\u043a\u0413\u0446 \u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u044d\u0445\u043e. <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/c11\/5ed\/635\/c115ed63573744fdac58e7515b5ccbbb.jpg\" \/><\/div>\n<p>  \u0418\u0437\u043c\u0435\u0440\u0435\u043d\u043d\u043e\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0434\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u0448\u0438\u0440\u0438\u043d\u0435 \u044d\u0445\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043a\u043e\u0434\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u044d\u043b\u0435\u043a\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0434\u0430\u0442\u0447\u0438\u043a\u0430 (Echo). \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u0435\u0440\u0438\u043e\u0434 \u043c\u0435\u0436\u0434\u0443 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f\u043c\u0438 \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 50\u043c\u0441. \u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e \u0431\u044b \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u0430 (\u044d\u0445\u0430) \u0432 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430 58 \u0434\u043b\u044f \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0432 \u0441\u0430\u043d\u0442\u0438\u043c\u0435\u0442\u0440\u0430\u0445 \u0438\u043b\u0438 \u043d\u0430 148 \u0434\u043b\u044f \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0432 \u0434\u044e\u0439\u043c\u0430\u0445. \u0415\u0441\u043b\u0438 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u0439 \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e, \u0442\u043e \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u0438\u0433\u043d\u0430\u043b \u0441 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e 38\u043c\u0441 [2].  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041c\u043e\u0434\u0443\u043b\u044c Sonic<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code>module sonic(clk,trig,reset_n,en,echo,out); input clk,echo,reset_n,en; output reg trig; output reg[23:0]out;  reg [23:0]count; reg [23:0]countp;  always@(posedge clk) if(~reset_n) begin  countp&lt;=24'b0;  count&lt;=24'b0; end else   if(en) begin \tif(countp==0) \t trig&lt;=1'b1; \tif(echo) \t\tcount&lt;=count+1'b1;\t \tif(countp==500) \t\ttrig&lt;=1'b0; \tif(countp==2500000) \t\tbegin \t\t\tif (count&gt;1800000)\t\t\t \t\t\t\tout&lt;=24'hfff; \t\t\telse \t\t\t\tout&lt;=count\/2900; \t\t\tcountp&lt;=24'b0; \t\t\tcount&lt;=24'b0; \t\tend \tcountp&lt;=countp+1'b1; end endmodule\t<\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0421 \u043f\u0435\u0440\u0438\u043e\u0434\u043e\u043c 2500000 \u0442\u0430\u043a\u0442\u043e\u0432 (50\u043c\u0441) \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0438\u043c\u043f\u0443\u043b\u044c\u0441 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 trig \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e 500 \u0442\u0430\u043a\u0442\u043e\u0432 (10\u043c\u043a\u0441), \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u044d\u0445\u0430, \u0434\u0435\u043b\u0438\u043c \u043d\u0430 2900 (\u043d\u0430 50 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 \u0432 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u044b \u0438 \u043d\u0430 58 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 \u0432 \u0441\u0430\u043d\u0442\u0438\u043c\u0435\u0442\u0440\u044b) \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 (\u0434\u043b\u044f \u0442\u043e \u0447\u0442\u043e \u0431\u044b \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e), \u0435\u0441\u043b\u0438 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 36\u043c\u0441 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c 0\u0445FFF, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0437\u043d\u0430\u0447\u0430\u0442\u044c \u0447\u0442\u043e \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u0439 \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e.<\/p>\n<p>  \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u043c\u043e\u0434\u0443\u043b\u044c \u0432 \u0444\u0430\u0439\u043b\u0435 \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430(<i>de0_cv.v<\/i>).  <\/p>\n<pre><code>wire [23:0] usonic; sonic sonica ( .clk\t\t( CLOCK_50\t), .trig\t\t( GPIO_0[33]\t), .reset_n\t( RESET_N\t), .en\t\t( control[3]\t), .echo\t\t( GPIO_0[32]\t), .out\t\t( usonic\t) );<\/code><\/pre>\n<p>  \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c \u0444\u0430\u0439\u043b\u044b: <i>mfp_ahb_gpio_slave.v, mfp_ahb_lite_matrix.v, mfp_ahb_lite_matrix_with_loader.v, mfp_ahb_lite_matrix_config.vh, mfp_system.v<\/i> \u0432 \u043f\u0430\u043f\u043a\u0435 <i>C:\\github\\mipsfpga-plus<\/i>.<\/p>\n<p>  \u0414\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043f\u0438\u0442\u0430\u043d\u0438\u044f \u043d\u0430 5\u0412, \u043f\u0438\u043d trig \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043a GPIO_0[33], \u0442\u0430\u043a \u043a\u0430\u043a \u0434\u0430\u0442\u0447\u0438\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u0442 5\u0412, \u043f\u0438\u043d echo \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f \u043a GPIO_0[32], \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u043c \u043e\u0431\u0449\u0438\u0439 \u043f\u0440\u043e\u0432\u043e\u0434 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430, \u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u0438 \u043f\u043b\u0430\u0442\u044b.<\/p>\n<p>  \u041f\u0438\u0448\u0435\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code>#include &quot;mfp_memory_mapped_registers.h&quot;  int main () {     int k = 0;     for (;;)     {         \/\/MFP_RED_LEDS      = MFP_SONICR_SENSOR &gt;&gt; 4; \t  k=MFP_SONIC_SENSOR\/58\/50;         MFP_7_SEGMENT_HEX = k; \t  if(k&lt;0x10) \t\tMFP_CONTROL = 1; \t  else if (k&lt;0x12) \t\tMFP_CONTROL = 3; \t  else if (k&lt;0x14) \t\tMFP_CONTROL = 5; \t  else if (k&lt;0x16) \t\tMFP_CONTROL = 7; \t  else \t\tMFP_CONTROL = 0;     }      return 0; }<\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0421\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u0437\u0432\u0443\u043a\u0430, \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043d\u0430 \u0441\u0435\u043c\u0438\u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043d\u044b\u0435 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u044b.<\/p>\n<p>  \u0422\u0430\u043a \u0436\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0432 \u0444\u0430\u0439\u043b <i>mfp_memory_mapped_registers.h<\/i><\/p>\n<pre><code>#define MFP_SONIC_SENSOR_ADDR   0xBF800020  #define MFP_SONIC_SENSOR        (* (volatile unsigned *) MFP_SONIC_SENSOR_ADDR  )<\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/170\/290\/66e\/17029066ed3444378e8612ce2cff414d.jpg\"\/><\/p>\n<p>  \u041e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c \u0432\u044b\u0448\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u0430\u0448\u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438, \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u043c\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e.<\/p>\n<p>  [1] LV-MaxSonar \u2013 <a href=\"http:\/\/maxbotix.com\/documents\/LV-MaxSonar-EZ_Datasheet.pdf\">maxbotix.com\/documents\/LV-MaxSonar-EZ_Datasheet.pdf<\/a><br \/>  [2] Ultrasonic HC SR04 \u2013 <a href=\"http:\/\/robocraft.ru\/blog\/electronics\/772.html\">robocraft.ru\/blog\/electronics\/772.html<\/a><br \/>  \u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 MIPSfpga-plus <a href=\"https:\/\/github.com\/MIPSfpga\/mipsfpga-plus\">github.com\/MIPSfpga\/mipsfpga-plus<\/a><br \/>  Codescape \u2013<a href=\"https:\/\/community.imgtec.com\/developers\/mips\/tools\/codescape-mips-sdk\/download-codescape-mips-sdk-essentials\/\"> Codescape <\/a> <br \/>  \u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u043f\u043e \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044e mipsfpga <a href=\"http:\/\/www.silicon-russia.com\/2015\/12\/11\/mipsfpga-download-instructions\"> \u2013 \u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f <\/a> <br \/>  \u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043c\u043e\u0434\u0443\u043b\u0435\u0439, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432:<br \/>  <a href=\"https:\/\/github.com\/Denis-Kingit\/UltraSonicToMIPSfpga\">github.com\/Denis-Kingit\/UltraSonicToMIPSfpga<\/a><br \/>  \u041f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u043a\u043d\u0438\u0436\u043a\u0430 \u2013 \u0414\u044d\u0432\u0438\u0434 \u0425\u0430\u0440\u0440\u0438\u0441 \u0438 \u0421\u0430\u0440\u0430 \u0425\u0430\u0440\u0440\u0438\u0441 \u00ab\u0426\u0438\u0444\u0440\u043e\u0432\u0430\u044f \u0441\u0445\u0435\u043c\u043e\u0442\u0435\u0445\u043d\u0438\u043a\u0430 \u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430\u00bb<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:\/\/habrahabr.ru\/post\/316770\/\"> https:\/\/habrahabr.ru\/post\/316770\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0414\u043e\u0431\u0440\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u0443\u0442\u043e\u043a. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043a\u0430\u043a \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u0438, \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0434\u0432\u0443\u0445 \u0443\u043b\u044c\u0442\u0440\u0430\u0437\u0432\u0443\u043a\u043e\u0432\u044b\u0445 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432 HC-SR04 \u0438 Pmod MAXSONAR, \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043d\u0430 \u043a\u0440\u0438\u0441\u0442\u0430\u043b\u043b\u0435 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 MIPSfpga. \u0422\u0430\u043a\u0436\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043a\u0430\u043a \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439.<br \/>  \u041e\u0441\u043d\u043e\u0432\u044b\u0432\u0430\u044f\u0441\u044c \u043d\u0430 \u043c\u043e\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u0430\u0448\u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u043c\u0438 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u0421\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0441\u043e \u0441\u0432\u043e\u0438\u043c \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438, \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 MIPSfpga.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/d55\/726\/637\/d5572663735848adbe8d9c368bd9c64f.jpg\"\/>  <\/p>\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-281949","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/281949","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=281949"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/281949\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=281949"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=281949"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=281949"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}