-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathuart_rx_top.bsv
75 lines (54 loc) · 1.63 KB
/
uart_rx_top.bsv
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package uart_rx_top;
import ConfigReg::*;
import StmtFSM::*;
import UartRx::*;
`define SYS_FREQ 27_000_000
`define TIME_US `SYS_FREQ / 1_000_000
`define TIME_MS `SYS_FREQ / 1_000
`define TIME_S `SYS_FREQ
`define BLINK_COUNT `TIME_MS * 100
`define UART_RX_BAUD 115200 // 波特率
`define CMD_LED_ON 8'h5A // 开灯指令
`define CMD_LED_OFF 8'hA5 // 关灯指令
(* always_enabled *)
interface Tb;
method bit test1;
method bit test2;
method bit led_pin;
method Action uart_rx(bit data);
endinterface
(* synthesize *)
module top (Tb);
let uartRx <- mkUartRx;
// rule update;
// endrule
Reg#(bit) r_led <- mkConfigReg(0);
Reg#(bit) r_uart_rx <- mkConfigReg(0);
Reg#(int) cnt <- mkReg(0);
Reg#(bit) r_init <- mkReg(0);
// Reg#(UInt#(32)) r_uart_rx_delay <- mkConfigReg(`SYS_FREQ / `UART_RX_BAUD);
rule update;
if (r_init == 0) begin
r_init <= 1;
uartRx.set_delay(`SYS_FREQ / `UART_RX_BAUD);
end else if (uartRx.interrupt == 1) begin
if (uartRx.data == `CMD_LED_OFF)
r_led <= 0;
else if (uartRx.data == `CMD_LED_ON)
r_led <= 1;
end
endrule
/****************************************************************************
* UART RX 输入信号
***************************************************************************/
method Action uart_rx(bit data);
if (r_init == 1)
uartRx.rx(data);
// r_led <= data;
endmethod
method led_pin = ~r_led;
// method uart_rx = uartRx.rx;
method test1 = r_led;
method test2 = uartRx.interrupt;
endmodule // module mkTb
endpackage // package uart_rx_top