§ Модуль передатчика
Пины:
- clock — опорная частота
- reset_n — если 0, то сброс
- delay — период в тактах (25 мгц)
- parity — если задан 0, то не проверять четность
- in — данные для отправки
- we — разрешение отправки
- tx — исходящие данные UART
- ready — если 1, то устройство готово к отправке
§ Код на верилоге
1module uart_tx
2(
3 input clock,
4 input reset_n,
5
6 input [11:0] delay,
7 input parity,
8
9 input [7:0] in,
10 input we,
11 output reg tx,
12 output ready
13);
14
15assign ready = (st == 1'b0);
16
17reg [ 1:0] st = 1'b0;
18reg [11:0] timer = 1'b0;
19reg [10:0] data = 1'b0;
20reg [ 3:0] cnt = 1'b0;
21
22always @(posedge clock)
23if (reset_n == 1'b0) begin tx <= 1'b1; end
24else case (st)
25
26
27 0: begin
28
29 cnt <= 10 + parity;
30
31 if (we) st <= 1;
32 if (we) data <= {1'b1, ~parity | ~^in, in, 1'b0};
33
34 end
35
36
37 1: begin
38
39 st <= cnt == 0 ? 0 : 2;
40 tx <= data[0];
41 data <= data[10:1];
42 cnt <= cnt - 1;
43 timer <= delay;
44
45 end
46
47
48 2: begin if (timer == 2) begin st <= 1; end timer <= timer - 1'b1; end
49
50endcase
51
52endmodule