whycomputer.com >> Интернет знания >  >> Софтуер

Как да създадем прост сериен UART предавател с Verilog HDL

Въведение

Много от наличните онлайн реализации на универсален асинхронен приемник‑предавател (UART) са сложни и трудни за разбиране. Тази статия обяснява основната теория и предоставя прост примерен код за създаване на UART предавател в Verilog HDL.

Принцип на работа

Предавателят изпраща множество битове данни по една линия. Данните се предават последователно (серийно), а на приемната страна се преобразуват обратно в паралелна форма.

Необходими блокове

  1. Делител на тактовата честота (брояч) – осигурява желаната скорост на предаване (baud rate).
  2. Регистър за изместване – съхранява стартиращ бит, данните, евентуален паритет и стоп бит.
  3. Състояния (state machine) – управляват процеса на предаване.

Състояния на предавателя

Най‑простият дизайн изисква две състояния:

  • IDLE – изчаква нови данни.
  • TRANSMITTING – последователно излъчва битовете.

Изчисляване на делителя

Броячът се изчислява по формулата:

counter = тактова честота на FPGA / baud rate

При примерна baud rate от 9600 bps и тактова честота 50 MHz получаваме:

counter = 50 000 000 / 9600 ≈ 5208

Регистър за изместване

В примера използваме следната последователност от битове:

  • Стартов бит (0)
  • 8 бита данни
  • Паритетен бит (по избор)
  • Стоп бит (1)

Общо 11 бита, което означава, че регистърът трябва да се измести 11 пъти преди да се върне в състояние IDLE.

Примерен Verilog код

Следните модули комбинират делителя, регистъра за изместване и състоянията в един блок, готов за синтез върху FPGA. Кодът работи с друг FPGA, свързан сериално, или с Windows HyperTerminal.

module uart_tx #(parameter CLK_FREQ = 50000000,
                parameter BAUD_RATE = 9600)
   (input  wire clk,
    input  wire rst,
    input  wire [7:0] data_in,
    input  wire send,
    output reg  tx_line,
    output reg  busy);

   localparam integer DIV_MAX = CLK_FREQ/BAUD_RATE;
   localparam IDLE = 1'b0, TRANSMIT = 1'b1;

   reg [12:0] counter;
   reg [3:0]  bit_cnt;
   reg [10:0] shift_reg; // start + 8 data + parity + stop
   reg state;

   // делител на тактовата честота
   always @(posedge clk or posedge rst) begin
      if (rst) begin
         counter <= 0;
      end else if (counter == DIV_MAX-1) begin
         counter <= 0;
      end else begin
         counter <= counter + 1;
      end
   end

   // главна машина на състоянията
   always @(posedge clk or posedge rst) begin
      if (rst) begin
         state <= IDLE;
         busy  <= 0;
         tx_line <= 1'b1; // линията е в idle (логическо 1)
      end else if (counter == DIV_MAX-1) begin
         case (state)
            IDLE: begin
               if (send) begin
                  // създаване на кадъра за изпращане
                  shift_reg <= {1'b1, ^data_in, data_in, 1'b0}; // stop, parity, data, start
                  bit_cnt   <= 0;
                  busy      <= 1'b1;
                  state     <= TRANSMIT;
               end
            end
            TRANSMIT: begin
               tx_line <= shift_reg[0];
               shift_reg <= shift_reg >> 1;
               bit_cnt <= bit_cnt + 1;
               if (bit_cnt == 10) begin // 11 бита => 0..10
                  state <= IDLE;
                  busy  <= 1'b0;
               end
            end
         endcase
      end
   end
endmodule

Тестова среда

Преди да програмираме FPGA, създайте тестов комплект (testbench), който симулира подаване на данни, проверява изходния сигнал tx_line и гарантира, че броячът и регистърът работят коректно.

Съвети

И предавателят, и приемникът трябва да са конфигурирани с еднаква baud rate, за да се избегнат грешки при предаването.


URL:https://bg.whycomputer.com/soft/100213349.html

Софтуер
  • Създаване на меню в Microsoft Publisher

    Microsoft Publisher е част от Office пакета, но често остава в сянка на Word. Със сигурност обаче може да ви помогне да създадете публикации, с които да се гордеете. Ако ви е непозната, опитайте този проект – създайте меню за вечеря, за детска игра „ресторант“ или просто за да впечатлите семейството

  • Създаване на автобиография с WordPerfect

    Създаването на автобиография може да отнеме време и да бъде стресиращо. Форматирането и избора на информация изискват внимателно планиране. WordPerfect от Corel предлага готов шаблон, който ускорява целия процес. Стъпка 1 Отворете WordPerfect, изберете „WordPerfect Mode“ и натиснете „OK“. Стъпка 2 О

Интернет знания © https://bg.whycomputer.com