§ Модуль передатчика
Пины:- clock — опорная частота
- reset_n — если 0, то сброс
- delay — период в тактах (25 мгц)
- parity — если задан 0, то не проверять четность
- in — данные для отправки
- we — разрешение отправки
- tx — исходящие данные UART
- ready — если 1, то устройство готово к отправке
§ Код на верилоге
module uart_tx ( input clock, // 25 mhz input reset_n, // Конфигурация input [11:0] delay, // 2604 -> 9600 bod input parity, // Если 1, учитывать четность // Ввод-вывод input [7:0] in, input we, // we=1 -> отсылка данных output reg tx, // Подключено к TX output ready // Готовность к принятию данных IN ); assign ready = (st == 1'b0); reg [ 1:0] st = 1'b0; reg [11:0] timer = 1'b0; reg [10:0] data = 1'b0; reg [ 3:0] cnt = 1'b0; always @(posedge clock) if (reset_n == 1'b0) begin tx <= 1'b1; end else case (st) // IDLE 0: begin cnt <= 10 + parity; if (we) st <= 1; if (we) data <= {1'b1, ~parity | ~^in, in, 1'b0}; end // Один сдвиг вправо 1: begin st <= cnt == 0 ? 0 : 2; tx <= data[0]; data <= data[10:1]; cnt <= cnt - 1; timer <= delay; end // Ожидание 2: begin if (timer == 2) begin st <= 1; end timer <= timer - 1'b1; end endcase endmodule
3 дек, 2022
© 2007-2023 Разрешил психический компьютер