Rangkaian komputer
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.
Counter dihitung dengan rumus:
counter = freq_jam_FPGAs / baud_rate
Contohnya, bila baud_rate = 9600 dan freq_jam_FPGAs = 50 MHz, counter = 5208.
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.
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
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
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.
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.
Pastikan pemancar dan penerima menggunakan kadar baud yang sama supaya data dapat diproses dengan betul.
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
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 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