whycomputer.com >> Rangkaian komputer >  >> Perisian

Cara Membuat Pemancar UART Bersiri Ringkas dalam Verilog HDL

Penggunaan UART (Universal Asynchronous Receiver Transmitter) amat biasa dalam komunikasi digital. Namun, kebanyakan contoh pemancar UART yang terdapat di internet terlalu kompleks. Artikel ini akan menerangkan asasnya dan memberi contoh kod Verilog yang ringkas dan mudah difahami.

Komponen Utama

  1. Penghampiran jam (clock divider) – Membahagi frekuensi jam FPGA supaya data dihantar pada kadar baud tertentu.
  2. Shift register – Menyimpan bit data semasa penghantaran. Ia mengandungi bit permulaan, data, bit pariti (jika ada) dan bit akhir.
  3. Diagram keadaan (state machine) – Menentukan aliran penghantaran. Untuk pemancar biasanya dua keadaan: IDLE dan TRANSMITTING.

Pengiraan Pembahagi Jam

Counter dihitung dengan rumus:

counter = freq_jam_FPGAs / baud_rate

Contohnya, bila baud_rate = 9600 dan freq_jam_FPGAs = 50 MHz, counter = 5208.

Reka Bentuk Shift Register

Dalam contoh ini, shift register mempunyai 11 bit: satu bit permulaan, 8 bit data, satu bit pariti (opsional) dan satu bit akhir. Bit-bit ini ditukar secara serial semasa penghantaran.

Rangkaian Keadaan

Berikut adalah contoh rangkaian keadaan bagi pemancar UART:


STATE IDLE:
  if (send_request) begin
    load_shift_register();
    state <= TRANSMITTING;
  end

STATE TRANSMITTING:
  if (bit_counter == 0) begin
    state <= IDLE;
  end else begin
    shift_out_bit();
    bit_counter <= bit_counter - 1;
  end

Kod Contoh

Berikut ialah kod Verilog ringkas yang menggabungkan semua komponen di atas. Kod ini boleh dimuat ke dalam modul FPGA dan diuji dengan HyperTerminal atau peranti UART lain.


module uart_tx(
  input  wire clk,
  input  wire rst,
  input  wire send,
  input  wire [7:0] data_in,
  output reg  tx,
  output reg  busy
);

// Clock divider
parameter DIVISOR = 5208; // untuk 50 MHz & 9600 baud
reg [12:0] div_cnt;
wire tick = (div_cnt == DIVISOR-1);

// Shift register & control
reg [10:0] shift_reg;
reg [3:0]  bit_cnt;
reg [1:0]  state;

// States
localparam IDLE = 2'b00,
           START = 2'b01,
           DATA = 2'b10,
           STOP = 2'b11;

always @(posedge clk or posedge rst) begin
  if (rst) begin
    div_cnt <= 0;
    tick    <= 0;
    state   <= IDLE;
    tx      <= 1;
    busy    <= 0;
  end else begin
    // Divider logic
    if (div_cnt == DIVISOR-1) begin
      div_cnt <= 0;
      tick    <= 1;
    end else begin
      div_cnt <= div_cnt + 1;
      tick    <= 0;
    end

    // State machine
    if (tick) begin
      case (state)
        IDLE: begin
          tx   <= 1;
          busy <= 0;
          if (send) begin
            shift_reg <= {1'b1, data_in, 1'b0, 1'b0}; // end bit, parity, data, start
            bit_cnt  <= 11;
            state    <= START;
            busy     <= 1;
          end
        end
        START: begin
          tx <= shift_reg[0];
          shift_reg <= shift_reg >> 1;
          bit_cnt <= bit_cnt - 1;
          state   <= DATA;
        end
        DATA: begin
          if (bit_cnt == 0) begin
            state <= STOP;
          end else begin
            tx <= shift_reg[0];
            shift_reg <= shift_reg >> 1;
            bit_cnt <= bit_cnt - 1;
          end
        end
        STOP: begin
          tx <= 1;
          state <= IDLE;
        end
      endcase
    end
  end
end
endmodule

Ujian dan Simulasi

Selagi kod telah siap, buat test fixture menggunakan simulasi (misalnya ModelSim atau Questa) bagi memastikan urutan bit dan masa penghantaran tepat. Simulasi juga membantu menangkap sebarang ralat sebelum kod dimuat ke FPGA.

Kesimpulan

Dengan memahami tiga komponen asas – penghampiran jam, shift register dan state machine – anda boleh menulis pemancar UART bersiri yang ringkas dan boleh dikembangkan lagi mengikut keperluan.

Tips

Pastikan pemancar dan penerima menggunakan kadar baud yang sama supaya data dapat diproses dengan betul.


URL:https://ms.whycomputer.com/perisian/1015013349.html

Perisian
  • Cara Membuat Menu di Microsoft Publisher

    Microsoft Publisher mungkin tidak sepopular Word, namun ia mampu menghasilkan bahan cetakan yang memukau. Dengan sedikit latihan, anda boleh mencipta menu makan malam, menu permainan “restoran” untuk anak-anak, atau sekadar memukau keluarga anda semalam. Langkah 1 Buka Publisher dengan mengklik ikon

  • Langkah Mudah Membuat Resume Menggunakan WordPerfect

    Membuat resume boleh menjadi proses yang memakan masa dan menakutkan. Menentukan format, isi kandungan, serta penyusunan maklumat memerlukan perancangan yang teliti. Kejayaan ini dihidangkan lebih mudah dengan WordPerfect Corel, yang menyediakan templat resume standard yang sudah dipaparkan. Anda ha

  • Cara Membuat Fail WMV

    Cara Membuat Fail WMV Fail WMV (Windows Media Video) menggunakan pemampatan khas Windows, menjadikannya lebih kecil berbanding format video lain seperti AVI. Di Windows, anda boleh membuat fail WMV dengan mudah menggunakan perisian penyunting video standard, Windows Movie Maker. Perisian ini hanya t

Rangkaian komputer © https://ms.whycomputer.com