Skip to content

Commit 97f5872

Browse files
[hw,dv] Rationalise I/O pads of top_chip_asic
The input and output signals for some bidirectional interfaces seem to initially have been connected to different I/O pads in `top_chip_asic` for some unknown reason. Also one pad had different interfaces connected to the input vs. output. Correct this and reduce the number of pads to match.
1 parent d5be7f8 commit 97f5872

File tree

2 files changed

+67
-95
lines changed

2 files changed

+67
-95
lines changed

hw/top_chip/dv/tb/tb.sv

Lines changed: 8 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -76,17 +76,6 @@ module top_chip_asic_tb;
7676
wire IO54;
7777
wire IO55;
7878
wire IO56;
79-
wire IO57;
80-
wire IO58;
81-
wire IO59;
82-
wire IO60;
83-
wire IO61;
84-
wire IO62;
85-
wire IO63;
86-
wire IO64;
87-
wire IO65;
88-
wire IO66;
89-
wire IO67;
9079

9180
// ------ DUT ------
9281

@@ -148,17 +137,6 @@ module top_chip_asic_tb;
148137
.IO54,
149138
.IO55,
150139
.IO56,
151-
.IO57,
152-
.IO58,
153-
.IO59,
154-
.IO60,
155-
.IO61,
156-
.IO62,
157-
.IO63,
158-
.IO64,
159-
.IO65,
160-
.IO66,
161-
.IO67,
162140

163141
.USB_P,
164142
.USB_N
@@ -210,18 +188,18 @@ module top_chip_asic_tb;
210188
pattgen_if#(NUM_PATTGEN_CHANNELS) pattgen_if();
211189
assign pattgen_if.clk_i = peri_clk_if.clk; // u_dut.u_top_chip_system.u_pattgen.clk_i
212190
assign pattgen_if.rst_ni = peri_clk_if.rst_n; // u_dut.u_top_chip_system.u_pattgen.rst_ni
213-
assign pattgen_if.pda_tx = {IO66, IO64};
214-
assign pattgen_if.pcl_tx = {IO67, IO65};
191+
assign pattgen_if.pda_tx = {IO54, IO52}; // {CH1, CH0}
192+
assign pattgen_if.pcl_tx = {IO55, IO53}; // {CH1, CH0}
215193

216194
// Create and connect uart agent interfaces. Mux UART0 as it is shared with a DPI model,
217195
// using the vif enable signal that can be poked by the virtual sequence.
218196
// Might as well leave UART1 connected all the time.
219197
uart_if uart_if[NUarts]();
220198
logic uart0_rx_dpi;
221-
assign IO59 = uart_if[0].enable ? uart_if[0].uart_rx : uart0_rx_dpi;
222-
assign uart_if[0].uart_tx = uart_if[0].enable ? IO60 : 1'bz;
223-
assign IO61 = uart_if[1].uart_rx;
224-
assign uart_if[1].uart_tx = IO62;
199+
assign IO48 = uart_if[0].enable ? uart_if[0].uart_rx : uart0_rx_dpi;
200+
assign uart_if[0].uart_tx = uart_if[0].enable ? IO49 : 1'bz;
201+
assign IO50 = uart_if[1].uart_rx;
202+
assign uart_if[1].uart_tx = IO51;
225203

226204
// ------ Memory ------
227205

@@ -357,7 +335,7 @@ module top_chip_asic_tb;
357335
.rst_ni(u_dut.rst_peri_n),
358336
.active(!uart_if[0].enable),
359337
.tx_o(uart0_rx_dpi),
360-
.rx_i(!uart_if[0].enable ? IO60 : 1'bz)
338+
.rx_i(!uart_if[0].enable ? IO49 : 1'bz)
361339
);
362340

363341
// The USB DPI model (simulated host controller) has its own clock and reset signal,
@@ -383,7 +361,7 @@ module top_chip_asic_tb;
383361
.clk_i (clk_usbdpi),
384362
.rst_ni (rst_usbdpi_n),
385363

386-
.usb_vbus (IO63),
364+
.usb_vbus (IO56),
387365
.usb_p (USB_P),
388366
.usb_n (USB_N)
389367
);

hw/top_chip/rtl/top_chip_asic.sv

Lines changed: 59 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -60,26 +60,15 @@ module top_chip_asic (
6060
inout IO54,
6161
inout IO55,
6262
inout IO56,
63-
inout IO57,
64-
inout IO58,
65-
inout IO59,
66-
inout IO60,
67-
inout IO61,
68-
inout IO62,
69-
inout IO63,
70-
inout IO64,
71-
inout IO65,
72-
inout IO66,
73-
inout IO67,
7463

7564
// Dedicated Pads
7665
inout USB_P,
7766
inout USB_N
7867
);
79-
localparam int NPads = 70;
68+
localparam int NPads = 59;
8069

81-
localparam int PadUsbP = 68;
82-
localparam int PadUsbN = 69;
70+
localparam int PadUsbP = 57;
71+
localparam int PadUsbN = 58;
8372

8473
wire clk_sys, clk_peri, clk_usb, clk_aon;
8574
wire rst_sys_n, rst_peri_n, rst_usb_n, rst_aon_n;
@@ -315,63 +304,79 @@ module top_chip_asic (
315304
pad_out = '0;
316305
pad_oe = '0;
317306

307+
// gpio
318308
cio_gpio_i = pad_in[31:0];
319309
pad_out[31:0] = cio_gpio_o;
320310
pad_oe[31:0] = cio_gpio_en_o;
321311

312+
// i2c0
322313
cio_i2c0_sda_i = pad_in[32];
314+
pad_out[32] = cio_i2c0_sda_o;
315+
pad_oe[32] = cio_i2c0_sda_en_o;
316+
323317
cio_i2c0_scl_i = pad_in[33];
318+
pad_out[33] = cio_i2c0_scl_o;
319+
pad_oe[33] = cio_i2c0_scl_en_o;
324320

325-
pad_out[34] = cio_i2c0_sda_o;
326-
pad_oe[34] = cio_i2c0_sda_en_o;
327-
pad_out[35] = cio_i2c0_scl_o;
328-
pad_oe[35] = cio_i2c0_scl_en_o;
321+
// i2c1
322+
cio_i2c1_sda_i = pad_in[34];
323+
pad_out[34] = cio_i2c1_sda_o;
324+
pad_oe[34] = cio_i2c1_sda_en_o;
329325

330-
cio_i2c1_sda_i = pad_in[36];
331-
cio_i2c1_scl_i = pad_in[37];
326+
cio_i2c1_scl_i = pad_in[35];
327+
pad_out[35] = cio_i2c1_scl_o;
328+
pad_oe[35] = cio_i2c1_scl_en_o;
332329

333-
pad_out[38] = cio_i2c1_sda_o;
334-
pad_oe[38] = cio_i2c1_sda_en_o;
335-
pad_out[39] = cio_i2c1_scl_o;
336-
pad_oe[39] = cio_i2c1_scl_en_o;
330+
// spi0
331+
cio_spi_host0_sd_i = pad_in[39:36];
332+
pad_out[39:36] = cio_spi_host0_sd_o;
333+
pad_oe[39:36] = cio_spi_host0_sd_en_o;
337334

338-
cio_spi_host0_sd_i = pad_in[42:39];
335+
pad_out[40] = cio_spi_host0_sck_o;
336+
pad_oe[40] = cio_spi_host0_sck_en_o;
339337

340-
pad_out[43] = cio_spi_host0_sck_o;
341-
pad_oe[43] = cio_spi_host0_sck_en_o;
342-
pad_out[44] = cio_spi_host0_csb_o;
343-
pad_oe[44] = cio_spi_host0_csb_en_o;
344-
pad_out[48:45] = cio_spi_host0_sd_o;
345-
pad_oe[48:45] = cio_spi_host0_sd_en_o;
338+
pad_out[41] = cio_spi_host0_csb_o;
339+
pad_oe[41] = cio_spi_host0_csb_en_o;
346340

347-
cio_spi_host1_sd_i = pad_in[52:49];
341+
// spi1
342+
cio_spi_host1_sd_i = pad_in[45:42];
343+
pad_out[45:42] = cio_spi_host1_sd_o;
344+
pad_oe[45:42] = cio_spi_host1_sd_en_o;
348345

349-
pad_out[53] = cio_spi_host1_sck_o;
350-
pad_oe[53] = cio_spi_host1_sck_en_o;
351-
pad_out[54] = cio_spi_host1_csb_o;
352-
pad_oe[54] = cio_spi_host1_csb_en_o;
353-
pad_out[58:55] = cio_spi_host1_sd_o;
354-
pad_oe[58:55] = cio_spi_host1_sd_en_o;
346+
pad_out[46] = cio_spi_host1_sck_o;
347+
pad_oe[46] = cio_spi_host1_sck_en_o;
355348

356-
cio_uart0_rx_i = pad_in[59];
357-
pad_out[60] = cio_uart0_tx_o;
358-
pad_oe[60] = cio_uart0_tx_en_o;
349+
pad_out[47] = cio_spi_host1_csb_o;
350+
pad_oe[47] = cio_spi_host1_csb_en_o;
359351

360-
cio_uart1_rx_i = pad_in[61];
361-
pad_out[62] = cio_uart1_tx_o;
362-
pad_oe[62] = cio_uart1_tx_en_o;
352+
// uart0
353+
cio_uart0_rx_i = pad_in[48];
363354

364-
cio_usbdev_sense_i = pad_in[63];
365-
// no output driver required.
355+
pad_out[49] = cio_uart0_tx_o;
356+
pad_oe[49] = cio_uart0_tx_en_o;
357+
358+
// uart1
359+
cio_uart1_rx_i = pad_in[50];
360+
361+
pad_out[51] = cio_uart1_tx_o;
362+
pad_oe[51] = cio_uart1_tx_en_o;
363+
364+
// pattgen
365+
pad_out[52] = cio_pattgen_pda0_tx_o;
366+
pad_oe[52] = cio_pattgen_pda0_tx_en_o;
366367

367-
pad_out[64] = cio_pattgen_pda0_tx_o;
368-
pad_oe[64] = cio_pattgen_pda0_tx_en_o;
369-
pad_out[65] = cio_pattgen_pcl0_tx_o;
370-
pad_oe[65] = cio_pattgen_pcl0_tx_en_o;
371-
pad_out[66] = cio_pattgen_pda1_tx_o;
372-
pad_oe[66] = cio_pattgen_pda1_tx_en_o;
373-
pad_out[67] = cio_pattgen_pcl1_tx_o;
374-
pad_oe[67] = cio_pattgen_pcl1_tx_en_o;
368+
pad_out[53] = cio_pattgen_pcl0_tx_o;
369+
pad_oe[53] = cio_pattgen_pcl0_tx_en_o;
370+
371+
pad_out[54] = cio_pattgen_pda1_tx_o;
372+
pad_oe[54] = cio_pattgen_pda1_tx_en_o;
373+
374+
pad_out[55] = cio_pattgen_pcl1_tx_o;
375+
pad_oe[55] = cio_pattgen_pcl1_tx_en_o;
376+
377+
// usbdev
378+
cio_usbdev_sense_i = pad_in[56];
379+
// no output driver required.
375380

376381
// USB_P/N may require special treatment beyond the drive strength.
377382
pad_out[PadUsbP] = cio_usbdev_usb_dp_o;
@@ -389,17 +394,6 @@ module top_chip_asic (
389394
USB_N,
390395
USB_P,
391396

392-
IO67,
393-
IO66,
394-
IO65,
395-
IO64,
396-
IO63,
397-
IO62,
398-
IO61,
399-
IO60,
400-
IO59,
401-
IO58,
402-
IO57,
403397
IO56,
404398
IO55,
405399
IO54,

0 commit comments

Comments
 (0)