-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathuart.v
More file actions
106 lines (91 loc) · 2.53 KB
/
Copy pathuart.v
File metadata and controls
106 lines (91 loc) · 2.53 KB
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
module uart #(
parameter BAUD_RATE = 115200
)(
`ifdef USE_POWER_PINS
inout vccd1, // User area 1 1.8V supply
inout vssd1, // User area 1 digital ground
`endif
// Wishbone Slave ports (WB MI A)
input wire wb_clk_i,
input wire wb_rst_i,
input wire wbs_stb_i,
input wire wbs_cyc_i,
input wire wbs_we_i,
input wire [3:0] wbs_sel_i,
input wire [31:0] wbs_dat_i,
input wire [31:0] wbs_adr_i,
output wire wbs_ack_o,
output wire [31:0] wbs_dat_o,
// IO ports
input [`MPRJ_IO_PADS-1:0] io_in,
output [`MPRJ_IO_PADS-1:0] io_out,
output [`MPRJ_IO_PADS-1:0] io_oeb,
// irq
output [2:0] user_irq
);
// UART
wire tx;
wire rx;
assign io_oeb[31] = 1'b0;
assign io_oeb[30] = 1'b1;
assign io_out[31] = tx;
assign rx = io_in[30];
// irq
wire irq;
assign user_irq[0] = irq;
// CSR
wire [31:0] clk_freq;
wire [7:0] rx_data;
wire irq_en;
wire read;
wire [7:0] tx_data;
wire tx_clear_req;
wire tx_start;
wire i_wb_cyc;
wire i_wb_stb;
assign i_wb_cyc = (wbs_adr_i[31:8] == 32'h3000_00) ? wbs_cyc_i : 1'b0;
assign i_wb_stb = (wbs_adr_i[31:8] == 32'h3000_00) ? wbs_stb_i : 1'b0;
CSR CSR(
.i_clk (wb_clk_i ),
.i_rst_n (~wb_rst_i ),
.i_wb_cyc (i_wb_cyc ),
.i_wb_stb (i_wb_stb ),
.o_wb_stall (),
.i_wb_adr (wbs_adr_i ),
.i_wb_we (wbs_we_i ),
.i_wb_dat (wbs_dat_i ),
.i_wb_sel (wbs_sel_i ),
.o_wb_ack (wbs_ack_o ),
.o_wb_err (),
.o_wb_rty (),
.o_wb_dat (wbs_dat_o ),
.o_CLOCK_FREQ_clock_freq (clk_freq ),
.i_RECEIVED_DATA_rx (rx_data ),
.o_RECEIVED_DATA_rx_read_trigger (read ),
.o_TRANSMISSION_DATA_tx (tx_data ),
.o_INTERRUPT_ENABLE_irq_en (irq_en ),
.i_TRANSMISSION_START_tx_start_clear(tx_clear_req),
.o_TRANSMISSION_START_tx_start (tx_start )
);
wire [31:0] clk_div;
assign clk_div = clk_freq / BAUD_RATE;
uart_receive receive(
.rst (wb_rst_i ),
.clk (wb_clk_i ),
.clk_div (clk_div ),
.rx (rx ),
.rx_data (rx_data ),
.read (read ),
.irq_en (irq_en ),
.irq (irq )
);
uart_transmission transmission(
.rst (wb_rst_i ),
.clk (wb_clk_i ),
.clk_div (clk_div ),
.tx (tx ),
.tx_data (tx_data ),
.clear_req (tx_clear_req),
.tx_start (tx_start )
);
endmodule