{"id":284141,"date":"2017-03-30T00:20:02","date_gmt":"2017-03-29T20:20:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=284141"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=284141","title":{"rendered":"MIPSfpga \u0438 UART"},"content":{"rendered":"<p>\u041f\u0440\u043e\u0448\u043b\u043e \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043c\u0435\u0441\u044f\u0446\u0430 \u0441 \u0442\u0435\u0445 \u043f\u043e\u0440, \u043a\u0430\u043a \u044f \u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043b open source \u043c\u043e\u0434\u0443\u043b\u044c UART16550 \u043d\u0430 \u0448\u0438\u043d\u0443 AHB-Lite. \u041f\u0438\u0441\u0430\u0442\u044c \u043e\u0431 \u044d\u0442\u043e\u043c \u043d\u0430 \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u0431\u044b\u043b\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435 \u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u0435\u0449\u0435 \u043d\u0435 \u0431\u044b\u043b\u0430 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u0440\u043e \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f MIPSfpga.<br \/>  \u0415\u0441\u043b\u0438 \u0432\u044b \u043e\u043f\u044b\u0442\u043d\u044b\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a, \u0442\u043e \u0434\u043b\u044f \u0432\u0430\u0441 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0430 \u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u043d\u043e\u0432\u043e\u0441\u0442\u044c: UART16550 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0432 \u0441\u043e\u0441\u0442\u0430\u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u044b MIPSfpga-plus, \u0434\u0430\u043b\u044c\u0448\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0435 \u0447\u0438\u0442\u0430\u0442\u044c. \u0410 \u0442\u0435\u043c, \u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f \u2014 \u0434\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434 \u043a\u0430\u0442.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/7c5\/699\/9aa\/7c56999aaba2465f8074e370bf2e3407.gif\" alt=\"image\"\/><\/p>\n<p><a name=\"habracut\"><\/a>  <\/p>\n<h2 id=\"vvedenie\">\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h2>\n<p>  <\/p>\n<p>\u041f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0437\u043d\u0430\u043a\u043e\u043c \u0441 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u044c\u044e \u0432 \u043e\u0431\u044a\u0435\u043c\u0435 \u0443\u0447\u0435\u0431\u043d\u0438\u043a\u0430 \u0425\u0430\u0440\u0440\u0438\u0441-\u044d\u043d\u0434-\u0425\u0430\u0440\u0440\u0438\u0441 [<a href=\"https:\/\/habrahabr.ru\/post\/259505\/\">L1<\/a>];<\/li>\n<li>\u0438\u043c\u0435\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u0430\u043c MIPSfpga [<a href=\"https:\/\/habrahabr.ru\/post\/275215\/\">L2<\/a>] \u0438 mipsfpga-plus [<a href=\"https:\/\/github.com\/MIPSfpga\/mipsfpga-plus\">L3<\/a>];<\/li>\n<li>\u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u044b\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 (\u043b\u044e\u0431\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b), \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 UART. \u041e\u0441\u0432\u0435\u0436\u0438\u0442\u044c, \u0447\u0442\u043e \u0438\u0437 \u0441\u0435\u0431\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 UART \u043c\u043e\u0436\u043d\u043e \u0437\u0434\u0435\u0441\u044c [<a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A3%D0%BD%D0%B8%D0%B2%D0%B5%D1%80%D1%81%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%B0%D1%81%D0%B8%D0%BD%D1%85%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BF%D1%80%D0%B8%D1%91%D0%BC%D0%BE%D0%BF%D0%B5%D1%80%D0%B5%D0%B4%D0%B0%D1%82%D1%87%D0%B8%D0%BA\">L4<\/a>];<\/li>\n<\/ul>\n<p>  <\/p>\n<h2 id=\"chto-takoe-uart16550\">\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 UART16550<\/h2>\n<p>  <\/p>\n<p>\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0432 [<a href=\"https:\/\/ru.wikipedia.org\/wiki\/16550_UART\">L5<\/a>], \u043d\u0430\u0439\u0442\u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u043d\u0430 \u043d\u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u0432 google [<a href=\"https:\/\/www.google.ru\/search?q=uart+16550+datasheet+file%3Apdf\">L6<\/a>], \u0434\u043b\u044f \u043d\u0430\u0441 \u0432\u0430\u0436\u043d\u043e \u0434\u0440\u0443\u0433\u043e\u0435:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u043e\u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430 \u043a\u0440\u0430\u0439\u043d\u0435 \u0448\u0438\u0440\u043e\u043a\u043e\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044f;<\/li>\n<li>\u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043d\u0435\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u044f\u0434\u0440\u043e\u043c Linux;<\/li>\n<li>\u0434\u043b\u044f \u043d\u0435\u0435 \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 open source \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430 verilog [<a href=\"https:\/\/github.com\/freecores\/uart16550\">L7<\/a>, <a href=\"https:\/\/github.com\/olofk\/uart16550\">L8<\/a>, <a href=\"http:\/\/opencores.org\/project,uart16550\">L9<\/a>], \u043d\u043e \u0434\u043b\u044f \u0448\u0438\u043d\u044b Wishbone;<\/li>\n<li>\u0446\u0435\u043d\u0430 \u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0443\u044e \u0432 MIPSfpga \u0448\u0438\u043d\u0443 AHB-Lite \u2014 \u043e\u043a\u043e\u043b\u043e 100 \u0441\u0442\u0440\u043e\u0447\u0435\u043a \u043a\u043e\u0434\u0430 [<a href=\"https:\/\/github.com\/MIPSfpga\/mipsfpga-plus\/blob\/5169e133ea2de692e8f9564896f46844ec5bb398\/mfp_ahb_lite_uart16550.v\">S1<\/a>]:<\/li>\n<\/ul>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">mfp_ahb_lite_uart16550<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code>module mfp_ahb_lite_uart16550(     \/\/ABB-Lite side     input                   HCLK,     input                   HRESETn,     input       [ 31 : 0 ]  HADDR,     input       [  2 : 0 ]  HBURST,     input                   HMASTLOCK,  \/\/ ignored     input       [  3 : 0 ]  HPROT,      \/\/ ignored     input                   HSEL,     input       [  2 : 0 ]  HSIZE,     input       [  1 : 0 ]  HTRANS,     input       [ 31 : 0 ]  HWDATA,     input                   HWRITE,     output  reg [ 31 : 0 ]  HRDATA,     output                  HREADY,     output                  HRESP,     input                   SI_Endian,  \/\/ ignored      \/\/UART side     input                   UART_SRX,   \/\/ UART serial input signal     output                  UART_STX,   \/\/ UART serial output signal     output                  UART_RTS,   \/\/ UART MODEM Request To Send     input                   UART_CTS,   \/\/ UART MODEM Clear To Send     output                  UART_DTR,   \/\/ UART MODEM Data Terminal Ready     input                   UART_DSR,   \/\/ UART MODEM Data Set Ready     input                   UART_RI,    \/\/ UART MODEM Ring Indicator     input                   UART_DCD,   \/\/ UART MODEM Data Carrier Detect      \/\/UART internal     output                  UART_BAUD,  \/\/ UART baudrate output     output                  UART_INT    \/\/ UART interrupt );      parameter   S_INIT      = 0,                 S_IDLE      = 1,                 S_READ      = 2,                 S_WRITE     = 3;      reg  [ 1:0 ]    State, Next;      assign      HRESP  = 1'b0;     assign      HREADY = (State ==  S_IDLE);      always @ (posedge HCLK) begin         if (~HRESETn)             State &lt;= S_INIT;         else             State &lt;= Next;     end      reg  [ 2:0 ]    ADDR_old;     wire [ 2:0 ]    ADDR = HADDR [ 4:2 ];     wire [ 7:0 ]    ReadData;      parameter       HTRANS_IDLE       = 2'b0;     wire            NeedAction = HTRANS != HTRANS_IDLE &amp;&amp; HSEL;      always @ (*) begin         \/\/State change decision         case(State)             default     :   Next = S_IDLE;             S_IDLE      :   Next = ~NeedAction  ? S_IDLE : (                                     HWRITE      ? S_WRITE : S_READ );         endcase     end      always @ (posedge HCLK) begin         case(State)             S_INIT      :   ;             S_IDLE      :   if(HSEL) ADDR_old &lt;= ADDR;             S_READ      :   HRDATA &lt;= { 24'b0, ReadData};             S_WRITE     :   ;         endcase     end      wire [ 7:0 ]    WriteData   = HWDATA [ 7:0 ];     wire [ 2:0 ]    ActionAddr;     wire            WriteAction;     wire            ReadAction;     reg  [ 10:0 ]   conf;      assign { ReadAction, WriteAction, ActionAddr } = conf;      always @ (*) begin         \/\/io         case(State)             default     :   conf = { 2'b00, 8'b0     };             S_READ      :   conf = { 2'b10, ADDR     };             S_WRITE     :   conf = { 2'b01, ADDR_old };         endcase     end      \/\/ Registers     uart_regs   regs(         .clk            (   HCLK            ),         .wb_rst_i       (   ~HRESETn        ),         .wb_addr_i      (   ActionAddr      ),         .wb_dat_i       (   WriteData       ),         .wb_dat_o       (   ReadData        ),         .wb_we_i        (   WriteAction     ),         .wb_re_i        (   ReadAction      ),         .modem_inputs   (   { UART_CTS, UART_DSR, UART_RI, UART_DCD }   ),         .stx_pad_o      (   UART_STX        ),         .srx_pad_i      (   UART_SRX        ),         .rts_pad_o      (   UART_RTS        ),         .dtr_pad_o      (   UART_DTR        ),         .int_o          (   UART_INT        ),         .baud_o         (   UART_BAUD       )     );  endmodule<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h2 id=\"osnovnye-osobennosti-realizacii\">\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438<\/h2>\n<p>  <\/p>\n<ul>\n<li>\u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0432\u0437\u044f\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 [<a href=\"https:\/\/github.com\/olofk\/uart16550\">L8<\/a>], \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u043e\u0441\u043d\u043e\u0432\u0430\u043d \u043d\u0430 [<a href=\"https:\/\/github.com\/freecores\/uart16550\">L7<\/a>, <a href=\"http:\/\/opencores.org\/project,uart16550\">L9<\/a>];<\/li>\n<li>\u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u0431\u0430\u0437\u043e\u0432\u044b\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u0438\u0437 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d \u043a\u043e\u0434, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 \u0441 \u0448\u0438\u043d\u043e\u0439 Wishbone. \u041e\u043d \u0437\u0430\u043c\u0435\u043d\u0435\u043d \u043d\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u0434\u043b\u044f AHB-Lite (mfp_ahb_lite_uart16550) [<a href=\"https:\/\/github.com\/MIPSfpga\/mipsfpga-plus\/blob\/5169e133ea2de692e8f9564896f46844ec5bb398\/mfp_ahb_lite_uart16550.v\">S1<\/a>];<\/li>\n<li>\u0432\u0435\u0441\u044c \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0438\u0437 \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043a\u043e\u0434 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 uart16550 [<a href=\"https:\/\/github.com\/MIPSfpga\/mipsfpga-plus\/tree\/5169e133ea2de692e8f9564896f46844ec5bb398\/uart16550\">S2<\/a>];<\/li>\n<li>\u043c\u043e\u0434\u0443\u043b\u044c mfp_ahb_lite_uart16550 \u0432\u043a\u043b\u044e\u0447\u0435\u043d \u0432 \u0441\u043e\u0441\u0442\u0430\u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043d\u0430 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0439 \u043e\u0441\u043d\u043e\u0432\u0435, \u043e\u043f\u0446\u0438\u044f MFP_USE_DUPLEX_UART [<a href=\"https:\/\/github.com\/MIPSfpga\/mipsfpga-plus\/blob\/5169e133ea2de692e8f9564896f46844ec5bb398\/mfp_ahb_lite_matrix_config.vh#L21\">S3<\/a>] \u0432 \u0444\u0430\u0439\u043b\u0435 mfp_ahb_lite_matrix_config.vh \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 <em>UART_SRX<\/em> \u0438 <em>UART_STX<\/em>;<\/li>\n<li>\u0434\u043b\u044f \u0443\u0436\u0435 \u0438\u043c\u0435\u044e\u0449\u0438\u0445\u0441\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 <em>UART_RX<\/em> \u0438 <em>UART_TX<\/em> \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f:<br \/>  <em>UART_RX<\/em> \u2014 \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0440\u0435\u0436\u0438\u043c\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0432 \u043f\u0430\u043c\u044f\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043a\u0430\u043a \u044d\u0442\u043e \u0438 \u0431\u044b\u043b\u043e \u0440\u0430\u043d\u0435\u0435 (\u043c\u043e\u0434\u0443\u043b\u044c mfp_uart_receiver, \u043a UART16550 \u043d\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f). \u0415\u0441\u043b\u0438 \u043e\u043f\u0446\u0438\u044f MFP_USE_DUPLEX_UART \u043d\u0435 \u0430\u043a\u0442\u0438\u0432\u043d\u0430, \u0442\u043e <em>UART_TX<\/em> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0442 UART16550 \u043d\u0430\u0440\u0443\u0436\u0443, \u043f\u0440\u0438\u0435\u043c \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d. \u0415\u0441\u043b\u0438 \u043e\u043f\u0446\u0438\u044f MFP_USE_DUPLEX_UART \u0430\u043a\u0442\u0438\u0432\u043d\u0430, \u0442\u043e <em>UART_TX<\/em> \u2014 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f, \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437\/\u0432 mfp_ahb_lite_uart16550 \u0441\u043b\u0443\u0436\u0430\u0442 <em>UART_SRX<\/em> \u0438 <em>UART_STX<\/em> [<a href=\"https:\/\/github.com\/MIPSfpga\/mipsfpga-plus\/blob\/5169e133ea2de692e8f9564896f46844ec5bb398\/mfp_ahb_lite_matrix_with_loader.v#L178-L185\">S4<\/a>];<\/li>\n<li>\u0432\u044b\u0432\u043e\u0434 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043c\u043e\u043c \u043d\u0430 \u0443\u0440\u043e\u0432\u0435\u043d\u044c top \u043c\u043e\u0434\u0443\u043b\u044f \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043b\u0441\u044f. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043b\u0438\u043d\u0438\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 \u043c\u043e\u0434\u0443\u043b\u044f ahb_lite_uart16550 \u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 (<em>UART_RTS, UART_CTS, UART_DTR, UART_DSR, UART_RI, UART_DCD<\/em>) [<a href=\"https:\/\/github.com\/MIPSfpga\/mipsfpga-plus\/blob\/5169e133ea2de692e8f9564896f46844ec5bb398\/mfp_ahb_lite_matrix.v#L189-L196\">S5<\/a>];<\/li>\n<li>\u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f (<em>UART_INT<\/em>) \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \u043a \u0432\u0445\u043e\u0434\u0443 hw3 (\u0441\u0438\u0433\u043d\u0430\u043b <em>SI_Int[3]<\/em>) \u0434\u043b\u044f \u0440\u0435\u0436\u0438\u043c\u043e\u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438 \u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0433\u043e. \u0418 \u043a eic5 (\u0441\u0438\u0433\u043d\u0430\u043b <em>EIC_input[5]<\/em>) \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 [<a href=\"https:\/\/github.com\/MIPSfpga\/mipsfpga-plus\/blob\/5169e133ea2de692e8f9564896f46844ec5bb398\/mfp_system.v#L376-L385\">S6<\/a>];<\/li>\n<li>\u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u043b\u0438\u043d\u0438\u044f <em>UART_STX<\/em> \u0437\u0430\u043c\u043a\u043d\u0443\u0442\u0430 \u043d\u0430 <em>UART_SRX<\/em> [<a href=\"https:\/\/github.com\/MIPSfpga\/mipsfpga-plus\/blob\/5169e133ea2de692e8f9564896f46844ec5bb398\/mfp_testbench.v#L51-L54\">S7<\/a>];<\/li>\n<li>\u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Modelsim;<\/li>\n<li>\u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043d\u0430 \u0436\u0435\u043b\u0435\u0437\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u0430 \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 Terasic DE10-Lite [<a href=\"http:\/\/de10-lite.terasic.com\/\">L10<\/a>];<\/li>\n<li>\u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 UART16550 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0434\u0432\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b: 05_uart [<a href=\"https:\/\/github.com\/MIPSfpga\/mipsfpga-plus\/tree\/5169e133ea2de692e8f9564896f46844ec5bb398\/programs\/05_uart\">S8<\/a>] \u0438 08_uart_irq [<a href=\"https:\/\/github.com\/MIPSfpga\/mipsfpga-plus\/tree\/5169e133ea2de692e8f9564896f46844ec5bb398\/programs\/08_uart_irq\">S9<\/a>]: \u043f\u043e\u0441\u043b\u0435 \u0441\u0431\u0440\u043e\u0441\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 uart (8n1, 115200), \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043a\u043e\u0434 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0430 LED \u0438 7-\u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043d\u044b\u0445 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430\u0445. \u041f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c\u044b\u0439 \u043f\u043e uart \u0441\u0438\u043c\u0432\u043e\u043b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e;<\/li>\n<li>\u043e\u0442\u043b\u0430\u0434\u043a\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 &quot;\u0432 \u043e\u0442\u0440\u044b\u0432\u0435&quot; \u043e\u0442 \u043a\u043e\u0434\u0430 mipsfpga+ \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 [<a href=\"https:\/\/github.com\/zhelnio\/ahb_lite_uart16550\">L11<\/a>];<\/li>\n<li>\u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u044f \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430, [<a href=\"https:\/\/github.com\/MIPSfpga\/mipsfpga-plus\/blob\/5169e133ea2de692e8f9564896f46844ec5bb398\/documentation\/peripherals\/UART_spec.pdf\">D1<\/a>]. \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0431\u0435\u0433\u043b\u043e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u043d\u0435\u0439, \u0447\u0442\u043e\u0431\u044b \u043b\u0443\u0447\u0448\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043c\u044b\u0439 \u043d\u0438\u0436\u0435 \u043f\u0440\u0438\u043c\u0435\u0440;<\/li>\n<li>\u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0448\u0438\u043d\u043e\u0439 AHB-Lite \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0432 [<a href=\"https:\/\/github.com\/zhelnio\/memos\/blob\/master\/public\/02_mips_uart\/doc\/D2_MicroAptiv_UP_AHB_Lite_Interface_MD01082.pdf\">D2<\/a>];<\/li>\n<\/ul>\n<p>  <\/p>\n<h3 id=\"primer\">\u041f\u0440\u0438\u043c\u0435\u0440<\/h3>\n<p>  <\/p>\n<h4 id=\"poryadok-zapuska\">\u041f\u043e\u0440\u044f\u0434\u043e\u043a \u0437\u0430\u043f\u0443\u0441\u043a\u0430<\/h4>\n<p>  <\/p>\n<ul>\n<li>\n<p>\u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u0432 \u0444\u0430\u0439\u043b\u0435 mfp_ahb_lite_matrix_config.vh \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 [<a href=\"https:\/\/github.com\/MIPSfpga\/mipsfpga-plus\/blob\/5169e133ea2de692e8f9564896f46844ec5bb398\/mfp_ahb_lite_matrix_config.vh#L21\">S3<\/a>]:<\/p>\n<p>  <\/p>\n<pre><code>`define MFP_USE_DUPLEX_UART<\/code><\/pre>\n<p>  <\/li>\n<li>\u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u0441 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439: mipsfpga-plus\/programs\/05_uart [<a href=\"https:\/\/github.com\/MIPSfpga\/mipsfpga-plus\/tree\/5169e133ea2de692e8f9564896f46844ec5bb398\/programs\/05_uart\">S8<\/a>], \u043b\u0438\u0431\u043e 08_uart_irq [<a href=\"https:\/\/github.com\/MIPSfpga\/mipsfpga-plus\/tree\/5169e133ea2de692e8f9564896f46844ec5bb398\/programs\/08_uart_irq\">S9<\/a>];<\/li>\n<li>\n<p>\u0432 \u0444\u0430\u0439\u043b\u0435 main.c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c [<a href=\"https:\/\/github.com\/MIPSfpga\/mipsfpga-plus\/blob\/5169e133ea2de692e8f9564896f46844ec5bb398\/programs\/08_uart_irq\/main.c#L12\">S10<\/a>]:<\/p>\n<p>  <\/p>\n<pre><code>#define RUNTYPE    SIMULATION<\/code><\/pre>\n<p>  <\/li>\n<li>\n<p>\u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u0431\u043e\u0440\u043a\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0438 \u0435\u0435 \u0437\u0430\u043f\u0443\u0441\u043a \u0432 \u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0435:<\/p>\n<p>  <\/p>\n<pre><code>02_compile_and_link.bat 05_generate_verilog_readmemh_file.bat 06_simulate_with_modelsim.bat<\/code><\/pre>\n<p>  <\/li>\n<li>\u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u043d\u0430\u0436\u0430\u0442\u044c &quot;\u043d\u0435\u0442&quot;, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0435 \u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0430;<\/li>\n<li>\u0442\u043e, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 &quot;\u043d\u0430 \u0436\u0435\u043b\u0435\u0437\u0435&quot;, \u0432\u0438\u0434\u043d\u043e \u043d\u0430 \u0437\u0430\u0433\u043b\u0430\u0432\u043d\u043e\u0439 gif-\u043a\u0435.<\/li>\n<\/ul>\n<p>  <\/p>\n<h4 id=\"opisanie-programmy-i-konfiguracii-sistemy\">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/h4>\n<p>  <\/p>\n<ul>\n<li>\u0442\u0430\u043a \u043a\u0430\u043a \u043f\u0440\u0438\u043c\u0435\u0440 08_uart_irq \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u043c\u0438\u043c\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u0430\u043c\u043e\u0433\u043e UART16550 \u0435\u0449\u0435 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0438\u043c \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439, \u0442\u043e \u043d\u0438\u0436\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f;<\/li>\n<li>\u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0449\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0432\u044b\u043d\u0435\u0441\u0435\u043d\u044b \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b uart16550.h [<a href=\"https:\/\/github.com\/MIPSfpga\/mipsfpga-plus\/blob\/5169e133ea2de692e8f9564896f46844ec5bb398\/programs\/08_uart_irq\/uart16550.h\">S11<\/a>];<\/li>\n<li>\n<p>\u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 UART16550 [<a href=\"https:\/\/github.com\/MIPSfpga\/mipsfpga-plus\/blob\/5169e133ea2de692e8f9564896f46844ec5bb398\/programs\/08_uart_irq\/main.c#L27-L37\">S12<\/a>]:<\/p>\n<p>  <\/p>\n<pre><code>void uartInit(uint16_t divisor) { \/\/ 8n1 uart mode MFP_UART_LCR = MFP_UART_LCR_8N1; \/\/ Divisor Latches access enable MFP_UART_LCR |= MFP_UART_LCR_LATCH; \/\/ Divisor LSB MFP_UART_DLL = divisor &amp; 0xFF; \/\/ Divisor MSB MFP_UART_DLH = (divisor &gt;&gt; 8) &amp; 0xff; \/\/ Divisor Latches access disable MFP_UART_LCR &amp;= ~MFP_UART_LCR_LATCH; \/\/enable Received Data available interrupt MFP_UART_IER = MFP_UART_IER_RDA; \/\/set 4 byte Receiver FIFO Interrupt trigger level MFP_UART_FCR = MFP_UART_FCR_ITL4; }<\/code><\/pre>\n<p>  <\/li>\n<li>\n<p>\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 [<a href=\"https:\/\/github.com\/MIPSfpga\/mipsfpga-plus\/blob\/5169e133ea2de692e8f9564896f46844ec5bb398\/programs\/08_uart_irq\/main.c#L65-L76\">S13<\/a>] (\u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d\u0430 \u0432 [<a href=\"https:\/\/habrahabr.ru\/post\/324900\/\">L12<\/a>]):<\/p>\n<p>  <\/p>\n<pre><code>void mipsInterruptInit(void) { \/\/ Status.BEV  0 - vector interrupt mode mips32_bicsr (SR_BEV); \/\/ Cause.IV,   1 - special int vector (0x200) \/\/ where 0x200 - base for others interrupts; mips32_biscr (CR_IV); \/\/ get IntCtl reg value uint32_t intCtl = mips32_getintctl(); \/\/ set interrupt table vector spacing (0x20 in our case) \/\/ see exceptions.S for details mips32_setintctl(intCtl | INTCTL_VS_32); \/\/ interrupt enable, HW3 unmasked mips32_bissr (SR_IE | SR_HINT3);  }<\/code><\/pre>\n<p>  <\/li>\n<li>\n<p>\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043e\u043d\u043e \u0432\u044b\u0437\u0432\u0430\u043d\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u043e \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u043c FIFO [<a href=\"https:\/\/github.com\/MIPSfpga\/mipsfpga-plus\/blob\/5169e133ea2de692e8f9564896f46844ec5bb398\/programs\/08_uart_irq\/main.c#L78-L84\">S14<\/a>]:<\/p>\n<p>  <\/p>\n<pre><code>\/\/ uart interrupt handler void __attribute__ ((interrupt, keep_interrupts_masked)) __mips_isr_hw3 () { \/\/ Receiver Data available interrupt handler if(MFP_UART_IIR &amp; MFP_UART_IIR_RDA)     uartReceive(); }<\/code><\/pre>\n<p>  <\/li>\n<li>\n<p>\u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0445 \u0447\u0442\u0435\u043d\u0438\u0435 (\u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 FIFO \u043d\u0435 \u043e\u043f\u0443\u0441\u0442\u0435\u0435\u0442) \u0438 \u0432\u044b\u0432\u043e\u0434 [<a href=\"https:\/\/github.com\/MIPSfpga\/mipsfpga-plus\/blob\/5169e133ea2de692e8f9564896f46844ec5bb398\/programs\/08_uart_irq\/main.c#L52-L63\">S15<\/a>]:<\/p>\n<p>  <\/p>\n<pre><code>void uartReceive(void) { \/\/ is there something in receiver fifo? while (MFP_UART_LSR &amp; MFP_UART_LSR_DR) {     \/\/ data receive     uint8_t data = MFP_UART_RXR;     receivedDataOutput(data);      #if   RUNTYPE == HARDWARE     uartTransmit(data);     #endif } }<\/code><\/pre>\n<p>  <\/li>\n<li>\u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0430 \u0438\u0434\u0435\u0442 \u043d\u0430 &quot;\u0436\u0435\u043b\u0435\u0437\u0435&quot;, \u0442\u043e \u0432\u0441\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e [<a href=\"https:\/\/github.com\/MIPSfpga\/mipsfpga-plus\/blob\/5169e133ea2de692e8f9564896f46844ec5bb398\/programs\/08_uart_irq\/main.c#L59-L61\">S16<\/a>]:<br \/> \n<pre><code>void uartTransmit(uint8_t data) { \/\/ waiting for transmitter fifo empty while (!(MFP_UART_LSR &amp; MFP_UART_LSR_TFE));  \/\/ data transmit MFP_UART_TXR = data; }<\/code><\/pre>\n<\/li>\n<li>\n<p>\u043d\u0438\u0436\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u0422\u0430\u043a \u043a\u0430\u043a \u043f\u0440\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u043c\u043e\u0434\u0443\u043b\u044f \u043c\u044b \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u0440\u0435\u0436\u0438\u043c \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u0438\u0435\u043c\u0430 4\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u043d\u0430 \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u0440\u0438\u0435\u043c\u0430. \u041e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u044b \u043d\u0430\u043c\u0438 \u043f\u043e\u0441\u043b\u0435 \u0435\u0449\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0442\u0430\u043a\u043e\u0433\u043e \u0436\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f, \u043d\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0443\u0436\u0435 \u0431\u044b\u043b\u043e \u0432\u044b\u0437\u0432\u0430\u043d\u043e \u043d\u0435 \u043d\u0430\u043b\u0438\u0447\u0438\u0435\u043c 4\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438, \u0430 \u043d\u0435 \u043f\u0443\u0441\u0442\u043e\u0439 \u043e\u0447\u0435\u0440\u0435\u0434\u044c\u044e \u0438 \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u043e\u043c (\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438 \u0441\u043e\u043e\u0431\u0449\u0438\u043b, \u0447\u0442\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0435 \u043f\u0443\u0441\u0442\u0430\u044f);<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/ec5\/9c7\/a0f\/ec59c7a0f8a24f74ba55ba2a5ef4f943.png\" alt=\"image\"\/><\/p>\n<p>  <\/li>\n<li>\n<p>\u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b 05_uart \u043f\u0440\u0438\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0443\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438, \u0432\u0441\u0435 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0436\u0434\u0443\u0442 \u0432 FIFO \u043f\u0440\u0438\u0435\u043c\u043d\u0438\u043a\u0430:<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/d2a\/314\/78f\/d2a31478fb6241aa88cdb79617b48841.png\" alt=\"image\"\/><\/p>\n<p>  <\/li>\n<\/ul>\n<p>  <\/p>\n<h2 id=\"blagodarnosti\">\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u043d\u043e\u0441\u0442\u0438<\/h2>\n<p>  <\/p>\n<p>\u0410\u0432\u0442\u043e\u0440 \u0432\u044b\u0440\u0430\u0436\u0430\u0435\u0442 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u043d\u043e\u0441\u0442\u044c <a href=\"https:\/\/habrahabr.ru\/post\/259505\/\">\u043a\u043e\u043b\u043b\u0435\u043a\u0442\u0438\u0432\u0443 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a\u043e\u0432<\/a> \u0443\u0447\u0435\u0431\u043d\u0438\u043a\u0430 \u0414\u044d\u0432\u0438\u0434\u0430 \u0425\u0430\u0440\u0440\u0438\u0441\u0430 \u0438 \u0421\u0430\u0440\u044b \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, \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 <a href=\"https:\/\/www.imgtec.com\/\">Imagination Technologies<\/a> \u0437\u0430 \u0430\u043a\u0430\u0434\u0435\u043c\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u044e \u043d\u0430 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u043e\u0435 \u044f\u0434\u0440\u043e \u0438 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u042e\u0440\u0438\u044e \u041f\u0430\u043d\u0447\u0443\u043b\u0443 <a href=\"https:\/\/habrahabr.ru\/users\/yuripanchul\/\" class=\"user_link\">YuriPanchul<\/a> \u0437\u0430 \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u043e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u0438\u0437\u0430\u0446\u0438\u0438 MIPSfpga.<\/p>\n<p>  <\/p>\n<h2 id=\"ssylki\">\u0421\u0441\u044b\u043b\u043a\u0438<\/h2>\n<p>  <\/p>\n<p>[L1] \u2014 <a href=\"https:\/\/habrahabr.ru\/post\/259505\/\">\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<\/a>;<br \/>  [L2] \u2014 <a href=\"https:\/\/habrahabr.ru\/post\/275215\/\">\u041a\u0430\u043a \u043d\u0430\u0447\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 MIPSfpga<\/a>;<br \/>  [L3] \u2014 <a href=\"https:\/\/github.com\/MIPSfpga\/mipsfpga-plus\">\u041f\u0440\u043e\u0435\u043a\u0442 MIPSfpga-plus \u043d\u0430 github<\/a>;<br \/>  [L4] \u2014 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A3%D0%BD%D0%B8%D0%B2%D0%B5%D1%80%D1%81%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%B0%D1%81%D0%B8%D0%BD%D1%85%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BF%D1%80%D0%B8%D1%91%D0%BC%D0%BE%D0%BF%D0%B5%D1%80%D0%B5%D0%B4%D0%B0%D1%82%D1%87%D0%B8%D0%BA\">Wikipedia: UART<\/a>;<br \/>  [L5] \u2014 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/16550_UART\">Wikipedia: UART16550<\/a>;<br \/>  [L6] \u2014 <a href=\"https:\/\/www.google.ru\/search?q=uart+16550+datasheet+file%3Apdf\">Google: UART16550<\/a>;<br \/>  [L7] \u2014 <a href=\"https:\/\/github.com\/freecores\/uart16550\">\u041f\u0440\u043e\u0435\u043a\u0442 freecores\/uart16550<\/a>;<br \/>  [L8] \u2014 <a href=\"https:\/\/github.com\/olofk\/uart16550\">\u041f\u0440\u043e\u0435\u043a\u0442 olofk\/uart16550<\/a>;<br \/>  [L9] \u2014 <a href=\"http:\/\/opencores.org\/project,uart16550\">\u041f\u0440\u043e\u0435\u043a\u0442 opencores\/UART 16550 core<\/a>;<br \/>  [L10] &#8212;<a href=\"http:\/\/de10-lite.terasic.com\/\">FPGA \u043f\u043b\u0430\u0442\u0430 Terasic DE10-Lite<\/a>;<br \/>  [L11] \u2014 <a href=\"https:\/\/github.com\/zhelnio\/ahb_lite_uart16550\">\u041f\u0440\u043e\u0435\u043a\u0442 ahb_lite_uart16550<\/a>;<br \/>  [L12] \u2014 <a href=\"https:\/\/habrahabr.ru\/post\/324900\/\">MIPSfpga \u0438 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f<\/a>;<\/p>\n<p>  <\/p>\n<h2 id=\"dokumentaciya\">\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/h2>\n<p>  <\/p>\n<p>[D1] \u2014 <a href=\"https:\/\/github.com\/MIPSfpga\/mipsfpga-plus\/blob\/5169e133ea2de692e8f9564896f46844ec5bb398\/documentation\/peripherals\/UART_spec.pdf\">UART IP Core Specification<\/a>;<br \/>  [D2] \u2014 <a href=\"https:\/\/github.com\/zhelnio\/memos\/blob\/master\/public\/02_mips_uart\/doc\/D2_MicroAptiv_UP_AHB_Lite_Interface_MD01082.pdf\">MIPS32 microAptiv UP Processor Core AHB-Lite Interface<\/a>;<\/p>\n<p>  <\/p>\n<h2 id=\"izobrazheniya-i-tablicy\">\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b<\/h2>\n<p>  <\/p>\n<p>[P1] \u2014 <a href=\"https:\/\/raw.githubusercontent.com\/zhelnio\/memos\/master\/public\/02_mips_uart\/doc\/P1_work_on_hw.gif\">\u0420\u0430\u0431\u043e\u0442\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043d\u0430 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0435<\/a>;<br \/>  [P2] \u2014 <a href=\"https:\/\/raw.githubusercontent.com\/zhelnio\/memos\/master\/public\/02_mips_uart\/doc\/P2_signals_uart_irq.png\">\u0420\u0430\u0431\u043e\u0442\u0430 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f UART<\/a>;<br \/>  [P3] \u2014 <a href=\"https:\/\/raw.githubusercontent.com\/zhelnio\/memos\/master\/public\/02_mips_uart\/doc\/P3_signals_uart.png\">\u0420\u0430\u0431\u043e\u0442\u0430 \u043f\u0443\u0442\u0435\u043c \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043e\u043f\u0440\u043e\u0441\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430<\/a>;<\/p>\n<p>  <\/p>\n<h2 id=\"ssylki-na-ishodnyy-kod\">\u0421\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434<\/h2>\n<p>  <\/p>\n<p>[S1] \u2014 <a href=\"https:\/\/github.com\/MIPSfpga\/mipsfpga-plus\/blob\/5169e133ea2de692e8f9564896f46844ec5bb398\/mfp_ahb_lite_uart16550.v\">\u041c\u043e\u0434\u0443\u043b\u044c mfp_ahb_lite_uart16550<\/a>;<br \/>  [S2] \u2014 <a href=\"https:\/\/github.com\/MIPSfpga\/mipsfpga-plus\/tree\/5169e133ea2de692e8f9564896f46844ec5bb398\/uart16550\">\u041a\u0430\u0442\u0430\u043b\u043e\u0433 mipsfpga-plus\/uart16550<\/a>;<br \/>  [S3] \u2014 <a href=\"https:\/\/github.com\/MIPSfpga\/mipsfpga-plus\/blob\/5169e133ea2de692e8f9564896f46844ec5bb398\/mfp_ahb_lite_matrix_config.vh#L21\">\u041e\u043f\u0446\u0438\u044f MFP_USE_DUPLEX_UART<\/a>;<br \/>  [S4] \u2014 <a href=\"https:\/\/github.com\/MIPSfpga\/mipsfpga-plus\/blob\/5169e133ea2de692e8f9564896f46844ec5bb398\/mfp_ahb_lite_matrix_with_loader.v#L178-L185\">\u0421\u0438\u0433\u043d\u0430\u043b\u044b UART_SRX \u0438 UART_STX<\/a>;<br \/>  [S5] \u2014 <a href=\"https:\/\/github.com\/MIPSfpga\/mipsfpga-plus\/blob\/5169e133ea2de692e8f9564896f46844ec5bb398\/mfp_ahb_lite_matrix.v#L189-L196\">\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043c\u043e\u043c<\/a>;<br \/>  [S6] \u2014 <a href=\"https:\/\/github.com\/MIPSfpga\/mipsfpga-plus\/blob\/5169e133ea2de692e8f9564896f46844ec5bb398\/mfp_system.v#L376-L385\">\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f<\/a>;<br \/>  [S7] \u2014 <a href=\"https:\/\/github.com\/MIPSfpga\/mipsfpga-plus\/blob\/5169e133ea2de692e8f9564896f46844ec5bb398\/mfp_testbench.v#L51-L54\">\u0421\u0438\u0433\u043d\u0430\u043b\u044b UART \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438<\/a>;<br \/>  [S8] \u2014 <a href=\"https:\/\/github.com\/MIPSfpga\/mipsfpga-plus\/tree\/5169e133ea2de692e8f9564896f46844ec5bb398\/programs\/05_uart\">\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f &#8217;05_uart&#8217;<\/a>;<br \/>  [S9] \u2014 <a href=\"https:\/\/github.com\/MIPSfpga\/mipsfpga-plus\/tree\/5169e133ea2de692e8f9564896f46844ec5bb398\/programs\/08_uart_irq\">\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f &#8217;08_uart_irq&#8217;<\/a>;<br \/>  [S10] \u2014 <a href=\"https:\/\/github.com\/MIPSfpga\/mipsfpga-plus\/blob\/5169e133ea2de692e8f9564896f46844ec5bb398\/programs\/08_uart_irq\/main.c#L12\">\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0440\u0435\u0436\u0438\u043c\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b-\u043f\u0440\u0438\u043c\u0435\u0440\u0430<\/a>;<br \/>  [S11] \u2014 <a href=\"https:\/\/github.com\/MIPSfpga\/mipsfpga-plus\/blob\/5169e133ea2de692e8f9564896f46844ec5bb398\/programs\/08_uart_irq\/uart16550.h\">\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b uart16550.h<\/a>;<br \/>  [S12] \u2014 <a href=\"https:\/\/github.com\/MIPSfpga\/mipsfpga-plus\/blob\/5169e133ea2de692e8f9564896f46844ec5bb398\/programs\/08_uart_irq\/main.c#L27-L37\">\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 UART16550<\/a>;<br \/>  [S13] \u2014 <a href=\"https:\/\/github.com\/MIPSfpga\/mipsfpga-plus\/blob\/5169e133ea2de692e8f9564896f46844ec5bb398\/programs\/08_uart_irq\/main.c#L65-L76\">\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439<\/a>;<br \/>  [S14] \u2014 <a href=\"https:\/\/github.com\/MIPSfpga\/mipsfpga-plus\/blob\/5169e133ea2de692e8f9564896f46844ec5bb398\/programs\/08_uart_irq\/main.c#L78-L84\">\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f UART<\/a>;<br \/>  [S15] \u2014 <a href=\"https:\/\/github.com\/MIPSfpga\/mipsfpga-plus\/blob\/5169e133ea2de692e8f9564896f46844ec5bb398\/programs\/08_uart_irq\/main.c#L52-L63\">\u0427\u0442\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 UART<\/a>;<br \/>  [S16] \u2014 <a href=\"https:\/\/github.com\/MIPSfpga\/mipsfpga-plus\/blob\/5169e133ea2de692e8f9564896f46844ec5bb398\/programs\/08_uart_irq\/main.c#L59-L61\">\u041e\u0431\u0440\u0430\u0442\u043d\u0430\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445<\/a>;<\/p>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habrahabr.ru\/post\/325168\/\"> https:\/\/habrahabr.ru\/post\/325168\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041f\u0440\u043e\u0448\u043b\u043e \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043c\u0435\u0441\u044f\u0446\u0430 \u0441 \u0442\u0435\u0445 \u043f\u043e\u0440, \u043a\u0430\u043a \u044f \u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043b open source \u043c\u043e\u0434\u0443\u043b\u044c UART16550 \u043d\u0430 \u0448\u0438\u043d\u0443 AHB-Lite. \u041f\u0438\u0441\u0430\u0442\u044c \u043e\u0431 \u044d\u0442\u043e\u043c \u043d\u0430 \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u0431\u044b\u043b\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435 \u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u0435\u0449\u0435 \u043d\u0435 \u0431\u044b\u043b\u0430 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u0440\u043e \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f MIPSfpga.<br \/>  \u0415\u0441\u043b\u0438 \u0432\u044b \u043e\u043f\u044b\u0442\u043d\u044b\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a, \u0442\u043e \u0434\u043b\u044f \u0432\u0430\u0441 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0430 \u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u043d\u043e\u0432\u043e\u0441\u0442\u044c: UART16550 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0432 \u0441\u043e\u0441\u0442\u0430\u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u044b MIPSfpga-plus, \u0434\u0430\u043b\u044c\u0448\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0435 \u0447\u0438\u0442\u0430\u0442\u044c. \u0410 \u0442\u0435\u043c, \u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f \u2014 \u0434\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434 \u043a\u0430\u0442.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/7c5\/699\/9aa\/7c56999aaba2465f8074e370bf2e3407.gif\" alt=\"image\"\/><\/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-284141","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/284141","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=284141"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/284141\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=284141"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=284141"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=284141"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}