Интернет знания
Много от наличните онлайн реализации на универсален асинхронен приемник‑предавател (UART) са сложни и трудни за разбиране. Тази статия обяснява основната теория и предоставя прост примерен код за създаване на UART предавател в Verilog HDL.
Предавателят изпраща множество битове данни по една линия. Данните се предават последователно (серийно), а на приемната страна се преобразуват обратно в паралелна форма.
Най‑простият дизайн изисква две състояния:
Броячът се изчислява по формулата:
counter = тактова честота на FPGA / baud rate
При примерна baud rate от 9600 bps и тактова честота 50 MHz получаваме:
counter = 50 000 000 / 9600 ≈ 5208
В примера използваме следната последователност от битове:
Общо 11 бита, което означава, че регистърът трябва да се измести 11 пъти преди да се върне в състояние IDLE.
Следните модули комбинират делителя, регистъра за изместване и състоянията в един блок, готов за синтез върху 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, за да се избегнат грешки при предаването.
Microsoft Publisher е част от Office пакета, но често остава в сянка на Word. Със сигурност обаче може да ви помогне да създадете публикации, с които да се гордеете. Ако ви е непозната, опитайте този проект – създайте меню за вечеря, за детска игра „ресторант“ или просто за да впечатлите семейството
Създаването на автобиография може да отнеме време и да бъде стресиращо. Форматирането и избора на информация изискват внимателно планиране. WordPerfect от Corel предлага готов шаблон, който ускорява целия процес. Стъпка 1 Отворете WordPerfect, изберете „WordPerfect Mode“ и натиснете „OK“. Стъпка 2 О