Merge "Port Width Fixes: Required for syn"
diff --git a/hw/ip/ahb/rtl/ahb_pkg.sv b/hw/ip/ahb/rtl/ahb_pkg.sv
index 4543234..8d7f8ab 100644
--- a/hw/ip/ahb/rtl/ahb_pkg.sv
+++ b/hw/ip/ahb/rtl/ahb_pkg.sv
@@ -17,8 +17,8 @@
 
   typedef struct packed {
       logic   [top_pkg::TL_AW-1:0]  haddr;
-      logic  [top_pkg::TL_SZW-1:0]  hsize;
-      logic                  [1:0]  hburst;
+      logic                  [2:0]  hsize;
+      logic                  [2:0]  hburst;
       logic   [top_pkg::TL_DW-1:0]  hwdata;
       logic                  [1:0]  htrans;
       logic                         hwrite;
diff --git a/hw/ip/isp_wrapper/rtl/isp_wrapper.sv b/hw/ip/isp_wrapper/rtl/isp_wrapper.sv
index 82ee88d..b1ccd1d 100644
--- a/hw/ip/isp_wrapper/rtl/isp_wrapper.sv
+++ b/hw/ip/isp_wrapper/rtl/isp_wrapper.sv
@@ -61,11 +61,11 @@
   output out_cr_b_line_start_o,
   output out_cr_b_line_end_o,
   output out_y_r_val_stream_o,
-  output out_y_r_data_stream_o,
   output out_cb_g_val_stream_o,
-  output out_cb_g_data_stream_o,
   output out_cr_b_val_stream_o,
-  output out_cr_b_data_stream_o,
+  output [7:0] out_y_r_data_stream_o,
+  output [7:0] out_cb_g_data_stream_o,
+  output [7:0] out_cr_b_data_stream_o,
   //the others
   input  disable_isp_i,
   input  scanmode_i
@@ -134,6 +134,9 @@
     .hresp             (ahb_d2h.hresp)
   );
 
+  logic [1:0] hresp_marvin_out_pre;
+  assign ahb_d2h.hresp = hresp_marvin_out_pre[0];
+
   VSISP_MARVIN_TOP_X u_isp
   (/*AUTOINST*/
     //MP Outputs
@@ -169,7 +172,7 @@
     .axi_m2_marvin_wid                  (axi_sp_o.wid[3:0]),
     .axi_m2_marvin_bready               (axi_sp_o.bready),
     .hrdata_s                           (ahb_d2h.hrdata),
-    .hresp_s                            (ahb_d2h.hresp),
+    .hresp_s                            (hresp_marvin_out_pre), // Widen single bit to 2 bits for port compatibility vsisp_marvin
     .hready_s                           (ahb_d2h.hready),
     .mi_irq                             (intr_mi_o),
     .isp_irq                            (intr_isp_o),
@@ -224,12 +227,12 @@
     .out_cr_b_ack_stream                (1'b1));
 
 
-axi2sramcrs u_axi2sramcrs (
+axi2sramcrs #() u_axi2sramcrs (
     .aclk                               (clk_i),
     .aresetn                            (rst_ni),
     .awid_s                             (axi_o.awid),
     .awaddr_s                           ({axi_o.awaddr[31:3],3'b0}),
-    .awlen_s                            (axi_o.awlen),
+    .awlen_s                            (axi_o.awlen[3:0]),  // 4 wide for axi3 used in axi2sramcrs
     .awsize_s                           (axi_o.awsize),
     .awburst_s                          (axi_o.awburst),
     .awlock_s                           (axi_o.awlock),
@@ -261,12 +264,16 @@
     .sram_wmask                         (isp_wmask_o)
 );
 
-axi2sramcrs u_axi2sramcrs_sp (
+axi2sramcrs #(
+        .AWID_WIDTH($bits(axi_sp_o.awid)),
+        .ARID_WIDTH($bits(axi_sp_o.awid)),
+        .ADDR_WIDTH($bits(axi_sp_o.awaddr))
+)u_axi2sramcrs_sp (
     .aclk                               (clk_i),
     .aresetn                            (rst_ni),
     .awid_s                             (axi_sp_o.awid),
     .awaddr_s                           ({axi_sp_o.awaddr[31:3],3'b0}),
-    .awlen_s                            (axi_sp_o.awlen),
+    .awlen_s                            (axi_o.awlen[3:0]), // 4 wide for axi3 used in axi2sramcrs
     .awsize_s                           (axi_sp_o.awsize),
     .awburst_s                          (axi_sp_o.awburst),
     .awlock_s                           (axi_sp_o.awlock),
diff --git a/hw/ip/ml_top/rtl/ml_top.sv b/hw/ip/ml_top/rtl/ml_top.sv
index 0699f4f..a8a3f6f 100644
--- a/hw/ip/ml_top/rtl/ml_top.sv
+++ b/hw/ip/ml_top/rtl/ml_top.sv
@@ -135,7 +135,8 @@
                                     //            Writing 0 will take it out of reset.
 
     // Kelvin core execution start address {PC[21:0]}, 4MB address space. See register definition for bitfield lsb.
-    .pc_start     (ctrl.pc_start),
+    // Expand 22 bit ctrl.pc_start in ml_top control register to 32 bit pc_start in kelvin to avoid port width mismatch
+    .pc_start     ({10'b0, ctrl.pc_start}),
     .volt_sel     (ctrl.volt_sel), // Default 0 for 0.8V memory macros, write 1 for 0.65V.
 
     // SRAM Interface
diff --git a/hw/ip/tluh/rtl/tluh_adapter_sram.sv b/hw/ip/tluh/rtl/tluh_adapter_sram.sv
index 1461757..988bc92 100644
--- a/hw/ip/tluh/rtl/tluh_adapter_sram.sv
+++ b/hw/ip/tluh/rtl/tluh_adapter_sram.sv
@@ -101,6 +101,12 @@
     .tl_o
   );
 
+  localparam int DataWidth = top_pkg::TL_DW;
+  localparam int BusAddrWidth = top_pkg::TL_AW;
+  localparam int MemAddrWidth = BusAddrWidth - $clog2(DataWidth / 8);
+
+  logic [MemAddrWidth-1 : 0] addr_o_pre;
+  assign addr_o = (top_pkg::TL_AW)'(addr_o_pre);
 
   tluh_mem_bridge #(
   ) mem_bridge (
@@ -109,7 +115,7 @@
 
       .tlu_port  (tluh_if.target),
 
-      .mem_address(addr_o),
+      .mem_address(addr_o_pre),
       .mem_we(we_o),
       .mem_wdata(wdata_o),
       .mem_ble(mem_ble_int),
diff --git a/hw/ip/tlul2ahblite/rtl/tlul2ahblite.v b/hw/ip/tlul2ahblite/rtl/tlul2ahblite.v
index 5a501c6..34bd1e4 100644
--- a/hw/ip/tlul2ahblite/rtl/tlul2ahblite.v
+++ b/hw/ip/tlul2ahblite/rtl/tlul2ahblite.v
@@ -155,7 +155,8 @@
 
 ahblite_enc  #(
            .AhbLiteDataWidth  (AhbLiteDataWidth),
-           .TlulDataWidth (TlulDataWidth)
+           .TlulDataWidth (TlulDataWidth),
+           .IdWidth ( IdWidth )
           ) u_ahblite_enc  (/*AUTOINST*/
 			    // Outputs
 			    .haddr		(haddr[31:0]),
diff --git a/hw/ip/tlul2axi4/rtl/axi_enc.v b/hw/ip/tlul2axi4/rtl/axi_enc.v
index 86d49c2..b5dea13 100644
--- a/hw/ip/tlul2axi4/rtl/axi_enc.v
+++ b/hw/ip/tlul2axi4/rtl/axi_enc.v
@@ -81,7 +81,7 @@
 output                       awvalid;
 output [IdWidth-1:0]         awid;
 output [31:0]                awaddr;
-output [7:0]                 awlen;
+output [3:0]                 awlen;
 output [AxiSizeWidth-1:0]    awsize;
 output [1:0]                 awburst;
 input                        wready;
@@ -182,7 +182,7 @@
 assign bready  = resp_ready;
 assign awid    = req_id;
 assign awaddr  = addr;
-assign awlen   = 8'h0;
+assign awlen   = 4'h0;
 assign awsize  = size;
 assign awburst = 2'b01;
 assign wlast   = wvalid;
diff --git a/hw/ip/tlul2axi4/rtl/tlul2axi.v b/hw/ip/tlul2axi4/rtl/tlul2axi.v
index 380ec51..17b4c0a 100644
--- a/hw/ip/tlul2axi4/rtl/tlul2axi.v
+++ b/hw/ip/tlul2axi4/rtl/tlul2axi.v
@@ -103,7 +103,7 @@
 output                       awvalid;
 output [IdWidth-1:0]         awid;
 output [31:0]                awaddr;
-output [7:0]                 awlen;
+output [3:0]                 awlen;
 output [AxiSizeWidth-1:0]    awsize;
 output [1:0]                 awburst;
 input                        wready;
@@ -196,7 +196,7 @@
                         .awvalid        (awvalid),
                         .awid           (awid[IdWidth-1:0]),
                         .awaddr         (awaddr[31:0]),
-                        .awlen          (awlen[7:0]),
+                        .awlen          (awlen[3:0]),
                         .awsize         (awsize[AxiSizeWidth-1:0]),
                         .awburst        (awburst[1:0]),
                         .wvalid         (wvalid),
diff --git a/hw/top_matcha/rtl/autogen/chip_matcha_nexus.sv b/hw/top_matcha/rtl/autogen/chip_matcha_nexus.sv
index 6ece7be..2b41812 100644
--- a/hw/top_matcha/rtl/autogen/chip_matcha_nexus.sv
+++ b/hw/top_matcha/rtl/autogen/chip_matcha_nexus.sv
@@ -969,9 +969,9 @@
 
 
 
-  ///////////////////
-  // USB for FPGA  //
-  ///////////////////
+  //////////////////////////////////////////////
+  // USB for FPGA (USB1T1105AMHX transceiver) //
+  //////////////////////////////////////////////
   logic usb_rx_d;
   logic usb_tx_d;
   logic usb_tx_se0;
@@ -988,20 +988,20 @@
 
   // VP / VPO
   assign manual_attr_io_uphy_vpo = '0;
-  assign manual_oe_io_uphy_vpo = 1'b1;
   assign manual_out_io_uphy_vpo = dio_out[DioUsbdevUsbDp];
+  assign manual_oe_io_uphy_vpo = 1'b1;
   assign dio_in[DioUsbdevUsbDp] = manual_in_io_uphy_vp;
 
   // VM / VMO
   assign manual_attr_io_uphy_vmo = '0;
-  assign manual_oe_io_uphy_vmo = 1'b1;
   assign manual_out_io_uphy_vmo = dio_out[DioUsbdevUsbDn];
+  assign manual_oe_io_uphy_vmo = 1'b1;
   assign dio_in[DioUsbdevUsbDn] = manual_in_io_uphy_vm;
 
   // MODE
   assign manual_attr_io_uphy_mode = '0;
-  assign manual_oe_io_uphy_mode = 1'b1;
   assign manual_out_io_uphy_mode = 1'b1;
+  assign manual_oe_io_uphy_mode = 1'b1;
 
   // CONFIG
   assign manual_attr_io_uphy_cfg = '0;
diff --git a/hw/top_matcha/rtl/autogen/top_matcha.sv b/hw/top_matcha/rtl/autogen/top_matcha.sv
index bac7343..c5ec406 100644
--- a/hw/top_matcha/rtl/autogen/top_matcha.sv
+++ b/hw/top_matcha/rtl/autogen/top_matcha.sv
@@ -1070,6 +1070,10 @@
   logic        ram_smc_rvalid;
   logic [1:0]  ram_smc_rerror;
 
+  // intermediate addr to avoid port with mismatch
+  logic [top_pkg::TL_AW-1:0] ram_smc_addr_pre;
+  assign ram_smc_addr = ram_smc_addr_pre[19:0];
+
   tluh_adapter_sram #(
     .MemLatency(1),
     .MaxBurstSize(2)
@@ -1082,7 +1086,7 @@
     .req_o      (ram_smc_req),
     .gnt_i      (ram_smc_req),  // Grant when requests occur
     .we_o       (ram_smc_we),
-    .addr_o     (ram_smc_addr),
+    .addr_o     (ram_smc_addr_pre),
     .wdata_o    (ram_smc_wdata),
     .wmask_o    (ram_smc_wmask),
     .rdata_i    (ram_smc_rdata),
@@ -2530,7 +2534,7 @@
       .jtag_o(pinmux_aon_rv_jtag_rsp),
       .lc_hw_debug_en_i(lc_ctrl_lc_hw_debug_en),
       .pinmux_hw_debug_en_i(pinmux_aon_pinmux_hw_debug_en),
-      .unavailable_i(2'b0),
+      .unavailable_i(3'b0),
       .ndmreset_req_o(rv_dm_ndmreset_req),
       .dmactive_o(),
       .debug_req_o(rv_dm_debug_req),
diff --git a/util/topgen_matcha/templates/toplevel.sv.tpl b/util/topgen_matcha/templates/toplevel.sv.tpl
index 6cd9ec8..87bfd1c 100644
--- a/util/topgen_matcha/templates/toplevel.sv.tpl
+++ b/util/topgen_matcha/templates/toplevel.sv.tpl
@@ -357,6 +357,10 @@
   logic ${lib.bitarray(1,          max_char)} ${m["name"]}_rvalid;
   logic ${lib.bitarray(2,          max_char)} ${m["name"]}_rerror;
 
+  // intermediate addr to avoid port width mismatch
+  logic [top_pkg::TL_AW-1:0] ${m["name"]}_addr_pre;
+  assign ${m["name"]}_addr = ${m["name"]}_addr_pre${lib.bitarray(addr_width, max_char)};
+
   tluh_adapter_sram #(
     .MemLatency(1),
     .MaxBurstSize(2)
@@ -373,7 +377,7 @@
     .req_o      (${m["name"]}_req),
     .gnt_i      (${m["name"]}_req),  // Grant when requests occur
     .we_o       (${m["name"]}_we),
-    .addr_o     (${m["name"]}_addr),
+    .addr_o     (${m["name"]}_addr_pre),
     .wdata_o    (${m["name"]}_wdata),
     .wmask_o    (${m["name"]}_wmask),
     .rdata_i    (${m["name"]}_rdata),