Skip to content

Commit 071c328

Browse files
committed
Integrated UART controller into TT top level module
1 parent ab029ff commit 071c328

1 file changed

Lines changed: 84 additions & 14 deletions

File tree

src/tt_um_utoss_riscv.sv

Lines changed: 84 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,34 +19,104 @@ module tt_um_utoss_riscv (
1919
);
2020

2121
// All output pins must be assigned. If not used, assign to 0.
22-
assign uo_out = memory__address[7:0]; // Example: ou_out is the sum of ui_in and uio_in
22+
// assign uo_out = memory__address[7:0]; // Example: ou_out is the sum of ui_in and uio_in
23+
assign uo_out[3:0] = 4'b0000;
24+
assign uo_out[7:5] = 3'b000;
2325
assign uio_out = 0;
2426
assign uio_oe = 0;
2527

2628
// List all unused inputs to prevent warnings
2729
wire _unused = &{ena, 1'b0};
2830

29-
addr_t memory__address;
30-
data_t memory__write_data;
31-
logic [3:0] memory__write_enable;
32-
data_t memory__read_data;
31+
wire [7:0] uart_rx_data;
32+
wire uart_rx_valid;
33+
wire uart_rx_ready;
34+
35+
wire [7:0] uart_tx_data;
36+
wire uart_tx_valid;
37+
wire uart_tx_ready;
38+
39+
wire tx_busy, rx_busy, rx_overrun, rx_frame;
40+
41+
uart #(
42+
.DATA_WIDTH(8)
43+
, .CLK_HZ(50000000)
44+
, .BAUD(115200)
45+
)
46+
u_uart (
47+
.clk ( clk )
48+
, .rst ( rst_n )
49+
, .i_data_s ( uart_tx_data )
50+
, .i_valid_s ( uart_tx_valid )
51+
, .o_ready_s ( uart_tx_ready )
52+
, .o_data_m ( uart_rx_data )
53+
, .o_valid_m ( uart_rx_valid )
54+
, .i_ready_m ( uart_rx_ready )
55+
, .i_rxd ( ui_in[3] )
56+
, .o_txd ( uo_out[4] )
57+
, .o_tx_busy ( tx_busy )
58+
, .o_rx_busy ( rx_busy )
59+
, .o_rx_overrun_error ( rx_overrun )
60+
, .o_rx_frame_error ( rx_frame )
61+
);
62+
63+
logic [31:0] dbg_addr, dbg_write_data;
64+
logic [3:0] dbg_write_enable;
65+
wire [31:0] read_data;
66+
67+
logic hold_core;
68+
69+
uart_bus_master u_master (
70+
.clk ( clk )
71+
, .rst ( rst_n )
72+
, .rx_data ( uart_rx_data )
73+
, .rx_valid ( uart_rx_valid )
74+
, .rx_ready ( uart_rx_ready )
75+
, .tx_data ( uart_tx_data )
76+
, .tx_valid ( uart_tx_valid )
77+
, .tx_ready ( uart_tx_ready )
78+
, .bus_addr ( dbg_addr )
79+
, .bus_write_data ( dbg_write_data )
80+
, .bus_write_enable ( dbg_write_enable )
81+
, .bus_read_data ( read_data )
82+
, .dbg_regs ( dbg_regs )
83+
, .dbg_pc ( dbg_pc )
84+
, .hold_core ( hold_core )
85+
);
86+
87+
addr_t core_addr;
88+
data_t core_write_data;
89+
logic [3:0] core_write_enable;
90+
91+
logic [31:0] dbg_regs [0:31];
92+
addr_t dbg_pc;
93+
94+
wire core_reset = rst_n | hold_core;
95+
96+
addr_t bus_addr;
97+
data_t bus_write_data;
98+
logic [3:0] bus_write_enable;
99+
100+
assign bus_addr = hold_core ? dbg_addr : core_addr;
101+
assign bus_write_data = hold_core ? dbg_write_data : core_write_data;
102+
assign bus_write_enable = hold_core ? dbg_write_enable : core_write_enable;
33103

34104
MA #( .SIZE ( 16 ) )
35105
memory
36106
( .clk ( clk )
37-
, .address ( memory__address )
38-
, .write_data ( memory__write_data )
39-
, .write_enable ( memory__write_enable )
40-
, .read_data ( memory__read_data )
107+
, .address ( bus_addr )
108+
, .write_data ( bus_write_data )
109+
, .write_enable ( bus_write_enable )
110+
, .read_data ( read_data )
41111
);
42112

43113
utoss_riscv core
44114
( .clk ( clk )
45-
, .reset ( ~rst_n )
46-
, .memory__address ( memory__address )
47-
, .memory__write_data ( memory__write_data )
48-
, .memory__write_enable( memory__write_enable )
49-
, .memory__read_data ( memory__read_data )
115+
, .reset ( ~core_reset )
116+
, .memory__address ( core_addr )
117+
, .memory__write_data ( core_write_data )
118+
, .memory__write_enable( core_write_enable )
119+
, .memory__read_data ( read_data )
50120
);
51121

52122
endmodule

0 commit comments

Comments
 (0)