@@ -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
52122endmodule
0 commit comments