From 0bf7f828a12a1e12fd2dbc4c4a3d5d83ca6ec854 Mon Sep 17 00:00:00 2001 From: dwf1m12 <d.w.flynn@soton.ac.uk> Date: Wed, 17 Jul 2024 16:05:57 +0100 Subject: [PATCH] feat_dmax4 branch support for DMA0 + DMA1/2/3 busmatrix --- flist/nanosoc_busmatrix_ip.flist | 4 +- .../nanosoc_busmatrix/nanosoc_busmatrix.xml | 764 +++++++++++++++++- .../nanosoc_busmatrix_lite.xml | 704 ++++++++++++++-- nanosoc/nanosoc_busmatrix/logs/nanosoc.log | 102 +-- .../nanosoc_arbiter_BOOTROM_0.v | 42 +- .../nanosoc_arbiter_DMEM_0.v | 42 +- .../nanosoc_busmatrix/nanosoc_arbiter_EXP.v | 42 +- .../nanosoc_arbiter_EXPRAM_H.v | 42 +- .../nanosoc_arbiter_EXPRAM_L.v | 42 +- .../nanosoc_arbiter_IMEM_0.v | 42 +- .../nanosoc_busmatrix/nanosoc_arbiter_SYSIO.v | 42 +- .../nanosoc_arbiter_SYSTABLE.v | 28 +- .../nanosoc_busmatrix/nanosoc_busmatrix.v | 716 ++++++++++++++-- .../nanosoc_busmatrix_default_slave.v | 2 +- .../nanosoc_busmatrix_lite.v | 128 ++- .../nanosoc_inititator_input.v | 2 +- .../nanosoc_matrix_decode_CPU_0.v | 2 +- .../nanosoc_matrix_decode_DEBUG.v | 2 +- .../nanosoc_matrix_decode_DMAC_0.v | 2 +- .../nanosoc_matrix_decode_DMAC_1.v | 2 +- .../nanosoc_matrix_decode_DMAC_2.v | 515 ++++++++++++ .../nanosoc_matrix_decode_DMAC_3.v | 515 ++++++++++++ .../nanosoc_target_output_BOOTROM_0.v | 174 +++- .../nanosoc_target_output_DMEM_0.v | 174 +++- .../nanosoc_target_output_EXP.v | 174 +++- .../nanosoc_target_output_EXPRAM_H.v | 174 +++- .../nanosoc_target_output_EXPRAM_L.v | 174 +++- .../nanosoc_target_output_IMEM_0.v | 174 +++- .../nanosoc_target_output_SYSIO.v | 174 +++- .../nanosoc_target_output_SYSTABLE.v | 140 ++-- nanosoc/nanosoc_busmatrix/xml/nanosoc.xml | 38 + .../dma/verilog/nanosoc_ss_dma.v | 50 +- .../verilog/nanosoc_ss_interconnect.v | 57 +- .../nanosoc_system/verilog/nanosoc_system.v | 82 +- 34 files changed, 4848 insertions(+), 519 deletions(-) create mode 100644 nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DMAC_2.v create mode 100644 nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DMAC_3.v diff --git a/flist/nanosoc_busmatrix_ip.flist b/flist/nanosoc_busmatrix_ip.flist index a328ec8..6506feb 100644 --- a/flist/nanosoc_busmatrix_ip.flist +++ b/flist/nanosoc_busmatrix_ip.flist @@ -32,6 +32,8 @@ $(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/ $(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DEBUG.v $(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DMAC_0.v $(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DMAC_1.v +$(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DMAC_2.v +$(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DMAC_3.v $(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_BOOTROM_0.v $(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_DMEM_0.v $(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_EXPRAM_H.v @@ -39,4 +41,4 @@ $(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/ $(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_EXP.v $(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_IMEM_0.v $(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_SYSIO.v -$(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_SYSTABLE.v \ No newline at end of file +$(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_SYSTABLE.v diff --git a/nanosoc/nanosoc_busmatrix/ipxact/nanosoc_busmatrix/nanosoc_busmatrix.xml b/nanosoc/nanosoc_busmatrix/ipxact/nanosoc_busmatrix/nanosoc_busmatrix.xml index 64f9457..b0d7686 100644 --- a/nanosoc/nanosoc_busmatrix/ipxact/nanosoc_busmatrix/nanosoc_busmatrix.xml +++ b/nanosoc/nanosoc_busmatrix/ipxact/nanosoc_busmatrix/nanosoc_busmatrix.xml @@ -491,6 +491,308 @@ </spirit:portMaps> </spirit:busInterface> + <spirit:busInterface> + <spirit:name>AHBLiteTarget_Slave__DMAC_2</spirit:name> + <spirit:description>Slave port _DMAC_2</spirit:description> + <spirit:busType spirit:library="AMBA3" spirit:name="AHBLiteTarget" spirit:vendor="amba.com" spirit:version="r2p0_0"/> + <spirit:abstractionType spirit:library="AMBA3" spirit:name="AHBLiteTarget_rtl" spirit:vendor="amba.com" spirit:version="r2p0_0"/> + <spirit:slave> + <spirit:memoryMapRef spirit:memoryMapRef="AHBLiteTarget_Slave__DMAC_2_MM"/> + <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__BOOTROM_0" spirit:opaque="true"/> + <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__IMEM_0" spirit:opaque="true"/> + <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__DMEM_0" spirit:opaque="true"/> + <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__SYSIO" spirit:opaque="true"/> + <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__EXPRAM_L" spirit:opaque="true"/> + <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__EXPRAM_H" spirit:opaque="true"/> + <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__EXP" spirit:opaque="true"/> + </spirit:slave> + + <spirit:portMaps> + <!-- Clock/reset --> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HCLK</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HCLK</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HRESETn</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HRESETn</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <!-- Inputs --> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HSELx</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HSEL_DMAC_2</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HADDR</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HADDR_DMAC_2</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HTRANS</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HTRANS_DMAC_2</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HWRITE</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HWRITE_DMAC_2</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HSIZE</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HSIZE_DMAC_2</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HBURST</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HBURST_DMAC_2</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HPROT</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HPROT_DMAC_2</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + + <!-- HMASTER_DMAC_2 unmapped --> + + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HWDATA</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HWDATA_DMAC_2</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HMASTLOCK</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HMASTLOCK_DMAC_2</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HREADY</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HREADY_DMAC_2</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + + <!-- Outputs --> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HRDATA</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HRDATA_DMAC_2</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HREADYOUT</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HREADYOUT_DMAC_2</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HRESP</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HRESP_DMAC_2</spirit:name> + <spirit:vector> + <spirit:left>0</spirit:left> + <spirit:right>0</spirit:right> + </spirit:vector> + </spirit:physicalPort> + </spirit:portMap> + </spirit:portMaps> + </spirit:busInterface> + + <spirit:busInterface> + <spirit:name>AHBLiteTarget_Slave__DMAC_3</spirit:name> + <spirit:description>Slave port _DMAC_3</spirit:description> + <spirit:busType spirit:library="AMBA3" spirit:name="AHBLiteTarget" spirit:vendor="amba.com" spirit:version="r2p0_0"/> + <spirit:abstractionType spirit:library="AMBA3" spirit:name="AHBLiteTarget_rtl" spirit:vendor="amba.com" spirit:version="r2p0_0"/> + <spirit:slave> + <spirit:memoryMapRef spirit:memoryMapRef="AHBLiteTarget_Slave__DMAC_3_MM"/> + <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__BOOTROM_0" spirit:opaque="true"/> + <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__IMEM_0" spirit:opaque="true"/> + <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__DMEM_0" spirit:opaque="true"/> + <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__SYSIO" spirit:opaque="true"/> + <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__EXPRAM_L" spirit:opaque="true"/> + <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__EXPRAM_H" spirit:opaque="true"/> + <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__EXP" spirit:opaque="true"/> + </spirit:slave> + + <spirit:portMaps> + <!-- Clock/reset --> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HCLK</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HCLK</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HRESETn</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HRESETn</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <!-- Inputs --> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HSELx</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HSEL_DMAC_3</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HADDR</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HADDR_DMAC_3</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HTRANS</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HTRANS_DMAC_3</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HWRITE</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HWRITE_DMAC_3</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HSIZE</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HSIZE_DMAC_3</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HBURST</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HBURST_DMAC_3</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HPROT</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HPROT_DMAC_3</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + + <!-- HMASTER_DMAC_3 unmapped --> + + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HWDATA</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HWDATA_DMAC_3</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HMASTLOCK</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HMASTLOCK_DMAC_3</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HREADY</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HREADY_DMAC_3</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + + <!-- Outputs --> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HRDATA</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HRDATA_DMAC_3</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HREADYOUT</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HREADYOUT_DMAC_3</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HRESP</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HRESP_DMAC_3</spirit:name> + <spirit:vector> + <spirit:left>0</spirit:left> + <spirit:right>0</spirit:right> + </spirit:vector> + </spirit:physicalPort> + </spirit:portMap> + </spirit:portMaps> + </spirit:busInterface> + <spirit:busInterface> <spirit:name>AHBLiteTarget_Slave__CPU_0</spirit:name> <spirit:description>Slave port _CPU_0</spirit:description> @@ -1856,17 +2158,17 @@ <spirit:remapStates> <spirit:remapState> - <spirit:name>remap_0</spirit:name> - <spirit:description>Remap state remap_0</spirit:description> + <spirit:name>remap_n0</spirit:name> + <spirit:description>Remap state remap_n0</spirit:description> <spirit:remapPorts> - <spirit:remapPort spirit:portNameRef="REMAP" spirit:portIndex="0">1</spirit:remapPort> + <spirit:remapPort spirit:portNameRef="REMAP" spirit:portIndex="0">0</spirit:remapPort> </spirit:remapPorts> </spirit:remapState> <spirit:remapState> - <spirit:name>remap_n0</spirit:name> - <spirit:description>Remap state remap_n0</spirit:description> + <spirit:name>remap_0</spirit:name> + <spirit:description>Remap state remap_0</spirit:description> <spirit:remapPorts> - <spirit:remapPort spirit:portNameRef="REMAP" spirit:portIndex="0">0</spirit:remapPort> + <spirit:remapPort spirit:portNameRef="REMAP" spirit:portIndex="0">1</spirit:remapPort> </spirit:remapPorts> </spirit:remapState> @@ -2080,17 +2382,6 @@ <spirit:baseAddress>0xf0000000</spirit:baseAddress> </spirit:subspaceMap> - <spirit:memoryRemap spirit:state="remap_0"> - <spirit:name>AHBLiteTarget_Slave__DEBUG_remap_0_remap_MM</spirit:name> - <spirit:description>_DEBUG remap_0 remap</spirit:description> - <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__IMEM_0" - spirit:segmentRef="_IMEM_0_0x00000000_0x0fffffff"> - <!-- Remapped region, active when REMAP bitcombination is 0 address_region 0x00000000-0x0fffffff --> - <spirit:name>AHBLiteTarget_Master__IMEM_0_0x00000000_0_state_remap_0_SM</spirit:name> - <spirit:baseAddress>0x00000000</spirit:baseAddress> - </spirit:subspaceMap> - </spirit:memoryRemap> - <spirit:memoryRemap spirit:state="remap_n0"> <spirit:name>AHBLiteTarget_Slave__DEBUG_remap_n0_remap_MM</spirit:name> <spirit:description>_DEBUG remap_n0 remap</spirit:description> @@ -2102,6 +2393,17 @@ </spirit:subspaceMap> </spirit:memoryRemap> + <spirit:memoryRemap spirit:state="remap_0"> + <spirit:name>AHBLiteTarget_Slave__DEBUG_remap_0_remap_MM</spirit:name> + <spirit:description>_DEBUG remap_0 remap</spirit:description> + <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__IMEM_0" + spirit:segmentRef="_IMEM_0_0x00000000_0x0fffffff"> + <!-- Remapped region, active when REMAP bitcombination is 0 address_region 0x00000000-0x0fffffff --> + <spirit:name>AHBLiteTarget_Master__IMEM_0_0x00000000_0_state_remap_0_SM</spirit:name> + <spirit:baseAddress>0x00000000</spirit:baseAddress> + </spirit:subspaceMap> + </spirit:memoryRemap> + </spirit:memoryMap> <spirit:memoryMap> @@ -2174,8 +2476,146 @@ </spirit:memoryMap> <spirit:memoryMap> - <spirit:name>AHBLiteTarget_Slave__DMAC_1_MM</spirit:name> - <spirit:description>_DMAC_1 memory map</spirit:description> + <spirit:name>AHBLiteTarget_Slave__DMAC_1_MM</spirit:name> + <spirit:description>_DMAC_1 memory map</spirit:description> + + <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__IMEM_0" + spirit:segmentRef="_IMEM_0_0x00000000_0x0fffffff"> + <!-- Address_region 0x00000000-0x0fffffff --> + <spirit:name>AHBLiteTarget_Master__IMEM_0_0x00000000_0_state_always_SM</spirit:name> + <spirit:baseAddress>0x00000000</spirit:baseAddress> + </spirit:subspaceMap> + + <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__BOOTROM_0" + spirit:segmentRef="_BOOTROM_0_0x10000000_0x1fffffff"> + <!-- Address_region 0x10000000-0x1fffffff --> + <spirit:name>AHBLiteTarget_Master__BOOTROM_0_0x10000000_0_state_always_SM</spirit:name> + <spirit:baseAddress>0x10000000</spirit:baseAddress> + </spirit:subspaceMap> + + <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__IMEM_0" + spirit:segmentRef="_IMEM_0_0x20000000_0x2fffffff"> + <!-- Address_region 0x20000000-0x2fffffff --> + <spirit:name>AHBLiteTarget_Master__IMEM_0_0x20000000_0_state_always_SM</spirit:name> + <spirit:baseAddress>0x20000000</spirit:baseAddress> + </spirit:subspaceMap> + + <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__DMEM_0" + spirit:segmentRef="_DMEM_0_0x30000000_0x3fffffff"> + <!-- Address_region 0x30000000-0x3fffffff --> + <spirit:name>AHBLiteTarget_Master__DMEM_0_0x30000000_0_state_always_SM</spirit:name> + <spirit:baseAddress>0x30000000</spirit:baseAddress> + </spirit:subspaceMap> + + <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__SYSIO" + spirit:segmentRef="_SYSIO_0x40000000_0x5fffffff"> + <!-- Address_region 0x40000000-0x5fffffff --> + <spirit:name>AHBLiteTarget_Master__SYSIO_0x40000000_0_state_always_SM</spirit:name> + <spirit:baseAddress>0x40000000</spirit:baseAddress> + </spirit:subspaceMap> + + <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__EXP" + spirit:segmentRef="_EXP_0x60000000_0x7fffffff"> + <!-- Address_region 0x60000000-0x7fffffff --> + <spirit:name>AHBLiteTarget_Master__EXP_0x60000000_0_state_always_SM</spirit:name> + <spirit:baseAddress>0x60000000</spirit:baseAddress> + </spirit:subspaceMap> + + <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__EXPRAM_L" + spirit:segmentRef="_EXPRAM_L_0x80000000_0x8fffffff"> + <!-- Address_region 0x80000000-0x8fffffff --> + <spirit:name>AHBLiteTarget_Master__EXPRAM_L_0x80000000_0_state_always_SM</spirit:name> + <spirit:baseAddress>0x80000000</spirit:baseAddress> + </spirit:subspaceMap> + + <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__EXPRAM_H" + spirit:segmentRef="_EXPRAM_H_0x90000000_0x9fffffff"> + <!-- Address_region 0x90000000-0x9fffffff --> + <spirit:name>AHBLiteTarget_Master__EXPRAM_H_0x90000000_0_state_always_SM</spirit:name> + <spirit:baseAddress>0x90000000</spirit:baseAddress> + </spirit:subspaceMap> + + <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__EXP" + spirit:segmentRef="_EXP_0xa0000000_0xdfffffff"> + <!-- Address_region 0xa0000000-0xdfffffff --> + <spirit:name>AHBLiteTarget_Master__EXP_0xa0000000_0_state_always_SM</spirit:name> + <spirit:baseAddress>0xa0000000</spirit:baseAddress> + </spirit:subspaceMap> + + </spirit:memoryMap> + + <spirit:memoryMap> + <spirit:name>AHBLiteTarget_Slave__DMAC_2_MM</spirit:name> + <spirit:description>_DMAC_2 memory map</spirit:description> + + <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__IMEM_0" + spirit:segmentRef="_IMEM_0_0x00000000_0x0fffffff"> + <!-- Address_region 0x00000000-0x0fffffff --> + <spirit:name>AHBLiteTarget_Master__IMEM_0_0x00000000_0_state_always_SM</spirit:name> + <spirit:baseAddress>0x00000000</spirit:baseAddress> + </spirit:subspaceMap> + + <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__BOOTROM_0" + spirit:segmentRef="_BOOTROM_0_0x10000000_0x1fffffff"> + <!-- Address_region 0x10000000-0x1fffffff --> + <spirit:name>AHBLiteTarget_Master__BOOTROM_0_0x10000000_0_state_always_SM</spirit:name> + <spirit:baseAddress>0x10000000</spirit:baseAddress> + </spirit:subspaceMap> + + <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__IMEM_0" + spirit:segmentRef="_IMEM_0_0x20000000_0x2fffffff"> + <!-- Address_region 0x20000000-0x2fffffff --> + <spirit:name>AHBLiteTarget_Master__IMEM_0_0x20000000_0_state_always_SM</spirit:name> + <spirit:baseAddress>0x20000000</spirit:baseAddress> + </spirit:subspaceMap> + + <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__DMEM_0" + spirit:segmentRef="_DMEM_0_0x30000000_0x3fffffff"> + <!-- Address_region 0x30000000-0x3fffffff --> + <spirit:name>AHBLiteTarget_Master__DMEM_0_0x30000000_0_state_always_SM</spirit:name> + <spirit:baseAddress>0x30000000</spirit:baseAddress> + </spirit:subspaceMap> + + <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__SYSIO" + spirit:segmentRef="_SYSIO_0x40000000_0x5fffffff"> + <!-- Address_region 0x40000000-0x5fffffff --> + <spirit:name>AHBLiteTarget_Master__SYSIO_0x40000000_0_state_always_SM</spirit:name> + <spirit:baseAddress>0x40000000</spirit:baseAddress> + </spirit:subspaceMap> + + <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__EXP" + spirit:segmentRef="_EXP_0x60000000_0x7fffffff"> + <!-- Address_region 0x60000000-0x7fffffff --> + <spirit:name>AHBLiteTarget_Master__EXP_0x60000000_0_state_always_SM</spirit:name> + <spirit:baseAddress>0x60000000</spirit:baseAddress> + </spirit:subspaceMap> + + <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__EXPRAM_L" + spirit:segmentRef="_EXPRAM_L_0x80000000_0x8fffffff"> + <!-- Address_region 0x80000000-0x8fffffff --> + <spirit:name>AHBLiteTarget_Master__EXPRAM_L_0x80000000_0_state_always_SM</spirit:name> + <spirit:baseAddress>0x80000000</spirit:baseAddress> + </spirit:subspaceMap> + + <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__EXPRAM_H" + spirit:segmentRef="_EXPRAM_H_0x90000000_0x9fffffff"> + <!-- Address_region 0x90000000-0x9fffffff --> + <spirit:name>AHBLiteTarget_Master__EXPRAM_H_0x90000000_0_state_always_SM</spirit:name> + <spirit:baseAddress>0x90000000</spirit:baseAddress> + </spirit:subspaceMap> + + <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__EXP" + spirit:segmentRef="_EXP_0xa0000000_0xdfffffff"> + <!-- Address_region 0xa0000000-0xdfffffff --> + <spirit:name>AHBLiteTarget_Master__EXP_0xa0000000_0_state_always_SM</spirit:name> + <spirit:baseAddress>0xa0000000</spirit:baseAddress> + </spirit:subspaceMap> + + </spirit:memoryMap> + + <spirit:memoryMap> + <spirit:name>AHBLiteTarget_Slave__DMAC_3_MM</spirit:name> + <spirit:description>_DMAC_3 memory map</spirit:description> <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__IMEM_0" spirit:segmentRef="_IMEM_0_0x00000000_0x0fffffff"> @@ -2309,17 +2749,6 @@ <spirit:baseAddress>0xf0000000</spirit:baseAddress> </spirit:subspaceMap> - <spirit:memoryRemap spirit:state="remap_0"> - <spirit:name>AHBLiteTarget_Slave__CPU_0_remap_0_remap_MM</spirit:name> - <spirit:description>_CPU_0 remap_0 remap</spirit:description> - <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__IMEM_0" - spirit:segmentRef="_IMEM_0_0x00000000_0x0fffffff"> - <!-- Remapped region, active when REMAP bitcombination is 0 address_region 0x00000000-0x0fffffff --> - <spirit:name>AHBLiteTarget_Master__IMEM_0_0x00000000_0_state_remap_0_SM</spirit:name> - <spirit:baseAddress>0x00000000</spirit:baseAddress> - </spirit:subspaceMap> - </spirit:memoryRemap> - <spirit:memoryRemap spirit:state="remap_n0"> <spirit:name>AHBLiteTarget_Slave__CPU_0_remap_n0_remap_MM</spirit:name> <spirit:description>_CPU_0 remap_n0 remap</spirit:description> @@ -2331,6 +2760,17 @@ </spirit:subspaceMap> </spirit:memoryRemap> + <spirit:memoryRemap spirit:state="remap_0"> + <spirit:name>AHBLiteTarget_Slave__CPU_0_remap_0_remap_MM</spirit:name> + <spirit:description>_CPU_0 remap_0 remap</spirit:description> + <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__IMEM_0" + spirit:segmentRef="_IMEM_0_0x00000000_0x0fffffff"> + <!-- Remapped region, active when REMAP bitcombination is 0 address_region 0x00000000-0x0fffffff --> + <spirit:name>AHBLiteTarget_Master__IMEM_0_0x00000000_0_state_remap_0_SM</spirit:name> + <spirit:baseAddress>0x00000000</spirit:baseAddress> + </spirit:subspaceMap> + </spirit:memoryRemap> + </spirit:memoryMap> </spirit:memoryMaps> @@ -2688,6 +3128,208 @@ </spirit:wire> </spirit:port> + <spirit:port> + <spirit:name>HSEL_DMAC_2</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>HADDR_DMAC_2</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + <spirit:vector> + <spirit:left>31</spirit:left> + <spirit:right>0</spirit:right> + </spirit:vector> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>HTRANS_DMAC_2</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + <spirit:vector> + <spirit:left>1</spirit:left> + <spirit:right>0</spirit:right> + </spirit:vector> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>HWRITE_DMAC_2</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>HSIZE_DMAC_2</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + <spirit:vector> + <spirit:left>2</spirit:left> + <spirit:right>0</spirit:right> + </spirit:vector> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>HBURST_DMAC_2</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + <spirit:vector> + <spirit:left>2</spirit:left> + <spirit:right>0</spirit:right> + </spirit:vector> + <spirit:driver> + <spirit:defaultValue>0</spirit:defaultValue> + </spirit:driver> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>HPROT_DMAC_2</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + <spirit:vector> + <spirit:left>3</spirit:left> + <spirit:right>0</spirit:right> + </spirit:vector> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>HMASTER_DMAC_2</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + <spirit:vector> + <spirit:left>3</spirit:left> + <spirit:right>0</spirit:right> + </spirit:vector> + <spirit:driver> + <spirit:defaultValue>3</spirit:defaultValue> + </spirit:driver> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>HWDATA_DMAC_2</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + <spirit:vector> + <spirit:left>31</spirit:left> + <spirit:right>0</spirit:right> + </spirit:vector> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>HMASTLOCK_DMAC_2</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>HREADY_DMAC_2</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + </spirit:wire> + </spirit:port> + + <spirit:port> + <spirit:name>HSEL_DMAC_3</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>HADDR_DMAC_3</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + <spirit:vector> + <spirit:left>31</spirit:left> + <spirit:right>0</spirit:right> + </spirit:vector> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>HTRANS_DMAC_3</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + <spirit:vector> + <spirit:left>1</spirit:left> + <spirit:right>0</spirit:right> + </spirit:vector> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>HWRITE_DMAC_3</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>HSIZE_DMAC_3</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + <spirit:vector> + <spirit:left>2</spirit:left> + <spirit:right>0</spirit:right> + </spirit:vector> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>HBURST_DMAC_3</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + <spirit:vector> + <spirit:left>2</spirit:left> + <spirit:right>0</spirit:right> + </spirit:vector> + <spirit:driver> + <spirit:defaultValue>0</spirit:defaultValue> + </spirit:driver> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>HPROT_DMAC_3</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + <spirit:vector> + <spirit:left>3</spirit:left> + <spirit:right>0</spirit:right> + </spirit:vector> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>HMASTER_DMAC_3</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + <spirit:vector> + <spirit:left>3</spirit:left> + <spirit:right>0</spirit:right> + </spirit:vector> + <spirit:driver> + <spirit:defaultValue>4</spirit:defaultValue> + </spirit:driver> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>HWDATA_DMAC_3</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + <spirit:vector> + <spirit:left>31</spirit:left> + <spirit:right>0</spirit:right> + </spirit:vector> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>HMASTLOCK_DMAC_3</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>HREADY_DMAC_3</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + </spirit:wire> + </spirit:port> + <spirit:port> <spirit:name>HSEL_CPU_0</spirit:name> <spirit:wire> @@ -2762,7 +3404,7 @@ <spirit:right>0</spirit:right> </spirit:vector> <spirit:driver> - <spirit:defaultValue>3</spirit:defaultValue> + <spirit:defaultValue>5</spirit:defaultValue> </spirit:driver> </spirit:wire> </spirit:port> @@ -3851,6 +4493,58 @@ </spirit:vector> </spirit:wire> </spirit:port> + <spirit:port> + <spirit:name>HRDATA_DMAC_2</spirit:name> + <spirit:wire> + <spirit:direction>out</spirit:direction> + <spirit:vector> + <spirit:left>31</spirit:left> + <spirit:right>0</spirit:right> + </spirit:vector> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>HREADYOUT_DMAC_2</spirit:name> + <spirit:wire> + <spirit:direction>out</spirit:direction> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>HRESP_DMAC_2</spirit:name> + <spirit:wire> + <spirit:direction>out</spirit:direction> + <spirit:vector> + <spirit:left>1</spirit:left> + <spirit:right>0</spirit:right> + </spirit:vector> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>HRDATA_DMAC_3</spirit:name> + <spirit:wire> + <spirit:direction>out</spirit:direction> + <spirit:vector> + <spirit:left>31</spirit:left> + <spirit:right>0</spirit:right> + </spirit:vector> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>HREADYOUT_DMAC_3</spirit:name> + <spirit:wire> + <spirit:direction>out</spirit:direction> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>HRESP_DMAC_3</spirit:name> + <spirit:wire> + <spirit:direction>out</spirit:direction> + <spirit:vector> + <spirit:left>1</spirit:left> + <spirit:right>0</spirit:right> + </spirit:vector> + </spirit:wire> + </spirit:port> <spirit:port> <spirit:name>HRDATA_CPU_0</spirit:name> <spirit:wire> @@ -3919,6 +4613,14 @@ <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DMAC_1.v</spirit:name> <spirit:fileType>verilogSource-2001</spirit:fileType> </spirit:file> + <spirit:file> + <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DMAC_2.v</spirit:name> + <spirit:fileType>verilogSource-2001</spirit:fileType> + </spirit:file> + <spirit:file> + <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DMAC_3.v</spirit:name> + <spirit:fileType>verilogSource-2001</spirit:fileType> + </spirit:file> <spirit:file> <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_matrix_decode_CPU_0.v</spirit:name> <spirit:fileType>verilogSource-2001</spirit:fileType> diff --git a/nanosoc/nanosoc_busmatrix/ipxact/nanosoc_busmatrix/nanosoc_busmatrix_lite.xml b/nanosoc/nanosoc_busmatrix/ipxact/nanosoc_busmatrix/nanosoc_busmatrix_lite.xml index b0ec4cd..54e94ed 100644 --- a/nanosoc/nanosoc_busmatrix/ipxact/nanosoc_busmatrix/nanosoc_busmatrix_lite.xml +++ b/nanosoc/nanosoc_busmatrix/ipxact/nanosoc_busmatrix/nanosoc_busmatrix_lite.xml @@ -422,6 +422,262 @@ </spirit:portMaps> </spirit:busInterface> + <spirit:busInterface> + <spirit:name>AHBLiteInitiator_Slave__DMAC_2</spirit:name> + <spirit:description>Slave port _DMAC_2</spirit:description> + <spirit:busType spirit:library="AMBA3" spirit:name="AHBLiteInitiator" spirit:vendor="amba.com" spirit:version="r2p0_0"/> + <spirit:abstractionType spirit:library="AMBA3" spirit:name="AHBLiteInitiator_rtl" spirit:vendor="amba.com" spirit:version="r2p0_0"/> + <spirit:slave> + <spirit:memoryMapRef spirit:memoryMapRef="AHBLiteInitiator_Slave__DMAC_2_MM"/> + <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__BOOTROM_0" spirit:opaque="true"/> + <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__IMEM_0" spirit:opaque="true"/> + <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__DMEM_0" spirit:opaque="true"/> + <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__SYSIO" spirit:opaque="true"/> + <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__EXPRAM_L" spirit:opaque="true"/> + <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__EXPRAM_H" spirit:opaque="true"/> + <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__EXP" spirit:opaque="true"/> + </spirit:slave> + + <spirit:portMaps> + <!-- Clock/reset --> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HCLK</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HCLK</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HRESETn</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HRESETn</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <!-- Inputs --> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HADDR</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HADDR_DMAC_2</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HTRANS</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HTRANS_DMAC_2</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HWRITE</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HWRITE_DMAC_2</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HSIZE</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HSIZE_DMAC_2</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HBURST</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HBURST_DMAC_2</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HPROT</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HPROT_DMAC_2</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HWDATA</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HWDATA_DMAC_2</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HMASTLOCK</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HMASTLOCK_DMAC_2</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + + <!-- Outputs --> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HRDATA</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HRDATA_DMAC_2</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HREADY</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HREADY_DMAC_2</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HRESP</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HRESP_DMAC_2</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + </spirit:portMaps> + </spirit:busInterface> + + <spirit:busInterface> + <spirit:name>AHBLiteInitiator_Slave__DMAC_3</spirit:name> + <spirit:description>Slave port _DMAC_3</spirit:description> + <spirit:busType spirit:library="AMBA3" spirit:name="AHBLiteInitiator" spirit:vendor="amba.com" spirit:version="r2p0_0"/> + <spirit:abstractionType spirit:library="AMBA3" spirit:name="AHBLiteInitiator_rtl" spirit:vendor="amba.com" spirit:version="r2p0_0"/> + <spirit:slave> + <spirit:memoryMapRef spirit:memoryMapRef="AHBLiteInitiator_Slave__DMAC_3_MM"/> + <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__BOOTROM_0" spirit:opaque="true"/> + <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__IMEM_0" spirit:opaque="true"/> + <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__DMEM_0" spirit:opaque="true"/> + <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__SYSIO" spirit:opaque="true"/> + <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__EXPRAM_L" spirit:opaque="true"/> + <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__EXPRAM_H" spirit:opaque="true"/> + <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__EXP" spirit:opaque="true"/> + </spirit:slave> + + <spirit:portMaps> + <!-- Clock/reset --> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HCLK</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HCLK</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HRESETn</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HRESETn</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <!-- Inputs --> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HADDR</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HADDR_DMAC_3</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HTRANS</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HTRANS_DMAC_3</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HWRITE</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HWRITE_DMAC_3</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HSIZE</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HSIZE_DMAC_3</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HBURST</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HBURST_DMAC_3</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HPROT</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HPROT_DMAC_3</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HWDATA</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HWDATA_DMAC_3</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HMASTLOCK</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HMASTLOCK_DMAC_3</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + + <!-- Outputs --> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HRDATA</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HRDATA_DMAC_3</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HREADY</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HREADY_DMAC_3</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>HRESP</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>HRESP_DMAC_3</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + </spirit:portMaps> + </spirit:busInterface> + <spirit:busInterface> <spirit:name>AHBLiteInitiator_Slave__CPU_0</spirit:name> <spirit:description>Slave port _CPU_0</spirit:description> @@ -1708,17 +1964,17 @@ <spirit:remapStates> <spirit:remapState> - <spirit:name>remap_0</spirit:name> - <spirit:description>Remap state remap_0</spirit:description> + <spirit:name>remap_n0</spirit:name> + <spirit:description>Remap state remap_n0</spirit:description> <spirit:remapPorts> - <spirit:remapPort spirit:portNameRef="REMAP" spirit:portIndex="0">1</spirit:remapPort> + <spirit:remapPort spirit:portNameRef="REMAP" spirit:portIndex="0">0</spirit:remapPort> </spirit:remapPorts> </spirit:remapState> <spirit:remapState> - <spirit:name>remap_n0</spirit:name> - <spirit:description>Remap state remap_n0</spirit:description> + <spirit:name>remap_0</spirit:name> + <spirit:description>Remap state remap_0</spirit:description> <spirit:remapPorts> - <spirit:remapPort spirit:portNameRef="REMAP" spirit:portIndex="0">0</spirit:remapPort> + <spirit:remapPort spirit:portNameRef="REMAP" spirit:portIndex="0">1</spirit:remapPort> </spirit:remapPorts> </spirit:remapState> @@ -1861,13 +2117,180 @@ <spirit:addressUnitBits>8</spirit:addressUnitBits> </spirit:addressSpace> - </spirit:addressSpaces> + </spirit:addressSpaces> + + <spirit:memoryMaps> + + <spirit:memoryMap> + <spirit:name>AHBLiteInitiator_Slave__DEBUG_MM</spirit:name> + <spirit:description>_DEBUG memory map</spirit:description> + + <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__BOOTROM_0" + spirit:segmentRef="_BOOTROM_0_0x10000000_0x1fffffff"> + <!-- Address_region 0x10000000-0x1fffffff --> + <spirit:name>AHBLiteTarget_Master__BOOTROM_0_0x10000000_0_state_always_SM</spirit:name> + <spirit:baseAddress>0x10000000</spirit:baseAddress> + </spirit:subspaceMap> + + <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__IMEM_0" + spirit:segmentRef="_IMEM_0_0x20000000_0x2fffffff"> + <!-- Address_region 0x20000000-0x2fffffff --> + <spirit:name>AHBLiteTarget_Master__IMEM_0_0x20000000_0_state_always_SM</spirit:name> + <spirit:baseAddress>0x20000000</spirit:baseAddress> + </spirit:subspaceMap> + + <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__DMEM_0" + spirit:segmentRef="_DMEM_0_0x30000000_0x3fffffff"> + <!-- Address_region 0x30000000-0x3fffffff --> + <spirit:name>AHBLiteTarget_Master__DMEM_0_0x30000000_0_state_always_SM</spirit:name> + <spirit:baseAddress>0x30000000</spirit:baseAddress> + </spirit:subspaceMap> + + <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__SYSIO" + spirit:segmentRef="_SYSIO_0x40000000_0x5fffffff"> + <!-- Address_region 0x40000000-0x5fffffff --> + <spirit:name>AHBLiteTarget_Master__SYSIO_0x40000000_0_state_always_SM</spirit:name> + <spirit:baseAddress>0x40000000</spirit:baseAddress> + </spirit:subspaceMap> + + <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__EXP" + spirit:segmentRef="_EXP_0x60000000_0x7fffffff"> + <!-- Address_region 0x60000000-0x7fffffff --> + <spirit:name>AHBLiteTarget_Master__EXP_0x60000000_0_state_always_SM</spirit:name> + <spirit:baseAddress>0x60000000</spirit:baseAddress> + </spirit:subspaceMap> + + <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__EXPRAM_L" + spirit:segmentRef="_EXPRAM_L_0x80000000_0x8fffffff"> + <!-- Address_region 0x80000000-0x8fffffff --> + <spirit:name>AHBLiteTarget_Master__EXPRAM_L_0x80000000_0_state_always_SM</spirit:name> + <spirit:baseAddress>0x80000000</spirit:baseAddress> + </spirit:subspaceMap> + + <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__EXPRAM_H" + spirit:segmentRef="_EXPRAM_H_0x90000000_0x9fffffff"> + <!-- Address_region 0x90000000-0x9fffffff --> + <spirit:name>AHBLiteTarget_Master__EXPRAM_H_0x90000000_0_state_always_SM</spirit:name> + <spirit:baseAddress>0x90000000</spirit:baseAddress> + </spirit:subspaceMap> + + <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__EXP" + spirit:segmentRef="_EXP_0xa0000000_0xdfffffff"> + <!-- Address_region 0xa0000000-0xdfffffff --> + <spirit:name>AHBLiteTarget_Master__EXP_0xa0000000_0_state_always_SM</spirit:name> + <spirit:baseAddress>0xa0000000</spirit:baseAddress> + </spirit:subspaceMap> + + <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__SYSTABLE" + spirit:segmentRef="_SYSTABLE_0xf0000000_0xf003ffff"> + <!-- Address_region 0xf0000000-0xf003ffff --> + <spirit:name>AHBLiteTarget_Master__SYSTABLE_0xf0000000_0_state_always_SM</spirit:name> + <spirit:baseAddress>0xf0000000</spirit:baseAddress> + </spirit:subspaceMap> + + <spirit:memoryRemap spirit:state="remap_n0"> + <spirit:name>AHBLiteInitiator_Slave__DEBUG_remap_n0_remap_MM</spirit:name> + <spirit:description>_DEBUG remap_n0 remap</spirit:description> + <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__BOOTROM_0" + spirit:segmentRef="_BOOTROM_0_0x00000000_0x0fffffff"> + <!-- Removable region, active only when REMAP bitcombination is n0 address_region 0x00000000-0x0fffffff --> + <spirit:name>AHBLiteTarget_Master__BOOTROM_0_0x00000000_0_state_remap_n0_SM</spirit:name> + <spirit:baseAddress>0x00000000</spirit:baseAddress> + </spirit:subspaceMap> + </spirit:memoryRemap> + + <spirit:memoryRemap spirit:state="remap_0"> + <spirit:name>AHBLiteInitiator_Slave__DEBUG_remap_0_remap_MM</spirit:name> + <spirit:description>_DEBUG remap_0 remap</spirit:description> + <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__IMEM_0" + spirit:segmentRef="_IMEM_0_0x00000000_0x0fffffff"> + <!-- Remapped region, active when REMAP bitcombination is 0 address_region 0x00000000-0x0fffffff --> + <spirit:name>AHBLiteTarget_Master__IMEM_0_0x00000000_0_state_remap_0_SM</spirit:name> + <spirit:baseAddress>0x00000000</spirit:baseAddress> + </spirit:subspaceMap> + </spirit:memoryRemap> + + </spirit:memoryMap> + + <spirit:memoryMap> + <spirit:name>AHBLiteInitiator_Slave__DMAC_0_MM</spirit:name> + <spirit:description>_DMAC_0 memory map</spirit:description> + + <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__IMEM_0" + spirit:segmentRef="_IMEM_0_0x00000000_0x0fffffff"> + <!-- Address_region 0x00000000-0x0fffffff --> + <spirit:name>AHBLiteTarget_Master__IMEM_0_0x00000000_0_state_always_SM</spirit:name> + <spirit:baseAddress>0x00000000</spirit:baseAddress> + </spirit:subspaceMap> + + <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__BOOTROM_0" + spirit:segmentRef="_BOOTROM_0_0x10000000_0x1fffffff"> + <!-- Address_region 0x10000000-0x1fffffff --> + <spirit:name>AHBLiteTarget_Master__BOOTROM_0_0x10000000_0_state_always_SM</spirit:name> + <spirit:baseAddress>0x10000000</spirit:baseAddress> + </spirit:subspaceMap> + + <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__IMEM_0" + spirit:segmentRef="_IMEM_0_0x20000000_0x2fffffff"> + <!-- Address_region 0x20000000-0x2fffffff --> + <spirit:name>AHBLiteTarget_Master__IMEM_0_0x20000000_0_state_always_SM</spirit:name> + <spirit:baseAddress>0x20000000</spirit:baseAddress> + </spirit:subspaceMap> + + <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__DMEM_0" + spirit:segmentRef="_DMEM_0_0x30000000_0x3fffffff"> + <!-- Address_region 0x30000000-0x3fffffff --> + <spirit:name>AHBLiteTarget_Master__DMEM_0_0x30000000_0_state_always_SM</spirit:name> + <spirit:baseAddress>0x30000000</spirit:baseAddress> + </spirit:subspaceMap> + + <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__SYSIO" + spirit:segmentRef="_SYSIO_0x40000000_0x5fffffff"> + <!-- Address_region 0x40000000-0x5fffffff --> + <spirit:name>AHBLiteTarget_Master__SYSIO_0x40000000_0_state_always_SM</spirit:name> + <spirit:baseAddress>0x40000000</spirit:baseAddress> + </spirit:subspaceMap> + + <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__EXP" + spirit:segmentRef="_EXP_0x60000000_0x7fffffff"> + <!-- Address_region 0x60000000-0x7fffffff --> + <spirit:name>AHBLiteTarget_Master__EXP_0x60000000_0_state_always_SM</spirit:name> + <spirit:baseAddress>0x60000000</spirit:baseAddress> + </spirit:subspaceMap> + + <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__EXPRAM_L" + spirit:segmentRef="_EXPRAM_L_0x80000000_0x8fffffff"> + <!-- Address_region 0x80000000-0x8fffffff --> + <spirit:name>AHBLiteTarget_Master__EXPRAM_L_0x80000000_0_state_always_SM</spirit:name> + <spirit:baseAddress>0x80000000</spirit:baseAddress> + </spirit:subspaceMap> + + <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__EXPRAM_H" + spirit:segmentRef="_EXPRAM_H_0x90000000_0x9fffffff"> + <!-- Address_region 0x90000000-0x9fffffff --> + <spirit:name>AHBLiteTarget_Master__EXPRAM_H_0x90000000_0_state_always_SM</spirit:name> + <spirit:baseAddress>0x90000000</spirit:baseAddress> + </spirit:subspaceMap> + + <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__EXP" + spirit:segmentRef="_EXP_0xa0000000_0xdfffffff"> + <!-- Address_region 0xa0000000-0xdfffffff --> + <spirit:name>AHBLiteTarget_Master__EXP_0xa0000000_0_state_always_SM</spirit:name> + <spirit:baseAddress>0xa0000000</spirit:baseAddress> + </spirit:subspaceMap> - <spirit:memoryMaps> + </spirit:memoryMap> <spirit:memoryMap> - <spirit:name>AHBLiteInitiator_Slave__DEBUG_MM</spirit:name> - <spirit:description>_DEBUG memory map</spirit:description> + <spirit:name>AHBLiteInitiator_Slave__DMAC_1_MM</spirit:name> + <spirit:description>_DMAC_1 memory map</spirit:description> + + <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__IMEM_0" + spirit:segmentRef="_IMEM_0_0x00000000_0x0fffffff"> + <!-- Address_region 0x00000000-0x0fffffff --> + <spirit:name>AHBLiteTarget_Master__IMEM_0_0x00000000_0_state_always_SM</spirit:name> + <spirit:baseAddress>0x00000000</spirit:baseAddress> + </spirit:subspaceMap> <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__BOOTROM_0" spirit:segmentRef="_BOOTROM_0_0x10000000_0x1fffffff"> @@ -1925,40 +2348,11 @@ <spirit:baseAddress>0xa0000000</spirit:baseAddress> </spirit:subspaceMap> - <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__SYSTABLE" - spirit:segmentRef="_SYSTABLE_0xf0000000_0xf003ffff"> - <!-- Address_region 0xf0000000-0xf003ffff --> - <spirit:name>AHBLiteTarget_Master__SYSTABLE_0xf0000000_0_state_always_SM</spirit:name> - <spirit:baseAddress>0xf0000000</spirit:baseAddress> - </spirit:subspaceMap> - - <spirit:memoryRemap spirit:state="remap_0"> - <spirit:name>AHBLiteInitiator_Slave__DEBUG_remap_0_remap_MM</spirit:name> - <spirit:description>_DEBUG remap_0 remap</spirit:description> - <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__IMEM_0" - spirit:segmentRef="_IMEM_0_0x00000000_0x0fffffff"> - <!-- Remapped region, active when REMAP bitcombination is 0 address_region 0x00000000-0x0fffffff --> - <spirit:name>AHBLiteTarget_Master__IMEM_0_0x00000000_0_state_remap_0_SM</spirit:name> - <spirit:baseAddress>0x00000000</spirit:baseAddress> - </spirit:subspaceMap> - </spirit:memoryRemap> - - <spirit:memoryRemap spirit:state="remap_n0"> - <spirit:name>AHBLiteInitiator_Slave__DEBUG_remap_n0_remap_MM</spirit:name> - <spirit:description>_DEBUG remap_n0 remap</spirit:description> - <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__BOOTROM_0" - spirit:segmentRef="_BOOTROM_0_0x00000000_0x0fffffff"> - <!-- Removable region, active only when REMAP bitcombination is n0 address_region 0x00000000-0x0fffffff --> - <spirit:name>AHBLiteTarget_Master__BOOTROM_0_0x00000000_0_state_remap_n0_SM</spirit:name> - <spirit:baseAddress>0x00000000</spirit:baseAddress> - </spirit:subspaceMap> - </spirit:memoryRemap> - </spirit:memoryMap> <spirit:memoryMap> - <spirit:name>AHBLiteInitiator_Slave__DMAC_0_MM</spirit:name> - <spirit:description>_DMAC_0 memory map</spirit:description> + <spirit:name>AHBLiteInitiator_Slave__DMAC_2_MM</spirit:name> + <spirit:description>_DMAC_2 memory map</spirit:description> <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__IMEM_0" spirit:segmentRef="_IMEM_0_0x00000000_0x0fffffff"> @@ -2026,8 +2420,8 @@ </spirit:memoryMap> <spirit:memoryMap> - <spirit:name>AHBLiteInitiator_Slave__DMAC_1_MM</spirit:name> - <spirit:description>_DMAC_1 memory map</spirit:description> + <spirit:name>AHBLiteInitiator_Slave__DMAC_3_MM</spirit:name> + <spirit:description>_DMAC_3 memory map</spirit:description> <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__IMEM_0" spirit:segmentRef="_IMEM_0_0x00000000_0x0fffffff"> @@ -2161,17 +2555,6 @@ <spirit:baseAddress>0xf0000000</spirit:baseAddress> </spirit:subspaceMap> - <spirit:memoryRemap spirit:state="remap_0"> - <spirit:name>AHBLiteInitiator_Slave__CPU_0_remap_0_remap_MM</spirit:name> - <spirit:description>_CPU_0 remap_0 remap</spirit:description> - <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__IMEM_0" - spirit:segmentRef="_IMEM_0_0x00000000_0x0fffffff"> - <!-- Remapped region, active when REMAP bitcombination is 0 address_region 0x00000000-0x0fffffff --> - <spirit:name>AHBLiteTarget_Master__IMEM_0_0x00000000_0_state_remap_0_SM</spirit:name> - <spirit:baseAddress>0x00000000</spirit:baseAddress> - </spirit:subspaceMap> - </spirit:memoryRemap> - <spirit:memoryRemap spirit:state="remap_n0"> <spirit:name>AHBLiteInitiator_Slave__CPU_0_remap_n0_remap_MM</spirit:name> <spirit:description>_CPU_0 remap_n0 remap</spirit:description> @@ -2183,6 +2566,17 @@ </spirit:subspaceMap> </spirit:memoryRemap> + <spirit:memoryRemap spirit:state="remap_0"> + <spirit:name>AHBLiteInitiator_Slave__CPU_0_remap_0_remap_MM</spirit:name> + <spirit:description>_CPU_0 remap_0 remap</spirit:description> + <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__IMEM_0" + spirit:segmentRef="_IMEM_0_0x00000000_0x0fffffff"> + <!-- Remapped region, active when REMAP bitcombination is 0 address_region 0x00000000-0x0fffffff --> + <spirit:name>AHBLiteTarget_Master__IMEM_0_0x00000000_0_state_remap_0_SM</spirit:name> + <spirit:baseAddress>0x00000000</spirit:baseAddress> + </spirit:subspaceMap> + </spirit:memoryRemap> + </spirit:memoryMap> </spirit:memoryMaps> @@ -2462,6 +2856,156 @@ <spirit:direction>in</spirit:direction> </spirit:wire> </spirit:port> + <spirit:port> + <spirit:name>HADDR_DMAC_2</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + <spirit:vector> + <spirit:left>31</spirit:left> + <spirit:right>0</spirit:right> + </spirit:vector> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>HTRANS_DMAC_2</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + <spirit:vector> + <spirit:left>1</spirit:left> + <spirit:right>0</spirit:right> + </spirit:vector> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>HWRITE_DMAC_2</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>HSIZE_DMAC_2</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + <spirit:vector> + <spirit:left>2</spirit:left> + <spirit:right>0</spirit:right> + </spirit:vector> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>HBURST_DMAC_2</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + <spirit:vector> + <spirit:left>2</spirit:left> + <spirit:right>0</spirit:right> + </spirit:vector> + <spirit:driver> + <spirit:defaultValue>0</spirit:defaultValue> + </spirit:driver> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>HPROT_DMAC_2</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + <spirit:vector> + <spirit:left>3</spirit:left> + <spirit:right>0</spirit:right> + </spirit:vector> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>HWDATA_DMAC_2</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + <spirit:vector> + <spirit:left>31</spirit:left> + <spirit:right>0</spirit:right> + </spirit:vector> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>HMASTLOCK_DMAC_2</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>HADDR_DMAC_3</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + <spirit:vector> + <spirit:left>31</spirit:left> + <spirit:right>0</spirit:right> + </spirit:vector> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>HTRANS_DMAC_3</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + <spirit:vector> + <spirit:left>1</spirit:left> + <spirit:right>0</spirit:right> + </spirit:vector> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>HWRITE_DMAC_3</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>HSIZE_DMAC_3</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + <spirit:vector> + <spirit:left>2</spirit:left> + <spirit:right>0</spirit:right> + </spirit:vector> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>HBURST_DMAC_3</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + <spirit:vector> + <spirit:left>2</spirit:left> + <spirit:right>0</spirit:right> + </spirit:vector> + <spirit:driver> + <spirit:defaultValue>0</spirit:defaultValue> + </spirit:driver> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>HPROT_DMAC_3</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + <spirit:vector> + <spirit:left>3</spirit:left> + <spirit:right>0</spirit:right> + </spirit:vector> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>HWDATA_DMAC_3</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + <spirit:vector> + <spirit:left>31</spirit:left> + <spirit:right>0</spirit:right> + </spirit:vector> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>HMASTLOCK_DMAC_3</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + </spirit:wire> + </spirit:port> <spirit:port> <spirit:name>HADDR_CPU_0</spirit:name> <spirit:wire> @@ -3475,6 +4019,50 @@ <spirit:direction>out</spirit:direction> </spirit:wire> </spirit:port> + <spirit:port> + <spirit:name>HRDATA_DMAC_2</spirit:name> + <spirit:wire> + <spirit:direction>out</spirit:direction> + <spirit:vector> + <spirit:left>31</spirit:left> + <spirit:right>0</spirit:right> + </spirit:vector> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>HREADY_DMAC_2</spirit:name> + <spirit:wire> + <spirit:direction>out</spirit:direction> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>HRESP_DMAC_2</spirit:name> + <spirit:wire> + <spirit:direction>out</spirit:direction> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>HRDATA_DMAC_3</spirit:name> + <spirit:wire> + <spirit:direction>out</spirit:direction> + <spirit:vector> + <spirit:left>31</spirit:left> + <spirit:right>0</spirit:right> + </spirit:vector> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>HREADY_DMAC_3</spirit:name> + <spirit:wire> + <spirit:direction>out</spirit:direction> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>HRESP_DMAC_3</spirit:name> + <spirit:wire> + <spirit:direction>out</spirit:direction> + </spirit:wire> + </spirit:port> <spirit:port> <spirit:name>HRDATA_CPU_0</spirit:name> <spirit:wire> @@ -3543,6 +4131,14 @@ <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DMAC_1.v</spirit:name> <spirit:fileType>verilogSource-2001</spirit:fileType> </spirit:file> + <spirit:file> + <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DMAC_2.v</spirit:name> + <spirit:fileType>verilogSource-2001</spirit:fileType> + </spirit:file> + <spirit:file> + <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DMAC_3.v</spirit:name> + <spirit:fileType>verilogSource-2001</spirit:fileType> + </spirit:file> <spirit:file> <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_matrix_decode_CPU_0.v</spirit:name> <spirit:fileType>verilogSource-2001</spirit:fileType> diff --git a/nanosoc/nanosoc_busmatrix/logs/nanosoc.log b/nanosoc/nanosoc_busmatrix/logs/nanosoc.log index 038f8af..466230a 100644 --- a/nanosoc/nanosoc_busmatrix/logs/nanosoc.log +++ b/nanosoc/nanosoc_busmatrix/logs/nanosoc.log @@ -14,14 +14,14 @@ = = BuildBusMatrix.pl = -= Run Date : 16/06/2023 08:53:15 += Run Date : 17/07/2024 10:27:53 ============================================================== Script accepted the following parameters: - - Configuration file : '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/xml/nanosoc.xml' + - Configuration file : '/home/dwf1m12/work/soclabs/accelerator-project/nanosoc_tech/nanosoc/nanosoc_busmatrix/xml/nanosoc.xml' - Top-level name : 'nanosoc_busmatrix' - - Slave interfaces : 4 + - Slave interfaces : 6 - Master interfaces : 8 - Architecture type : 'ahb2' - Arbitration scheme : 'burst' @@ -29,74 +29,80 @@ Script accepted the following parameters: - Connectivity mapping : _DEBUG -> _BOOTROM_0, _IMEM_0, _DMEM_0, _SYSIO, _EXP, _EXPRAM_L, _EXPRAM_H, _SYSTABLE, _DMAC_0 -> _BOOTROM_0, _IMEM_0, _DMEM_0, _SYSIO, _EXP, _EXPRAM_L, _EXPRAM_H, _DMAC_1 -> _BOOTROM_0, _IMEM_0, _DMEM_0, _SYSIO, _EXP, _EXPRAM_L, _EXPRAM_H, + _DMAC_2 -> _BOOTROM_0, _IMEM_0, _DMEM_0, _SYSIO, _EXP, _EXPRAM_L, _EXPRAM_H, + _DMAC_3 -> _BOOTROM_0, _IMEM_0, _DMEM_0, _SYSIO, _EXP, _EXPRAM_L, _EXPRAM_H, _CPU_0 -> _BOOTROM_0, _IMEM_0, _DMEM_0, _SYSIO, _EXP, _EXPRAM_L, _EXPRAM_H, _SYSTABLE - Connectivity type : sparse - Routing data width : 32 - Routing address width : 32 - User signal width : 0 - Timescales : no - - Configuration directory : '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog' + - Configuration directory : '/home/dwf1m12/work/soclabs/accelerator-project/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog' - Source directory : '/research/AAA/ip_library/latest/Corstone-101/logical/cmsdk_ahb_busmatrix/verilog/src' - - IPXact target directory : '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/ipxact' + - IPXact target directory : '/home/dwf1m12/work/soclabs/accelerator-project/nanosoc_tech/nanosoc/nanosoc_busmatrix/ipxact' - IPXact source directory : '/research/AAA/ip_library/latest/Corstone-101/logical/cmsdk_ahb_busmatrix/ipxact/src' - Overwrite mode : enabled -Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_BOOTROM_0.v' file... -Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_DMEM_0.v' file... -Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_EXPANSION.v' file... -Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_EXPRAM_H.v' file... -Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_EXPRAM_L.v' file... -Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_IMEM_0.v' file... -Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_SYSIO.v' file... -Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_SYSTABLE.v' file... -Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix.v' file... -Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix_default_slave.v' file... -Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix_lite.v' file... -Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_inititator_input.v' file... -Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_CPU_0.v' file... -Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DEBUG.v' file... -Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DMAC_0.v' file... -Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DMAC_1.v' file... -Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_BOOTROM_0.v' file... -Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_DMEM_0.v' file... -Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_EXPANSION.v' file... -Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_EXPRAM_H.v' file... -Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_EXPRAM_L.v' file... -Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_IMEM_0.v' file... -Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_SYSIO.v' file... -Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_SYSTABLE.v' file... +Deleting the '/home/dwf1m12/work/soclabs/accelerator-project/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_BOOTROM_0.v' file... +Deleting the '/home/dwf1m12/work/soclabs/accelerator-project/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_DMEM_0.v' file... +Deleting the '/home/dwf1m12/work/soclabs/accelerator-project/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_EXP.v' file... +Deleting the '/home/dwf1m12/work/soclabs/accelerator-project/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_EXPRAM_H.v' file... +Deleting the '/home/dwf1m12/work/soclabs/accelerator-project/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_EXPRAM_L.v' file... +Deleting the '/home/dwf1m12/work/soclabs/accelerator-project/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_IMEM_0.v' file... +Deleting the '/home/dwf1m12/work/soclabs/accelerator-project/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_SYSIO.v' file... +Deleting the '/home/dwf1m12/work/soclabs/accelerator-project/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_SYSTABLE.v' file... +Deleting the '/home/dwf1m12/work/soclabs/accelerator-project/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix.v' file... +Deleting the '/home/dwf1m12/work/soclabs/accelerator-project/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix_default_slave.v' file... +Deleting the '/home/dwf1m12/work/soclabs/accelerator-project/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix_lite.v' file... +Deleting the '/home/dwf1m12/work/soclabs/accelerator-project/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_inititator_input.v' file... +Deleting the '/home/dwf1m12/work/soclabs/accelerator-project/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_CPU_0.v' file... +Deleting the '/home/dwf1m12/work/soclabs/accelerator-project/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DEBUG.v' file... +Deleting the '/home/dwf1m12/work/soclabs/accelerator-project/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DMAC_0.v' file... +Deleting the '/home/dwf1m12/work/soclabs/accelerator-project/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DMAC_1.v' file... +Deleting the '/home/dwf1m12/work/soclabs/accelerator-project/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DMAC_2.v' file... +Deleting the '/home/dwf1m12/work/soclabs/accelerator-project/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DMAC_3.v' file... +Deleting the '/home/dwf1m12/work/soclabs/accelerator-project/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_BOOTROM_0.v' file... +Deleting the '/home/dwf1m12/work/soclabs/accelerator-project/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_DMEM_0.v' file... +Deleting the '/home/dwf1m12/work/soclabs/accelerator-project/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_EXP.v' file... +Deleting the '/home/dwf1m12/work/soclabs/accelerator-project/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_EXPRAM_H.v' file... +Deleting the '/home/dwf1m12/work/soclabs/accelerator-project/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_EXPRAM_L.v' file... +Deleting the '/home/dwf1m12/work/soclabs/accelerator-project/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_IMEM_0.v' file... +Deleting the '/home/dwf1m12/work/soclabs/accelerator-project/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_SYSIO.v' file... +Deleting the '/home/dwf1m12/work/soclabs/accelerator-project/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_SYSTABLE.v' file... -Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/ipxact/nanosoc_busmatrix/nanosoc_busmatrix.xml' file... -Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/ipxact/nanosoc_busmatrix/nanosoc_busmatrix_lite.xml' file... +Deleting the '/home/dwf1m12/work/soclabs/accelerator-project/nanosoc_tech/nanosoc/nanosoc_busmatrix/ipxact/nanosoc_busmatrix/nanosoc_busmatrix.xml' file... +Deleting the '/home/dwf1m12/work/soclabs/accelerator-project/nanosoc_tech/nanosoc/nanosoc_busmatrix/ipxact/nanosoc_busmatrix/nanosoc_busmatrix_lite.xml' file... Creating the bus matrix variant... - - Rendering 'nanosoc_busmatrix.xml' - Rendering 'nanosoc_busmatrix_lite.xml' - - Rendering 'nanosoc_matrix_decode_DMAC_0.v' - - Rendering 'nanosoc_target_output_BOOTROM_0.v' + - Rendering 'nanosoc_arbiter_EXPRAM_L.v' - Rendering 'nanosoc_arbiter_EXP.v' - - Rendering 'nanosoc_arbiter_EXPRAM_H.v' - - Rendering 'nanosoc_target_output_IMEM_0.v' - - Rendering 'nanosoc_target_output_DMEM_0.v' + - Rendering 'nanosoc_target_output_SYSTABLE.v' + - Rendering 'nanosoc_matrix_decode_DEBUG.v' + - Rendering 'nanosoc_arbiter_SYSTABLE.v' - Rendering 'nanosoc_target_output_EXPRAM_L.v' + - Rendering 'nanosoc_busmatrix_lite.v' + - Rendering 'nanosoc_busmatrix.xml' + - Rendering 'nanosoc_target_output_EXPRAM_H.v' + - Rendering 'nanosoc_matrix_decode_DMAC_1.v' - Rendering 'nanosoc_arbiter_SYSIO.v' - - Rendering 'nanosoc_target_output_SYSIO.v' + - Rendering 'nanosoc_target_output_BOOTROM_0.v' - Rendering 'nanosoc_busmatrix.v' - - Rendering 'nanosoc_arbiter_EXPRAM_L.v' + - Rendering 'nanosoc_matrix_decode_DMAC_2.v' + - Rendering 'nanosoc_busmatrix_default_slave.v' + - Rendering 'nanosoc_arbiter_DMEM_0.v' + - Rendering 'nanosoc_target_output_IMEM_0.v' + - Rendering 'nanosoc_arbiter_EXPRAM_H.v' - Rendering 'nanosoc_inititator_input.v' - - Rendering 'nanosoc_target_output_EXPRAM_H.v' + - Rendering 'nanosoc_target_output_EXP.v' - Rendering 'nanosoc_arbiter_BOOTROM_0.v' - - Rendering 'nanosoc_busmatrix_lite.v' + - Rendering 'nanosoc_matrix_decode_DMAC_0.v' - Rendering 'nanosoc_arbiter_IMEM_0.v' - - Rendering 'nanosoc_arbiter_DMEM_0.v' - - Rendering 'nanosoc_arbiter_SYSTABLE.v' + - Rendering 'nanosoc_target_output_DMEM_0.v' - Rendering 'nanosoc_matrix_decode_CPU_0.v' - - Rendering 'nanosoc_matrix_decode_DEBUG.v' - - Rendering 'nanosoc_matrix_decode_DMAC_1.v' - - Rendering 'nanosoc_target_output_SYSTABLE.v' - - Rendering 'nanosoc_target_output_EXP.v' - - Rendering 'nanosoc_busmatrix_default_slave.v' + - Rendering 'nanosoc_matrix_decode_DMAC_3.v' + - Rendering 'nanosoc_target_output_SYSIO.v' Done! diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_BOOTROM_0.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_BOOTROM_0.v index 850c0bc..861093e 100644 --- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_BOOTROM_0.v +++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_BOOTROM_0.v @@ -3,7 +3,7 @@ // only be used by a person authorised under and to the extent permitted // by a subsisting licensing agreement from Arm Limited or its affiliates. // -// (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates. +// (C) COPYRIGHT 2001-2024 Arm Limited or its affiliates. // ALL RIGHTS RESERVED // // This entire notice must be reproduced on all copies of this file @@ -43,6 +43,8 @@ module nanosoc_arbiter_BOOTROM_0 ( req_port1, req_port2, req_port3, + req_port4, + req_port5, HREADYM, HSELM, @@ -68,12 +70,14 @@ module nanosoc_arbiter_BOOTROM_0 ( input req_port1; // Port 1 request signal input req_port2; // Port 2 request signal input req_port3; // Port 3 request signal + input req_port4; // Port 4 request signal + input req_port5; // Port 5 request signal input HREADYM; // Transfer done input HSELM; // Slave select line input [1:0] HTRANSM; // Transfer type input [2:0] HBURSTM; // Burst type input HMASTLOCKM; // Locked transfer - output [1:0] addr_in_port; // Port address input + output [2:0] addr_in_port; // Port address input output no_port; // No port selected signal @@ -107,19 +111,21 @@ module nanosoc_arbiter_BOOTROM_0 ( wire req_port1; // Port 1 request signal wire req_port2; // Port 2 request signal wire req_port3; // Port 3 request signal + wire req_port4; // Port 4 request signal + wire req_port5; // Port 5 request signal wire HREADYM; // Transfer done wire HSELM; // Slave select line wire [1:0] HTRANSM; // Transfer type wire [2:0] HBURSTM; // Burst type wire HMASTLOCKM; // Locked transfer - wire [1:0] addr_in_port; // Address input port + wire [2:0] addr_in_port; // Address input port reg no_port; // No port selected signal // ----------------------------------------------------------------------------- // Signal declarations // ----------------------------------------------------------------------------- - reg [1:0] addr_in_port_next; // D-input of addr_in_port - reg [1:0] i_addr_in_port; // Internal version of addr_in_port + reg [2:0] addr_in_port_next; // D-input of addr_in_port + reg [2:0] i_addr_in_port; // Internal version of addr_in_port reg no_port_next; // D-input of no_port reg [3:0] next_burst_count; // D-input of reg_burst_count reg [3:0] reg_burst_count; // Burst counter @@ -275,6 +281,8 @@ module nanosoc_arbiter_BOOTROM_0 ( req_port1 or req_port2 or req_port3 or + req_port4 or + req_port5 or HSELM or HTRANSM or HMASTLOCKM or next_burst_hold or i_addr_in_port ) begin : p_sel_port_comb @@ -284,18 +292,24 @@ module nanosoc_arbiter_BOOTROM_0 ( if ( HMASTLOCKM | next_burst_hold ) addr_in_port_next = i_addr_in_port; - else if ( req_port0 | ( (i_addr_in_port == 2'b00) & HSELM & + else if ( req_port0 | ( (i_addr_in_port == 3'b000) & HSELM & (HTRANSM != 2'b00) ) ) - addr_in_port_next = 2'b00; - else if ( req_port1 | ( (i_addr_in_port == 2'b01) & HSELM & + addr_in_port_next = 3'b000; + else if ( req_port1 | ( (i_addr_in_port == 3'b001) & HSELM & (HTRANSM != 2'b00) ) ) - addr_in_port_next = 2'b01; - else if ( req_port2 | ( (i_addr_in_port == 2'b10) & HSELM & + addr_in_port_next = 3'b001; + else if ( req_port2 | ( (i_addr_in_port == 3'b010) & HSELM & (HTRANSM != 2'b00) ) ) - addr_in_port_next = 2'b10; - else if ( req_port3 | ( (i_addr_in_port == 2'b11) & HSELM & + addr_in_port_next = 3'b010; + else if ( req_port3 | ( (i_addr_in_port == 3'b011) & HSELM & (HTRANSM != 2'b00) ) ) - addr_in_port_next = 2'b11; + addr_in_port_next = 3'b011; + else if ( req_port4 | ( (i_addr_in_port == 3'b100) & HSELM & + (HTRANSM != 2'b00) ) ) + addr_in_port_next = 3'b100; + else if ( req_port5 | ( (i_addr_in_port == 3'b101) & HSELM & + (HTRANSM != 2'b00) ) ) + addr_in_port_next = 3'b101; else if (HSELM) addr_in_port_next = i_addr_in_port; else @@ -309,7 +323,7 @@ module nanosoc_arbiter_BOOTROM_0 ( if (!HRESETn) begin no_port <= 1'b1; - i_addr_in_port <= {2{1'b0}}; + i_addr_in_port <= {3{1'b0}}; end else if (HREADYM) diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_DMEM_0.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_DMEM_0.v index e2559ef..c0b7557 100644 --- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_DMEM_0.v +++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_DMEM_0.v @@ -3,7 +3,7 @@ // only be used by a person authorised under and to the extent permitted // by a subsisting licensing agreement from Arm Limited or its affiliates. // -// (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates. +// (C) COPYRIGHT 2001-2024 Arm Limited or its affiliates. // ALL RIGHTS RESERVED // // This entire notice must be reproduced on all copies of this file @@ -43,6 +43,8 @@ module nanosoc_arbiter_DMEM_0 ( req_port1, req_port2, req_port3, + req_port4, + req_port5, HREADYM, HSELM, @@ -68,12 +70,14 @@ module nanosoc_arbiter_DMEM_0 ( input req_port1; // Port 1 request signal input req_port2; // Port 2 request signal input req_port3; // Port 3 request signal + input req_port4; // Port 4 request signal + input req_port5; // Port 5 request signal input HREADYM; // Transfer done input HSELM; // Slave select line input [1:0] HTRANSM; // Transfer type input [2:0] HBURSTM; // Burst type input HMASTLOCKM; // Locked transfer - output [1:0] addr_in_port; // Port address input + output [2:0] addr_in_port; // Port address input output no_port; // No port selected signal @@ -107,19 +111,21 @@ module nanosoc_arbiter_DMEM_0 ( wire req_port1; // Port 1 request signal wire req_port2; // Port 2 request signal wire req_port3; // Port 3 request signal + wire req_port4; // Port 4 request signal + wire req_port5; // Port 5 request signal wire HREADYM; // Transfer done wire HSELM; // Slave select line wire [1:0] HTRANSM; // Transfer type wire [2:0] HBURSTM; // Burst type wire HMASTLOCKM; // Locked transfer - wire [1:0] addr_in_port; // Address input port + wire [2:0] addr_in_port; // Address input port reg no_port; // No port selected signal // ----------------------------------------------------------------------------- // Signal declarations // ----------------------------------------------------------------------------- - reg [1:0] addr_in_port_next; // D-input of addr_in_port - reg [1:0] i_addr_in_port; // Internal version of addr_in_port + reg [2:0] addr_in_port_next; // D-input of addr_in_port + reg [2:0] i_addr_in_port; // Internal version of addr_in_port reg no_port_next; // D-input of no_port reg [3:0] next_burst_count; // D-input of reg_burst_count reg [3:0] reg_burst_count; // Burst counter @@ -275,6 +281,8 @@ module nanosoc_arbiter_DMEM_0 ( req_port1 or req_port2 or req_port3 or + req_port4 or + req_port5 or HSELM or HTRANSM or HMASTLOCKM or next_burst_hold or i_addr_in_port ) begin : p_sel_port_comb @@ -284,18 +292,24 @@ module nanosoc_arbiter_DMEM_0 ( if ( HMASTLOCKM | next_burst_hold ) addr_in_port_next = i_addr_in_port; - else if ( req_port0 | ( (i_addr_in_port == 2'b00) & HSELM & + else if ( req_port0 | ( (i_addr_in_port == 3'b000) & HSELM & (HTRANSM != 2'b00) ) ) - addr_in_port_next = 2'b00; - else if ( req_port1 | ( (i_addr_in_port == 2'b01) & HSELM & + addr_in_port_next = 3'b000; + else if ( req_port1 | ( (i_addr_in_port == 3'b001) & HSELM & (HTRANSM != 2'b00) ) ) - addr_in_port_next = 2'b01; - else if ( req_port2 | ( (i_addr_in_port == 2'b10) & HSELM & + addr_in_port_next = 3'b001; + else if ( req_port2 | ( (i_addr_in_port == 3'b010) & HSELM & (HTRANSM != 2'b00) ) ) - addr_in_port_next = 2'b10; - else if ( req_port3 | ( (i_addr_in_port == 2'b11) & HSELM & + addr_in_port_next = 3'b010; + else if ( req_port3 | ( (i_addr_in_port == 3'b011) & HSELM & (HTRANSM != 2'b00) ) ) - addr_in_port_next = 2'b11; + addr_in_port_next = 3'b011; + else if ( req_port4 | ( (i_addr_in_port == 3'b100) & HSELM & + (HTRANSM != 2'b00) ) ) + addr_in_port_next = 3'b100; + else if ( req_port5 | ( (i_addr_in_port == 3'b101) & HSELM & + (HTRANSM != 2'b00) ) ) + addr_in_port_next = 3'b101; else if (HSELM) addr_in_port_next = i_addr_in_port; else @@ -309,7 +323,7 @@ module nanosoc_arbiter_DMEM_0 ( if (!HRESETn) begin no_port <= 1'b1; - i_addr_in_port <= {2{1'b0}}; + i_addr_in_port <= {3{1'b0}}; end else if (HREADYM) diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_EXP.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_EXP.v index 42a514f..a6cd881 100644 --- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_EXP.v +++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_EXP.v @@ -3,7 +3,7 @@ // only be used by a person authorised under and to the extent permitted // by a subsisting licensing agreement from Arm Limited or its affiliates. // -// (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates. +// (C) COPYRIGHT 2001-2024 Arm Limited or its affiliates. // ALL RIGHTS RESERVED // // This entire notice must be reproduced on all copies of this file @@ -43,6 +43,8 @@ module nanosoc_arbiter_EXP ( req_port1, req_port2, req_port3, + req_port4, + req_port5, HREADYM, HSELM, @@ -68,12 +70,14 @@ module nanosoc_arbiter_EXP ( input req_port1; // Port 1 request signal input req_port2; // Port 2 request signal input req_port3; // Port 3 request signal + input req_port4; // Port 4 request signal + input req_port5; // Port 5 request signal input HREADYM; // Transfer done input HSELM; // Slave select line input [1:0] HTRANSM; // Transfer type input [2:0] HBURSTM; // Burst type input HMASTLOCKM; // Locked transfer - output [1:0] addr_in_port; // Port address input + output [2:0] addr_in_port; // Port address input output no_port; // No port selected signal @@ -107,19 +111,21 @@ module nanosoc_arbiter_EXP ( wire req_port1; // Port 1 request signal wire req_port2; // Port 2 request signal wire req_port3; // Port 3 request signal + wire req_port4; // Port 4 request signal + wire req_port5; // Port 5 request signal wire HREADYM; // Transfer done wire HSELM; // Slave select line wire [1:0] HTRANSM; // Transfer type wire [2:0] HBURSTM; // Burst type wire HMASTLOCKM; // Locked transfer - wire [1:0] addr_in_port; // Address input port + wire [2:0] addr_in_port; // Address input port reg no_port; // No port selected signal // ----------------------------------------------------------------------------- // Signal declarations // ----------------------------------------------------------------------------- - reg [1:0] addr_in_port_next; // D-input of addr_in_port - reg [1:0] i_addr_in_port; // Internal version of addr_in_port + reg [2:0] addr_in_port_next; // D-input of addr_in_port + reg [2:0] i_addr_in_port; // Internal version of addr_in_port reg no_port_next; // D-input of no_port reg [3:0] next_burst_count; // D-input of reg_burst_count reg [3:0] reg_burst_count; // Burst counter @@ -275,6 +281,8 @@ module nanosoc_arbiter_EXP ( req_port1 or req_port2 or req_port3 or + req_port4 or + req_port5 or HSELM or HTRANSM or HMASTLOCKM or next_burst_hold or i_addr_in_port ) begin : p_sel_port_comb @@ -284,18 +292,24 @@ module nanosoc_arbiter_EXP ( if ( HMASTLOCKM | next_burst_hold ) addr_in_port_next = i_addr_in_port; - else if ( req_port0 | ( (i_addr_in_port == 2'b00) & HSELM & + else if ( req_port0 | ( (i_addr_in_port == 3'b000) & HSELM & (HTRANSM != 2'b00) ) ) - addr_in_port_next = 2'b00; - else if ( req_port1 | ( (i_addr_in_port == 2'b01) & HSELM & + addr_in_port_next = 3'b000; + else if ( req_port1 | ( (i_addr_in_port == 3'b001) & HSELM & (HTRANSM != 2'b00) ) ) - addr_in_port_next = 2'b01; - else if ( req_port2 | ( (i_addr_in_port == 2'b10) & HSELM & + addr_in_port_next = 3'b001; + else if ( req_port2 | ( (i_addr_in_port == 3'b010) & HSELM & (HTRANSM != 2'b00) ) ) - addr_in_port_next = 2'b10; - else if ( req_port3 | ( (i_addr_in_port == 2'b11) & HSELM & + addr_in_port_next = 3'b010; + else if ( req_port3 | ( (i_addr_in_port == 3'b011) & HSELM & (HTRANSM != 2'b00) ) ) - addr_in_port_next = 2'b11; + addr_in_port_next = 3'b011; + else if ( req_port4 | ( (i_addr_in_port == 3'b100) & HSELM & + (HTRANSM != 2'b00) ) ) + addr_in_port_next = 3'b100; + else if ( req_port5 | ( (i_addr_in_port == 3'b101) & HSELM & + (HTRANSM != 2'b00) ) ) + addr_in_port_next = 3'b101; else if (HSELM) addr_in_port_next = i_addr_in_port; else @@ -309,7 +323,7 @@ module nanosoc_arbiter_EXP ( if (!HRESETn) begin no_port <= 1'b1; - i_addr_in_port <= {2{1'b0}}; + i_addr_in_port <= {3{1'b0}}; end else if (HREADYM) diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_EXPRAM_H.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_EXPRAM_H.v index d49521d..f545662 100644 --- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_EXPRAM_H.v +++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_EXPRAM_H.v @@ -3,7 +3,7 @@ // only be used by a person authorised under and to the extent permitted // by a subsisting licensing agreement from Arm Limited or its affiliates. // -// (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates. +// (C) COPYRIGHT 2001-2024 Arm Limited or its affiliates. // ALL RIGHTS RESERVED // // This entire notice must be reproduced on all copies of this file @@ -43,6 +43,8 @@ module nanosoc_arbiter_EXPRAM_H ( req_port1, req_port2, req_port3, + req_port4, + req_port5, HREADYM, HSELM, @@ -68,12 +70,14 @@ module nanosoc_arbiter_EXPRAM_H ( input req_port1; // Port 1 request signal input req_port2; // Port 2 request signal input req_port3; // Port 3 request signal + input req_port4; // Port 4 request signal + input req_port5; // Port 5 request signal input HREADYM; // Transfer done input HSELM; // Slave select line input [1:0] HTRANSM; // Transfer type input [2:0] HBURSTM; // Burst type input HMASTLOCKM; // Locked transfer - output [1:0] addr_in_port; // Port address input + output [2:0] addr_in_port; // Port address input output no_port; // No port selected signal @@ -107,19 +111,21 @@ module nanosoc_arbiter_EXPRAM_H ( wire req_port1; // Port 1 request signal wire req_port2; // Port 2 request signal wire req_port3; // Port 3 request signal + wire req_port4; // Port 4 request signal + wire req_port5; // Port 5 request signal wire HREADYM; // Transfer done wire HSELM; // Slave select line wire [1:0] HTRANSM; // Transfer type wire [2:0] HBURSTM; // Burst type wire HMASTLOCKM; // Locked transfer - wire [1:0] addr_in_port; // Address input port + wire [2:0] addr_in_port; // Address input port reg no_port; // No port selected signal // ----------------------------------------------------------------------------- // Signal declarations // ----------------------------------------------------------------------------- - reg [1:0] addr_in_port_next; // D-input of addr_in_port - reg [1:0] i_addr_in_port; // Internal version of addr_in_port + reg [2:0] addr_in_port_next; // D-input of addr_in_port + reg [2:0] i_addr_in_port; // Internal version of addr_in_port reg no_port_next; // D-input of no_port reg [3:0] next_burst_count; // D-input of reg_burst_count reg [3:0] reg_burst_count; // Burst counter @@ -275,6 +281,8 @@ module nanosoc_arbiter_EXPRAM_H ( req_port1 or req_port2 or req_port3 or + req_port4 or + req_port5 or HSELM or HTRANSM or HMASTLOCKM or next_burst_hold or i_addr_in_port ) begin : p_sel_port_comb @@ -284,18 +292,24 @@ module nanosoc_arbiter_EXPRAM_H ( if ( HMASTLOCKM | next_burst_hold ) addr_in_port_next = i_addr_in_port; - else if ( req_port0 | ( (i_addr_in_port == 2'b00) & HSELM & + else if ( req_port0 | ( (i_addr_in_port == 3'b000) & HSELM & (HTRANSM != 2'b00) ) ) - addr_in_port_next = 2'b00; - else if ( req_port1 | ( (i_addr_in_port == 2'b01) & HSELM & + addr_in_port_next = 3'b000; + else if ( req_port1 | ( (i_addr_in_port == 3'b001) & HSELM & (HTRANSM != 2'b00) ) ) - addr_in_port_next = 2'b01; - else if ( req_port2 | ( (i_addr_in_port == 2'b10) & HSELM & + addr_in_port_next = 3'b001; + else if ( req_port2 | ( (i_addr_in_port == 3'b010) & HSELM & (HTRANSM != 2'b00) ) ) - addr_in_port_next = 2'b10; - else if ( req_port3 | ( (i_addr_in_port == 2'b11) & HSELM & + addr_in_port_next = 3'b010; + else if ( req_port3 | ( (i_addr_in_port == 3'b011) & HSELM & (HTRANSM != 2'b00) ) ) - addr_in_port_next = 2'b11; + addr_in_port_next = 3'b011; + else if ( req_port4 | ( (i_addr_in_port == 3'b100) & HSELM & + (HTRANSM != 2'b00) ) ) + addr_in_port_next = 3'b100; + else if ( req_port5 | ( (i_addr_in_port == 3'b101) & HSELM & + (HTRANSM != 2'b00) ) ) + addr_in_port_next = 3'b101; else if (HSELM) addr_in_port_next = i_addr_in_port; else @@ -309,7 +323,7 @@ module nanosoc_arbiter_EXPRAM_H ( if (!HRESETn) begin no_port <= 1'b1; - i_addr_in_port <= {2{1'b0}}; + i_addr_in_port <= {3{1'b0}}; end else if (HREADYM) diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_EXPRAM_L.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_EXPRAM_L.v index 03c9c25..b80c3d7 100644 --- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_EXPRAM_L.v +++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_EXPRAM_L.v @@ -3,7 +3,7 @@ // only be used by a person authorised under and to the extent permitted // by a subsisting licensing agreement from Arm Limited or its affiliates. // -// (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates. +// (C) COPYRIGHT 2001-2024 Arm Limited or its affiliates. // ALL RIGHTS RESERVED // // This entire notice must be reproduced on all copies of this file @@ -43,6 +43,8 @@ module nanosoc_arbiter_EXPRAM_L ( req_port1, req_port2, req_port3, + req_port4, + req_port5, HREADYM, HSELM, @@ -68,12 +70,14 @@ module nanosoc_arbiter_EXPRAM_L ( input req_port1; // Port 1 request signal input req_port2; // Port 2 request signal input req_port3; // Port 3 request signal + input req_port4; // Port 4 request signal + input req_port5; // Port 5 request signal input HREADYM; // Transfer done input HSELM; // Slave select line input [1:0] HTRANSM; // Transfer type input [2:0] HBURSTM; // Burst type input HMASTLOCKM; // Locked transfer - output [1:0] addr_in_port; // Port address input + output [2:0] addr_in_port; // Port address input output no_port; // No port selected signal @@ -107,19 +111,21 @@ module nanosoc_arbiter_EXPRAM_L ( wire req_port1; // Port 1 request signal wire req_port2; // Port 2 request signal wire req_port3; // Port 3 request signal + wire req_port4; // Port 4 request signal + wire req_port5; // Port 5 request signal wire HREADYM; // Transfer done wire HSELM; // Slave select line wire [1:0] HTRANSM; // Transfer type wire [2:0] HBURSTM; // Burst type wire HMASTLOCKM; // Locked transfer - wire [1:0] addr_in_port; // Address input port + wire [2:0] addr_in_port; // Address input port reg no_port; // No port selected signal // ----------------------------------------------------------------------------- // Signal declarations // ----------------------------------------------------------------------------- - reg [1:0] addr_in_port_next; // D-input of addr_in_port - reg [1:0] i_addr_in_port; // Internal version of addr_in_port + reg [2:0] addr_in_port_next; // D-input of addr_in_port + reg [2:0] i_addr_in_port; // Internal version of addr_in_port reg no_port_next; // D-input of no_port reg [3:0] next_burst_count; // D-input of reg_burst_count reg [3:0] reg_burst_count; // Burst counter @@ -275,6 +281,8 @@ module nanosoc_arbiter_EXPRAM_L ( req_port1 or req_port2 or req_port3 or + req_port4 or + req_port5 or HSELM or HTRANSM or HMASTLOCKM or next_burst_hold or i_addr_in_port ) begin : p_sel_port_comb @@ -284,18 +292,24 @@ module nanosoc_arbiter_EXPRAM_L ( if ( HMASTLOCKM | next_burst_hold ) addr_in_port_next = i_addr_in_port; - else if ( req_port0 | ( (i_addr_in_port == 2'b00) & HSELM & + else if ( req_port0 | ( (i_addr_in_port == 3'b000) & HSELM & (HTRANSM != 2'b00) ) ) - addr_in_port_next = 2'b00; - else if ( req_port1 | ( (i_addr_in_port == 2'b01) & HSELM & + addr_in_port_next = 3'b000; + else if ( req_port1 | ( (i_addr_in_port == 3'b001) & HSELM & (HTRANSM != 2'b00) ) ) - addr_in_port_next = 2'b01; - else if ( req_port2 | ( (i_addr_in_port == 2'b10) & HSELM & + addr_in_port_next = 3'b001; + else if ( req_port2 | ( (i_addr_in_port == 3'b010) & HSELM & (HTRANSM != 2'b00) ) ) - addr_in_port_next = 2'b10; - else if ( req_port3 | ( (i_addr_in_port == 2'b11) & HSELM & + addr_in_port_next = 3'b010; + else if ( req_port3 | ( (i_addr_in_port == 3'b011) & HSELM & (HTRANSM != 2'b00) ) ) - addr_in_port_next = 2'b11; + addr_in_port_next = 3'b011; + else if ( req_port4 | ( (i_addr_in_port == 3'b100) & HSELM & + (HTRANSM != 2'b00) ) ) + addr_in_port_next = 3'b100; + else if ( req_port5 | ( (i_addr_in_port == 3'b101) & HSELM & + (HTRANSM != 2'b00) ) ) + addr_in_port_next = 3'b101; else if (HSELM) addr_in_port_next = i_addr_in_port; else @@ -309,7 +323,7 @@ module nanosoc_arbiter_EXPRAM_L ( if (!HRESETn) begin no_port <= 1'b1; - i_addr_in_port <= {2{1'b0}}; + i_addr_in_port <= {3{1'b0}}; end else if (HREADYM) diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_IMEM_0.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_IMEM_0.v index 7e3ec38..18b751b 100644 --- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_IMEM_0.v +++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_IMEM_0.v @@ -3,7 +3,7 @@ // only be used by a person authorised under and to the extent permitted // by a subsisting licensing agreement from Arm Limited or its affiliates. // -// (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates. +// (C) COPYRIGHT 2001-2024 Arm Limited or its affiliates. // ALL RIGHTS RESERVED // // This entire notice must be reproduced on all copies of this file @@ -43,6 +43,8 @@ module nanosoc_arbiter_IMEM_0 ( req_port1, req_port2, req_port3, + req_port4, + req_port5, HREADYM, HSELM, @@ -68,12 +70,14 @@ module nanosoc_arbiter_IMEM_0 ( input req_port1; // Port 1 request signal input req_port2; // Port 2 request signal input req_port3; // Port 3 request signal + input req_port4; // Port 4 request signal + input req_port5; // Port 5 request signal input HREADYM; // Transfer done input HSELM; // Slave select line input [1:0] HTRANSM; // Transfer type input [2:0] HBURSTM; // Burst type input HMASTLOCKM; // Locked transfer - output [1:0] addr_in_port; // Port address input + output [2:0] addr_in_port; // Port address input output no_port; // No port selected signal @@ -107,19 +111,21 @@ module nanosoc_arbiter_IMEM_0 ( wire req_port1; // Port 1 request signal wire req_port2; // Port 2 request signal wire req_port3; // Port 3 request signal + wire req_port4; // Port 4 request signal + wire req_port5; // Port 5 request signal wire HREADYM; // Transfer done wire HSELM; // Slave select line wire [1:0] HTRANSM; // Transfer type wire [2:0] HBURSTM; // Burst type wire HMASTLOCKM; // Locked transfer - wire [1:0] addr_in_port; // Address input port + wire [2:0] addr_in_port; // Address input port reg no_port; // No port selected signal // ----------------------------------------------------------------------------- // Signal declarations // ----------------------------------------------------------------------------- - reg [1:0] addr_in_port_next; // D-input of addr_in_port - reg [1:0] i_addr_in_port; // Internal version of addr_in_port + reg [2:0] addr_in_port_next; // D-input of addr_in_port + reg [2:0] i_addr_in_port; // Internal version of addr_in_port reg no_port_next; // D-input of no_port reg [3:0] next_burst_count; // D-input of reg_burst_count reg [3:0] reg_burst_count; // Burst counter @@ -275,6 +281,8 @@ module nanosoc_arbiter_IMEM_0 ( req_port1 or req_port2 or req_port3 or + req_port4 or + req_port5 or HSELM or HTRANSM or HMASTLOCKM or next_burst_hold or i_addr_in_port ) begin : p_sel_port_comb @@ -284,18 +292,24 @@ module nanosoc_arbiter_IMEM_0 ( if ( HMASTLOCKM | next_burst_hold ) addr_in_port_next = i_addr_in_port; - else if ( req_port0 | ( (i_addr_in_port == 2'b00) & HSELM & + else if ( req_port0 | ( (i_addr_in_port == 3'b000) & HSELM & (HTRANSM != 2'b00) ) ) - addr_in_port_next = 2'b00; - else if ( req_port1 | ( (i_addr_in_port == 2'b01) & HSELM & + addr_in_port_next = 3'b000; + else if ( req_port1 | ( (i_addr_in_port == 3'b001) & HSELM & (HTRANSM != 2'b00) ) ) - addr_in_port_next = 2'b01; - else if ( req_port2 | ( (i_addr_in_port == 2'b10) & HSELM & + addr_in_port_next = 3'b001; + else if ( req_port2 | ( (i_addr_in_port == 3'b010) & HSELM & (HTRANSM != 2'b00) ) ) - addr_in_port_next = 2'b10; - else if ( req_port3 | ( (i_addr_in_port == 2'b11) & HSELM & + addr_in_port_next = 3'b010; + else if ( req_port3 | ( (i_addr_in_port == 3'b011) & HSELM & (HTRANSM != 2'b00) ) ) - addr_in_port_next = 2'b11; + addr_in_port_next = 3'b011; + else if ( req_port4 | ( (i_addr_in_port == 3'b100) & HSELM & + (HTRANSM != 2'b00) ) ) + addr_in_port_next = 3'b100; + else if ( req_port5 | ( (i_addr_in_port == 3'b101) & HSELM & + (HTRANSM != 2'b00) ) ) + addr_in_port_next = 3'b101; else if (HSELM) addr_in_port_next = i_addr_in_port; else @@ -309,7 +323,7 @@ module nanosoc_arbiter_IMEM_0 ( if (!HRESETn) begin no_port <= 1'b1; - i_addr_in_port <= {2{1'b0}}; + i_addr_in_port <= {3{1'b0}}; end else if (HREADYM) diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_SYSIO.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_SYSIO.v index ebbf331..5e73476 100644 --- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_SYSIO.v +++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_SYSIO.v @@ -3,7 +3,7 @@ // only be used by a person authorised under and to the extent permitted // by a subsisting licensing agreement from Arm Limited or its affiliates. // -// (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates. +// (C) COPYRIGHT 2001-2024 Arm Limited or its affiliates. // ALL RIGHTS RESERVED // // This entire notice must be reproduced on all copies of this file @@ -43,6 +43,8 @@ module nanosoc_arbiter_SYSIO ( req_port1, req_port2, req_port3, + req_port4, + req_port5, HREADYM, HSELM, @@ -68,12 +70,14 @@ module nanosoc_arbiter_SYSIO ( input req_port1; // Port 1 request signal input req_port2; // Port 2 request signal input req_port3; // Port 3 request signal + input req_port4; // Port 4 request signal + input req_port5; // Port 5 request signal input HREADYM; // Transfer done input HSELM; // Slave select line input [1:0] HTRANSM; // Transfer type input [2:0] HBURSTM; // Burst type input HMASTLOCKM; // Locked transfer - output [1:0] addr_in_port; // Port address input + output [2:0] addr_in_port; // Port address input output no_port; // No port selected signal @@ -107,19 +111,21 @@ module nanosoc_arbiter_SYSIO ( wire req_port1; // Port 1 request signal wire req_port2; // Port 2 request signal wire req_port3; // Port 3 request signal + wire req_port4; // Port 4 request signal + wire req_port5; // Port 5 request signal wire HREADYM; // Transfer done wire HSELM; // Slave select line wire [1:0] HTRANSM; // Transfer type wire [2:0] HBURSTM; // Burst type wire HMASTLOCKM; // Locked transfer - wire [1:0] addr_in_port; // Address input port + wire [2:0] addr_in_port; // Address input port reg no_port; // No port selected signal // ----------------------------------------------------------------------------- // Signal declarations // ----------------------------------------------------------------------------- - reg [1:0] addr_in_port_next; // D-input of addr_in_port - reg [1:0] i_addr_in_port; // Internal version of addr_in_port + reg [2:0] addr_in_port_next; // D-input of addr_in_port + reg [2:0] i_addr_in_port; // Internal version of addr_in_port reg no_port_next; // D-input of no_port reg [3:0] next_burst_count; // D-input of reg_burst_count reg [3:0] reg_burst_count; // Burst counter @@ -275,6 +281,8 @@ module nanosoc_arbiter_SYSIO ( req_port1 or req_port2 or req_port3 or + req_port4 or + req_port5 or HSELM or HTRANSM or HMASTLOCKM or next_burst_hold or i_addr_in_port ) begin : p_sel_port_comb @@ -284,18 +292,24 @@ module nanosoc_arbiter_SYSIO ( if ( HMASTLOCKM | next_burst_hold ) addr_in_port_next = i_addr_in_port; - else if ( req_port0 | ( (i_addr_in_port == 2'b00) & HSELM & + else if ( req_port0 | ( (i_addr_in_port == 3'b000) & HSELM & (HTRANSM != 2'b00) ) ) - addr_in_port_next = 2'b00; - else if ( req_port1 | ( (i_addr_in_port == 2'b01) & HSELM & + addr_in_port_next = 3'b000; + else if ( req_port1 | ( (i_addr_in_port == 3'b001) & HSELM & (HTRANSM != 2'b00) ) ) - addr_in_port_next = 2'b01; - else if ( req_port2 | ( (i_addr_in_port == 2'b10) & HSELM & + addr_in_port_next = 3'b001; + else if ( req_port2 | ( (i_addr_in_port == 3'b010) & HSELM & (HTRANSM != 2'b00) ) ) - addr_in_port_next = 2'b10; - else if ( req_port3 | ( (i_addr_in_port == 2'b11) & HSELM & + addr_in_port_next = 3'b010; + else if ( req_port3 | ( (i_addr_in_port == 3'b011) & HSELM & (HTRANSM != 2'b00) ) ) - addr_in_port_next = 2'b11; + addr_in_port_next = 3'b011; + else if ( req_port4 | ( (i_addr_in_port == 3'b100) & HSELM & + (HTRANSM != 2'b00) ) ) + addr_in_port_next = 3'b100; + else if ( req_port5 | ( (i_addr_in_port == 3'b101) & HSELM & + (HTRANSM != 2'b00) ) ) + addr_in_port_next = 3'b101; else if (HSELM) addr_in_port_next = i_addr_in_port; else @@ -309,7 +323,7 @@ module nanosoc_arbiter_SYSIO ( if (!HRESETn) begin no_port <= 1'b1; - i_addr_in_port <= {2{1'b0}}; + i_addr_in_port <= {3{1'b0}}; end else if (HREADYM) diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_SYSTABLE.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_SYSTABLE.v index b0e8bef..da4d27d 100644 --- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_SYSTABLE.v +++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_SYSTABLE.v @@ -3,7 +3,7 @@ // only be used by a person authorised under and to the extent permitted // by a subsisting licensing agreement from Arm Limited or its affiliates. // -// (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates. +// (C) COPYRIGHT 2001-2024 Arm Limited or its affiliates. // ALL RIGHTS RESERVED // // This entire notice must be reproduced on all copies of this file @@ -40,7 +40,7 @@ module nanosoc_arbiter_SYSTABLE ( // Input port request signals req_port0, - req_port3, + req_port5, HREADYM, HSELM, @@ -63,13 +63,13 @@ module nanosoc_arbiter_SYSTABLE ( input HCLK; // AHB system clock input HRESETn; // AHB system reset input req_port0; // Port 0 request signal - input req_port3; // Port 3 request signal + input req_port5; // Port 5 request signal input HREADYM; // Transfer done input HSELM; // Slave select line input [1:0] HTRANSM; // Transfer type input [2:0] HBURSTM; // Burst type input HMASTLOCKM; // Locked transfer - output [1:0] addr_in_port; // Port address input + output [2:0] addr_in_port; // Port address input output no_port; // No port selected signal @@ -100,20 +100,20 @@ module nanosoc_arbiter_SYSTABLE ( wire HCLK; // AHB system clock wire HRESETn; // AHB system reset wire req_port0; // Port 0 request signal - wire req_port3; // Port 3 request signal + wire req_port5; // Port 5 request signal wire HREADYM; // Transfer done wire HSELM; // Slave select line wire [1:0] HTRANSM; // Transfer type wire [2:0] HBURSTM; // Burst type wire HMASTLOCKM; // Locked transfer - wire [1:0] addr_in_port; // Address input port + wire [2:0] addr_in_port; // Address input port reg no_port; // No port selected signal // ----------------------------------------------------------------------------- // Signal declarations // ----------------------------------------------------------------------------- - reg [1:0] addr_in_port_next; // D-input of addr_in_port - reg [1:0] i_addr_in_port; // Internal version of addr_in_port + reg [2:0] addr_in_port_next; // D-input of addr_in_port + reg [2:0] i_addr_in_port; // Internal version of addr_in_port reg no_port_next; // D-input of no_port reg [3:0] next_burst_count; // D-input of reg_burst_count reg [3:0] reg_burst_count; // Burst counter @@ -266,7 +266,7 @@ module nanosoc_arbiter_SYSTABLE ( always @ ( req_port0 or - req_port3 or + req_port5 or HSELM or HTRANSM or HMASTLOCKM or next_burst_hold or i_addr_in_port ) begin : p_sel_port_comb @@ -276,12 +276,12 @@ module nanosoc_arbiter_SYSTABLE ( if ( HMASTLOCKM | next_burst_hold ) addr_in_port_next = i_addr_in_port; - else if ( req_port0 | ( (i_addr_in_port == 2'b00) & HSELM & + else if ( req_port0 | ( (i_addr_in_port == 3'b000) & HSELM & (HTRANSM != 2'b00) ) ) - addr_in_port_next = 2'b00; - else if ( req_port3 | ( (i_addr_in_port == 2'b11) & HSELM & + addr_in_port_next = 3'b000; + else if ( req_port5 | ( (i_addr_in_port == 3'b101) & HSELM & (HTRANSM != 2'b00) ) ) - addr_in_port_next = 2'b11; + addr_in_port_next = 3'b101; else if (HSELM) addr_in_port_next = i_addr_in_port; else @@ -295,7 +295,7 @@ module nanosoc_arbiter_SYSTABLE ( if (!HRESETn) begin no_port <= 1'b1; - i_addr_in_port <= {2{1'b0}}; + i_addr_in_port <= {3{1'b0}}; end else if (HREADYM) diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix.v index 9defea1..85cf9ce 100644 --- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix.v +++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix.v @@ -3,7 +3,7 @@ // only be used by a person authorised under and to the extent permitted // by a subsisting licensing agreement from Arm Limited or its affiliates. // -// (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates. +// (C) COPYRIGHT 2001-2024 Arm Limited or its affiliates. // ALL RIGHTS RESERVED // // This entire notice must be reproduced on all copies of this file @@ -29,7 +29,7 @@ // Supports the following configured options: // // - Architecture type 'ahb2', -// - 4 slave ports (connecting to masters), +// - 6 slave ports (connecting to masters), // - 8 master ports (connecting to slaves), // - Routing address width of 32 bits, // - Routing data width of 32 bits, @@ -38,6 +38,8 @@ // _DEBUG -> _BOOTROM_0, _IMEM_0, _DMEM_0, _SYSIO, _EXP, _EXPRAM_L, _EXPRAM_H, _SYSTABLE, // _DMAC_0 -> _BOOTROM_0, _IMEM_0, _DMEM_0, _SYSIO, _EXP, _EXPRAM_L, _EXPRAM_H, // _DMAC_1 -> _BOOTROM_0, _IMEM_0, _DMEM_0, _SYSIO, _EXP, _EXPRAM_L, _EXPRAM_H, +// _DMAC_2 -> _BOOTROM_0, _IMEM_0, _DMEM_0, _SYSIO, _EXP, _EXPRAM_L, _EXPRAM_H, +// _DMAC_3 -> _BOOTROM_0, _IMEM_0, _DMEM_0, _SYSIO, _EXP, _EXPRAM_L, _EXPRAM_H, // _CPU_0 -> _BOOTROM_0, _IMEM_0, _DMEM_0, _SYSIO, _EXP, _EXPRAM_L, _EXPRAM_H, _SYSTABLE, // - Connectivity type 'sparse'. // @@ -94,6 +96,32 @@ module nanosoc_busmatrix ( HREADY_DMAC_1, // Input port SI3 (inputs from master 3) + HSEL_DMAC_2, + HADDR_DMAC_2, + HTRANS_DMAC_2, + HWRITE_DMAC_2, + HSIZE_DMAC_2, + HBURST_DMAC_2, + HPROT_DMAC_2, + HMASTER_DMAC_2, + HWDATA_DMAC_2, + HMASTLOCK_DMAC_2, + HREADY_DMAC_2, + + // Input port SI4 (inputs from master 4) + HSEL_DMAC_3, + HADDR_DMAC_3, + HTRANS_DMAC_3, + HWRITE_DMAC_3, + HSIZE_DMAC_3, + HBURST_DMAC_3, + HPROT_DMAC_3, + HMASTER_DMAC_3, + HWDATA_DMAC_3, + HMASTLOCK_DMAC_3, + HREADY_DMAC_3, + + // Input port SI5 (inputs from master 5) HSEL_CPU_0, HADDR_CPU_0, HTRANS_CPU_0, @@ -271,6 +299,16 @@ module nanosoc_busmatrix ( HRESP_DMAC_1, // Input port SI3 (outputs to master 3) + HRDATA_DMAC_2, + HREADYOUT_DMAC_2, + HRESP_DMAC_2, + + // Input port SI4 (outputs to master 4) + HRDATA_DMAC_3, + HREADYOUT_DMAC_3, + HRESP_DMAC_3, + + // Input port SI5 (outputs to master 5) HRDATA_CPU_0, HREADYOUT_CPU_0, HRESP_CPU_0, @@ -332,6 +370,32 @@ module nanosoc_busmatrix ( input HREADY_DMAC_1; // Transfer done // Input port SI3 (inputs from master 3) + input HSEL_DMAC_2; // Slave Select + input [31:0] HADDR_DMAC_2; // Address bus + input [1:0] HTRANS_DMAC_2; // Transfer type + input HWRITE_DMAC_2; // Transfer direction + input [2:0] HSIZE_DMAC_2; // Transfer size + input [2:0] HBURST_DMAC_2; // Burst type + input [3:0] HPROT_DMAC_2; // Protection control + input [3:0] HMASTER_DMAC_2; // Master select + input [31:0] HWDATA_DMAC_2; // Write data + input HMASTLOCK_DMAC_2; // Locked Sequence + input HREADY_DMAC_2; // Transfer done + + // Input port SI4 (inputs from master 4) + input HSEL_DMAC_3; // Slave Select + input [31:0] HADDR_DMAC_3; // Address bus + input [1:0] HTRANS_DMAC_3; // Transfer type + input HWRITE_DMAC_3; // Transfer direction + input [2:0] HSIZE_DMAC_3; // Transfer size + input [2:0] HBURST_DMAC_3; // Burst type + input [3:0] HPROT_DMAC_3; // Protection control + input [3:0] HMASTER_DMAC_3; // Master select + input [31:0] HWDATA_DMAC_3; // Write data + input HMASTLOCK_DMAC_3; // Locked Sequence + input HREADY_DMAC_3; // Transfer done + + // Input port SI5 (inputs from master 5) input HSEL_CPU_0; // Slave Select input [31:0] HADDR_CPU_0; // Address bus input [1:0] HTRANS_CPU_0; // Transfer type @@ -509,6 +573,16 @@ module nanosoc_busmatrix ( output [1:0] HRESP_DMAC_1; // Transfer response // Input port SI3 (outputs to master 3) + output [31:0] HRDATA_DMAC_2; // Read data bus + output HREADYOUT_DMAC_2; // HREADY feedback + output [1:0] HRESP_DMAC_2; // Transfer response + + // Input port SI4 (outputs to master 4) + output [31:0] HRDATA_DMAC_3; // Read data bus + output HREADYOUT_DMAC_3; // HREADY feedback + output [1:0] HRESP_DMAC_3; // Transfer response + + // Input port SI5 (outputs to master 5) output [31:0] HRDATA_CPU_0; // Read data bus output HREADYOUT_CPU_0; // HREADY feedback output [1:0] HRESP_CPU_0; // Transfer response @@ -580,6 +654,40 @@ module nanosoc_busmatrix ( wire [1:0] HRESP_DMAC_1; // Transfer response // Input Port SI3 + wire HSEL_DMAC_2; // Slave Select + wire [31:0] HADDR_DMAC_2; // Address bus + wire [1:0] HTRANS_DMAC_2; // Transfer type + wire HWRITE_DMAC_2; // Transfer direction + wire [2:0] HSIZE_DMAC_2; // Transfer size + wire [2:0] HBURST_DMAC_2; // Burst type + wire [3:0] HPROT_DMAC_2; // Protection control + wire [3:0] HMASTER_DMAC_2; // Master select + wire [31:0] HWDATA_DMAC_2; // Write data + wire HMASTLOCK_DMAC_2; // Locked Sequence + wire HREADY_DMAC_2; // Transfer done + + wire [31:0] HRDATA_DMAC_2; // Read data bus + wire HREADYOUT_DMAC_2; // HREADY feedback + wire [1:0] HRESP_DMAC_2; // Transfer response + + // Input Port SI4 + wire HSEL_DMAC_3; // Slave Select + wire [31:0] HADDR_DMAC_3; // Address bus + wire [1:0] HTRANS_DMAC_3; // Transfer type + wire HWRITE_DMAC_3; // Transfer direction + wire [2:0] HSIZE_DMAC_3; // Transfer size + wire [2:0] HBURST_DMAC_3; // Burst type + wire [3:0] HPROT_DMAC_3; // Protection control + wire [3:0] HMASTER_DMAC_3; // Master select + wire [31:0] HWDATA_DMAC_3; // Write data + wire HMASTLOCK_DMAC_3; // Locked Sequence + wire HREADY_DMAC_3; // Transfer done + + wire [31:0] HRDATA_DMAC_3; // Read data bus + wire HREADYOUT_DMAC_3; // HREADY feedback + wire [1:0] HRESP_DMAC_3; // Transfer response + + // Input Port SI5 wire HSEL_CPU_0; // Slave Select wire [31:0] HADDR_CPU_0; // Address bus wire [1:0] HTRANS_CPU_0; // Transfer type @@ -797,6 +905,36 @@ module nanosoc_busmatrix ( wire i_readyout3; // Readyout signal wire [1:0] i_resp3; // Response signal + // Bus-switch input SI4 + wire i_sel4; // HSEL signal + wire [31:0] i_addr4; // HADDR signal + wire [1:0] i_trans4; // HTRANS signal + wire i_write4; // HWRITE signal + wire [2:0] i_size4; // HSIZE signal + wire [2:0] i_burst4; // HBURST signal + wire [3:0] i_prot4; // HPROTS signal + wire [3:0] i_master4; // HMASTER signal + wire i_mastlock4; // HMASTLOCK signal + wire i_active4; // Active signal + wire i_held_tran4; // HeldTran signal + wire i_readyout4; // Readyout signal + wire [1:0] i_resp4; // Response signal + + // Bus-switch input SI5 + wire i_sel5; // HSEL signal + wire [31:0] i_addr5; // HADDR signal + wire [1:0] i_trans5; // HTRANS signal + wire i_write5; // HWRITE signal + wire [2:0] i_size5; // HSIZE signal + wire [2:0] i_burst5; // HBURST signal + wire [3:0] i_prot5; // HPROTS signal + wire [3:0] i_master5; // HMASTER signal + wire i_mastlock5; // HMASTLOCK signal + wire i_active5; // Active signal + wire i_held_tran5; // HeldTran signal + wire i_readyout5; // Readyout signal + wire [1:0] i_resp5; // Response signal + // Bus-switch SI0 to MI0 signals wire i_sel0to0; // Routing selection signal wire i_active0to0; // Active signal @@ -913,9 +1051,65 @@ module nanosoc_busmatrix ( wire i_sel3to6; // Routing selection signal wire i_active3to6; // Active signal - // Bus-switch SI3 to MI7 signals - wire i_sel3to7; // Routing selection signal - wire i_active3to7; // Active signal + // Bus-switch SI4 to MI0 signals + wire i_sel4to0; // Routing selection signal + wire i_active4to0; // Active signal + + // Bus-switch SI4 to MI1 signals + wire i_sel4to1; // Routing selection signal + wire i_active4to1; // Active signal + + // Bus-switch SI4 to MI2 signals + wire i_sel4to2; // Routing selection signal + wire i_active4to2; // Active signal + + // Bus-switch SI4 to MI3 signals + wire i_sel4to3; // Routing selection signal + wire i_active4to3; // Active signal + + // Bus-switch SI4 to MI4 signals + wire i_sel4to4; // Routing selection signal + wire i_active4to4; // Active signal + + // Bus-switch SI4 to MI5 signals + wire i_sel4to5; // Routing selection signal + wire i_active4to5; // Active signal + + // Bus-switch SI4 to MI6 signals + wire i_sel4to6; // Routing selection signal + wire i_active4to6; // Active signal + + // Bus-switch SI5 to MI0 signals + wire i_sel5to0; // Routing selection signal + wire i_active5to0; // Active signal + + // Bus-switch SI5 to MI1 signals + wire i_sel5to1; // Routing selection signal + wire i_active5to1; // Active signal + + // Bus-switch SI5 to MI2 signals + wire i_sel5to2; // Routing selection signal + wire i_active5to2; // Active signal + + // Bus-switch SI5 to MI3 signals + wire i_sel5to3; // Routing selection signal + wire i_active5to3; // Active signal + + // Bus-switch SI5 to MI4 signals + wire i_sel5to4; // Routing selection signal + wire i_active5to4; // Active signal + + // Bus-switch SI5 to MI5 signals + wire i_sel5to5; // Routing selection signal + wire i_active5to5; // Active signal + + // Bus-switch SI5 to MI6 signals + wire i_sel5to6; // Routing selection signal + wire i_active5to6; // Active signal + + // Bus-switch SI5 to MI7 signals + wire i_sel5to7; // Routing selection signal + wire i_active5to7; // Active signal wire i_hready_mux__bootrom_0; // Internal HREADYMUXM for MI0 wire i_hready_mux__imem_0; // Internal HREADYMUXM for MI1 @@ -1068,16 +1262,16 @@ module nanosoc_busmatrix ( .HRESETn (HRESETn), // Input Port Address/Control Signals - .HSELS (HSEL_CPU_0), - .HADDRS (HADDR_CPU_0), - .HTRANSS (HTRANS_CPU_0), - .HWRITES (HWRITE_CPU_0), - .HSIZES (HSIZE_CPU_0), - .HBURSTS (HBURST_CPU_0), - .HPROTS (HPROT_CPU_0), - .HMASTERS (HMASTER_CPU_0), - .HMASTLOCKS (HMASTLOCK_CPU_0), - .HREADYS (HREADY_CPU_0), + .HSELS (HSEL_DMAC_2), + .HADDRS (HADDR_DMAC_2), + .HTRANSS (HTRANS_DMAC_2), + .HWRITES (HWRITE_DMAC_2), + .HSIZES (HSIZE_DMAC_2), + .HBURSTS (HBURST_DMAC_2), + .HPROTS (HPROT_DMAC_2), + .HMASTERS (HMASTER_DMAC_2), + .HMASTLOCKS (HMASTLOCK_DMAC_2), + .HREADYS (HREADY_DMAC_2), // Internal Response .active_ip (i_active3), @@ -1085,8 +1279,8 @@ module nanosoc_busmatrix ( .resp_ip (i_resp3), // Input Port Response - .HREADYOUTS (HREADYOUT_CPU_0), - .HRESPS (HRESP_CPU_0), + .HREADYOUTS (HREADYOUT_DMAC_2), + .HRESPS (HRESP_DMAC_2), // Internal Address/Control Signals .sel_ip (i_sel3), @@ -1103,6 +1297,92 @@ module nanosoc_busmatrix ( ); + // Input stage for SI4 + nanosoc_inititator_input u_nanosoc_inititator_input_4 ( + + // Common AHB signals + .HCLK (HCLK), + .HRESETn (HRESETn), + + // Input Port Address/Control Signals + .HSELS (HSEL_DMAC_3), + .HADDRS (HADDR_DMAC_3), + .HTRANSS (HTRANS_DMAC_3), + .HWRITES (HWRITE_DMAC_3), + .HSIZES (HSIZE_DMAC_3), + .HBURSTS (HBURST_DMAC_3), + .HPROTS (HPROT_DMAC_3), + .HMASTERS (HMASTER_DMAC_3), + .HMASTLOCKS (HMASTLOCK_DMAC_3), + .HREADYS (HREADY_DMAC_3), + + // Internal Response + .active_ip (i_active4), + .readyout_ip (i_readyout4), + .resp_ip (i_resp4), + + // Input Port Response + .HREADYOUTS (HREADYOUT_DMAC_3), + .HRESPS (HRESP_DMAC_3), + + // Internal Address/Control Signals + .sel_ip (i_sel4), + .addr_ip (i_addr4), + .trans_ip (i_trans4), + .write_ip (i_write4), + .size_ip (i_size4), + .burst_ip (i_burst4), + .prot_ip (i_prot4), + .master_ip (i_master4), + .mastlock_ip (i_mastlock4), + .held_tran_ip (i_held_tran4) + + ); + + + // Input stage for SI5 + nanosoc_inititator_input u_nanosoc_inititator_input_5 ( + + // Common AHB signals + .HCLK (HCLK), + .HRESETn (HRESETn), + + // Input Port Address/Control Signals + .HSELS (HSEL_CPU_0), + .HADDRS (HADDR_CPU_0), + .HTRANSS (HTRANS_CPU_0), + .HWRITES (HWRITE_CPU_0), + .HSIZES (HSIZE_CPU_0), + .HBURSTS (HBURST_CPU_0), + .HPROTS (HPROT_CPU_0), + .HMASTERS (HMASTER_CPU_0), + .HMASTLOCKS (HMASTLOCK_CPU_0), + .HREADYS (HREADY_CPU_0), + + // Internal Response + .active_ip (i_active5), + .readyout_ip (i_readyout5), + .resp_ip (i_resp5), + + // Input Port Response + .HREADYOUTS (HREADYOUT_CPU_0), + .HRESPS (HRESP_CPU_0), + + // Internal Address/Control Signals + .sel_ip (i_sel5), + .addr_ip (i_addr5), + .trans_ip (i_trans5), + .write_ip (i_write5), + .size_ip (i_size5), + .burst_ip (i_burst5), + .prot_ip (i_prot5), + .master_ip (i_master5), + .mastlock_ip (i_mastlock5), + .held_tran_ip (i_held_tran5) + + ); + + // Matrix decoder for SI0 nanosoc_matrix_decode_DEBUG u_nanosoc_matrix_decode_debug ( @@ -1327,17 +1607,14 @@ module nanosoc_busmatrix ( // Matrix decoder for SI3 - nanosoc_matrix_decode_CPU_0 u_nanosoc_matrix_decode_cpu_0 ( + nanosoc_matrix_decode_DMAC_2 u_nanosoc_matrix_decode_dmac_2 ( // Common AHB signals .HCLK (HCLK), .HRESETn (HRESETn), - // Internal address remapping control - .remapping_dec ( REMAP[0] ), - // Signals from Input stage SI3 - .HREADYS (HREADY_CPU_0), + .HREADYS (HREADY_DMAC_2), .sel_dec (i_sel3), .decode_addr_dec (i_addr3[31:10]), // HADDR[9:0] is not decoded .trans_dec (i_trans3), @@ -1384,12 +1661,6 @@ module nanosoc_busmatrix ( .resp_dec6 (HRESP_EXP), .rdata_dec6 (HRDATA_EXP), - // Control/Response for Output Stage MI7 - .active_dec7 (i_active3to7), - .readyout_dec7 (i_hready_mux__systable), - .resp_dec7 (HRESP_SYSTABLE), - .rdata_dec7 (HRDATA_SYSTABLE), - .sel_dec0 (i_sel3to0), .sel_dec1 (i_sel3to1), .sel_dec2 (i_sel3to2), @@ -1397,11 +1668,162 @@ module nanosoc_busmatrix ( .sel_dec4 (i_sel3to4), .sel_dec5 (i_sel3to5), .sel_dec6 (i_sel3to6), - .sel_dec7 (i_sel3to7), .active_dec (i_active3), .HREADYOUTS (i_readyout3), .HRESPS (i_resp3), + .HRDATAS (HRDATA_DMAC_2) + + ); + + + // Matrix decoder for SI4 + nanosoc_matrix_decode_DMAC_3 u_nanosoc_matrix_decode_dmac_3 ( + + // Common AHB signals + .HCLK (HCLK), + .HRESETn (HRESETn), + + // Signals from Input stage SI4 + .HREADYS (HREADY_DMAC_3), + .sel_dec (i_sel4), + .decode_addr_dec (i_addr4[31:10]), // HADDR[9:0] is not decoded + .trans_dec (i_trans4), + + // Control/Response for Output Stage MI0 + .active_dec0 (i_active4to0), + .readyout_dec0 (i_hready_mux__bootrom_0), + .resp_dec0 (HRESP_BOOTROM_0), + .rdata_dec0 (HRDATA_BOOTROM_0), + + // Control/Response for Output Stage MI1 + .active_dec1 (i_active4to1), + .readyout_dec1 (i_hready_mux__imem_0), + .resp_dec1 (HRESP_IMEM_0), + .rdata_dec1 (HRDATA_IMEM_0), + + // Control/Response for Output Stage MI2 + .active_dec2 (i_active4to2), + .readyout_dec2 (i_hready_mux__dmem_0), + .resp_dec2 (HRESP_DMEM_0), + .rdata_dec2 (HRDATA_DMEM_0), + + // Control/Response for Output Stage MI3 + .active_dec3 (i_active4to3), + .readyout_dec3 (i_hready_mux__sysio), + .resp_dec3 (HRESP_SYSIO), + .rdata_dec3 (HRDATA_SYSIO), + + // Control/Response for Output Stage MI4 + .active_dec4 (i_active4to4), + .readyout_dec4 (i_hready_mux__expram_l), + .resp_dec4 (HRESP_EXPRAM_L), + .rdata_dec4 (HRDATA_EXPRAM_L), + + // Control/Response for Output Stage MI5 + .active_dec5 (i_active4to5), + .readyout_dec5 (i_hready_mux__expram_h), + .resp_dec5 (HRESP_EXPRAM_H), + .rdata_dec5 (HRDATA_EXPRAM_H), + + // Control/Response for Output Stage MI6 + .active_dec6 (i_active4to6), + .readyout_dec6 (i_hready_mux__exp), + .resp_dec6 (HRESP_EXP), + .rdata_dec6 (HRDATA_EXP), + + .sel_dec0 (i_sel4to0), + .sel_dec1 (i_sel4to1), + .sel_dec2 (i_sel4to2), + .sel_dec3 (i_sel4to3), + .sel_dec4 (i_sel4to4), + .sel_dec5 (i_sel4to5), + .sel_dec6 (i_sel4to6), + + .active_dec (i_active4), + .HREADYOUTS (i_readyout4), + .HRESPS (i_resp4), + .HRDATAS (HRDATA_DMAC_3) + + ); + + + // Matrix decoder for SI5 + nanosoc_matrix_decode_CPU_0 u_nanosoc_matrix_decode_cpu_0 ( + + // Common AHB signals + .HCLK (HCLK), + .HRESETn (HRESETn), + + // Internal address remapping control + .remapping_dec ( REMAP[0] ), + + // Signals from Input stage SI5 + .HREADYS (HREADY_CPU_0), + .sel_dec (i_sel5), + .decode_addr_dec (i_addr5[31:10]), // HADDR[9:0] is not decoded + .trans_dec (i_trans5), + + // Control/Response for Output Stage MI0 + .active_dec0 (i_active5to0), + .readyout_dec0 (i_hready_mux__bootrom_0), + .resp_dec0 (HRESP_BOOTROM_0), + .rdata_dec0 (HRDATA_BOOTROM_0), + + // Control/Response for Output Stage MI1 + .active_dec1 (i_active5to1), + .readyout_dec1 (i_hready_mux__imem_0), + .resp_dec1 (HRESP_IMEM_0), + .rdata_dec1 (HRDATA_IMEM_0), + + // Control/Response for Output Stage MI2 + .active_dec2 (i_active5to2), + .readyout_dec2 (i_hready_mux__dmem_0), + .resp_dec2 (HRESP_DMEM_0), + .rdata_dec2 (HRDATA_DMEM_0), + + // Control/Response for Output Stage MI3 + .active_dec3 (i_active5to3), + .readyout_dec3 (i_hready_mux__sysio), + .resp_dec3 (HRESP_SYSIO), + .rdata_dec3 (HRDATA_SYSIO), + + // Control/Response for Output Stage MI4 + .active_dec4 (i_active5to4), + .readyout_dec4 (i_hready_mux__expram_l), + .resp_dec4 (HRESP_EXPRAM_L), + .rdata_dec4 (HRDATA_EXPRAM_L), + + // Control/Response for Output Stage MI5 + .active_dec5 (i_active5to5), + .readyout_dec5 (i_hready_mux__expram_h), + .resp_dec5 (HRESP_EXPRAM_H), + .rdata_dec5 (HRDATA_EXPRAM_H), + + // Control/Response for Output Stage MI6 + .active_dec6 (i_active5to6), + .readyout_dec6 (i_hready_mux__exp), + .resp_dec6 (HRESP_EXP), + .rdata_dec6 (HRDATA_EXP), + + // Control/Response for Output Stage MI7 + .active_dec7 (i_active5to7), + .readyout_dec7 (i_hready_mux__systable), + .resp_dec7 (HRESP_SYSTABLE), + .rdata_dec7 (HRDATA_SYSTABLE), + + .sel_dec0 (i_sel5to0), + .sel_dec1 (i_sel5to1), + .sel_dec2 (i_sel5to2), + .sel_dec3 (i_sel5to3), + .sel_dec4 (i_sel5to4), + .sel_dec5 (i_sel5to5), + .sel_dec6 (i_sel5to6), + .sel_dec7 (i_sel5to7), + + .active_dec (i_active5), + .HREADYOUTS (i_readyout5), + .HRESPS (i_resp5), .HRDATAS (HRDATA_CPU_0) ); @@ -1463,9 +1885,35 @@ module nanosoc_busmatrix ( .prot_op3 (i_prot3), .master_op3 (i_master3), .mastlock_op3 (i_mastlock3), - .wdata_op3 (HWDATA_CPU_0), + .wdata_op3 (HWDATA_DMAC_2), .held_tran_op3 (i_held_tran3), + // Port 4 Signals + .sel_op4 (i_sel4to0), + .addr_op4 (i_addr4), + .trans_op4 (i_trans4), + .write_op4 (i_write4), + .size_op4 (i_size4), + .burst_op4 (i_burst4), + .prot_op4 (i_prot4), + .master_op4 (i_master4), + .mastlock_op4 (i_mastlock4), + .wdata_op4 (HWDATA_DMAC_3), + .held_tran_op4 (i_held_tran4), + + // Port 5 Signals + .sel_op5 (i_sel5to0), + .addr_op5 (i_addr5), + .trans_op5 (i_trans5), + .write_op5 (i_write5), + .size_op5 (i_size5), + .burst_op5 (i_burst5), + .prot_op5 (i_prot5), + .master_op5 (i_master5), + .mastlock_op5 (i_mastlock5), + .wdata_op5 (HWDATA_CPU_0), + .held_tran_op5 (i_held_tran5), + // Slave read data and response .HREADYOUTM (HREADYOUT_BOOTROM_0), @@ -1473,6 +1921,8 @@ module nanosoc_busmatrix ( .active_op1 (i_active1to0), .active_op2 (i_active2to0), .active_op3 (i_active3to0), + .active_op4 (i_active4to0), + .active_op5 (i_active5to0), // Slave Address/Control Signals .HSELM (HSEL_BOOTROM_0), @@ -1549,9 +1999,35 @@ module nanosoc_busmatrix ( .prot_op3 (i_prot3), .master_op3 (i_master3), .mastlock_op3 (i_mastlock3), - .wdata_op3 (HWDATA_CPU_0), + .wdata_op3 (HWDATA_DMAC_2), .held_tran_op3 (i_held_tran3), + // Port 4 Signals + .sel_op4 (i_sel4to1), + .addr_op4 (i_addr4), + .trans_op4 (i_trans4), + .write_op4 (i_write4), + .size_op4 (i_size4), + .burst_op4 (i_burst4), + .prot_op4 (i_prot4), + .master_op4 (i_master4), + .mastlock_op4 (i_mastlock4), + .wdata_op4 (HWDATA_DMAC_3), + .held_tran_op4 (i_held_tran4), + + // Port 5 Signals + .sel_op5 (i_sel5to1), + .addr_op5 (i_addr5), + .trans_op5 (i_trans5), + .write_op5 (i_write5), + .size_op5 (i_size5), + .burst_op5 (i_burst5), + .prot_op5 (i_prot5), + .master_op5 (i_master5), + .mastlock_op5 (i_mastlock5), + .wdata_op5 (HWDATA_CPU_0), + .held_tran_op5 (i_held_tran5), + // Slave read data and response .HREADYOUTM (HREADYOUT_IMEM_0), @@ -1559,6 +2035,8 @@ module nanosoc_busmatrix ( .active_op1 (i_active1to1), .active_op2 (i_active2to1), .active_op3 (i_active3to1), + .active_op4 (i_active4to1), + .active_op5 (i_active5to1), // Slave Address/Control Signals .HSELM (HSEL_IMEM_0), @@ -1635,9 +2113,35 @@ module nanosoc_busmatrix ( .prot_op3 (i_prot3), .master_op3 (i_master3), .mastlock_op3 (i_mastlock3), - .wdata_op3 (HWDATA_CPU_0), + .wdata_op3 (HWDATA_DMAC_2), .held_tran_op3 (i_held_tran3), + // Port 4 Signals + .sel_op4 (i_sel4to2), + .addr_op4 (i_addr4), + .trans_op4 (i_trans4), + .write_op4 (i_write4), + .size_op4 (i_size4), + .burst_op4 (i_burst4), + .prot_op4 (i_prot4), + .master_op4 (i_master4), + .mastlock_op4 (i_mastlock4), + .wdata_op4 (HWDATA_DMAC_3), + .held_tran_op4 (i_held_tran4), + + // Port 5 Signals + .sel_op5 (i_sel5to2), + .addr_op5 (i_addr5), + .trans_op5 (i_trans5), + .write_op5 (i_write5), + .size_op5 (i_size5), + .burst_op5 (i_burst5), + .prot_op5 (i_prot5), + .master_op5 (i_master5), + .mastlock_op5 (i_mastlock5), + .wdata_op5 (HWDATA_CPU_0), + .held_tran_op5 (i_held_tran5), + // Slave read data and response .HREADYOUTM (HREADYOUT_DMEM_0), @@ -1645,6 +2149,8 @@ module nanosoc_busmatrix ( .active_op1 (i_active1to2), .active_op2 (i_active2to2), .active_op3 (i_active3to2), + .active_op4 (i_active4to2), + .active_op5 (i_active5to2), // Slave Address/Control Signals .HSELM (HSEL_DMEM_0), @@ -1721,9 +2227,35 @@ module nanosoc_busmatrix ( .prot_op3 (i_prot3), .master_op3 (i_master3), .mastlock_op3 (i_mastlock3), - .wdata_op3 (HWDATA_CPU_0), + .wdata_op3 (HWDATA_DMAC_2), .held_tran_op3 (i_held_tran3), + // Port 4 Signals + .sel_op4 (i_sel4to3), + .addr_op4 (i_addr4), + .trans_op4 (i_trans4), + .write_op4 (i_write4), + .size_op4 (i_size4), + .burst_op4 (i_burst4), + .prot_op4 (i_prot4), + .master_op4 (i_master4), + .mastlock_op4 (i_mastlock4), + .wdata_op4 (HWDATA_DMAC_3), + .held_tran_op4 (i_held_tran4), + + // Port 5 Signals + .sel_op5 (i_sel5to3), + .addr_op5 (i_addr5), + .trans_op5 (i_trans5), + .write_op5 (i_write5), + .size_op5 (i_size5), + .burst_op5 (i_burst5), + .prot_op5 (i_prot5), + .master_op5 (i_master5), + .mastlock_op5 (i_mastlock5), + .wdata_op5 (HWDATA_CPU_0), + .held_tran_op5 (i_held_tran5), + // Slave read data and response .HREADYOUTM (HREADYOUT_SYSIO), @@ -1731,6 +2263,8 @@ module nanosoc_busmatrix ( .active_op1 (i_active1to3), .active_op2 (i_active2to3), .active_op3 (i_active3to3), + .active_op4 (i_active4to3), + .active_op5 (i_active5to3), // Slave Address/Control Signals .HSELM (HSEL_SYSIO), @@ -1807,9 +2341,35 @@ module nanosoc_busmatrix ( .prot_op3 (i_prot3), .master_op3 (i_master3), .mastlock_op3 (i_mastlock3), - .wdata_op3 (HWDATA_CPU_0), + .wdata_op3 (HWDATA_DMAC_2), .held_tran_op3 (i_held_tran3), + // Port 4 Signals + .sel_op4 (i_sel4to4), + .addr_op4 (i_addr4), + .trans_op4 (i_trans4), + .write_op4 (i_write4), + .size_op4 (i_size4), + .burst_op4 (i_burst4), + .prot_op4 (i_prot4), + .master_op4 (i_master4), + .mastlock_op4 (i_mastlock4), + .wdata_op4 (HWDATA_DMAC_3), + .held_tran_op4 (i_held_tran4), + + // Port 5 Signals + .sel_op5 (i_sel5to4), + .addr_op5 (i_addr5), + .trans_op5 (i_trans5), + .write_op5 (i_write5), + .size_op5 (i_size5), + .burst_op5 (i_burst5), + .prot_op5 (i_prot5), + .master_op5 (i_master5), + .mastlock_op5 (i_mastlock5), + .wdata_op5 (HWDATA_CPU_0), + .held_tran_op5 (i_held_tran5), + // Slave read data and response .HREADYOUTM (HREADYOUT_EXPRAM_L), @@ -1817,6 +2377,8 @@ module nanosoc_busmatrix ( .active_op1 (i_active1to4), .active_op2 (i_active2to4), .active_op3 (i_active3to4), + .active_op4 (i_active4to4), + .active_op5 (i_active5to4), // Slave Address/Control Signals .HSELM (HSEL_EXPRAM_L), @@ -1893,9 +2455,35 @@ module nanosoc_busmatrix ( .prot_op3 (i_prot3), .master_op3 (i_master3), .mastlock_op3 (i_mastlock3), - .wdata_op3 (HWDATA_CPU_0), + .wdata_op3 (HWDATA_DMAC_2), .held_tran_op3 (i_held_tran3), + // Port 4 Signals + .sel_op4 (i_sel4to5), + .addr_op4 (i_addr4), + .trans_op4 (i_trans4), + .write_op4 (i_write4), + .size_op4 (i_size4), + .burst_op4 (i_burst4), + .prot_op4 (i_prot4), + .master_op4 (i_master4), + .mastlock_op4 (i_mastlock4), + .wdata_op4 (HWDATA_DMAC_3), + .held_tran_op4 (i_held_tran4), + + // Port 5 Signals + .sel_op5 (i_sel5to5), + .addr_op5 (i_addr5), + .trans_op5 (i_trans5), + .write_op5 (i_write5), + .size_op5 (i_size5), + .burst_op5 (i_burst5), + .prot_op5 (i_prot5), + .master_op5 (i_master5), + .mastlock_op5 (i_mastlock5), + .wdata_op5 (HWDATA_CPU_0), + .held_tran_op5 (i_held_tran5), + // Slave read data and response .HREADYOUTM (HREADYOUT_EXPRAM_H), @@ -1903,6 +2491,8 @@ module nanosoc_busmatrix ( .active_op1 (i_active1to5), .active_op2 (i_active2to5), .active_op3 (i_active3to5), + .active_op4 (i_active4to5), + .active_op5 (i_active5to5), // Slave Address/Control Signals .HSELM (HSEL_EXPRAM_H), @@ -1979,9 +2569,35 @@ module nanosoc_busmatrix ( .prot_op3 (i_prot3), .master_op3 (i_master3), .mastlock_op3 (i_mastlock3), - .wdata_op3 (HWDATA_CPU_0), + .wdata_op3 (HWDATA_DMAC_2), .held_tran_op3 (i_held_tran3), + // Port 4 Signals + .sel_op4 (i_sel4to6), + .addr_op4 (i_addr4), + .trans_op4 (i_trans4), + .write_op4 (i_write4), + .size_op4 (i_size4), + .burst_op4 (i_burst4), + .prot_op4 (i_prot4), + .master_op4 (i_master4), + .mastlock_op4 (i_mastlock4), + .wdata_op4 (HWDATA_DMAC_3), + .held_tran_op4 (i_held_tran4), + + // Port 5 Signals + .sel_op5 (i_sel5to6), + .addr_op5 (i_addr5), + .trans_op5 (i_trans5), + .write_op5 (i_write5), + .size_op5 (i_size5), + .burst_op5 (i_burst5), + .prot_op5 (i_prot5), + .master_op5 (i_master5), + .mastlock_op5 (i_mastlock5), + .wdata_op5 (HWDATA_CPU_0), + .held_tran_op5 (i_held_tran5), + // Slave read data and response .HREADYOUTM (HREADYOUT_EXP), @@ -1989,6 +2605,8 @@ module nanosoc_busmatrix ( .active_op1 (i_active1to6), .active_op2 (i_active2to6), .active_op3 (i_active3to6), + .active_op4 (i_active4to6), + .active_op5 (i_active5to6), // Slave Address/Control Signals .HSELM (HSEL_EXP), @@ -2029,24 +2647,24 @@ module nanosoc_busmatrix ( .wdata_op0 (HWDATA_DEBUG), .held_tran_op0 (i_held_tran0), - // Port 3 Signals - .sel_op3 (i_sel3to7), - .addr_op3 (i_addr3), - .trans_op3 (i_trans3), - .write_op3 (i_write3), - .size_op3 (i_size3), - .burst_op3 (i_burst3), - .prot_op3 (i_prot3), - .master_op3 (i_master3), - .mastlock_op3 (i_mastlock3), - .wdata_op3 (HWDATA_CPU_0), - .held_tran_op3 (i_held_tran3), + // Port 5 Signals + .sel_op5 (i_sel5to7), + .addr_op5 (i_addr5), + .trans_op5 (i_trans5), + .write_op5 (i_write5), + .size_op5 (i_size5), + .burst_op5 (i_burst5), + .prot_op5 (i_prot5), + .master_op5 (i_master5), + .mastlock_op5 (i_mastlock5), + .wdata_op5 (HWDATA_CPU_0), + .held_tran_op5 (i_held_tran5), // Slave read data and response .HREADYOUTM (HREADYOUT_SYSTABLE), .active_op0 (i_active0to7), - .active_op3 (i_active3to7), + .active_op5 (i_active5to7), // Slave Address/Control Signals .HSELM (HSEL_SYSTABLE), diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix_default_slave.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix_default_slave.v index f96bab0..1151eb1 100644 --- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix_default_slave.v +++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix_default_slave.v @@ -3,7 +3,7 @@ // only be used by a person authorised under and to the extent permitted // by a subsisting licensing agreement from Arm Limited or its affiliates. // -// (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates. +// (C) COPYRIGHT 2001-2024 Arm Limited or its affiliates. // ALL RIGHTS RESERVED // // This entire notice must be reproduced on all copies of this file diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix_lite.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix_lite.v index f10532b..fab85a6 100644 --- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix_lite.v +++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix_lite.v @@ -3,7 +3,7 @@ // only be used by a person authorised under and to the extent permitted // by a subsisting licensing agreement from Arm Limited or its affiliates. // -// (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates. +// (C) COPYRIGHT 2001-2024 Arm Limited or its affiliates. // ALL RIGHTS RESERVED // // This entire notice must be reproduced on all copies of this file @@ -70,6 +70,26 @@ module nanosoc_busmatrix_lite ( HMASTLOCK_DMAC_1, // Input port SI3 (inputs from master 3) + HADDR_DMAC_2, + HTRANS_DMAC_2, + HWRITE_DMAC_2, + HSIZE_DMAC_2, + HBURST_DMAC_2, + HPROT_DMAC_2, + HWDATA_DMAC_2, + HMASTLOCK_DMAC_2, + + // Input port SI4 (inputs from master 4) + HADDR_DMAC_3, + HTRANS_DMAC_3, + HWRITE_DMAC_3, + HSIZE_DMAC_3, + HBURST_DMAC_3, + HPROT_DMAC_3, + HWDATA_DMAC_3, + HMASTLOCK_DMAC_3, + + // Input port SI5 (inputs from master 5) HADDR_CPU_0, HTRANS_CPU_0, HWRITE_CPU_0, @@ -236,6 +256,16 @@ module nanosoc_busmatrix_lite ( HRESP_DMAC_1, // Input port SI3 (outputs to master 3) + HRDATA_DMAC_2, + HREADY_DMAC_2, + HRESP_DMAC_2, + + // Input port SI4 (outputs to master 4) + HRDATA_DMAC_3, + HREADY_DMAC_3, + HRESP_DMAC_3, + + // Input port SI5 (outputs to master 5) HRDATA_CPU_0, HREADY_CPU_0, HRESP_CPU_0, @@ -287,6 +317,26 @@ module nanosoc_busmatrix_lite ( input HMASTLOCK_DMAC_1; // Locked Sequence // Input port SI3 (inputs from master 3) + input [31:0] HADDR_DMAC_2; // Address bus + input [1:0] HTRANS_DMAC_2; // Transfer type + input HWRITE_DMAC_2; // Transfer direction + input [2:0] HSIZE_DMAC_2; // Transfer size + input [2:0] HBURST_DMAC_2; // Burst type + input [3:0] HPROT_DMAC_2; // Protection control + input [31:0] HWDATA_DMAC_2; // Write data + input HMASTLOCK_DMAC_2; // Locked Sequence + + // Input port SI4 (inputs from master 4) + input [31:0] HADDR_DMAC_3; // Address bus + input [1:0] HTRANS_DMAC_3; // Transfer type + input HWRITE_DMAC_3; // Transfer direction + input [2:0] HSIZE_DMAC_3; // Transfer size + input [2:0] HBURST_DMAC_3; // Burst type + input [3:0] HPROT_DMAC_3; // Protection control + input [31:0] HWDATA_DMAC_3; // Write data + input HMASTLOCK_DMAC_3; // Locked Sequence + + // Input port SI5 (inputs from master 5) input [31:0] HADDR_CPU_0; // Address bus input [1:0] HTRANS_CPU_0; // Transfer type input HWRITE_CPU_0; // Transfer direction @@ -453,6 +503,16 @@ module nanosoc_busmatrix_lite ( output HRESP_DMAC_1; // Transfer response // Input port SI3 (outputs to master 3) + output [31:0] HRDATA_DMAC_2; // Read data bus + output HREADY_DMAC_2; // HREADY feedback + output HRESP_DMAC_2; // Transfer response + + // Input port SI4 (outputs to master 4) + output [31:0] HRDATA_DMAC_3; // Read data bus + output HREADY_DMAC_3; // HREADY feedback + output HRESP_DMAC_3; // Transfer response + + // Input port SI5 (outputs to master 5) output [31:0] HRDATA_CPU_0; // Read data bus output HREADY_CPU_0; // HREADY feedback output HRESP_CPU_0; // Transfer response @@ -514,6 +574,34 @@ module nanosoc_busmatrix_lite ( wire HRESP_DMAC_1; // Transfer response // Input Port SI3 + wire [31:0] HADDR_DMAC_2; // Address bus + wire [1:0] HTRANS_DMAC_2; // Transfer type + wire HWRITE_DMAC_2; // Transfer direction + wire [2:0] HSIZE_DMAC_2; // Transfer size + wire [2:0] HBURST_DMAC_2; // Burst type + wire [3:0] HPROT_DMAC_2; // Protection control + wire [31:0] HWDATA_DMAC_2; // Write data + wire HMASTLOCK_DMAC_2; // Locked Sequence + + wire [31:0] HRDATA_DMAC_2; // Read data bus + wire HREADY_DMAC_2; // HREADY feedback + wire HRESP_DMAC_2; // Transfer response + + // Input Port SI4 + wire [31:0] HADDR_DMAC_3; // Address bus + wire [1:0] HTRANS_DMAC_3; // Transfer type + wire HWRITE_DMAC_3; // Transfer direction + wire [2:0] HSIZE_DMAC_3; // Transfer size + wire [2:0] HBURST_DMAC_3; // Burst type + wire [3:0] HPROT_DMAC_3; // Protection control + wire [31:0] HWDATA_DMAC_3; // Write data + wire HMASTLOCK_DMAC_3; // Locked Sequence + + wire [31:0] HRDATA_DMAC_3; // Read data bus + wire HREADY_DMAC_3; // HREADY feedback + wire HRESP_DMAC_3; // Transfer response + + // Input Port SI5 wire [31:0] HADDR_CPU_0; // Address bus wire [1:0] HTRANS_CPU_0; // Transfer type wire HWRITE_CPU_0; // Transfer direction @@ -665,6 +753,8 @@ module nanosoc_busmatrix_lite ( wire [1:0] i_hresp_DEBUG; wire [1:0] i_hresp_DMAC_0; wire [1:0] i_hresp_DMAC_1; + wire [1:0] i_hresp_DMAC_2; + wire [1:0] i_hresp_DMAC_3; wire [1:0] i_hresp_CPU_0; wire [3:0] i_hmaster_BOOTROM_0; @@ -699,6 +789,10 @@ module nanosoc_busmatrix_lite ( assign HRESP_DMAC_1 = i_hresp_DMAC_1[0]; + assign HRESP_DMAC_2 = i_hresp_DMAC_2[0]; + + assign HRESP_DMAC_3 = i_hresp_DMAC_3[0]; + assign HRESP_CPU_0 = i_hresp_CPU_0[0]; assign i_hresp_BOOTROM_0 = {{1{tie_low}}, HRESP_BOOTROM_0}; @@ -765,6 +859,38 @@ module nanosoc_busmatrix_lite ( .HRESP_DMAC_1 (i_hresp_DMAC_1), // Input port SI3 signals + .HSEL_DMAC_2 (tie_hi), + .HADDR_DMAC_2 (HADDR_DMAC_2), + .HTRANS_DMAC_2 (HTRANS_DMAC_2), + .HWRITE_DMAC_2 (HWRITE_DMAC_2), + .HSIZE_DMAC_2 (HSIZE_DMAC_2), + .HBURST_DMAC_2 (HBURST_DMAC_2), + .HPROT_DMAC_2 (HPROT_DMAC_2), + .HWDATA_DMAC_2 (HWDATA_DMAC_2), + .HMASTLOCK_DMAC_2 (HMASTLOCK_DMAC_2), + .HMASTER_DMAC_2 (tie_hi_4), + .HREADY_DMAC_2 (HREADY_DMAC_2), + .HRDATA_DMAC_2 (HRDATA_DMAC_2), + .HREADYOUT_DMAC_2 (HREADY_DMAC_2), + .HRESP_DMAC_2 (i_hresp_DMAC_2), + + // Input port SI4 signals + .HSEL_DMAC_3 (tie_hi), + .HADDR_DMAC_3 (HADDR_DMAC_3), + .HTRANS_DMAC_3 (HTRANS_DMAC_3), + .HWRITE_DMAC_3 (HWRITE_DMAC_3), + .HSIZE_DMAC_3 (HSIZE_DMAC_3), + .HBURST_DMAC_3 (HBURST_DMAC_3), + .HPROT_DMAC_3 (HPROT_DMAC_3), + .HWDATA_DMAC_3 (HWDATA_DMAC_3), + .HMASTLOCK_DMAC_3 (HMASTLOCK_DMAC_3), + .HMASTER_DMAC_3 (tie_hi_4), + .HREADY_DMAC_3 (HREADY_DMAC_3), + .HRDATA_DMAC_3 (HRDATA_DMAC_3), + .HREADYOUT_DMAC_3 (HREADY_DMAC_3), + .HRESP_DMAC_3 (i_hresp_DMAC_3), + + // Input port SI5 signals .HSEL_CPU_0 (tie_hi), .HADDR_CPU_0 (HADDR_CPU_0), .HTRANS_CPU_0 (HTRANS_CPU_0), diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_inititator_input.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_inititator_input.v index d770544..326dfdf 100644 --- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_inititator_input.v +++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_inititator_input.v @@ -3,7 +3,7 @@ // only be used by a person authorised under and to the extent permitted // by a subsisting licensing agreement from Arm Limited or its affiliates. // -// (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates. +// (C) COPYRIGHT 2001-2024 Arm Limited or its affiliates. // ALL RIGHTS RESERVED // // This entire notice must be reproduced on all copies of this file diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_CPU_0.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_CPU_0.v index 56ac92a..d780339 100644 --- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_CPU_0.v +++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_CPU_0.v @@ -3,7 +3,7 @@ // only be used by a person authorised under and to the extent permitted // by a subsisting licensing agreement from Arm Limited or its affiliates. // -// (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates. +// (C) COPYRIGHT 2001-2024 Arm Limited or its affiliates. // ALL RIGHTS RESERVED // // This entire notice must be reproduced on all copies of this file diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DEBUG.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DEBUG.v index 19fe1e9..c13a1de 100644 --- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DEBUG.v +++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DEBUG.v @@ -3,7 +3,7 @@ // only be used by a person authorised under and to the extent permitted // by a subsisting licensing agreement from Arm Limited or its affiliates. // -// (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates. +// (C) COPYRIGHT 2001-2024 Arm Limited or its affiliates. // ALL RIGHTS RESERVED // // This entire notice must be reproduced on all copies of this file diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DMAC_0.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DMAC_0.v index 3168cdc..bd61208 100644 --- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DMAC_0.v +++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DMAC_0.v @@ -3,7 +3,7 @@ // only be used by a person authorised under and to the extent permitted // by a subsisting licensing agreement from Arm Limited or its affiliates. // -// (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates. +// (C) COPYRIGHT 2001-2024 Arm Limited or its affiliates. // ALL RIGHTS RESERVED // // This entire notice must be reproduced on all copies of this file diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DMAC_1.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DMAC_1.v index de20dcb..d32cc6e 100644 --- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DMAC_1.v +++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DMAC_1.v @@ -3,7 +3,7 @@ // only be used by a person authorised under and to the extent permitted // by a subsisting licensing agreement from Arm Limited or its affiliates. // -// (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates. +// (C) COPYRIGHT 2001-2024 Arm Limited or its affiliates. // ALL RIGHTS RESERVED // // This entire notice must be reproduced on all copies of this file diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DMAC_2.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DMAC_2.v new file mode 100644 index 0000000..2b180d1 --- /dev/null +++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DMAC_2.v @@ -0,0 +1,515 @@ +//----------------------------------------------------------------------------- +// The confidential and proprietary information contained in this file may +// only be used by a person authorised under and to the extent permitted +// by a subsisting licensing agreement from Arm Limited or its affiliates. +// +// (C) COPYRIGHT 2001-2024 Arm Limited or its affiliates. +// ALL RIGHTS RESERVED +// +// This entire notice must be reproduced on all copies of this file +// and copies of this file may only be made by a person if such person is +// permitted to do so under the terms of a subsisting license agreement +// from Arm Limited or its affiliates. +// +// SVN Information +// +// Checked In : $Date: 2017-10-10 15:55:38 +0100 (Tue, 10 Oct 2017) $ +// +// Revision : $Revision: 371321 $ +// +// Release Information : Cortex-M System Design Kit-r1p1-00rel0 +// +//----------------------------------------------------------------------------- +// +//----------------------------------------------------------------------------- +// Abstract : The MatrixDecode is used to determine which output +// stage is required for a particular access. Addresses +// that do not map to an Output port are diverted to +// the local default slave. +// +// Notes : The bus matrix has sparse connectivity. +// +//----------------------------------------------------------------------------- + + + +module nanosoc_matrix_decode_DMAC_2 ( + + // Common AHB signals + HCLK, + HRESETn, + + // Signals from the Input stage + HREADYS, + sel_dec, + decode_addr_dec, + trans_dec, + + // Bus-switch output 0 + active_dec0, + readyout_dec0, + resp_dec0, + rdata_dec0, + + // Bus-switch output 1 + active_dec1, + readyout_dec1, + resp_dec1, + rdata_dec1, + + // Bus-switch output 2 + active_dec2, + readyout_dec2, + resp_dec2, + rdata_dec2, + + // Bus-switch output 3 + active_dec3, + readyout_dec3, + resp_dec3, + rdata_dec3, + + // Bus-switch output 4 + active_dec4, + readyout_dec4, + resp_dec4, + rdata_dec4, + + // Bus-switch output 5 + active_dec5, + readyout_dec5, + resp_dec5, + rdata_dec5, + + // Bus-switch output 6 + active_dec6, + readyout_dec6, + resp_dec6, + rdata_dec6, + + // Output port selection signals + sel_dec0, + sel_dec1, + sel_dec2, + sel_dec3, + sel_dec4, + sel_dec5, + sel_dec6, + + // Selected Output port data and control signals + active_dec, + HREADYOUTS, + HRESPS, + HRDATAS + + ); + + +// ----------------------------------------------------------------------------- +// Input and Output declarations +// ----------------------------------------------------------------------------- + + // Common AHB signals + input HCLK; // AHB System Clock + input HRESETn; // AHB System Reset + + // Signals from the Input stage + input HREADYS; // Transfer done + input sel_dec; // HSEL input + input [31:10] decode_addr_dec; // HADDR decoder input + input [1:0] trans_dec; // Input port HTRANS signal + + // Bus-switch output MI0 + input active_dec0; // Output stage MI0 active_dec signal + input readyout_dec0; // HREADYOUT input + input [1:0] resp_dec0; // HRESP input + input [31:0] rdata_dec0; // HRDATA input + + // Bus-switch output MI1 + input active_dec1; // Output stage MI1 active_dec signal + input readyout_dec1; // HREADYOUT input + input [1:0] resp_dec1; // HRESP input + input [31:0] rdata_dec1; // HRDATA input + + // Bus-switch output MI2 + input active_dec2; // Output stage MI2 active_dec signal + input readyout_dec2; // HREADYOUT input + input [1:0] resp_dec2; // HRESP input + input [31:0] rdata_dec2; // HRDATA input + + // Bus-switch output MI3 + input active_dec3; // Output stage MI3 active_dec signal + input readyout_dec3; // HREADYOUT input + input [1:0] resp_dec3; // HRESP input + input [31:0] rdata_dec3; // HRDATA input + + // Bus-switch output MI4 + input active_dec4; // Output stage MI4 active_dec signal + input readyout_dec4; // HREADYOUT input + input [1:0] resp_dec4; // HRESP input + input [31:0] rdata_dec4; // HRDATA input + + // Bus-switch output MI5 + input active_dec5; // Output stage MI5 active_dec signal + input readyout_dec5; // HREADYOUT input + input [1:0] resp_dec5; // HRESP input + input [31:0] rdata_dec5; // HRDATA input + + // Bus-switch output MI6 + input active_dec6; // Output stage MI6 active_dec signal + input readyout_dec6; // HREADYOUT input + input [1:0] resp_dec6; // HRESP input + input [31:0] rdata_dec6; // HRDATA input + + // Output port selection signals + output sel_dec0; // HSEL output + output sel_dec1; // HSEL output + output sel_dec2; // HSEL output + output sel_dec3; // HSEL output + output sel_dec4; // HSEL output + output sel_dec5; // HSEL output + output sel_dec6; // HSEL output + + // Selected Output port data and control signals + output active_dec; // Combinatorial active_dec O/P + output HREADYOUTS; // HREADY feedback output + output [1:0] HRESPS; // Transfer response + output [31:0] HRDATAS; // Read Data + + +// ----------------------------------------------------------------------------- +// Wire declarations +// ----------------------------------------------------------------------------- + + // Common AHB signals + wire HCLK; // AHB System Clock + wire HRESETn; // AHB System Reset + + // Signals from the Input stage + wire HREADYS; // Transfer done + wire sel_dec; // HSEL input + wire [31:10] decode_addr_dec; // HADDR input + wire [1:0] trans_dec; // Input port HTRANS signal + + // Bus-switch output MI0 + wire active_dec0; // active_dec signal + wire readyout_dec0; // HREADYOUT input + wire [1:0] resp_dec0; // HRESP input + wire [31:0] rdata_dec0; // HRDATA input + reg sel_dec0; // HSEL output + + // Bus-switch output MI1 + wire active_dec1; // active_dec signal + wire readyout_dec1; // HREADYOUT input + wire [1:0] resp_dec1; // HRESP input + wire [31:0] rdata_dec1; // HRDATA input + reg sel_dec1; // HSEL output + + // Bus-switch output MI2 + wire active_dec2; // active_dec signal + wire readyout_dec2; // HREADYOUT input + wire [1:0] resp_dec2; // HRESP input + wire [31:0] rdata_dec2; // HRDATA input + reg sel_dec2; // HSEL output + + // Bus-switch output MI3 + wire active_dec3; // active_dec signal + wire readyout_dec3; // HREADYOUT input + wire [1:0] resp_dec3; // HRESP input + wire [31:0] rdata_dec3; // HRDATA input + reg sel_dec3; // HSEL output + + // Bus-switch output MI4 + wire active_dec4; // active_dec signal + wire readyout_dec4; // HREADYOUT input + wire [1:0] resp_dec4; // HRESP input + wire [31:0] rdata_dec4; // HRDATA input + reg sel_dec4; // HSEL output + + // Bus-switch output MI5 + wire active_dec5; // active_dec signal + wire readyout_dec5; // HREADYOUT input + wire [1:0] resp_dec5; // HRESP input + wire [31:0] rdata_dec5; // HRDATA input + reg sel_dec5; // HSEL output + + // Bus-switch output MI6 + wire active_dec6; // active_dec signal + wire readyout_dec6; // HREADYOUT input + wire [1:0] resp_dec6; // HRESP input + wire [31:0] rdata_dec6; // HRDATA input + reg sel_dec6; // HSEL output + + +// ----------------------------------------------------------------------------- +// Signal declarations +// ----------------------------------------------------------------------------- + + // Selected Output port data and control signals + reg active_dec; // Combinatorial active_dec O/P signal + reg HREADYOUTS; // Combinatorial HREADYOUT signal + reg [1:0] HRESPS; // Combinatorial HRESPS signal + reg [31:0] HRDATAS; // Read data bus + + reg [3:0] addr_out_port; // Address output ports + reg [3:0] data_out_port; // Data output ports + + // Default slave signals + reg sel_dft_slv; // HSEL signal + wire readyout_dft_slv; // HREADYOUT signal + wire [1:0] resp_dft_slv; // Combinatorial HRESPS signal + + +// ----------------------------------------------------------------------------- +// Beginning of main code +// ----------------------------------------------------------------------------- + +//------------------------------------------------------------------------------ +// Default slave (accessed when HADDR is unmapped) +//------------------------------------------------------------------------------ + + nanosoc_busmatrix_default_slave u_nanosoc_busmatrix_default_slave ( + + // Common AHB signals + .HCLK (HCLK), + .HRESETn (HRESETn), + + // AHB Control signals + .HSEL (sel_dft_slv), + .HTRANS (trans_dec), + .HREADY (HREADYS), + .HREADYOUT (readyout_dft_slv), + .HRESP (resp_dft_slv) + + ); + + +//------------------------------------------------------------------------------ +// Address phase signals +//------------------------------------------------------------------------------ + +// The address decode is done in two stages. This is so that the address +// decode occurs in only one process, p_addr_out_portComb, and then the select +// signal is factored in. +// +// Note that the hexadecimal address values are reformatted to align with the +// lower bound of decode_addr_dec[31:10], which is not a hex character boundary + + always @ ( + decode_addr_dec or data_out_port or trans_dec + ) + begin : p_addr_out_port_comb + + // Only switch if there is an active transfer + if (trans_dec != 2'b00) + begin + + // Address region 0x10000000-0x1fffffff + if ((decode_addr_dec >= 22'h040000) & (decode_addr_dec <= 22'h07ffff)) + addr_out_port = 4'b0000; // Select Output port MI0 + + // Address region 0x00000000-0x0fffffff + else if ((decode_addr_dec >= 22'h000000) & (decode_addr_dec <= 22'h03ffff)) + addr_out_port = 4'b0001; // Select Output port MI1 + // Address region 0x20000000-0x2fffffff + else if ((decode_addr_dec >= 22'h080000) & (decode_addr_dec <= 22'h0bffff)) + addr_out_port = 4'b0001; // Select Output port MI1 + + // Address region 0x30000000-0x3fffffff + else if ((decode_addr_dec >= 22'h0c0000) & (decode_addr_dec <= 22'h0fffff)) + addr_out_port = 4'b0010; // Select Output port MI2 + + // Address region 0x40000000-0x5fffffff + else if ((decode_addr_dec >= 22'h100000) & (decode_addr_dec <= 22'h17ffff)) + addr_out_port = 4'b0011; // Select Output port MI3 + + // Address region 0x80000000-0x8fffffff + else if ((decode_addr_dec >= 22'h200000) & (decode_addr_dec <= 22'h23ffff)) + addr_out_port = 4'b0100; // Select Output port MI4 + + // Address region 0x90000000-0x9fffffff + else if ((decode_addr_dec >= 22'h240000) & (decode_addr_dec <= 22'h27ffff)) + addr_out_port = 4'b0101; // Select Output port MI5 + + // Address region 0x60000000-0x7fffffff + else if ((decode_addr_dec >= 22'h180000) & (decode_addr_dec <= 22'h1fffff)) + addr_out_port = 4'b0110; // Select Output port MI6 + // Address region 0xa0000000-0xdfffffff + else if ((decode_addr_dec >= 22'h280000) & (decode_addr_dec <= 22'h37ffff)) + addr_out_port = 4'b0110; // Select Output port MI6 + + else + addr_out_port = 4'b1000; // Select the default slave + + end // if (trans_dec != 2'b00) + else + addr_out_port = data_out_port; // Stay on last port if no activity + + end // block: p_addr_out_port_comb + + // Select signal decode + always @ (sel_dec or addr_out_port) + begin : p_sel_comb + sel_dec0 = 1'b0; + sel_dec1 = 1'b0; + sel_dec2 = 1'b0; + sel_dec3 = 1'b0; + sel_dec4 = 1'b0; + sel_dec5 = 1'b0; + sel_dec6 = 1'b0; + sel_dft_slv = 1'b0; + + if (sel_dec) + case (addr_out_port) + 4'b0000 : sel_dec0 = 1'b1; + 4'b0001 : sel_dec1 = 1'b1; + 4'b0010 : sel_dec2 = 1'b1; + 4'b0011 : sel_dec3 = 1'b1; + 4'b0100 : sel_dec4 = 1'b1; + 4'b0101 : sel_dec5 = 1'b1; + 4'b0110 : sel_dec6 = 1'b1; + 4'b1000 : sel_dft_slv = 1'b1; // Select the default slave + default : begin + sel_dec0 = 1'bx; + sel_dec1 = 1'bx; + sel_dec2 = 1'bx; + sel_dec3 = 1'bx; + sel_dec4 = 1'bx; + sel_dec5 = 1'bx; + sel_dec6 = 1'bx; + sel_dft_slv = 1'bx; + end + endcase // case(addr_out_port) + end // block: p_sel_comb + +// The decoder selects the appropriate active_dec signal depending on which +// output stage is required for the transfer. + always @ ( + active_dec0 or + active_dec1 or + active_dec2 or + active_dec3 or + active_dec4 or + active_dec5 or + active_dec6 or + addr_out_port + ) + begin : p_active_comb + case (addr_out_port) + 4'b0000 : active_dec = active_dec0; + 4'b0001 : active_dec = active_dec1; + 4'b0010 : active_dec = active_dec2; + 4'b0011 : active_dec = active_dec3; + 4'b0100 : active_dec = active_dec4; + 4'b0101 : active_dec = active_dec5; + 4'b0110 : active_dec = active_dec6; + 4'b1000 : active_dec = 1'b1; // Select the default slave + default : active_dec = 1'bx; + endcase // case(addr_out_port) + end // block: p_active_comb + + +//------------------------------------------------------------------------------ +// Data phase signals +//------------------------------------------------------------------------------ + +// The data_out_port needs to be updated when HREADY from the input stage is high. +// Note: HREADY must be used, not HREADYOUT, because there are occaisions +// (namely when the holding register gets loaded) when HREADYOUT may be low +// but HREADY is high, and in this case it is important that the data_out_port +// gets updated. +// When the port is inactive, the default slave is selected to prevent toggling. + + always @ (negedge HRESETn or posedge HCLK) + begin : p_data_out_port_seq + if (~HRESETn) + data_out_port <= 4'b1000; + else + if (HREADYS) + if (sel_dec & trans_dec[1]) + data_out_port <= addr_out_port; + else + data_out_port <= 4'b1000; + end // block: p_data_out_port_seq + + // HREADYOUTS output decode + always @ ( + readyout_dft_slv or + readyout_dec0 or + readyout_dec1 or + readyout_dec2 or + readyout_dec3 or + readyout_dec4 or + readyout_dec5 or + readyout_dec6 or + data_out_port + ) + begin : p_ready_comb + case (data_out_port) + 4'b0000 : HREADYOUTS = readyout_dec0; + 4'b0001 : HREADYOUTS = readyout_dec1; + 4'b0010 : HREADYOUTS = readyout_dec2; + 4'b0011 : HREADYOUTS = readyout_dec3; + 4'b0100 : HREADYOUTS = readyout_dec4; + 4'b0101 : HREADYOUTS = readyout_dec5; + 4'b0110 : HREADYOUTS = readyout_dec6; + 4'b1000 : HREADYOUTS = readyout_dft_slv; // Select the default slave + default : HREADYOUTS = 1'bx; + endcase // case(data_out_port) + end // block: p_ready_comb + + // HRESPS output decode + always @ ( + resp_dft_slv or + resp_dec0 or + resp_dec1 or + resp_dec2 or + resp_dec3 or + resp_dec4 or + resp_dec5 or + resp_dec6 or + data_out_port + ) + begin : p_resp_comb + case (data_out_port) + 4'b0000 : HRESPS = resp_dec0; + 4'b0001 : HRESPS = resp_dec1; + 4'b0010 : HRESPS = resp_dec2; + 4'b0011 : HRESPS = resp_dec3; + 4'b0100 : HRESPS = resp_dec4; + 4'b0101 : HRESPS = resp_dec5; + 4'b0110 : HRESPS = resp_dec6; + 4'b1000 : HRESPS = resp_dft_slv; // Select the default slave + default : HRESPS = {2{1'bx}}; + endcase // case (data_out_port) + end // block: p_resp_comb + + // HRDATAS output decode + always @ ( + rdata_dec0 or + rdata_dec1 or + rdata_dec2 or + rdata_dec3 or + rdata_dec4 or + rdata_dec5 or + rdata_dec6 or + data_out_port + ) + begin : p_rdata_comb + case (data_out_port) + 4'b0000 : HRDATAS = rdata_dec0; + 4'b0001 : HRDATAS = rdata_dec1; + 4'b0010 : HRDATAS = rdata_dec2; + 4'b0011 : HRDATAS = rdata_dec3; + 4'b0100 : HRDATAS = rdata_dec4; + 4'b0101 : HRDATAS = rdata_dec5; + 4'b0110 : HRDATAS = rdata_dec6; + 4'b1000 : HRDATAS = {32{1'b0}}; // Select the default slave + default : HRDATAS = {32{1'bx}}; + endcase // case (data_out_port) + end // block: p_rdata_comb + + +endmodule + +// --================================= End ===================================-- diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DMAC_3.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DMAC_3.v new file mode 100644 index 0000000..67aa078 --- /dev/null +++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DMAC_3.v @@ -0,0 +1,515 @@ +//----------------------------------------------------------------------------- +// The confidential and proprietary information contained in this file may +// only be used by a person authorised under and to the extent permitted +// by a subsisting licensing agreement from Arm Limited or its affiliates. +// +// (C) COPYRIGHT 2001-2024 Arm Limited or its affiliates. +// ALL RIGHTS RESERVED +// +// This entire notice must be reproduced on all copies of this file +// and copies of this file may only be made by a person if such person is +// permitted to do so under the terms of a subsisting license agreement +// from Arm Limited or its affiliates. +// +// SVN Information +// +// Checked In : $Date: 2017-10-10 15:55:38 +0100 (Tue, 10 Oct 2017) $ +// +// Revision : $Revision: 371321 $ +// +// Release Information : Cortex-M System Design Kit-r1p1-00rel0 +// +//----------------------------------------------------------------------------- +// +//----------------------------------------------------------------------------- +// Abstract : The MatrixDecode is used to determine which output +// stage is required for a particular access. Addresses +// that do not map to an Output port are diverted to +// the local default slave. +// +// Notes : The bus matrix has sparse connectivity. +// +//----------------------------------------------------------------------------- + + + +module nanosoc_matrix_decode_DMAC_3 ( + + // Common AHB signals + HCLK, + HRESETn, + + // Signals from the Input stage + HREADYS, + sel_dec, + decode_addr_dec, + trans_dec, + + // Bus-switch output 0 + active_dec0, + readyout_dec0, + resp_dec0, + rdata_dec0, + + // Bus-switch output 1 + active_dec1, + readyout_dec1, + resp_dec1, + rdata_dec1, + + // Bus-switch output 2 + active_dec2, + readyout_dec2, + resp_dec2, + rdata_dec2, + + // Bus-switch output 3 + active_dec3, + readyout_dec3, + resp_dec3, + rdata_dec3, + + // Bus-switch output 4 + active_dec4, + readyout_dec4, + resp_dec4, + rdata_dec4, + + // Bus-switch output 5 + active_dec5, + readyout_dec5, + resp_dec5, + rdata_dec5, + + // Bus-switch output 6 + active_dec6, + readyout_dec6, + resp_dec6, + rdata_dec6, + + // Output port selection signals + sel_dec0, + sel_dec1, + sel_dec2, + sel_dec3, + sel_dec4, + sel_dec5, + sel_dec6, + + // Selected Output port data and control signals + active_dec, + HREADYOUTS, + HRESPS, + HRDATAS + + ); + + +// ----------------------------------------------------------------------------- +// Input and Output declarations +// ----------------------------------------------------------------------------- + + // Common AHB signals + input HCLK; // AHB System Clock + input HRESETn; // AHB System Reset + + // Signals from the Input stage + input HREADYS; // Transfer done + input sel_dec; // HSEL input + input [31:10] decode_addr_dec; // HADDR decoder input + input [1:0] trans_dec; // Input port HTRANS signal + + // Bus-switch output MI0 + input active_dec0; // Output stage MI0 active_dec signal + input readyout_dec0; // HREADYOUT input + input [1:0] resp_dec0; // HRESP input + input [31:0] rdata_dec0; // HRDATA input + + // Bus-switch output MI1 + input active_dec1; // Output stage MI1 active_dec signal + input readyout_dec1; // HREADYOUT input + input [1:0] resp_dec1; // HRESP input + input [31:0] rdata_dec1; // HRDATA input + + // Bus-switch output MI2 + input active_dec2; // Output stage MI2 active_dec signal + input readyout_dec2; // HREADYOUT input + input [1:0] resp_dec2; // HRESP input + input [31:0] rdata_dec2; // HRDATA input + + // Bus-switch output MI3 + input active_dec3; // Output stage MI3 active_dec signal + input readyout_dec3; // HREADYOUT input + input [1:0] resp_dec3; // HRESP input + input [31:0] rdata_dec3; // HRDATA input + + // Bus-switch output MI4 + input active_dec4; // Output stage MI4 active_dec signal + input readyout_dec4; // HREADYOUT input + input [1:0] resp_dec4; // HRESP input + input [31:0] rdata_dec4; // HRDATA input + + // Bus-switch output MI5 + input active_dec5; // Output stage MI5 active_dec signal + input readyout_dec5; // HREADYOUT input + input [1:0] resp_dec5; // HRESP input + input [31:0] rdata_dec5; // HRDATA input + + // Bus-switch output MI6 + input active_dec6; // Output stage MI6 active_dec signal + input readyout_dec6; // HREADYOUT input + input [1:0] resp_dec6; // HRESP input + input [31:0] rdata_dec6; // HRDATA input + + // Output port selection signals + output sel_dec0; // HSEL output + output sel_dec1; // HSEL output + output sel_dec2; // HSEL output + output sel_dec3; // HSEL output + output sel_dec4; // HSEL output + output sel_dec5; // HSEL output + output sel_dec6; // HSEL output + + // Selected Output port data and control signals + output active_dec; // Combinatorial active_dec O/P + output HREADYOUTS; // HREADY feedback output + output [1:0] HRESPS; // Transfer response + output [31:0] HRDATAS; // Read Data + + +// ----------------------------------------------------------------------------- +// Wire declarations +// ----------------------------------------------------------------------------- + + // Common AHB signals + wire HCLK; // AHB System Clock + wire HRESETn; // AHB System Reset + + // Signals from the Input stage + wire HREADYS; // Transfer done + wire sel_dec; // HSEL input + wire [31:10] decode_addr_dec; // HADDR input + wire [1:0] trans_dec; // Input port HTRANS signal + + // Bus-switch output MI0 + wire active_dec0; // active_dec signal + wire readyout_dec0; // HREADYOUT input + wire [1:0] resp_dec0; // HRESP input + wire [31:0] rdata_dec0; // HRDATA input + reg sel_dec0; // HSEL output + + // Bus-switch output MI1 + wire active_dec1; // active_dec signal + wire readyout_dec1; // HREADYOUT input + wire [1:0] resp_dec1; // HRESP input + wire [31:0] rdata_dec1; // HRDATA input + reg sel_dec1; // HSEL output + + // Bus-switch output MI2 + wire active_dec2; // active_dec signal + wire readyout_dec2; // HREADYOUT input + wire [1:0] resp_dec2; // HRESP input + wire [31:0] rdata_dec2; // HRDATA input + reg sel_dec2; // HSEL output + + // Bus-switch output MI3 + wire active_dec3; // active_dec signal + wire readyout_dec3; // HREADYOUT input + wire [1:0] resp_dec3; // HRESP input + wire [31:0] rdata_dec3; // HRDATA input + reg sel_dec3; // HSEL output + + // Bus-switch output MI4 + wire active_dec4; // active_dec signal + wire readyout_dec4; // HREADYOUT input + wire [1:0] resp_dec4; // HRESP input + wire [31:0] rdata_dec4; // HRDATA input + reg sel_dec4; // HSEL output + + // Bus-switch output MI5 + wire active_dec5; // active_dec signal + wire readyout_dec5; // HREADYOUT input + wire [1:0] resp_dec5; // HRESP input + wire [31:0] rdata_dec5; // HRDATA input + reg sel_dec5; // HSEL output + + // Bus-switch output MI6 + wire active_dec6; // active_dec signal + wire readyout_dec6; // HREADYOUT input + wire [1:0] resp_dec6; // HRESP input + wire [31:0] rdata_dec6; // HRDATA input + reg sel_dec6; // HSEL output + + +// ----------------------------------------------------------------------------- +// Signal declarations +// ----------------------------------------------------------------------------- + + // Selected Output port data and control signals + reg active_dec; // Combinatorial active_dec O/P signal + reg HREADYOUTS; // Combinatorial HREADYOUT signal + reg [1:0] HRESPS; // Combinatorial HRESPS signal + reg [31:0] HRDATAS; // Read data bus + + reg [3:0] addr_out_port; // Address output ports + reg [3:0] data_out_port; // Data output ports + + // Default slave signals + reg sel_dft_slv; // HSEL signal + wire readyout_dft_slv; // HREADYOUT signal + wire [1:0] resp_dft_slv; // Combinatorial HRESPS signal + + +// ----------------------------------------------------------------------------- +// Beginning of main code +// ----------------------------------------------------------------------------- + +//------------------------------------------------------------------------------ +// Default slave (accessed when HADDR is unmapped) +//------------------------------------------------------------------------------ + + nanosoc_busmatrix_default_slave u_nanosoc_busmatrix_default_slave ( + + // Common AHB signals + .HCLK (HCLK), + .HRESETn (HRESETn), + + // AHB Control signals + .HSEL (sel_dft_slv), + .HTRANS (trans_dec), + .HREADY (HREADYS), + .HREADYOUT (readyout_dft_slv), + .HRESP (resp_dft_slv) + + ); + + +//------------------------------------------------------------------------------ +// Address phase signals +//------------------------------------------------------------------------------ + +// The address decode is done in two stages. This is so that the address +// decode occurs in only one process, p_addr_out_portComb, and then the select +// signal is factored in. +// +// Note that the hexadecimal address values are reformatted to align with the +// lower bound of decode_addr_dec[31:10], which is not a hex character boundary + + always @ ( + decode_addr_dec or data_out_port or trans_dec + ) + begin : p_addr_out_port_comb + + // Only switch if there is an active transfer + if (trans_dec != 2'b00) + begin + + // Address region 0x10000000-0x1fffffff + if ((decode_addr_dec >= 22'h040000) & (decode_addr_dec <= 22'h07ffff)) + addr_out_port = 4'b0000; // Select Output port MI0 + + // Address region 0x00000000-0x0fffffff + else if ((decode_addr_dec >= 22'h000000) & (decode_addr_dec <= 22'h03ffff)) + addr_out_port = 4'b0001; // Select Output port MI1 + // Address region 0x20000000-0x2fffffff + else if ((decode_addr_dec >= 22'h080000) & (decode_addr_dec <= 22'h0bffff)) + addr_out_port = 4'b0001; // Select Output port MI1 + + // Address region 0x30000000-0x3fffffff + else if ((decode_addr_dec >= 22'h0c0000) & (decode_addr_dec <= 22'h0fffff)) + addr_out_port = 4'b0010; // Select Output port MI2 + + // Address region 0x40000000-0x5fffffff + else if ((decode_addr_dec >= 22'h100000) & (decode_addr_dec <= 22'h17ffff)) + addr_out_port = 4'b0011; // Select Output port MI3 + + // Address region 0x80000000-0x8fffffff + else if ((decode_addr_dec >= 22'h200000) & (decode_addr_dec <= 22'h23ffff)) + addr_out_port = 4'b0100; // Select Output port MI4 + + // Address region 0x90000000-0x9fffffff + else if ((decode_addr_dec >= 22'h240000) & (decode_addr_dec <= 22'h27ffff)) + addr_out_port = 4'b0101; // Select Output port MI5 + + // Address region 0x60000000-0x7fffffff + else if ((decode_addr_dec >= 22'h180000) & (decode_addr_dec <= 22'h1fffff)) + addr_out_port = 4'b0110; // Select Output port MI6 + // Address region 0xa0000000-0xdfffffff + else if ((decode_addr_dec >= 22'h280000) & (decode_addr_dec <= 22'h37ffff)) + addr_out_port = 4'b0110; // Select Output port MI6 + + else + addr_out_port = 4'b1000; // Select the default slave + + end // if (trans_dec != 2'b00) + else + addr_out_port = data_out_port; // Stay on last port if no activity + + end // block: p_addr_out_port_comb + + // Select signal decode + always @ (sel_dec or addr_out_port) + begin : p_sel_comb + sel_dec0 = 1'b0; + sel_dec1 = 1'b0; + sel_dec2 = 1'b0; + sel_dec3 = 1'b0; + sel_dec4 = 1'b0; + sel_dec5 = 1'b0; + sel_dec6 = 1'b0; + sel_dft_slv = 1'b0; + + if (sel_dec) + case (addr_out_port) + 4'b0000 : sel_dec0 = 1'b1; + 4'b0001 : sel_dec1 = 1'b1; + 4'b0010 : sel_dec2 = 1'b1; + 4'b0011 : sel_dec3 = 1'b1; + 4'b0100 : sel_dec4 = 1'b1; + 4'b0101 : sel_dec5 = 1'b1; + 4'b0110 : sel_dec6 = 1'b1; + 4'b1000 : sel_dft_slv = 1'b1; // Select the default slave + default : begin + sel_dec0 = 1'bx; + sel_dec1 = 1'bx; + sel_dec2 = 1'bx; + sel_dec3 = 1'bx; + sel_dec4 = 1'bx; + sel_dec5 = 1'bx; + sel_dec6 = 1'bx; + sel_dft_slv = 1'bx; + end + endcase // case(addr_out_port) + end // block: p_sel_comb + +// The decoder selects the appropriate active_dec signal depending on which +// output stage is required for the transfer. + always @ ( + active_dec0 or + active_dec1 or + active_dec2 or + active_dec3 or + active_dec4 or + active_dec5 or + active_dec6 or + addr_out_port + ) + begin : p_active_comb + case (addr_out_port) + 4'b0000 : active_dec = active_dec0; + 4'b0001 : active_dec = active_dec1; + 4'b0010 : active_dec = active_dec2; + 4'b0011 : active_dec = active_dec3; + 4'b0100 : active_dec = active_dec4; + 4'b0101 : active_dec = active_dec5; + 4'b0110 : active_dec = active_dec6; + 4'b1000 : active_dec = 1'b1; // Select the default slave + default : active_dec = 1'bx; + endcase // case(addr_out_port) + end // block: p_active_comb + + +//------------------------------------------------------------------------------ +// Data phase signals +//------------------------------------------------------------------------------ + +// The data_out_port needs to be updated when HREADY from the input stage is high. +// Note: HREADY must be used, not HREADYOUT, because there are occaisions +// (namely when the holding register gets loaded) when HREADYOUT may be low +// but HREADY is high, and in this case it is important that the data_out_port +// gets updated. +// When the port is inactive, the default slave is selected to prevent toggling. + + always @ (negedge HRESETn or posedge HCLK) + begin : p_data_out_port_seq + if (~HRESETn) + data_out_port <= 4'b1000; + else + if (HREADYS) + if (sel_dec & trans_dec[1]) + data_out_port <= addr_out_port; + else + data_out_port <= 4'b1000; + end // block: p_data_out_port_seq + + // HREADYOUTS output decode + always @ ( + readyout_dft_slv or + readyout_dec0 or + readyout_dec1 or + readyout_dec2 or + readyout_dec3 or + readyout_dec4 or + readyout_dec5 or + readyout_dec6 or + data_out_port + ) + begin : p_ready_comb + case (data_out_port) + 4'b0000 : HREADYOUTS = readyout_dec0; + 4'b0001 : HREADYOUTS = readyout_dec1; + 4'b0010 : HREADYOUTS = readyout_dec2; + 4'b0011 : HREADYOUTS = readyout_dec3; + 4'b0100 : HREADYOUTS = readyout_dec4; + 4'b0101 : HREADYOUTS = readyout_dec5; + 4'b0110 : HREADYOUTS = readyout_dec6; + 4'b1000 : HREADYOUTS = readyout_dft_slv; // Select the default slave + default : HREADYOUTS = 1'bx; + endcase // case(data_out_port) + end // block: p_ready_comb + + // HRESPS output decode + always @ ( + resp_dft_slv or + resp_dec0 or + resp_dec1 or + resp_dec2 or + resp_dec3 or + resp_dec4 or + resp_dec5 or + resp_dec6 or + data_out_port + ) + begin : p_resp_comb + case (data_out_port) + 4'b0000 : HRESPS = resp_dec0; + 4'b0001 : HRESPS = resp_dec1; + 4'b0010 : HRESPS = resp_dec2; + 4'b0011 : HRESPS = resp_dec3; + 4'b0100 : HRESPS = resp_dec4; + 4'b0101 : HRESPS = resp_dec5; + 4'b0110 : HRESPS = resp_dec6; + 4'b1000 : HRESPS = resp_dft_slv; // Select the default slave + default : HRESPS = {2{1'bx}}; + endcase // case (data_out_port) + end // block: p_resp_comb + + // HRDATAS output decode + always @ ( + rdata_dec0 or + rdata_dec1 or + rdata_dec2 or + rdata_dec3 or + rdata_dec4 or + rdata_dec5 or + rdata_dec6 or + data_out_port + ) + begin : p_rdata_comb + case (data_out_port) + 4'b0000 : HRDATAS = rdata_dec0; + 4'b0001 : HRDATAS = rdata_dec1; + 4'b0010 : HRDATAS = rdata_dec2; + 4'b0011 : HRDATAS = rdata_dec3; + 4'b0100 : HRDATAS = rdata_dec4; + 4'b0101 : HRDATAS = rdata_dec5; + 4'b0110 : HRDATAS = rdata_dec6; + 4'b1000 : HRDATAS = {32{1'b0}}; // Select the default slave + default : HRDATAS = {32{1'bx}}; + endcase // case (data_out_port) + end // block: p_rdata_comb + + +endmodule + +// --================================= End ===================================-- diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_BOOTROM_0.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_BOOTROM_0.v index d8f6faa..44c1f62 100644 --- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_BOOTROM_0.v +++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_BOOTROM_0.v @@ -3,7 +3,7 @@ // only be used by a person authorised under and to the extent permitted // by a subsisting licensing agreement from Arm Limited or its affiliates. // -// (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates. +// (C) COPYRIGHT 2001-2024 Arm Limited or its affiliates. // ALL RIGHTS RESERVED // // This entire notice must be reproduced on all copies of this file @@ -90,6 +90,32 @@ module nanosoc_target_output_BOOTROM_0 ( wdata_op3, held_tran_op3, + // Port 4 Signals + sel_op4, + addr_op4, + trans_op4, + write_op4, + size_op4, + burst_op4, + prot_op4, + master_op4, + mastlock_op4, + wdata_op4, + held_tran_op4, + + // Port 5 Signals + sel_op5, + addr_op5, + trans_op5, + write_op5, + size_op5, + burst_op5, + prot_op5, + master_op5, + mastlock_op5, + wdata_op5, + held_tran_op5, + // Slave read data and response HREADYOUTM, @@ -97,6 +123,8 @@ module nanosoc_target_output_BOOTROM_0 ( active_op1, active_op2, active_op3, + active_op4, + active_op5, // Slave Address/Control Signals HSELM, @@ -174,12 +202,40 @@ module nanosoc_target_output_BOOTROM_0 ( input [31:0] wdata_op3; // Port 3 HWDATA signal input held_tran_op3; // Port 3 HeldTran signal + // Bus-switch input 4 + input sel_op4; // Port 4 HSEL signal + input [31:0] addr_op4; // Port 4 HADDR signal + input [1:0] trans_op4; // Port 4 HTRANS signal + input write_op4; // Port 4 HWRITE signal + input [2:0] size_op4; // Port 4 HSIZE signal + input [2:0] burst_op4; // Port 4 HBURST signal + input [3:0] prot_op4; // Port 4 HPROT signal + input [3:0] master_op4; // Port 4 HMASTER signal + input mastlock_op4; // Port 4 HMASTLOCK signal + input [31:0] wdata_op4; // Port 4 HWDATA signal + input held_tran_op4; // Port 4 HeldTran signal + + // Bus-switch input 5 + input sel_op5; // Port 5 HSEL signal + input [31:0] addr_op5; // Port 5 HADDR signal + input [1:0] trans_op5; // Port 5 HTRANS signal + input write_op5; // Port 5 HWRITE signal + input [2:0] size_op5; // Port 5 HSIZE signal + input [2:0] burst_op5; // Port 5 HBURST signal + input [3:0] prot_op5; // Port 5 HPROT signal + input [3:0] master_op5; // Port 5 HMASTER signal + input mastlock_op5; // Port 5 HMASTLOCK signal + input [31:0] wdata_op5; // Port 5 HWDATA signal + input held_tran_op5; // Port 5 HeldTran signal + input HREADYOUTM; // HREADY feedback output active_op0; // Port 0 Active signal output active_op1; // Port 1 Active signal output active_op2; // Port 2 Active signal output active_op3; // Port 3 Active signal + output active_op4; // Port 4 Active signal + output active_op5; // Port 5 Active signal // Slave Address/Control Signals output HSELM; // Slave select line @@ -257,6 +313,34 @@ module nanosoc_target_output_BOOTROM_0 ( wire held_tran_op3; // Port 3 HeldTran signal reg active_op3; // Port 3 Active signal + // Bus-switch input 4 + wire sel_op4; // Port 4 HSEL signal + wire [31:0] addr_op4; // Port 4 HADDR signal + wire [1:0] trans_op4; // Port 4 HTRANS signal + wire write_op4; // Port 4 HWRITE signal + wire [2:0] size_op4; // Port 4 HSIZE signal + wire [2:0] burst_op4; // Port 4 HBURST signal + wire [3:0] prot_op4; // Port 4 HPROT signal + wire [3:0] master_op4; // Port 4 HMASTER signal + wire mastlock_op4; // Port 4 HMASTLOCK signal + wire [31:0] wdata_op4; // Port 4 HWDATA signal + wire held_tran_op4; // Port 4 HeldTran signal + reg active_op4; // Port 4 Active signal + + // Bus-switch input 5 + wire sel_op5; // Port 5 HSEL signal + wire [31:0] addr_op5; // Port 5 HADDR signal + wire [1:0] trans_op5; // Port 5 HTRANS signal + wire write_op5; // Port 5 HWRITE signal + wire [2:0] size_op5; // Port 5 HSIZE signal + wire [2:0] burst_op5; // Port 5 HBURST signal + wire [3:0] prot_op5; // Port 5 HPROT signal + wire [3:0] master_op5; // Port 5 HMASTER signal + wire mastlock_op5; // Port 5 HMASTLOCK signal + wire [31:0] wdata_op5; // Port 5 HWDATA signal + wire held_tran_op5; // Port 5 HeldTran signal + reg active_op5; // Port 5 Active signal + // Slave Address/Control Signals wire HSELM; // Slave select line reg [31:0] HADDRM; // Address @@ -279,9 +363,11 @@ module nanosoc_target_output_BOOTROM_0 ( wire req_port1; // Port 1 request signal wire req_port2; // Port 2 request signal wire req_port3; // Port 3 request signal + wire req_port4; // Port 4 request signal + wire req_port5; // Port 5 request signal - wire [1:0] addr_in_port; // Address input port - reg [1:0] data_in_port; // Data input port + wire [2:0] addr_in_port; // Address input port + reg [2:0] data_in_port; // Data input port wire no_port; // No port selected signal reg slave_sel; // Slave select signal reg wdata_phase; // Used to prevent unnecesary toggling @@ -309,6 +395,8 @@ module nanosoc_target_output_BOOTROM_0 ( assign req_port1 = held_tran_op1 & sel_op1; assign req_port2 = held_tran_op2 & sel_op2; assign req_port3 = held_tran_op3 & sel_op3; + assign req_port4 = held_tran_op4 & sel_op4; + assign req_port5 = held_tran_op5 & sel_op5; // Arbiter instance for resolving requests to this output stage nanosoc_arbiter_BOOTROM_0 u_output_arb ( @@ -320,6 +408,8 @@ module nanosoc_target_output_BOOTROM_0 ( .req_port1 (req_port1), .req_port2 (req_port2), .req_port3 (req_port3), + .req_port4 (req_port4), + .req_port5 (req_port5), .HREADYM (i_hreadymuxm), .HSELM (i_hselm), @@ -341,19 +431,25 @@ module nanosoc_target_output_BOOTROM_0 ( active_op1 = 1'b0; active_op2 = 1'b0; active_op3 = 1'b0; + active_op4 = 1'b0; + active_op5 = 1'b0; // Decode selection when enabled if (~no_port) case (addr_in_port) - 2'b00 : active_op0 = 1'b1; - 2'b01 : active_op1 = 1'b1; - 2'b10 : active_op2 = 1'b1; - 2'b11 : active_op3 = 1'b1; + 3'b000 : active_op0 = 1'b1; + 3'b001 : active_op1 = 1'b1; + 3'b010 : active_op2 = 1'b1; + 3'b011 : active_op3 = 1'b1; + 3'b100 : active_op4 = 1'b1; + 3'b101 : active_op5 = 1'b1; default : begin active_op0 = 1'bx; active_op1 = 1'bx; active_op2 = 1'bx; active_op3 = 1'bx; + active_op4 = 1'bx; + active_op5 = 1'bx; end endcase // case(addr_in_port) end // block: p_active_comb @@ -373,6 +469,12 @@ module nanosoc_target_output_BOOTROM_0 ( sel_op3 or addr_op3 or trans_op3 or write_op3 or size_op3 or burst_op3 or prot_op3 or master_op3 or mastlock_op3 or + sel_op4 or addr_op4 or trans_op4 or write_op4 or + size_op4 or burst_op4 or prot_op4 or + master_op4 or mastlock_op4 or + sel_op5 or addr_op5 or trans_op5 or write_op5 or + size_op5 or burst_op5 or prot_op5 or + master_op5 or mastlock_op5 or addr_in_port or no_port ) begin : p_addr_mux @@ -391,7 +493,7 @@ module nanosoc_target_output_BOOTROM_0 ( if (~no_port) case (addr_in_port) // Bus-switch input 0 - 2'b00 : + 3'b000 : begin i_hselm = sel_op0; HADDRM = addr_op0; @@ -402,10 +504,10 @@ module nanosoc_target_output_BOOTROM_0 ( HPROTM = prot_op0; HMASTERM = master_op0; i_hmastlockm= mastlock_op0; - end // case: 4'b00 + end // case: 4'b000 // Bus-switch input 1 - 2'b01 : + 3'b001 : begin i_hselm = sel_op1; HADDRM = addr_op1; @@ -416,10 +518,10 @@ module nanosoc_target_output_BOOTROM_0 ( HPROTM = prot_op1; HMASTERM = master_op1; i_hmastlockm= mastlock_op1; - end // case: 4'b01 + end // case: 4'b001 // Bus-switch input 2 - 2'b10 : + 3'b010 : begin i_hselm = sel_op2; HADDRM = addr_op2; @@ -430,10 +532,10 @@ module nanosoc_target_output_BOOTROM_0 ( HPROTM = prot_op2; HMASTERM = master_op2; i_hmastlockm= mastlock_op2; - end // case: 4'b10 + end // case: 4'b010 // Bus-switch input 3 - 2'b11 : + 3'b011 : begin i_hselm = sel_op3; HADDRM = addr_op3; @@ -444,7 +546,35 @@ module nanosoc_target_output_BOOTROM_0 ( HPROTM = prot_op3; HMASTERM = master_op3; i_hmastlockm= mastlock_op3; - end // case: 4'b11 + end // case: 4'b011 + + // Bus-switch input 4 + 3'b100 : + begin + i_hselm = sel_op4; + HADDRM = addr_op4; + i_htransm = trans_op4; + HWRITEM = write_op4; + HSIZEM = size_op4; + i_hburstm = burst_op4; + HPROTM = prot_op4; + HMASTERM = master_op4; + i_hmastlockm= mastlock_op4; + end // case: 4'b100 + + // Bus-switch input 5 + 3'b101 : + begin + i_hselm = sel_op5; + HADDRM = addr_op5; + i_htransm = trans_op5; + HWRITEM = write_op5; + HSIZEM = size_op5; + i_hburstm = burst_op5; + HPROTM = prot_op5; + HMASTERM = master_op5; + i_hmastlockm= mastlock_op5; + end // case: 4'b101 default : begin @@ -494,7 +624,7 @@ module nanosoc_target_output_BOOTROM_0 ( always @ (negedge HRESETn or posedge HCLK) begin : p_data_in_port_reg if (~HRESETn) - data_in_port <= 2'b11; + data_in_port <= 3'b101; else if (i_hreadymuxm) data_in_port <= addr_in_port; @@ -517,6 +647,8 @@ module nanosoc_target_output_BOOTROM_0 ( wdata_op1 or wdata_op2 or wdata_op3 or + wdata_op4 or + wdata_op5 or data_in_port or wdata_phase ) begin : p_data_mux @@ -527,10 +659,12 @@ module nanosoc_target_output_BOOTROM_0 ( if (wdata_phase) // Decode selection case (data_in_port) - 2'b00 : HWDATAM = wdata_op0; - 2'b01 : HWDATAM = wdata_op1; - 2'b10 : HWDATAM = wdata_op2; - 2'b11 : HWDATAM = wdata_op3; + 3'b000 : HWDATAM = wdata_op0; + 3'b001 : HWDATAM = wdata_op1; + 3'b010 : HWDATAM = wdata_op2; + 3'b011 : HWDATAM = wdata_op3; + 3'b100 : HWDATAM = wdata_op4; + 3'b101 : HWDATAM = wdata_op5; default : HWDATAM = {32{1'bx}}; endcase // case(data_in_port) end // block: p_data_mux diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_DMEM_0.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_DMEM_0.v index e06782c..a57cac8 100644 --- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_DMEM_0.v +++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_DMEM_0.v @@ -3,7 +3,7 @@ // only be used by a person authorised under and to the extent permitted // by a subsisting licensing agreement from Arm Limited or its affiliates. // -// (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates. +// (C) COPYRIGHT 2001-2024 Arm Limited or its affiliates. // ALL RIGHTS RESERVED // // This entire notice must be reproduced on all copies of this file @@ -90,6 +90,32 @@ module nanosoc_target_output_DMEM_0 ( wdata_op3, held_tran_op3, + // Port 4 Signals + sel_op4, + addr_op4, + trans_op4, + write_op4, + size_op4, + burst_op4, + prot_op4, + master_op4, + mastlock_op4, + wdata_op4, + held_tran_op4, + + // Port 5 Signals + sel_op5, + addr_op5, + trans_op5, + write_op5, + size_op5, + burst_op5, + prot_op5, + master_op5, + mastlock_op5, + wdata_op5, + held_tran_op5, + // Slave read data and response HREADYOUTM, @@ -97,6 +123,8 @@ module nanosoc_target_output_DMEM_0 ( active_op1, active_op2, active_op3, + active_op4, + active_op5, // Slave Address/Control Signals HSELM, @@ -174,12 +202,40 @@ module nanosoc_target_output_DMEM_0 ( input [31:0] wdata_op3; // Port 3 HWDATA signal input held_tran_op3; // Port 3 HeldTran signal + // Bus-switch input 4 + input sel_op4; // Port 4 HSEL signal + input [31:0] addr_op4; // Port 4 HADDR signal + input [1:0] trans_op4; // Port 4 HTRANS signal + input write_op4; // Port 4 HWRITE signal + input [2:0] size_op4; // Port 4 HSIZE signal + input [2:0] burst_op4; // Port 4 HBURST signal + input [3:0] prot_op4; // Port 4 HPROT signal + input [3:0] master_op4; // Port 4 HMASTER signal + input mastlock_op4; // Port 4 HMASTLOCK signal + input [31:0] wdata_op4; // Port 4 HWDATA signal + input held_tran_op4; // Port 4 HeldTran signal + + // Bus-switch input 5 + input sel_op5; // Port 5 HSEL signal + input [31:0] addr_op5; // Port 5 HADDR signal + input [1:0] trans_op5; // Port 5 HTRANS signal + input write_op5; // Port 5 HWRITE signal + input [2:0] size_op5; // Port 5 HSIZE signal + input [2:0] burst_op5; // Port 5 HBURST signal + input [3:0] prot_op5; // Port 5 HPROT signal + input [3:0] master_op5; // Port 5 HMASTER signal + input mastlock_op5; // Port 5 HMASTLOCK signal + input [31:0] wdata_op5; // Port 5 HWDATA signal + input held_tran_op5; // Port 5 HeldTran signal + input HREADYOUTM; // HREADY feedback output active_op0; // Port 0 Active signal output active_op1; // Port 1 Active signal output active_op2; // Port 2 Active signal output active_op3; // Port 3 Active signal + output active_op4; // Port 4 Active signal + output active_op5; // Port 5 Active signal // Slave Address/Control Signals output HSELM; // Slave select line @@ -257,6 +313,34 @@ module nanosoc_target_output_DMEM_0 ( wire held_tran_op3; // Port 3 HeldTran signal reg active_op3; // Port 3 Active signal + // Bus-switch input 4 + wire sel_op4; // Port 4 HSEL signal + wire [31:0] addr_op4; // Port 4 HADDR signal + wire [1:0] trans_op4; // Port 4 HTRANS signal + wire write_op4; // Port 4 HWRITE signal + wire [2:0] size_op4; // Port 4 HSIZE signal + wire [2:0] burst_op4; // Port 4 HBURST signal + wire [3:0] prot_op4; // Port 4 HPROT signal + wire [3:0] master_op4; // Port 4 HMASTER signal + wire mastlock_op4; // Port 4 HMASTLOCK signal + wire [31:0] wdata_op4; // Port 4 HWDATA signal + wire held_tran_op4; // Port 4 HeldTran signal + reg active_op4; // Port 4 Active signal + + // Bus-switch input 5 + wire sel_op5; // Port 5 HSEL signal + wire [31:0] addr_op5; // Port 5 HADDR signal + wire [1:0] trans_op5; // Port 5 HTRANS signal + wire write_op5; // Port 5 HWRITE signal + wire [2:0] size_op5; // Port 5 HSIZE signal + wire [2:0] burst_op5; // Port 5 HBURST signal + wire [3:0] prot_op5; // Port 5 HPROT signal + wire [3:0] master_op5; // Port 5 HMASTER signal + wire mastlock_op5; // Port 5 HMASTLOCK signal + wire [31:0] wdata_op5; // Port 5 HWDATA signal + wire held_tran_op5; // Port 5 HeldTran signal + reg active_op5; // Port 5 Active signal + // Slave Address/Control Signals wire HSELM; // Slave select line reg [31:0] HADDRM; // Address @@ -279,9 +363,11 @@ module nanosoc_target_output_DMEM_0 ( wire req_port1; // Port 1 request signal wire req_port2; // Port 2 request signal wire req_port3; // Port 3 request signal + wire req_port4; // Port 4 request signal + wire req_port5; // Port 5 request signal - wire [1:0] addr_in_port; // Address input port - reg [1:0] data_in_port; // Data input port + wire [2:0] addr_in_port; // Address input port + reg [2:0] data_in_port; // Data input port wire no_port; // No port selected signal reg slave_sel; // Slave select signal reg wdata_phase; // Used to prevent unnecesary toggling @@ -309,6 +395,8 @@ module nanosoc_target_output_DMEM_0 ( assign req_port1 = held_tran_op1 & sel_op1; assign req_port2 = held_tran_op2 & sel_op2; assign req_port3 = held_tran_op3 & sel_op3; + assign req_port4 = held_tran_op4 & sel_op4; + assign req_port5 = held_tran_op5 & sel_op5; // Arbiter instance for resolving requests to this output stage nanosoc_arbiter_DMEM_0 u_output_arb ( @@ -320,6 +408,8 @@ module nanosoc_target_output_DMEM_0 ( .req_port1 (req_port1), .req_port2 (req_port2), .req_port3 (req_port3), + .req_port4 (req_port4), + .req_port5 (req_port5), .HREADYM (i_hreadymuxm), .HSELM (i_hselm), @@ -341,19 +431,25 @@ module nanosoc_target_output_DMEM_0 ( active_op1 = 1'b0; active_op2 = 1'b0; active_op3 = 1'b0; + active_op4 = 1'b0; + active_op5 = 1'b0; // Decode selection when enabled if (~no_port) case (addr_in_port) - 2'b00 : active_op0 = 1'b1; - 2'b01 : active_op1 = 1'b1; - 2'b10 : active_op2 = 1'b1; - 2'b11 : active_op3 = 1'b1; + 3'b000 : active_op0 = 1'b1; + 3'b001 : active_op1 = 1'b1; + 3'b010 : active_op2 = 1'b1; + 3'b011 : active_op3 = 1'b1; + 3'b100 : active_op4 = 1'b1; + 3'b101 : active_op5 = 1'b1; default : begin active_op0 = 1'bx; active_op1 = 1'bx; active_op2 = 1'bx; active_op3 = 1'bx; + active_op4 = 1'bx; + active_op5 = 1'bx; end endcase // case(addr_in_port) end // block: p_active_comb @@ -373,6 +469,12 @@ module nanosoc_target_output_DMEM_0 ( sel_op3 or addr_op3 or trans_op3 or write_op3 or size_op3 or burst_op3 or prot_op3 or master_op3 or mastlock_op3 or + sel_op4 or addr_op4 or trans_op4 or write_op4 or + size_op4 or burst_op4 or prot_op4 or + master_op4 or mastlock_op4 or + sel_op5 or addr_op5 or trans_op5 or write_op5 or + size_op5 or burst_op5 or prot_op5 or + master_op5 or mastlock_op5 or addr_in_port or no_port ) begin : p_addr_mux @@ -391,7 +493,7 @@ module nanosoc_target_output_DMEM_0 ( if (~no_port) case (addr_in_port) // Bus-switch input 0 - 2'b00 : + 3'b000 : begin i_hselm = sel_op0; HADDRM = addr_op0; @@ -402,10 +504,10 @@ module nanosoc_target_output_DMEM_0 ( HPROTM = prot_op0; HMASTERM = master_op0; i_hmastlockm= mastlock_op0; - end // case: 4'b00 + end // case: 4'b000 // Bus-switch input 1 - 2'b01 : + 3'b001 : begin i_hselm = sel_op1; HADDRM = addr_op1; @@ -416,10 +518,10 @@ module nanosoc_target_output_DMEM_0 ( HPROTM = prot_op1; HMASTERM = master_op1; i_hmastlockm= mastlock_op1; - end // case: 4'b01 + end // case: 4'b001 // Bus-switch input 2 - 2'b10 : + 3'b010 : begin i_hselm = sel_op2; HADDRM = addr_op2; @@ -430,10 +532,10 @@ module nanosoc_target_output_DMEM_0 ( HPROTM = prot_op2; HMASTERM = master_op2; i_hmastlockm= mastlock_op2; - end // case: 4'b10 + end // case: 4'b010 // Bus-switch input 3 - 2'b11 : + 3'b011 : begin i_hselm = sel_op3; HADDRM = addr_op3; @@ -444,7 +546,35 @@ module nanosoc_target_output_DMEM_0 ( HPROTM = prot_op3; HMASTERM = master_op3; i_hmastlockm= mastlock_op3; - end // case: 4'b11 + end // case: 4'b011 + + // Bus-switch input 4 + 3'b100 : + begin + i_hselm = sel_op4; + HADDRM = addr_op4; + i_htransm = trans_op4; + HWRITEM = write_op4; + HSIZEM = size_op4; + i_hburstm = burst_op4; + HPROTM = prot_op4; + HMASTERM = master_op4; + i_hmastlockm= mastlock_op4; + end // case: 4'b100 + + // Bus-switch input 5 + 3'b101 : + begin + i_hselm = sel_op5; + HADDRM = addr_op5; + i_htransm = trans_op5; + HWRITEM = write_op5; + HSIZEM = size_op5; + i_hburstm = burst_op5; + HPROTM = prot_op5; + HMASTERM = master_op5; + i_hmastlockm= mastlock_op5; + end // case: 4'b101 default : begin @@ -494,7 +624,7 @@ module nanosoc_target_output_DMEM_0 ( always @ (negedge HRESETn or posedge HCLK) begin : p_data_in_port_reg if (~HRESETn) - data_in_port <= 2'b11; + data_in_port <= 3'b101; else if (i_hreadymuxm) data_in_port <= addr_in_port; @@ -517,6 +647,8 @@ module nanosoc_target_output_DMEM_0 ( wdata_op1 or wdata_op2 or wdata_op3 or + wdata_op4 or + wdata_op5 or data_in_port or wdata_phase ) begin : p_data_mux @@ -527,10 +659,12 @@ module nanosoc_target_output_DMEM_0 ( if (wdata_phase) // Decode selection case (data_in_port) - 2'b00 : HWDATAM = wdata_op0; - 2'b01 : HWDATAM = wdata_op1; - 2'b10 : HWDATAM = wdata_op2; - 2'b11 : HWDATAM = wdata_op3; + 3'b000 : HWDATAM = wdata_op0; + 3'b001 : HWDATAM = wdata_op1; + 3'b010 : HWDATAM = wdata_op2; + 3'b011 : HWDATAM = wdata_op3; + 3'b100 : HWDATAM = wdata_op4; + 3'b101 : HWDATAM = wdata_op5; default : HWDATAM = {32{1'bx}}; endcase // case(data_in_port) end // block: p_data_mux diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_EXP.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_EXP.v index aabb315..1b62c89 100644 --- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_EXP.v +++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_EXP.v @@ -3,7 +3,7 @@ // only be used by a person authorised under and to the extent permitted // by a subsisting licensing agreement from Arm Limited or its affiliates. // -// (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates. +// (C) COPYRIGHT 2001-2024 Arm Limited or its affiliates. // ALL RIGHTS RESERVED // // This entire notice must be reproduced on all copies of this file @@ -90,6 +90,32 @@ module nanosoc_target_output_EXP ( wdata_op3, held_tran_op3, + // Port 4 Signals + sel_op4, + addr_op4, + trans_op4, + write_op4, + size_op4, + burst_op4, + prot_op4, + master_op4, + mastlock_op4, + wdata_op4, + held_tran_op4, + + // Port 5 Signals + sel_op5, + addr_op5, + trans_op5, + write_op5, + size_op5, + burst_op5, + prot_op5, + master_op5, + mastlock_op5, + wdata_op5, + held_tran_op5, + // Slave read data and response HREADYOUTM, @@ -97,6 +123,8 @@ module nanosoc_target_output_EXP ( active_op1, active_op2, active_op3, + active_op4, + active_op5, // Slave Address/Control Signals HSELM, @@ -174,12 +202,40 @@ module nanosoc_target_output_EXP ( input [31:0] wdata_op3; // Port 3 HWDATA signal input held_tran_op3; // Port 3 HeldTran signal + // Bus-switch input 4 + input sel_op4; // Port 4 HSEL signal + input [31:0] addr_op4; // Port 4 HADDR signal + input [1:0] trans_op4; // Port 4 HTRANS signal + input write_op4; // Port 4 HWRITE signal + input [2:0] size_op4; // Port 4 HSIZE signal + input [2:0] burst_op4; // Port 4 HBURST signal + input [3:0] prot_op4; // Port 4 HPROT signal + input [3:0] master_op4; // Port 4 HMASTER signal + input mastlock_op4; // Port 4 HMASTLOCK signal + input [31:0] wdata_op4; // Port 4 HWDATA signal + input held_tran_op4; // Port 4 HeldTran signal + + // Bus-switch input 5 + input sel_op5; // Port 5 HSEL signal + input [31:0] addr_op5; // Port 5 HADDR signal + input [1:0] trans_op5; // Port 5 HTRANS signal + input write_op5; // Port 5 HWRITE signal + input [2:0] size_op5; // Port 5 HSIZE signal + input [2:0] burst_op5; // Port 5 HBURST signal + input [3:0] prot_op5; // Port 5 HPROT signal + input [3:0] master_op5; // Port 5 HMASTER signal + input mastlock_op5; // Port 5 HMASTLOCK signal + input [31:0] wdata_op5; // Port 5 HWDATA signal + input held_tran_op5; // Port 5 HeldTran signal + input HREADYOUTM; // HREADY feedback output active_op0; // Port 0 Active signal output active_op1; // Port 1 Active signal output active_op2; // Port 2 Active signal output active_op3; // Port 3 Active signal + output active_op4; // Port 4 Active signal + output active_op5; // Port 5 Active signal // Slave Address/Control Signals output HSELM; // Slave select line @@ -257,6 +313,34 @@ module nanosoc_target_output_EXP ( wire held_tran_op3; // Port 3 HeldTran signal reg active_op3; // Port 3 Active signal + // Bus-switch input 4 + wire sel_op4; // Port 4 HSEL signal + wire [31:0] addr_op4; // Port 4 HADDR signal + wire [1:0] trans_op4; // Port 4 HTRANS signal + wire write_op4; // Port 4 HWRITE signal + wire [2:0] size_op4; // Port 4 HSIZE signal + wire [2:0] burst_op4; // Port 4 HBURST signal + wire [3:0] prot_op4; // Port 4 HPROT signal + wire [3:0] master_op4; // Port 4 HMASTER signal + wire mastlock_op4; // Port 4 HMASTLOCK signal + wire [31:0] wdata_op4; // Port 4 HWDATA signal + wire held_tran_op4; // Port 4 HeldTran signal + reg active_op4; // Port 4 Active signal + + // Bus-switch input 5 + wire sel_op5; // Port 5 HSEL signal + wire [31:0] addr_op5; // Port 5 HADDR signal + wire [1:0] trans_op5; // Port 5 HTRANS signal + wire write_op5; // Port 5 HWRITE signal + wire [2:0] size_op5; // Port 5 HSIZE signal + wire [2:0] burst_op5; // Port 5 HBURST signal + wire [3:0] prot_op5; // Port 5 HPROT signal + wire [3:0] master_op5; // Port 5 HMASTER signal + wire mastlock_op5; // Port 5 HMASTLOCK signal + wire [31:0] wdata_op5; // Port 5 HWDATA signal + wire held_tran_op5; // Port 5 HeldTran signal + reg active_op5; // Port 5 Active signal + // Slave Address/Control Signals wire HSELM; // Slave select line reg [31:0] HADDRM; // Address @@ -279,9 +363,11 @@ module nanosoc_target_output_EXP ( wire req_port1; // Port 1 request signal wire req_port2; // Port 2 request signal wire req_port3; // Port 3 request signal + wire req_port4; // Port 4 request signal + wire req_port5; // Port 5 request signal - wire [1:0] addr_in_port; // Address input port - reg [1:0] data_in_port; // Data input port + wire [2:0] addr_in_port; // Address input port + reg [2:0] data_in_port; // Data input port wire no_port; // No port selected signal reg slave_sel; // Slave select signal reg wdata_phase; // Used to prevent unnecesary toggling @@ -309,6 +395,8 @@ module nanosoc_target_output_EXP ( assign req_port1 = held_tran_op1 & sel_op1; assign req_port2 = held_tran_op2 & sel_op2; assign req_port3 = held_tran_op3 & sel_op3; + assign req_port4 = held_tran_op4 & sel_op4; + assign req_port5 = held_tran_op5 & sel_op5; // Arbiter instance for resolving requests to this output stage nanosoc_arbiter_EXP u_output_arb ( @@ -320,6 +408,8 @@ module nanosoc_target_output_EXP ( .req_port1 (req_port1), .req_port2 (req_port2), .req_port3 (req_port3), + .req_port4 (req_port4), + .req_port5 (req_port5), .HREADYM (i_hreadymuxm), .HSELM (i_hselm), @@ -341,19 +431,25 @@ module nanosoc_target_output_EXP ( active_op1 = 1'b0; active_op2 = 1'b0; active_op3 = 1'b0; + active_op4 = 1'b0; + active_op5 = 1'b0; // Decode selection when enabled if (~no_port) case (addr_in_port) - 2'b00 : active_op0 = 1'b1; - 2'b01 : active_op1 = 1'b1; - 2'b10 : active_op2 = 1'b1; - 2'b11 : active_op3 = 1'b1; + 3'b000 : active_op0 = 1'b1; + 3'b001 : active_op1 = 1'b1; + 3'b010 : active_op2 = 1'b1; + 3'b011 : active_op3 = 1'b1; + 3'b100 : active_op4 = 1'b1; + 3'b101 : active_op5 = 1'b1; default : begin active_op0 = 1'bx; active_op1 = 1'bx; active_op2 = 1'bx; active_op3 = 1'bx; + active_op4 = 1'bx; + active_op5 = 1'bx; end endcase // case(addr_in_port) end // block: p_active_comb @@ -373,6 +469,12 @@ module nanosoc_target_output_EXP ( sel_op3 or addr_op3 or trans_op3 or write_op3 or size_op3 or burst_op3 or prot_op3 or master_op3 or mastlock_op3 or + sel_op4 or addr_op4 or trans_op4 or write_op4 or + size_op4 or burst_op4 or prot_op4 or + master_op4 or mastlock_op4 or + sel_op5 or addr_op5 or trans_op5 or write_op5 or + size_op5 or burst_op5 or prot_op5 or + master_op5 or mastlock_op5 or addr_in_port or no_port ) begin : p_addr_mux @@ -391,7 +493,7 @@ module nanosoc_target_output_EXP ( if (~no_port) case (addr_in_port) // Bus-switch input 0 - 2'b00 : + 3'b000 : begin i_hselm = sel_op0; HADDRM = addr_op0; @@ -402,10 +504,10 @@ module nanosoc_target_output_EXP ( HPROTM = prot_op0; HMASTERM = master_op0; i_hmastlockm= mastlock_op0; - end // case: 4'b00 + end // case: 4'b000 // Bus-switch input 1 - 2'b01 : + 3'b001 : begin i_hselm = sel_op1; HADDRM = addr_op1; @@ -416,10 +518,10 @@ module nanosoc_target_output_EXP ( HPROTM = prot_op1; HMASTERM = master_op1; i_hmastlockm= mastlock_op1; - end // case: 4'b01 + end // case: 4'b001 // Bus-switch input 2 - 2'b10 : + 3'b010 : begin i_hselm = sel_op2; HADDRM = addr_op2; @@ -430,10 +532,10 @@ module nanosoc_target_output_EXP ( HPROTM = prot_op2; HMASTERM = master_op2; i_hmastlockm= mastlock_op2; - end // case: 4'b10 + end // case: 4'b010 // Bus-switch input 3 - 2'b11 : + 3'b011 : begin i_hselm = sel_op3; HADDRM = addr_op3; @@ -444,7 +546,35 @@ module nanosoc_target_output_EXP ( HPROTM = prot_op3; HMASTERM = master_op3; i_hmastlockm= mastlock_op3; - end // case: 4'b11 + end // case: 4'b011 + + // Bus-switch input 4 + 3'b100 : + begin + i_hselm = sel_op4; + HADDRM = addr_op4; + i_htransm = trans_op4; + HWRITEM = write_op4; + HSIZEM = size_op4; + i_hburstm = burst_op4; + HPROTM = prot_op4; + HMASTERM = master_op4; + i_hmastlockm= mastlock_op4; + end // case: 4'b100 + + // Bus-switch input 5 + 3'b101 : + begin + i_hselm = sel_op5; + HADDRM = addr_op5; + i_htransm = trans_op5; + HWRITEM = write_op5; + HSIZEM = size_op5; + i_hburstm = burst_op5; + HPROTM = prot_op5; + HMASTERM = master_op5; + i_hmastlockm= mastlock_op5; + end // case: 4'b101 default : begin @@ -494,7 +624,7 @@ module nanosoc_target_output_EXP ( always @ (negedge HRESETn or posedge HCLK) begin : p_data_in_port_reg if (~HRESETn) - data_in_port <= 2'b11; + data_in_port <= 3'b101; else if (i_hreadymuxm) data_in_port <= addr_in_port; @@ -517,6 +647,8 @@ module nanosoc_target_output_EXP ( wdata_op1 or wdata_op2 or wdata_op3 or + wdata_op4 or + wdata_op5 or data_in_port or wdata_phase ) begin : p_data_mux @@ -527,10 +659,12 @@ module nanosoc_target_output_EXP ( if (wdata_phase) // Decode selection case (data_in_port) - 2'b00 : HWDATAM = wdata_op0; - 2'b01 : HWDATAM = wdata_op1; - 2'b10 : HWDATAM = wdata_op2; - 2'b11 : HWDATAM = wdata_op3; + 3'b000 : HWDATAM = wdata_op0; + 3'b001 : HWDATAM = wdata_op1; + 3'b010 : HWDATAM = wdata_op2; + 3'b011 : HWDATAM = wdata_op3; + 3'b100 : HWDATAM = wdata_op4; + 3'b101 : HWDATAM = wdata_op5; default : HWDATAM = {32{1'bx}}; endcase // case(data_in_port) end // block: p_data_mux diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_EXPRAM_H.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_EXPRAM_H.v index fa9842d..3107184 100644 --- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_EXPRAM_H.v +++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_EXPRAM_H.v @@ -3,7 +3,7 @@ // only be used by a person authorised under and to the extent permitted // by a subsisting licensing agreement from Arm Limited or its affiliates. // -// (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates. +// (C) COPYRIGHT 2001-2024 Arm Limited or its affiliates. // ALL RIGHTS RESERVED // // This entire notice must be reproduced on all copies of this file @@ -90,6 +90,32 @@ module nanosoc_target_output_EXPRAM_H ( wdata_op3, held_tran_op3, + // Port 4 Signals + sel_op4, + addr_op4, + trans_op4, + write_op4, + size_op4, + burst_op4, + prot_op4, + master_op4, + mastlock_op4, + wdata_op4, + held_tran_op4, + + // Port 5 Signals + sel_op5, + addr_op5, + trans_op5, + write_op5, + size_op5, + burst_op5, + prot_op5, + master_op5, + mastlock_op5, + wdata_op5, + held_tran_op5, + // Slave read data and response HREADYOUTM, @@ -97,6 +123,8 @@ module nanosoc_target_output_EXPRAM_H ( active_op1, active_op2, active_op3, + active_op4, + active_op5, // Slave Address/Control Signals HSELM, @@ -174,12 +202,40 @@ module nanosoc_target_output_EXPRAM_H ( input [31:0] wdata_op3; // Port 3 HWDATA signal input held_tran_op3; // Port 3 HeldTran signal + // Bus-switch input 4 + input sel_op4; // Port 4 HSEL signal + input [31:0] addr_op4; // Port 4 HADDR signal + input [1:0] trans_op4; // Port 4 HTRANS signal + input write_op4; // Port 4 HWRITE signal + input [2:0] size_op4; // Port 4 HSIZE signal + input [2:0] burst_op4; // Port 4 HBURST signal + input [3:0] prot_op4; // Port 4 HPROT signal + input [3:0] master_op4; // Port 4 HMASTER signal + input mastlock_op4; // Port 4 HMASTLOCK signal + input [31:0] wdata_op4; // Port 4 HWDATA signal + input held_tran_op4; // Port 4 HeldTran signal + + // Bus-switch input 5 + input sel_op5; // Port 5 HSEL signal + input [31:0] addr_op5; // Port 5 HADDR signal + input [1:0] trans_op5; // Port 5 HTRANS signal + input write_op5; // Port 5 HWRITE signal + input [2:0] size_op5; // Port 5 HSIZE signal + input [2:0] burst_op5; // Port 5 HBURST signal + input [3:0] prot_op5; // Port 5 HPROT signal + input [3:0] master_op5; // Port 5 HMASTER signal + input mastlock_op5; // Port 5 HMASTLOCK signal + input [31:0] wdata_op5; // Port 5 HWDATA signal + input held_tran_op5; // Port 5 HeldTran signal + input HREADYOUTM; // HREADY feedback output active_op0; // Port 0 Active signal output active_op1; // Port 1 Active signal output active_op2; // Port 2 Active signal output active_op3; // Port 3 Active signal + output active_op4; // Port 4 Active signal + output active_op5; // Port 5 Active signal // Slave Address/Control Signals output HSELM; // Slave select line @@ -257,6 +313,34 @@ module nanosoc_target_output_EXPRAM_H ( wire held_tran_op3; // Port 3 HeldTran signal reg active_op3; // Port 3 Active signal + // Bus-switch input 4 + wire sel_op4; // Port 4 HSEL signal + wire [31:0] addr_op4; // Port 4 HADDR signal + wire [1:0] trans_op4; // Port 4 HTRANS signal + wire write_op4; // Port 4 HWRITE signal + wire [2:0] size_op4; // Port 4 HSIZE signal + wire [2:0] burst_op4; // Port 4 HBURST signal + wire [3:0] prot_op4; // Port 4 HPROT signal + wire [3:0] master_op4; // Port 4 HMASTER signal + wire mastlock_op4; // Port 4 HMASTLOCK signal + wire [31:0] wdata_op4; // Port 4 HWDATA signal + wire held_tran_op4; // Port 4 HeldTran signal + reg active_op4; // Port 4 Active signal + + // Bus-switch input 5 + wire sel_op5; // Port 5 HSEL signal + wire [31:0] addr_op5; // Port 5 HADDR signal + wire [1:0] trans_op5; // Port 5 HTRANS signal + wire write_op5; // Port 5 HWRITE signal + wire [2:0] size_op5; // Port 5 HSIZE signal + wire [2:0] burst_op5; // Port 5 HBURST signal + wire [3:0] prot_op5; // Port 5 HPROT signal + wire [3:0] master_op5; // Port 5 HMASTER signal + wire mastlock_op5; // Port 5 HMASTLOCK signal + wire [31:0] wdata_op5; // Port 5 HWDATA signal + wire held_tran_op5; // Port 5 HeldTran signal + reg active_op5; // Port 5 Active signal + // Slave Address/Control Signals wire HSELM; // Slave select line reg [31:0] HADDRM; // Address @@ -279,9 +363,11 @@ module nanosoc_target_output_EXPRAM_H ( wire req_port1; // Port 1 request signal wire req_port2; // Port 2 request signal wire req_port3; // Port 3 request signal + wire req_port4; // Port 4 request signal + wire req_port5; // Port 5 request signal - wire [1:0] addr_in_port; // Address input port - reg [1:0] data_in_port; // Data input port + wire [2:0] addr_in_port; // Address input port + reg [2:0] data_in_port; // Data input port wire no_port; // No port selected signal reg slave_sel; // Slave select signal reg wdata_phase; // Used to prevent unnecesary toggling @@ -309,6 +395,8 @@ module nanosoc_target_output_EXPRAM_H ( assign req_port1 = held_tran_op1 & sel_op1; assign req_port2 = held_tran_op2 & sel_op2; assign req_port3 = held_tran_op3 & sel_op3; + assign req_port4 = held_tran_op4 & sel_op4; + assign req_port5 = held_tran_op5 & sel_op5; // Arbiter instance for resolving requests to this output stage nanosoc_arbiter_EXPRAM_H u_output_arb ( @@ -320,6 +408,8 @@ module nanosoc_target_output_EXPRAM_H ( .req_port1 (req_port1), .req_port2 (req_port2), .req_port3 (req_port3), + .req_port4 (req_port4), + .req_port5 (req_port5), .HREADYM (i_hreadymuxm), .HSELM (i_hselm), @@ -341,19 +431,25 @@ module nanosoc_target_output_EXPRAM_H ( active_op1 = 1'b0; active_op2 = 1'b0; active_op3 = 1'b0; + active_op4 = 1'b0; + active_op5 = 1'b0; // Decode selection when enabled if (~no_port) case (addr_in_port) - 2'b00 : active_op0 = 1'b1; - 2'b01 : active_op1 = 1'b1; - 2'b10 : active_op2 = 1'b1; - 2'b11 : active_op3 = 1'b1; + 3'b000 : active_op0 = 1'b1; + 3'b001 : active_op1 = 1'b1; + 3'b010 : active_op2 = 1'b1; + 3'b011 : active_op3 = 1'b1; + 3'b100 : active_op4 = 1'b1; + 3'b101 : active_op5 = 1'b1; default : begin active_op0 = 1'bx; active_op1 = 1'bx; active_op2 = 1'bx; active_op3 = 1'bx; + active_op4 = 1'bx; + active_op5 = 1'bx; end endcase // case(addr_in_port) end // block: p_active_comb @@ -373,6 +469,12 @@ module nanosoc_target_output_EXPRAM_H ( sel_op3 or addr_op3 or trans_op3 or write_op3 or size_op3 or burst_op3 or prot_op3 or master_op3 or mastlock_op3 or + sel_op4 or addr_op4 or trans_op4 or write_op4 or + size_op4 or burst_op4 or prot_op4 or + master_op4 or mastlock_op4 or + sel_op5 or addr_op5 or trans_op5 or write_op5 or + size_op5 or burst_op5 or prot_op5 or + master_op5 or mastlock_op5 or addr_in_port or no_port ) begin : p_addr_mux @@ -391,7 +493,7 @@ module nanosoc_target_output_EXPRAM_H ( if (~no_port) case (addr_in_port) // Bus-switch input 0 - 2'b00 : + 3'b000 : begin i_hselm = sel_op0; HADDRM = addr_op0; @@ -402,10 +504,10 @@ module nanosoc_target_output_EXPRAM_H ( HPROTM = prot_op0; HMASTERM = master_op0; i_hmastlockm= mastlock_op0; - end // case: 4'b00 + end // case: 4'b000 // Bus-switch input 1 - 2'b01 : + 3'b001 : begin i_hselm = sel_op1; HADDRM = addr_op1; @@ -416,10 +518,10 @@ module nanosoc_target_output_EXPRAM_H ( HPROTM = prot_op1; HMASTERM = master_op1; i_hmastlockm= mastlock_op1; - end // case: 4'b01 + end // case: 4'b001 // Bus-switch input 2 - 2'b10 : + 3'b010 : begin i_hselm = sel_op2; HADDRM = addr_op2; @@ -430,10 +532,10 @@ module nanosoc_target_output_EXPRAM_H ( HPROTM = prot_op2; HMASTERM = master_op2; i_hmastlockm= mastlock_op2; - end // case: 4'b10 + end // case: 4'b010 // Bus-switch input 3 - 2'b11 : + 3'b011 : begin i_hselm = sel_op3; HADDRM = addr_op3; @@ -444,7 +546,35 @@ module nanosoc_target_output_EXPRAM_H ( HPROTM = prot_op3; HMASTERM = master_op3; i_hmastlockm= mastlock_op3; - end // case: 4'b11 + end // case: 4'b011 + + // Bus-switch input 4 + 3'b100 : + begin + i_hselm = sel_op4; + HADDRM = addr_op4; + i_htransm = trans_op4; + HWRITEM = write_op4; + HSIZEM = size_op4; + i_hburstm = burst_op4; + HPROTM = prot_op4; + HMASTERM = master_op4; + i_hmastlockm= mastlock_op4; + end // case: 4'b100 + + // Bus-switch input 5 + 3'b101 : + begin + i_hselm = sel_op5; + HADDRM = addr_op5; + i_htransm = trans_op5; + HWRITEM = write_op5; + HSIZEM = size_op5; + i_hburstm = burst_op5; + HPROTM = prot_op5; + HMASTERM = master_op5; + i_hmastlockm= mastlock_op5; + end // case: 4'b101 default : begin @@ -494,7 +624,7 @@ module nanosoc_target_output_EXPRAM_H ( always @ (negedge HRESETn or posedge HCLK) begin : p_data_in_port_reg if (~HRESETn) - data_in_port <= 2'b11; + data_in_port <= 3'b101; else if (i_hreadymuxm) data_in_port <= addr_in_port; @@ -517,6 +647,8 @@ module nanosoc_target_output_EXPRAM_H ( wdata_op1 or wdata_op2 or wdata_op3 or + wdata_op4 or + wdata_op5 or data_in_port or wdata_phase ) begin : p_data_mux @@ -527,10 +659,12 @@ module nanosoc_target_output_EXPRAM_H ( if (wdata_phase) // Decode selection case (data_in_port) - 2'b00 : HWDATAM = wdata_op0; - 2'b01 : HWDATAM = wdata_op1; - 2'b10 : HWDATAM = wdata_op2; - 2'b11 : HWDATAM = wdata_op3; + 3'b000 : HWDATAM = wdata_op0; + 3'b001 : HWDATAM = wdata_op1; + 3'b010 : HWDATAM = wdata_op2; + 3'b011 : HWDATAM = wdata_op3; + 3'b100 : HWDATAM = wdata_op4; + 3'b101 : HWDATAM = wdata_op5; default : HWDATAM = {32{1'bx}}; endcase // case(data_in_port) end // block: p_data_mux diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_EXPRAM_L.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_EXPRAM_L.v index d772da2..e892138 100644 --- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_EXPRAM_L.v +++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_EXPRAM_L.v @@ -3,7 +3,7 @@ // only be used by a person authorised under and to the extent permitted // by a subsisting licensing agreement from Arm Limited or its affiliates. // -// (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates. +// (C) COPYRIGHT 2001-2024 Arm Limited or its affiliates. // ALL RIGHTS RESERVED // // This entire notice must be reproduced on all copies of this file @@ -90,6 +90,32 @@ module nanosoc_target_output_EXPRAM_L ( wdata_op3, held_tran_op3, + // Port 4 Signals + sel_op4, + addr_op4, + trans_op4, + write_op4, + size_op4, + burst_op4, + prot_op4, + master_op4, + mastlock_op4, + wdata_op4, + held_tran_op4, + + // Port 5 Signals + sel_op5, + addr_op5, + trans_op5, + write_op5, + size_op5, + burst_op5, + prot_op5, + master_op5, + mastlock_op5, + wdata_op5, + held_tran_op5, + // Slave read data and response HREADYOUTM, @@ -97,6 +123,8 @@ module nanosoc_target_output_EXPRAM_L ( active_op1, active_op2, active_op3, + active_op4, + active_op5, // Slave Address/Control Signals HSELM, @@ -174,12 +202,40 @@ module nanosoc_target_output_EXPRAM_L ( input [31:0] wdata_op3; // Port 3 HWDATA signal input held_tran_op3; // Port 3 HeldTran signal + // Bus-switch input 4 + input sel_op4; // Port 4 HSEL signal + input [31:0] addr_op4; // Port 4 HADDR signal + input [1:0] trans_op4; // Port 4 HTRANS signal + input write_op4; // Port 4 HWRITE signal + input [2:0] size_op4; // Port 4 HSIZE signal + input [2:0] burst_op4; // Port 4 HBURST signal + input [3:0] prot_op4; // Port 4 HPROT signal + input [3:0] master_op4; // Port 4 HMASTER signal + input mastlock_op4; // Port 4 HMASTLOCK signal + input [31:0] wdata_op4; // Port 4 HWDATA signal + input held_tran_op4; // Port 4 HeldTran signal + + // Bus-switch input 5 + input sel_op5; // Port 5 HSEL signal + input [31:0] addr_op5; // Port 5 HADDR signal + input [1:0] trans_op5; // Port 5 HTRANS signal + input write_op5; // Port 5 HWRITE signal + input [2:0] size_op5; // Port 5 HSIZE signal + input [2:0] burst_op5; // Port 5 HBURST signal + input [3:0] prot_op5; // Port 5 HPROT signal + input [3:0] master_op5; // Port 5 HMASTER signal + input mastlock_op5; // Port 5 HMASTLOCK signal + input [31:0] wdata_op5; // Port 5 HWDATA signal + input held_tran_op5; // Port 5 HeldTran signal + input HREADYOUTM; // HREADY feedback output active_op0; // Port 0 Active signal output active_op1; // Port 1 Active signal output active_op2; // Port 2 Active signal output active_op3; // Port 3 Active signal + output active_op4; // Port 4 Active signal + output active_op5; // Port 5 Active signal // Slave Address/Control Signals output HSELM; // Slave select line @@ -257,6 +313,34 @@ module nanosoc_target_output_EXPRAM_L ( wire held_tran_op3; // Port 3 HeldTran signal reg active_op3; // Port 3 Active signal + // Bus-switch input 4 + wire sel_op4; // Port 4 HSEL signal + wire [31:0] addr_op4; // Port 4 HADDR signal + wire [1:0] trans_op4; // Port 4 HTRANS signal + wire write_op4; // Port 4 HWRITE signal + wire [2:0] size_op4; // Port 4 HSIZE signal + wire [2:0] burst_op4; // Port 4 HBURST signal + wire [3:0] prot_op4; // Port 4 HPROT signal + wire [3:0] master_op4; // Port 4 HMASTER signal + wire mastlock_op4; // Port 4 HMASTLOCK signal + wire [31:0] wdata_op4; // Port 4 HWDATA signal + wire held_tran_op4; // Port 4 HeldTran signal + reg active_op4; // Port 4 Active signal + + // Bus-switch input 5 + wire sel_op5; // Port 5 HSEL signal + wire [31:0] addr_op5; // Port 5 HADDR signal + wire [1:0] trans_op5; // Port 5 HTRANS signal + wire write_op5; // Port 5 HWRITE signal + wire [2:0] size_op5; // Port 5 HSIZE signal + wire [2:0] burst_op5; // Port 5 HBURST signal + wire [3:0] prot_op5; // Port 5 HPROT signal + wire [3:0] master_op5; // Port 5 HMASTER signal + wire mastlock_op5; // Port 5 HMASTLOCK signal + wire [31:0] wdata_op5; // Port 5 HWDATA signal + wire held_tran_op5; // Port 5 HeldTran signal + reg active_op5; // Port 5 Active signal + // Slave Address/Control Signals wire HSELM; // Slave select line reg [31:0] HADDRM; // Address @@ -279,9 +363,11 @@ module nanosoc_target_output_EXPRAM_L ( wire req_port1; // Port 1 request signal wire req_port2; // Port 2 request signal wire req_port3; // Port 3 request signal + wire req_port4; // Port 4 request signal + wire req_port5; // Port 5 request signal - wire [1:0] addr_in_port; // Address input port - reg [1:0] data_in_port; // Data input port + wire [2:0] addr_in_port; // Address input port + reg [2:0] data_in_port; // Data input port wire no_port; // No port selected signal reg slave_sel; // Slave select signal reg wdata_phase; // Used to prevent unnecesary toggling @@ -309,6 +395,8 @@ module nanosoc_target_output_EXPRAM_L ( assign req_port1 = held_tran_op1 & sel_op1; assign req_port2 = held_tran_op2 & sel_op2; assign req_port3 = held_tran_op3 & sel_op3; + assign req_port4 = held_tran_op4 & sel_op4; + assign req_port5 = held_tran_op5 & sel_op5; // Arbiter instance for resolving requests to this output stage nanosoc_arbiter_EXPRAM_L u_output_arb ( @@ -320,6 +408,8 @@ module nanosoc_target_output_EXPRAM_L ( .req_port1 (req_port1), .req_port2 (req_port2), .req_port3 (req_port3), + .req_port4 (req_port4), + .req_port5 (req_port5), .HREADYM (i_hreadymuxm), .HSELM (i_hselm), @@ -341,19 +431,25 @@ module nanosoc_target_output_EXPRAM_L ( active_op1 = 1'b0; active_op2 = 1'b0; active_op3 = 1'b0; + active_op4 = 1'b0; + active_op5 = 1'b0; // Decode selection when enabled if (~no_port) case (addr_in_port) - 2'b00 : active_op0 = 1'b1; - 2'b01 : active_op1 = 1'b1; - 2'b10 : active_op2 = 1'b1; - 2'b11 : active_op3 = 1'b1; + 3'b000 : active_op0 = 1'b1; + 3'b001 : active_op1 = 1'b1; + 3'b010 : active_op2 = 1'b1; + 3'b011 : active_op3 = 1'b1; + 3'b100 : active_op4 = 1'b1; + 3'b101 : active_op5 = 1'b1; default : begin active_op0 = 1'bx; active_op1 = 1'bx; active_op2 = 1'bx; active_op3 = 1'bx; + active_op4 = 1'bx; + active_op5 = 1'bx; end endcase // case(addr_in_port) end // block: p_active_comb @@ -373,6 +469,12 @@ module nanosoc_target_output_EXPRAM_L ( sel_op3 or addr_op3 or trans_op3 or write_op3 or size_op3 or burst_op3 or prot_op3 or master_op3 or mastlock_op3 or + sel_op4 or addr_op4 or trans_op4 or write_op4 or + size_op4 or burst_op4 or prot_op4 or + master_op4 or mastlock_op4 or + sel_op5 or addr_op5 or trans_op5 or write_op5 or + size_op5 or burst_op5 or prot_op5 or + master_op5 or mastlock_op5 or addr_in_port or no_port ) begin : p_addr_mux @@ -391,7 +493,7 @@ module nanosoc_target_output_EXPRAM_L ( if (~no_port) case (addr_in_port) // Bus-switch input 0 - 2'b00 : + 3'b000 : begin i_hselm = sel_op0; HADDRM = addr_op0; @@ -402,10 +504,10 @@ module nanosoc_target_output_EXPRAM_L ( HPROTM = prot_op0; HMASTERM = master_op0; i_hmastlockm= mastlock_op0; - end // case: 4'b00 + end // case: 4'b000 // Bus-switch input 1 - 2'b01 : + 3'b001 : begin i_hselm = sel_op1; HADDRM = addr_op1; @@ -416,10 +518,10 @@ module nanosoc_target_output_EXPRAM_L ( HPROTM = prot_op1; HMASTERM = master_op1; i_hmastlockm= mastlock_op1; - end // case: 4'b01 + end // case: 4'b001 // Bus-switch input 2 - 2'b10 : + 3'b010 : begin i_hselm = sel_op2; HADDRM = addr_op2; @@ -430,10 +532,10 @@ module nanosoc_target_output_EXPRAM_L ( HPROTM = prot_op2; HMASTERM = master_op2; i_hmastlockm= mastlock_op2; - end // case: 4'b10 + end // case: 4'b010 // Bus-switch input 3 - 2'b11 : + 3'b011 : begin i_hselm = sel_op3; HADDRM = addr_op3; @@ -444,7 +546,35 @@ module nanosoc_target_output_EXPRAM_L ( HPROTM = prot_op3; HMASTERM = master_op3; i_hmastlockm= mastlock_op3; - end // case: 4'b11 + end // case: 4'b011 + + // Bus-switch input 4 + 3'b100 : + begin + i_hselm = sel_op4; + HADDRM = addr_op4; + i_htransm = trans_op4; + HWRITEM = write_op4; + HSIZEM = size_op4; + i_hburstm = burst_op4; + HPROTM = prot_op4; + HMASTERM = master_op4; + i_hmastlockm= mastlock_op4; + end // case: 4'b100 + + // Bus-switch input 5 + 3'b101 : + begin + i_hselm = sel_op5; + HADDRM = addr_op5; + i_htransm = trans_op5; + HWRITEM = write_op5; + HSIZEM = size_op5; + i_hburstm = burst_op5; + HPROTM = prot_op5; + HMASTERM = master_op5; + i_hmastlockm= mastlock_op5; + end // case: 4'b101 default : begin @@ -494,7 +624,7 @@ module nanosoc_target_output_EXPRAM_L ( always @ (negedge HRESETn or posedge HCLK) begin : p_data_in_port_reg if (~HRESETn) - data_in_port <= 2'b11; + data_in_port <= 3'b101; else if (i_hreadymuxm) data_in_port <= addr_in_port; @@ -517,6 +647,8 @@ module nanosoc_target_output_EXPRAM_L ( wdata_op1 or wdata_op2 or wdata_op3 or + wdata_op4 or + wdata_op5 or data_in_port or wdata_phase ) begin : p_data_mux @@ -527,10 +659,12 @@ module nanosoc_target_output_EXPRAM_L ( if (wdata_phase) // Decode selection case (data_in_port) - 2'b00 : HWDATAM = wdata_op0; - 2'b01 : HWDATAM = wdata_op1; - 2'b10 : HWDATAM = wdata_op2; - 2'b11 : HWDATAM = wdata_op3; + 3'b000 : HWDATAM = wdata_op0; + 3'b001 : HWDATAM = wdata_op1; + 3'b010 : HWDATAM = wdata_op2; + 3'b011 : HWDATAM = wdata_op3; + 3'b100 : HWDATAM = wdata_op4; + 3'b101 : HWDATAM = wdata_op5; default : HWDATAM = {32{1'bx}}; endcase // case(data_in_port) end // block: p_data_mux diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_IMEM_0.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_IMEM_0.v index b369f49..e02a949 100644 --- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_IMEM_0.v +++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_IMEM_0.v @@ -3,7 +3,7 @@ // only be used by a person authorised under and to the extent permitted // by a subsisting licensing agreement from Arm Limited or its affiliates. // -// (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates. +// (C) COPYRIGHT 2001-2024 Arm Limited or its affiliates. // ALL RIGHTS RESERVED // // This entire notice must be reproduced on all copies of this file @@ -90,6 +90,32 @@ module nanosoc_target_output_IMEM_0 ( wdata_op3, held_tran_op3, + // Port 4 Signals + sel_op4, + addr_op4, + trans_op4, + write_op4, + size_op4, + burst_op4, + prot_op4, + master_op4, + mastlock_op4, + wdata_op4, + held_tran_op4, + + // Port 5 Signals + sel_op5, + addr_op5, + trans_op5, + write_op5, + size_op5, + burst_op5, + prot_op5, + master_op5, + mastlock_op5, + wdata_op5, + held_tran_op5, + // Slave read data and response HREADYOUTM, @@ -97,6 +123,8 @@ module nanosoc_target_output_IMEM_0 ( active_op1, active_op2, active_op3, + active_op4, + active_op5, // Slave Address/Control Signals HSELM, @@ -174,12 +202,40 @@ module nanosoc_target_output_IMEM_0 ( input [31:0] wdata_op3; // Port 3 HWDATA signal input held_tran_op3; // Port 3 HeldTran signal + // Bus-switch input 4 + input sel_op4; // Port 4 HSEL signal + input [31:0] addr_op4; // Port 4 HADDR signal + input [1:0] trans_op4; // Port 4 HTRANS signal + input write_op4; // Port 4 HWRITE signal + input [2:0] size_op4; // Port 4 HSIZE signal + input [2:0] burst_op4; // Port 4 HBURST signal + input [3:0] prot_op4; // Port 4 HPROT signal + input [3:0] master_op4; // Port 4 HMASTER signal + input mastlock_op4; // Port 4 HMASTLOCK signal + input [31:0] wdata_op4; // Port 4 HWDATA signal + input held_tran_op4; // Port 4 HeldTran signal + + // Bus-switch input 5 + input sel_op5; // Port 5 HSEL signal + input [31:0] addr_op5; // Port 5 HADDR signal + input [1:0] trans_op5; // Port 5 HTRANS signal + input write_op5; // Port 5 HWRITE signal + input [2:0] size_op5; // Port 5 HSIZE signal + input [2:0] burst_op5; // Port 5 HBURST signal + input [3:0] prot_op5; // Port 5 HPROT signal + input [3:0] master_op5; // Port 5 HMASTER signal + input mastlock_op5; // Port 5 HMASTLOCK signal + input [31:0] wdata_op5; // Port 5 HWDATA signal + input held_tran_op5; // Port 5 HeldTran signal + input HREADYOUTM; // HREADY feedback output active_op0; // Port 0 Active signal output active_op1; // Port 1 Active signal output active_op2; // Port 2 Active signal output active_op3; // Port 3 Active signal + output active_op4; // Port 4 Active signal + output active_op5; // Port 5 Active signal // Slave Address/Control Signals output HSELM; // Slave select line @@ -257,6 +313,34 @@ module nanosoc_target_output_IMEM_0 ( wire held_tran_op3; // Port 3 HeldTran signal reg active_op3; // Port 3 Active signal + // Bus-switch input 4 + wire sel_op4; // Port 4 HSEL signal + wire [31:0] addr_op4; // Port 4 HADDR signal + wire [1:0] trans_op4; // Port 4 HTRANS signal + wire write_op4; // Port 4 HWRITE signal + wire [2:0] size_op4; // Port 4 HSIZE signal + wire [2:0] burst_op4; // Port 4 HBURST signal + wire [3:0] prot_op4; // Port 4 HPROT signal + wire [3:0] master_op4; // Port 4 HMASTER signal + wire mastlock_op4; // Port 4 HMASTLOCK signal + wire [31:0] wdata_op4; // Port 4 HWDATA signal + wire held_tran_op4; // Port 4 HeldTran signal + reg active_op4; // Port 4 Active signal + + // Bus-switch input 5 + wire sel_op5; // Port 5 HSEL signal + wire [31:0] addr_op5; // Port 5 HADDR signal + wire [1:0] trans_op5; // Port 5 HTRANS signal + wire write_op5; // Port 5 HWRITE signal + wire [2:0] size_op5; // Port 5 HSIZE signal + wire [2:0] burst_op5; // Port 5 HBURST signal + wire [3:0] prot_op5; // Port 5 HPROT signal + wire [3:0] master_op5; // Port 5 HMASTER signal + wire mastlock_op5; // Port 5 HMASTLOCK signal + wire [31:0] wdata_op5; // Port 5 HWDATA signal + wire held_tran_op5; // Port 5 HeldTran signal + reg active_op5; // Port 5 Active signal + // Slave Address/Control Signals wire HSELM; // Slave select line reg [31:0] HADDRM; // Address @@ -279,9 +363,11 @@ module nanosoc_target_output_IMEM_0 ( wire req_port1; // Port 1 request signal wire req_port2; // Port 2 request signal wire req_port3; // Port 3 request signal + wire req_port4; // Port 4 request signal + wire req_port5; // Port 5 request signal - wire [1:0] addr_in_port; // Address input port - reg [1:0] data_in_port; // Data input port + wire [2:0] addr_in_port; // Address input port + reg [2:0] data_in_port; // Data input port wire no_port; // No port selected signal reg slave_sel; // Slave select signal reg wdata_phase; // Used to prevent unnecesary toggling @@ -309,6 +395,8 @@ module nanosoc_target_output_IMEM_0 ( assign req_port1 = held_tran_op1 & sel_op1; assign req_port2 = held_tran_op2 & sel_op2; assign req_port3 = held_tran_op3 & sel_op3; + assign req_port4 = held_tran_op4 & sel_op4; + assign req_port5 = held_tran_op5 & sel_op5; // Arbiter instance for resolving requests to this output stage nanosoc_arbiter_IMEM_0 u_output_arb ( @@ -320,6 +408,8 @@ module nanosoc_target_output_IMEM_0 ( .req_port1 (req_port1), .req_port2 (req_port2), .req_port3 (req_port3), + .req_port4 (req_port4), + .req_port5 (req_port5), .HREADYM (i_hreadymuxm), .HSELM (i_hselm), @@ -341,19 +431,25 @@ module nanosoc_target_output_IMEM_0 ( active_op1 = 1'b0; active_op2 = 1'b0; active_op3 = 1'b0; + active_op4 = 1'b0; + active_op5 = 1'b0; // Decode selection when enabled if (~no_port) case (addr_in_port) - 2'b00 : active_op0 = 1'b1; - 2'b01 : active_op1 = 1'b1; - 2'b10 : active_op2 = 1'b1; - 2'b11 : active_op3 = 1'b1; + 3'b000 : active_op0 = 1'b1; + 3'b001 : active_op1 = 1'b1; + 3'b010 : active_op2 = 1'b1; + 3'b011 : active_op3 = 1'b1; + 3'b100 : active_op4 = 1'b1; + 3'b101 : active_op5 = 1'b1; default : begin active_op0 = 1'bx; active_op1 = 1'bx; active_op2 = 1'bx; active_op3 = 1'bx; + active_op4 = 1'bx; + active_op5 = 1'bx; end endcase // case(addr_in_port) end // block: p_active_comb @@ -373,6 +469,12 @@ module nanosoc_target_output_IMEM_0 ( sel_op3 or addr_op3 or trans_op3 or write_op3 or size_op3 or burst_op3 or prot_op3 or master_op3 or mastlock_op3 or + sel_op4 or addr_op4 or trans_op4 or write_op4 or + size_op4 or burst_op4 or prot_op4 or + master_op4 or mastlock_op4 or + sel_op5 or addr_op5 or trans_op5 or write_op5 or + size_op5 or burst_op5 or prot_op5 or + master_op5 or mastlock_op5 or addr_in_port or no_port ) begin : p_addr_mux @@ -391,7 +493,7 @@ module nanosoc_target_output_IMEM_0 ( if (~no_port) case (addr_in_port) // Bus-switch input 0 - 2'b00 : + 3'b000 : begin i_hselm = sel_op0; HADDRM = addr_op0; @@ -402,10 +504,10 @@ module nanosoc_target_output_IMEM_0 ( HPROTM = prot_op0; HMASTERM = master_op0; i_hmastlockm= mastlock_op0; - end // case: 4'b00 + end // case: 4'b000 // Bus-switch input 1 - 2'b01 : + 3'b001 : begin i_hselm = sel_op1; HADDRM = addr_op1; @@ -416,10 +518,10 @@ module nanosoc_target_output_IMEM_0 ( HPROTM = prot_op1; HMASTERM = master_op1; i_hmastlockm= mastlock_op1; - end // case: 4'b01 + end // case: 4'b001 // Bus-switch input 2 - 2'b10 : + 3'b010 : begin i_hselm = sel_op2; HADDRM = addr_op2; @@ -430,10 +532,10 @@ module nanosoc_target_output_IMEM_0 ( HPROTM = prot_op2; HMASTERM = master_op2; i_hmastlockm= mastlock_op2; - end // case: 4'b10 + end // case: 4'b010 // Bus-switch input 3 - 2'b11 : + 3'b011 : begin i_hselm = sel_op3; HADDRM = addr_op3; @@ -444,7 +546,35 @@ module nanosoc_target_output_IMEM_0 ( HPROTM = prot_op3; HMASTERM = master_op3; i_hmastlockm= mastlock_op3; - end // case: 4'b11 + end // case: 4'b011 + + // Bus-switch input 4 + 3'b100 : + begin + i_hselm = sel_op4; + HADDRM = addr_op4; + i_htransm = trans_op4; + HWRITEM = write_op4; + HSIZEM = size_op4; + i_hburstm = burst_op4; + HPROTM = prot_op4; + HMASTERM = master_op4; + i_hmastlockm= mastlock_op4; + end // case: 4'b100 + + // Bus-switch input 5 + 3'b101 : + begin + i_hselm = sel_op5; + HADDRM = addr_op5; + i_htransm = trans_op5; + HWRITEM = write_op5; + HSIZEM = size_op5; + i_hburstm = burst_op5; + HPROTM = prot_op5; + HMASTERM = master_op5; + i_hmastlockm= mastlock_op5; + end // case: 4'b101 default : begin @@ -494,7 +624,7 @@ module nanosoc_target_output_IMEM_0 ( always @ (negedge HRESETn or posedge HCLK) begin : p_data_in_port_reg if (~HRESETn) - data_in_port <= 2'b11; + data_in_port <= 3'b101; else if (i_hreadymuxm) data_in_port <= addr_in_port; @@ -517,6 +647,8 @@ module nanosoc_target_output_IMEM_0 ( wdata_op1 or wdata_op2 or wdata_op3 or + wdata_op4 or + wdata_op5 or data_in_port or wdata_phase ) begin : p_data_mux @@ -527,10 +659,12 @@ module nanosoc_target_output_IMEM_0 ( if (wdata_phase) // Decode selection case (data_in_port) - 2'b00 : HWDATAM = wdata_op0; - 2'b01 : HWDATAM = wdata_op1; - 2'b10 : HWDATAM = wdata_op2; - 2'b11 : HWDATAM = wdata_op3; + 3'b000 : HWDATAM = wdata_op0; + 3'b001 : HWDATAM = wdata_op1; + 3'b010 : HWDATAM = wdata_op2; + 3'b011 : HWDATAM = wdata_op3; + 3'b100 : HWDATAM = wdata_op4; + 3'b101 : HWDATAM = wdata_op5; default : HWDATAM = {32{1'bx}}; endcase // case(data_in_port) end // block: p_data_mux diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_SYSIO.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_SYSIO.v index 86b47f1..446bd15 100644 --- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_SYSIO.v +++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_SYSIO.v @@ -3,7 +3,7 @@ // only be used by a person authorised under and to the extent permitted // by a subsisting licensing agreement from Arm Limited or its affiliates. // -// (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates. +// (C) COPYRIGHT 2001-2024 Arm Limited or its affiliates. // ALL RIGHTS RESERVED // // This entire notice must be reproduced on all copies of this file @@ -90,6 +90,32 @@ module nanosoc_target_output_SYSIO ( wdata_op3, held_tran_op3, + // Port 4 Signals + sel_op4, + addr_op4, + trans_op4, + write_op4, + size_op4, + burst_op4, + prot_op4, + master_op4, + mastlock_op4, + wdata_op4, + held_tran_op4, + + // Port 5 Signals + sel_op5, + addr_op5, + trans_op5, + write_op5, + size_op5, + burst_op5, + prot_op5, + master_op5, + mastlock_op5, + wdata_op5, + held_tran_op5, + // Slave read data and response HREADYOUTM, @@ -97,6 +123,8 @@ module nanosoc_target_output_SYSIO ( active_op1, active_op2, active_op3, + active_op4, + active_op5, // Slave Address/Control Signals HSELM, @@ -174,12 +202,40 @@ module nanosoc_target_output_SYSIO ( input [31:0] wdata_op3; // Port 3 HWDATA signal input held_tran_op3; // Port 3 HeldTran signal + // Bus-switch input 4 + input sel_op4; // Port 4 HSEL signal + input [31:0] addr_op4; // Port 4 HADDR signal + input [1:0] trans_op4; // Port 4 HTRANS signal + input write_op4; // Port 4 HWRITE signal + input [2:0] size_op4; // Port 4 HSIZE signal + input [2:0] burst_op4; // Port 4 HBURST signal + input [3:0] prot_op4; // Port 4 HPROT signal + input [3:0] master_op4; // Port 4 HMASTER signal + input mastlock_op4; // Port 4 HMASTLOCK signal + input [31:0] wdata_op4; // Port 4 HWDATA signal + input held_tran_op4; // Port 4 HeldTran signal + + // Bus-switch input 5 + input sel_op5; // Port 5 HSEL signal + input [31:0] addr_op5; // Port 5 HADDR signal + input [1:0] trans_op5; // Port 5 HTRANS signal + input write_op5; // Port 5 HWRITE signal + input [2:0] size_op5; // Port 5 HSIZE signal + input [2:0] burst_op5; // Port 5 HBURST signal + input [3:0] prot_op5; // Port 5 HPROT signal + input [3:0] master_op5; // Port 5 HMASTER signal + input mastlock_op5; // Port 5 HMASTLOCK signal + input [31:0] wdata_op5; // Port 5 HWDATA signal + input held_tran_op5; // Port 5 HeldTran signal + input HREADYOUTM; // HREADY feedback output active_op0; // Port 0 Active signal output active_op1; // Port 1 Active signal output active_op2; // Port 2 Active signal output active_op3; // Port 3 Active signal + output active_op4; // Port 4 Active signal + output active_op5; // Port 5 Active signal // Slave Address/Control Signals output HSELM; // Slave select line @@ -257,6 +313,34 @@ module nanosoc_target_output_SYSIO ( wire held_tran_op3; // Port 3 HeldTran signal reg active_op3; // Port 3 Active signal + // Bus-switch input 4 + wire sel_op4; // Port 4 HSEL signal + wire [31:0] addr_op4; // Port 4 HADDR signal + wire [1:0] trans_op4; // Port 4 HTRANS signal + wire write_op4; // Port 4 HWRITE signal + wire [2:0] size_op4; // Port 4 HSIZE signal + wire [2:0] burst_op4; // Port 4 HBURST signal + wire [3:0] prot_op4; // Port 4 HPROT signal + wire [3:0] master_op4; // Port 4 HMASTER signal + wire mastlock_op4; // Port 4 HMASTLOCK signal + wire [31:0] wdata_op4; // Port 4 HWDATA signal + wire held_tran_op4; // Port 4 HeldTran signal + reg active_op4; // Port 4 Active signal + + // Bus-switch input 5 + wire sel_op5; // Port 5 HSEL signal + wire [31:0] addr_op5; // Port 5 HADDR signal + wire [1:0] trans_op5; // Port 5 HTRANS signal + wire write_op5; // Port 5 HWRITE signal + wire [2:0] size_op5; // Port 5 HSIZE signal + wire [2:0] burst_op5; // Port 5 HBURST signal + wire [3:0] prot_op5; // Port 5 HPROT signal + wire [3:0] master_op5; // Port 5 HMASTER signal + wire mastlock_op5; // Port 5 HMASTLOCK signal + wire [31:0] wdata_op5; // Port 5 HWDATA signal + wire held_tran_op5; // Port 5 HeldTran signal + reg active_op5; // Port 5 Active signal + // Slave Address/Control Signals wire HSELM; // Slave select line reg [31:0] HADDRM; // Address @@ -279,9 +363,11 @@ module nanosoc_target_output_SYSIO ( wire req_port1; // Port 1 request signal wire req_port2; // Port 2 request signal wire req_port3; // Port 3 request signal + wire req_port4; // Port 4 request signal + wire req_port5; // Port 5 request signal - wire [1:0] addr_in_port; // Address input port - reg [1:0] data_in_port; // Data input port + wire [2:0] addr_in_port; // Address input port + reg [2:0] data_in_port; // Data input port wire no_port; // No port selected signal reg slave_sel; // Slave select signal reg wdata_phase; // Used to prevent unnecesary toggling @@ -309,6 +395,8 @@ module nanosoc_target_output_SYSIO ( assign req_port1 = held_tran_op1 & sel_op1; assign req_port2 = held_tran_op2 & sel_op2; assign req_port3 = held_tran_op3 & sel_op3; + assign req_port4 = held_tran_op4 & sel_op4; + assign req_port5 = held_tran_op5 & sel_op5; // Arbiter instance for resolving requests to this output stage nanosoc_arbiter_SYSIO u_output_arb ( @@ -320,6 +408,8 @@ module nanosoc_target_output_SYSIO ( .req_port1 (req_port1), .req_port2 (req_port2), .req_port3 (req_port3), + .req_port4 (req_port4), + .req_port5 (req_port5), .HREADYM (i_hreadymuxm), .HSELM (i_hselm), @@ -341,19 +431,25 @@ module nanosoc_target_output_SYSIO ( active_op1 = 1'b0; active_op2 = 1'b0; active_op3 = 1'b0; + active_op4 = 1'b0; + active_op5 = 1'b0; // Decode selection when enabled if (~no_port) case (addr_in_port) - 2'b00 : active_op0 = 1'b1; - 2'b01 : active_op1 = 1'b1; - 2'b10 : active_op2 = 1'b1; - 2'b11 : active_op3 = 1'b1; + 3'b000 : active_op0 = 1'b1; + 3'b001 : active_op1 = 1'b1; + 3'b010 : active_op2 = 1'b1; + 3'b011 : active_op3 = 1'b1; + 3'b100 : active_op4 = 1'b1; + 3'b101 : active_op5 = 1'b1; default : begin active_op0 = 1'bx; active_op1 = 1'bx; active_op2 = 1'bx; active_op3 = 1'bx; + active_op4 = 1'bx; + active_op5 = 1'bx; end endcase // case(addr_in_port) end // block: p_active_comb @@ -373,6 +469,12 @@ module nanosoc_target_output_SYSIO ( sel_op3 or addr_op3 or trans_op3 or write_op3 or size_op3 or burst_op3 or prot_op3 or master_op3 or mastlock_op3 or + sel_op4 or addr_op4 or trans_op4 or write_op4 or + size_op4 or burst_op4 or prot_op4 or + master_op4 or mastlock_op4 or + sel_op5 or addr_op5 or trans_op5 or write_op5 or + size_op5 or burst_op5 or prot_op5 or + master_op5 or mastlock_op5 or addr_in_port or no_port ) begin : p_addr_mux @@ -391,7 +493,7 @@ module nanosoc_target_output_SYSIO ( if (~no_port) case (addr_in_port) // Bus-switch input 0 - 2'b00 : + 3'b000 : begin i_hselm = sel_op0; HADDRM = addr_op0; @@ -402,10 +504,10 @@ module nanosoc_target_output_SYSIO ( HPROTM = prot_op0; HMASTERM = master_op0; i_hmastlockm= mastlock_op0; - end // case: 4'b00 + end // case: 4'b000 // Bus-switch input 1 - 2'b01 : + 3'b001 : begin i_hselm = sel_op1; HADDRM = addr_op1; @@ -416,10 +518,10 @@ module nanosoc_target_output_SYSIO ( HPROTM = prot_op1; HMASTERM = master_op1; i_hmastlockm= mastlock_op1; - end // case: 4'b01 + end // case: 4'b001 // Bus-switch input 2 - 2'b10 : + 3'b010 : begin i_hselm = sel_op2; HADDRM = addr_op2; @@ -430,10 +532,10 @@ module nanosoc_target_output_SYSIO ( HPROTM = prot_op2; HMASTERM = master_op2; i_hmastlockm= mastlock_op2; - end // case: 4'b10 + end // case: 4'b010 // Bus-switch input 3 - 2'b11 : + 3'b011 : begin i_hselm = sel_op3; HADDRM = addr_op3; @@ -444,7 +546,35 @@ module nanosoc_target_output_SYSIO ( HPROTM = prot_op3; HMASTERM = master_op3; i_hmastlockm= mastlock_op3; - end // case: 4'b11 + end // case: 4'b011 + + // Bus-switch input 4 + 3'b100 : + begin + i_hselm = sel_op4; + HADDRM = addr_op4; + i_htransm = trans_op4; + HWRITEM = write_op4; + HSIZEM = size_op4; + i_hburstm = burst_op4; + HPROTM = prot_op4; + HMASTERM = master_op4; + i_hmastlockm= mastlock_op4; + end // case: 4'b100 + + // Bus-switch input 5 + 3'b101 : + begin + i_hselm = sel_op5; + HADDRM = addr_op5; + i_htransm = trans_op5; + HWRITEM = write_op5; + HSIZEM = size_op5; + i_hburstm = burst_op5; + HPROTM = prot_op5; + HMASTERM = master_op5; + i_hmastlockm= mastlock_op5; + end // case: 4'b101 default : begin @@ -494,7 +624,7 @@ module nanosoc_target_output_SYSIO ( always @ (negedge HRESETn or posedge HCLK) begin : p_data_in_port_reg if (~HRESETn) - data_in_port <= 2'b11; + data_in_port <= 3'b101; else if (i_hreadymuxm) data_in_port <= addr_in_port; @@ -517,6 +647,8 @@ module nanosoc_target_output_SYSIO ( wdata_op1 or wdata_op2 or wdata_op3 or + wdata_op4 or + wdata_op5 or data_in_port or wdata_phase ) begin : p_data_mux @@ -527,10 +659,12 @@ module nanosoc_target_output_SYSIO ( if (wdata_phase) // Decode selection case (data_in_port) - 2'b00 : HWDATAM = wdata_op0; - 2'b01 : HWDATAM = wdata_op1; - 2'b10 : HWDATAM = wdata_op2; - 2'b11 : HWDATAM = wdata_op3; + 3'b000 : HWDATAM = wdata_op0; + 3'b001 : HWDATAM = wdata_op1; + 3'b010 : HWDATAM = wdata_op2; + 3'b011 : HWDATAM = wdata_op3; + 3'b100 : HWDATAM = wdata_op4; + 3'b101 : HWDATAM = wdata_op5; default : HWDATAM = {32{1'bx}}; endcase // case(data_in_port) end // block: p_data_mux diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_SYSTABLE.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_SYSTABLE.v index f84cb2b..9292fc3 100644 --- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_SYSTABLE.v +++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_SYSTABLE.v @@ -3,7 +3,7 @@ // only be used by a person authorised under and to the extent permitted // by a subsisting licensing agreement from Arm Limited or its affiliates. // -// (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates. +// (C) COPYRIGHT 2001-2024 Arm Limited or its affiliates. // ALL RIGHTS RESERVED // // This entire notice must be reproduced on all copies of this file @@ -51,24 +51,24 @@ module nanosoc_target_output_SYSTABLE ( wdata_op0, held_tran_op0, - // Port 3 Signals - sel_op3, - addr_op3, - trans_op3, - write_op3, - size_op3, - burst_op3, - prot_op3, - master_op3, - mastlock_op3, - wdata_op3, - held_tran_op3, + // Port 5 Signals + sel_op5, + addr_op5, + trans_op5, + write_op5, + size_op5, + burst_op5, + prot_op5, + master_op5, + mastlock_op5, + wdata_op5, + held_tran_op5, // Slave read data and response HREADYOUTM, active_op0, - active_op3, + active_op5, // Slave Address/Control Signals HSELM, @@ -107,23 +107,23 @@ module nanosoc_target_output_SYSTABLE ( input [31:0] wdata_op0; // Port 0 HWDATA signal input held_tran_op0; // Port 0 HeldTran signal - // Bus-switch input 3 - input sel_op3; // Port 3 HSEL signal - input [31:0] addr_op3; // Port 3 HADDR signal - input [1:0] trans_op3; // Port 3 HTRANS signal - input write_op3; // Port 3 HWRITE signal - input [2:0] size_op3; // Port 3 HSIZE signal - input [2:0] burst_op3; // Port 3 HBURST signal - input [3:0] prot_op3; // Port 3 HPROT signal - input [3:0] master_op3; // Port 3 HMASTER signal - input mastlock_op3; // Port 3 HMASTLOCK signal - input [31:0] wdata_op3; // Port 3 HWDATA signal - input held_tran_op3; // Port 3 HeldTran signal + // Bus-switch input 5 + input sel_op5; // Port 5 HSEL signal + input [31:0] addr_op5; // Port 5 HADDR signal + input [1:0] trans_op5; // Port 5 HTRANS signal + input write_op5; // Port 5 HWRITE signal + input [2:0] size_op5; // Port 5 HSIZE signal + input [2:0] burst_op5; // Port 5 HBURST signal + input [3:0] prot_op5; // Port 5 HPROT signal + input [3:0] master_op5; // Port 5 HMASTER signal + input mastlock_op5; // Port 5 HMASTLOCK signal + input [31:0] wdata_op5; // Port 5 HWDATA signal + input held_tran_op5; // Port 5 HeldTran signal input HREADYOUTM; // HREADY feedback output active_op0; // Port 0 Active signal - output active_op3; // Port 3 Active signal + output active_op5; // Port 5 Active signal // Slave Address/Control Signals output HSELM; // Slave select line @@ -159,19 +159,19 @@ module nanosoc_target_output_SYSTABLE ( wire held_tran_op0; // Port 0 HeldTran signal reg active_op0; // Port 0 Active signal - // Bus-switch input 3 - wire sel_op3; // Port 3 HSEL signal - wire [31:0] addr_op3; // Port 3 HADDR signal - wire [1:0] trans_op3; // Port 3 HTRANS signal - wire write_op3; // Port 3 HWRITE signal - wire [2:0] size_op3; // Port 3 HSIZE signal - wire [2:0] burst_op3; // Port 3 HBURST signal - wire [3:0] prot_op3; // Port 3 HPROT signal - wire [3:0] master_op3; // Port 3 HMASTER signal - wire mastlock_op3; // Port 3 HMASTLOCK signal - wire [31:0] wdata_op3; // Port 3 HWDATA signal - wire held_tran_op3; // Port 3 HeldTran signal - reg active_op3; // Port 3 Active signal + // Bus-switch input 5 + wire sel_op5; // Port 5 HSEL signal + wire [31:0] addr_op5; // Port 5 HADDR signal + wire [1:0] trans_op5; // Port 5 HTRANS signal + wire write_op5; // Port 5 HWRITE signal + wire [2:0] size_op5; // Port 5 HSIZE signal + wire [2:0] burst_op5; // Port 5 HBURST signal + wire [3:0] prot_op5; // Port 5 HPROT signal + wire [3:0] master_op5; // Port 5 HMASTER signal + wire mastlock_op5; // Port 5 HMASTLOCK signal + wire [31:0] wdata_op5; // Port 5 HWDATA signal + wire held_tran_op5; // Port 5 HeldTran signal + reg active_op5; // Port 5 Active signal // Slave Address/Control Signals wire HSELM; // Slave select line @@ -192,10 +192,10 @@ module nanosoc_target_output_SYSTABLE ( // Signal declarations // ----------------------------------------------------------------------------- wire req_port0; // Port 0 request signal - wire req_port3; // Port 3 request signal + wire req_port5; // Port 5 request signal - wire [1:0] addr_in_port; // Address input port - reg [1:0] data_in_port; // Data input port + wire [2:0] addr_in_port; // Address input port + reg [2:0] data_in_port; // Data input port wire no_port; // No port selected signal reg slave_sel; // Slave select signal reg wdata_phase; // Used to prevent unnecesary toggling @@ -220,7 +220,7 @@ module nanosoc_target_output_SYSTABLE ( // ----------------------------------------------------------------------------- assign req_port0 = held_tran_op0 & sel_op0; - assign req_port3 = held_tran_op3 & sel_op3; + assign req_port5 = held_tran_op5 & sel_op5; // Arbiter instance for resolving requests to this output stage nanosoc_arbiter_SYSTABLE u_output_arb ( @@ -229,7 +229,7 @@ module nanosoc_target_output_SYSTABLE ( .HRESETn (HRESETn), .req_port0 (req_port0), - .req_port3 (req_port3), + .req_port5 (req_port5), .HREADYM (i_hreadymuxm), .HSELM (i_hselm), @@ -248,16 +248,16 @@ module nanosoc_target_output_SYSTABLE ( begin : p_active_comb // Default value(s) active_op0 = 1'b0; - active_op3 = 1'b0; + active_op5 = 1'b0; // Decode selection when enabled if (~no_port) case (addr_in_port) - 2'b00 : active_op0 = 1'b1; - 2'b11 : active_op3 = 1'b1; + 3'b000 : active_op0 = 1'b1; + 3'b101 : active_op5 = 1'b1; default : begin active_op0 = 1'bx; - active_op3 = 1'bx; + active_op5 = 1'bx; end endcase // case(addr_in_port) end // block: p_active_comb @@ -268,9 +268,9 @@ module nanosoc_target_output_SYSTABLE ( sel_op0 or addr_op0 or trans_op0 or write_op0 or size_op0 or burst_op0 or prot_op0 or master_op0 or mastlock_op0 or - sel_op3 or addr_op3 or trans_op3 or write_op3 or - size_op3 or burst_op3 or prot_op3 or - master_op3 or mastlock_op3 or + sel_op5 or addr_op5 or trans_op5 or write_op5 or + size_op5 or burst_op5 or prot_op5 or + master_op5 or mastlock_op5 or addr_in_port or no_port ) begin : p_addr_mux @@ -289,7 +289,7 @@ module nanosoc_target_output_SYSTABLE ( if (~no_port) case (addr_in_port) // Bus-switch input 0 - 2'b00 : + 3'b000 : begin i_hselm = sel_op0; HADDRM = addr_op0; @@ -300,21 +300,21 @@ module nanosoc_target_output_SYSTABLE ( HPROTM = prot_op0; HMASTERM = master_op0; i_hmastlockm= mastlock_op0; - end // case: 4'b00 + end // case: 4'b000 - // Bus-switch input 3 - 2'b11 : + // Bus-switch input 5 + 3'b101 : begin - i_hselm = sel_op3; - HADDRM = addr_op3; - i_htransm = trans_op3; - HWRITEM = write_op3; - HSIZEM = size_op3; - i_hburstm = burst_op3; - HPROTM = prot_op3; - HMASTERM = master_op3; - i_hmastlockm= mastlock_op3; - end // case: 4'b11 + i_hselm = sel_op5; + HADDRM = addr_op5; + i_htransm = trans_op5; + HWRITEM = write_op5; + HSIZEM = size_op5; + i_hburstm = burst_op5; + HPROTM = prot_op5; + HMASTERM = master_op5; + i_hmastlockm= mastlock_op5; + end // case: 4'b101 default : begin @@ -364,7 +364,7 @@ module nanosoc_target_output_SYSTABLE ( always @ (negedge HRESETn or posedge HCLK) begin : p_data_in_port_reg if (~HRESETn) - data_in_port <= 2'b11; + data_in_port <= 3'b101; else if (i_hreadymuxm) data_in_port <= addr_in_port; @@ -384,7 +384,7 @@ module nanosoc_target_output_SYSTABLE ( // HWDATAM output decode always @ ( wdata_op0 or - wdata_op3 or + wdata_op5 or data_in_port or wdata_phase ) begin : p_data_mux @@ -395,8 +395,8 @@ module nanosoc_target_output_SYSTABLE ( if (wdata_phase) // Decode selection case (data_in_port) - 2'b00 : HWDATAM = wdata_op0; - 2'b11 : HWDATAM = wdata_op3; + 3'b000 : HWDATAM = wdata_op0; + 3'b101 : HWDATAM = wdata_op5; default : HWDATAM = {32{1'bx}}; endcase // case(data_in_port) end // block: p_data_mux diff --git a/nanosoc/nanosoc_busmatrix/xml/nanosoc.xml b/nanosoc/nanosoc_busmatrix/xml/nanosoc.xml index eb0be4d..ec31292 100644 --- a/nanosoc/nanosoc_busmatrix/xml/nanosoc.xml +++ b/nanosoc/nanosoc_busmatrix/xml/nanosoc.xml @@ -121,6 +121,44 @@ <address_region interface="_EXP" mem_lo='a0000000' mem_hi='dfffffff' remapping='none'/> </slave_interface> + <slave_interface name="_DMAC_2"> + <sparse_connect interface="_BOOTROM_0"/> + <sparse_connect interface="_IMEM_0"/> + <sparse_connect interface="_DMEM_0"/> + <sparse_connect interface="_SYSIO"/> + <sparse_connect interface="_EXP"/> + <sparse_connect interface="_EXPRAM_L"/> + <sparse_connect interface="_EXPRAM_H"/> + <address_region interface="_IMEM_0" mem_lo='00000000' mem_hi='0fffffff' remapping='none'/> + <address_region interface="_BOOTROM_0" mem_lo='10000000' mem_hi='1fffffff' remapping='none'/> + <address_region interface="_IMEM_0" mem_lo='20000000' mem_hi='2fffffff' remapping='none'/> + <address_region interface="_DMEM_0" mem_lo='30000000' mem_hi='3fffffff' remapping='none'/> + <address_region interface="_SYSIO" mem_lo='40000000' mem_hi='5fffffff' remapping='none'/> + <address_region interface="_EXP" mem_lo='60000000' mem_hi='7fffffff' remapping='none'/> + <address_region interface="_EXPRAM_L" mem_lo='80000000' mem_hi='8fffffff' remapping='none'/> + <address_region interface="_EXPRAM_H" mem_lo='90000000' mem_hi='9fffffff' remapping='none'/> + <address_region interface="_EXP" mem_lo='a0000000' mem_hi='dfffffff' remapping='none'/> + </slave_interface> + + <slave_interface name="_DMAC_3"> + <sparse_connect interface="_BOOTROM_0"/> + <sparse_connect interface="_IMEM_0"/> + <sparse_connect interface="_DMEM_0"/> + <sparse_connect interface="_SYSIO"/> + <sparse_connect interface="_EXP"/> + <sparse_connect interface="_EXPRAM_L"/> + <sparse_connect interface="_EXPRAM_H"/> + <address_region interface="_IMEM_0" mem_lo='00000000' mem_hi='0fffffff' remapping='none'/> + <address_region interface="_BOOTROM_0" mem_lo='10000000' mem_hi='1fffffff' remapping='none'/> + <address_region interface="_IMEM_0" mem_lo='20000000' mem_hi='2fffffff' remapping='none'/> + <address_region interface="_DMEM_0" mem_lo='30000000' mem_hi='3fffffff' remapping='none'/> + <address_region interface="_SYSIO" mem_lo='40000000' mem_hi='5fffffff' remapping='none'/> + <address_region interface="_EXP" mem_lo='60000000' mem_hi='7fffffff' remapping='none'/> + <address_region interface="_EXPRAM_L" mem_lo='80000000' mem_hi='8fffffff' remapping='none'/> + <address_region interface="_EXPRAM_H" mem_lo='90000000' mem_hi='9fffffff' remapping='none'/> + <address_region interface="_EXP" mem_lo='a0000000' mem_hi='dfffffff' remapping='none'/> + </slave_interface> + <slave_interface name="_CPU_0"> <sparse_connect interface="_BOOTROM_0"/> <sparse_connect interface="_IMEM_0"/> diff --git a/nanosoc/nanosoc_subsystems/dma/verilog/nanosoc_ss_dma.v b/nanosoc/nanosoc_subsystems/dma/verilog/nanosoc_ss_dma.v index 877d5dc..d234bed 100644 --- a/nanosoc/nanosoc_subsystems/dma/verilog/nanosoc_ss_dma.v +++ b/nanosoc/nanosoc_subsystems/dma/verilog/nanosoc_ss_dma.v @@ -76,6 +76,33 @@ module nanosoc_ss_dma #( output wire [SYS_DATA_W-1:0] DMAC_1_PRDATA, // APB read data output wire DMAC_1_PREADY, // APB Ready output wire DMAC_1_PSLVERR, // APB Slave Error + + // DMAC 2 AHB Lite Port + output wire [SYS_ADDR_W-1:0] DMAC_2_HADDR, // Address bus + output wire [1:0] DMAC_2_HTRANS, // Transfer type + output wire DMAC_2_HWRITE, // Transfer direction + output wire [2:0] DMAC_2_HSIZE, // Transfer size + output wire [2:0] DMAC_2_HBURST, // Burst type + output wire [3:0] DMAC_2_HPROT, // Protection control + output wire [SYS_DATA_W-1:0] DMAC_2_HWDATA, // Write data + output wire DMAC_2_HMASTLOCK, // Locked Sequence + input wire [SYS_DATA_W-1:0] DMAC_2_HRDATA, // Read data bus + input wire DMAC_2_HREADY, // HREADY feedback + input wire DMAC_2_HRESP, // Transfer response + + // DMAC 3 AHB Lite Port + output wire [SYS_ADDR_W-1:0] DMAC_3_HADDR, // Address bus + output wire [1:0] DMAC_3_HTRANS, // Transfer type + output wire DMAC_3_HWRITE, // Transfer direction + output wire [2:0] DMAC_3_HSIZE, // Transfer size + output wire [2:0] DMAC_3_HBURST, // Burst type + output wire [3:0] DMAC_3_HPROT, // Protection control + output wire [SYS_DATA_W-1:0] DMAC_3_HWDATA, // Write data + output wire DMAC_3_HMASTLOCK, // Locked Sequence + input wire [SYS_DATA_W-1:0] DMAC_3_HRDATA, // Read data bus + input wire DMAC_3_HREADY, // HREADY feedback + input wire DMAC_3_HRESP, // Transfer response + `ifdef DMAC_DMA350 `ifdef DMA350_STREAM_2 @@ -133,6 +160,26 @@ module nanosoc_ss_dma #( output wire DMAC_1_DMA_ERR // DMA slave response not OK ); +// tie-offs ready for DMA 2/3 + + assign DMAC_2_HADDR = {SYS_ADDR_W{1'b0}}; // Address bus + assign DMAC_2_HTRANS = {2{1'b0}}; // Transfer type + assign DMAC_2_HWRITE = 1'b0; // Transfer direction + assign DMAC_2_HSIZE = {3{1'b0}}; // Transfer size + assign DMAC_2_HBURST = {3{1'b0}}; // Burst type + assign DMAC_2_HPROT = {4{1'b0}}; // Protection control + assign DMAC_2_HWDATA = {SYS_DATA_W{1'b0}}; // Write data + assign DMAC_2_HMASTLOCK = 1'b0; // Locked Sequence + + assign DMAC_3_HADDR = {SYS_ADDR_W{1'b0}}; // Address bus + assign DMAC_3_HTRANS = {2{1'b0}}; // Transfer type + assign DMAC_3_HWRITE = 1'b0; // Transfer direction + assign DMAC_3_HSIZE = {3{1'b0}}; // Transfer size + assign DMAC_3_HBURST = {3{1'b0}}; // Burst type + assign DMAC_3_HPROT = {4{1'b0}}; // Protection control + assign DMAC_3_HWDATA = {SYS_DATA_W{1'b0}}; // Write data + assign DMAC_3_HMASTLOCK = 1'b0; // Locked Sequence + `ifdef DMAC_DMA350 //------------------------------- //DMA Controller 0 Instantiation @@ -234,7 +281,6 @@ module nanosoc_ss_dma #( .DMA_ERR(DMAC_0_DMA_ERR) ); - // APB Tie-off signals assign DMAC_0_PREADY = 1'b1; @@ -386,4 +432,4 @@ module nanosoc_ss_dma #( `endif `endif -endmodule \ No newline at end of file +endmodule diff --git a/nanosoc/nanosoc_subsystems/interconnect/verilog/nanosoc_ss_interconnect.v b/nanosoc/nanosoc_subsystems/interconnect/verilog/nanosoc_ss_interconnect.v index 155dbee..b3cbe0c 100644 --- a/nanosoc/nanosoc_subsystems/interconnect/verilog/nanosoc_ss_interconnect.v +++ b/nanosoc/nanosoc_subsystems/interconnect/verilog/nanosoc_ss_interconnect.v @@ -50,7 +50,6 @@ module nanosoc_ss_interconnect #( output wire DMAC_0_HREADY, // HREADY feedback output wire DMAC_0_HRESP, // Transfer response - // DMAC Controller 1 Master Port input wire [31:0] DMAC_1_HADDR, // Address bus input wire [1:0] DMAC_1_HTRANS, // Transfer type @@ -64,6 +63,32 @@ module nanosoc_ss_interconnect #( output wire DMAC_1_HREADY, // HREADY feedback output wire DMAC_1_HRESP, // Transfer response + // DMAC Controller 2 Master Port + input wire [31:0] DMAC_2_HADDR, // Address bus + input wire [1:0] DMAC_2_HTRANS, // Transfer type + input wire DMAC_2_HWRITE, // Transfer direction + input wire [2:0] DMAC_2_HSIZE, // Transfer size + input wire [2:0] DMAC_2_HBURST, // Burst type + input wire [3:0] DMAC_2_HPROT, // Protection control + input wire [31:0] DMAC_2_HWDATA, // Write data + input wire DMAC_2_HMASTLOCK, // Locked Sequence + output wire [31:0] DMAC_2_HRDATA, // Read data bus + output wire DMAC_2_HREADY, // HREADY feedback + output wire DMAC_2_HRESP, // Transfer response + + // DMAC Controller 3 Master Port + input wire [31:0] DMAC_3_HADDR, // Address bus + input wire [1:0] DMAC_3_HTRANS, // Transfer type + input wire DMAC_3_HWRITE, // Transfer direction + input wire [2:0] DMAC_3_HSIZE, // Transfer size + input wire [2:0] DMAC_3_HBURST, // Burst type + input wire [3:0] DMAC_3_HPROT, // Protection control + input wire [31:0] DMAC_3_HWDATA, // Write data + input wire DMAC_3_HMASTLOCK, // Locked Sequence + output wire [31:0] DMAC_3_HRDATA, // Read data bus + output wire DMAC_3_HREADY, // HREADY feedback + output wire DMAC_3_HRESP, // Transfer response + // CPU 0 Master Port input wire [31:0] CPU_0_HADDR, // Address bus input wire [1:0] CPU_0_HTRANS, // Transfer type @@ -250,7 +275,33 @@ module nanosoc_ss_interconnect #( .HREADY_DMAC_1 (DMAC_1_HREADY), // HREADY feedback .HRESP_DMAC_1 (DMAC_1_HRESP), // Transfer response - // DMA Controller 1 Master Port + // DMA Controller 2 Master Port + .HADDR_DMAC_2 (DMAC_2_HADDR), // Address bus + .HTRANS_DMAC_2 (DMAC_2_HTRANS), // Transfer type + .HWRITE_DMAC_2 (DMAC_2_HWRITE), // Transfer direction + .HSIZE_DMAC_2 (DMAC_2_HSIZE), // Transfer size + .HBURST_DMAC_2 (DMAC_2_HBURST), // Burst type + .HPROT_DMAC_2 (DMAC_2_HPROT), // Protection control + .HWDATA_DMAC_2 (DMAC_2_HWDATA), // Write data + .HMASTLOCK_DMAC_2 (DMAC_2_HMASTLOCK), // Locked Sequence + .HRDATA_DMAC_2 (DMAC_2_HRDATA), // Read data bus + .HREADY_DMAC_2 (DMAC_2_HREADY), // HREADY feedback + .HRESP_DMAC_2 (DMAC_2_HRESP), // Transfer response + + // DMA Controller 3 Master Port + .HADDR_DMAC_3 (DMAC_3_HADDR), // Address bus + .HTRANS_DMAC_3 (DMAC_3_HTRANS), // Transfer type + .HWRITE_DMAC_3 (DMAC_3_HWRITE), // Transfer direction + .HSIZE_DMAC_3 (DMAC_3_HSIZE), // Transfer size + .HBURST_DMAC_3 (DMAC_3_HBURST), // Burst type + .HPROT_DMAC_3 (DMAC_3_HPROT), // Protection control + .HWDATA_DMAC_3 (DMAC_3_HWDATA), // Write data + .HMASTLOCK_DMAC_3 (DMAC_3_HMASTLOCK), // Locked Sequence + .HRDATA_DMAC_3 (DMAC_3_HRDATA), // Read data bus + .HREADY_DMAC_3 (DMAC_3_HREADY), // HREADY feedback + .HRESP_DMAC_3 (DMAC_3_HRESP), // Transfer response + + // CPU Controller 0 Master Port .HADDR_CPU_0 (CPU_0_HADDR), // Address bus .HTRANS_CPU_0 (CPU_0_HTRANS), // Transfer type .HWRITE_CPU_0 (CPU_0_HWRITE), // Transfer direction @@ -383,4 +434,4 @@ module nanosoc_ss_interconnect #( .HMASTLOCK_SYSTABLE (SYSTABLE_HMASTLOCK), // Locked Sequence .HREADYMUX_SYSTABLE (SYSTABLE_HREADYMUX) // Transfer done ); -endmodule \ No newline at end of file +endmodule diff --git a/nanosoc/nanosoc_system/verilog/nanosoc_system.v b/nanosoc/nanosoc_system/verilog/nanosoc_system.v index d45e5bf..4057c44 100644 --- a/nanosoc/nanosoc_system/verilog/nanosoc_system.v +++ b/nanosoc/nanosoc_system/verilog/nanosoc_system.v @@ -422,12 +422,38 @@ module nanosoc_system #( wire [SYS_DATA_W-1:0] DMAC_1_PRDATA; // APB read data wire DMAC_1_PREADY; // APB Ready Signal wire DMAC_1_PSLVERR; // APB Error Signal - + // DMAC 1 DMA Request and Status Port - To Expansion Subsystem wire [DMAC_1_CHANNEL_NUM-1:0] DMAC_1_DMA_REQ; // DMA transfer request wire [DMAC_1_CHANNEL_NUM-1:0] DMAC_1_DMA_DONE; // DMA transfer done wire DMAC_1_DMA_ERR; // DMA slave response not OK + // DMAC 2 AHB Lite Port - To Interconnect Subsystem + wire [SYS_ADDR_W-1:0] DMAC_2_HADDR; // Address bus + wire [1:0] DMAC_2_HTRANS; // Transfer type + wire DMAC_2_HWRITE; // Transfer direction + wire [2:0] DMAC_2_HSIZE; // Transfer size + wire [2:0] DMAC_2_HBURST; // Burst type + wire [3:0] DMAC_2_HPROT; // Protection control + wire [SYS_DATA_W-1:0] DMAC_2_HWDATA; // Write data + wire DMAC_2_HMASTLOCK; // Locked Sequence + wire [SYS_DATA_W-1:0] DMAC_2_HRDATA; // Read data bus + wire DMAC_2_HREADY; // HREADY feedback + wire DMAC_2_HRESP; // Transfer response + + // DMAC 3 AHB Lite Port - To Interconnect Subsystem + wire [SYS_ADDR_W-1:0] DMAC_3_HADDR; // Address bus + wire [1:0] DMAC_3_HTRANS; // Transfer type + wire DMAC_3_HWRITE; // Transfer direction + wire [2:0] DMAC_3_HSIZE; // Transfer size + wire [2:0] DMAC_3_HBURST; // Burst type + wire [3:0] DMAC_3_HPROT; // Protection control + wire [SYS_DATA_W-1:0] DMAC_3_HWDATA; // Write data + wire DMAC_3_HMASTLOCK; // Locked Sequence + wire [SYS_DATA_W-1:0] DMAC_3_HRDATA; // Read data bus + wire DMAC_3_HREADY; // HREADY feedback + wire DMAC_3_HRESP; // Transfer response + // DMA Request Wiring //-------------------------- @@ -562,6 +588,32 @@ module nanosoc_system #( .DMAC_1_PRDATA(DMAC_1_PRDATA), .DMAC_1_PREADY(DMAC_1_PREADY), .DMAC_1_PSLVERR(DMAC_1_PSLVERR), + + // DMAC 2 AHB Lite Port + .DMAC_2_HADDR(DMAC_2_HADDR), + .DMAC_2_HTRANS(DMAC_2_HTRANS), + .DMAC_2_HWRITE(DMAC_2_HWRITE), + .DMAC_2_HSIZE(DMAC_2_HSIZE), + .DMAC_2_HBURST(DMAC_2_HBURST), + .DMAC_2_HPROT(DMAC_2_HPROT), + .DMAC_2_HWDATA(DMAC_2_HWDATA), + .DMAC_2_HMASTLOCK(DMAC_2_HMASTLOCK), + .DMAC_2_HRDATA(DMAC_2_HRDATA), + .DMAC_2_HREADY(DMAC_2_HREADY), + .DMAC_2_HRESP(DMAC_2_HRESP), + + // DMAC 3 AHB Lite Port + .DMAC_3_HADDR(DMAC_3_HADDR), + .DMAC_3_HTRANS(DMAC_3_HTRANS), + .DMAC_3_HWRITE(DMAC_3_HWRITE), + .DMAC_3_HSIZE(DMAC_3_HSIZE), + .DMAC_3_HBURST(DMAC_3_HBURST), + .DMAC_3_HPROT(DMAC_3_HPROT), + .DMAC_3_HWDATA(DMAC_3_HWDATA), + .DMAC_3_HMASTLOCK(DMAC_3_HMASTLOCK), + .DMAC_3_HRDATA(DMAC_3_HRDATA), + .DMAC_3_HREADY(DMAC_3_HREADY), + .DMAC_3_HRESP(DMAC_3_HRESP), `ifdef DMAC_DMA350 `ifdef DMA350_STREAM_2 @@ -1169,6 +1221,32 @@ module nanosoc_system #( .DMAC_1_HREADY(DMAC_1_HREADY), .DMAC_1_HRESP(DMAC_1_HRESP), + // DMAC Controller 2 Master Port + .DMAC_2_HADDR(DMAC_2_HADDR), + .DMAC_2_HTRANS(DMAC_2_HTRANS), + .DMAC_2_HWRITE(DMAC_2_HWRITE), + .DMAC_2_HSIZE(DMAC_2_HSIZE), + .DMAC_2_HBURST(DMAC_2_HBURST), + .DMAC_2_HPROT(DMAC_2_HPROT), + .DMAC_2_HWDATA(DMAC_2_HWDATA), + .DMAC_2_HMASTLOCK(DMAC_2_HMASTLOCK), + .DMAC_2_HRDATA(DMAC_2_HRDATA), + .DMAC_2_HREADY(DMAC_2_HREADY), + .DMAC_2_HRESP(DMAC_2_HRESP), + + // DMAC Controller 1 Master Port + .DMAC_3_HADDR(DMAC_3_HADDR), + .DMAC_3_HTRANS(DMAC_3_HTRANS), + .DMAC_3_HWRITE(DMAC_3_HWRITE), + .DMAC_3_HSIZE(DMAC_3_HSIZE), + .DMAC_3_HBURST(DMAC_3_HBURST), + .DMAC_3_HPROT(DMAC_3_HPROT), + .DMAC_3_HWDATA(DMAC_3_HWDATA), + .DMAC_3_HMASTLOCK(DMAC_3_HMASTLOCK), + .DMAC_3_HRDATA(DMAC_3_HRDATA), + .DMAC_3_HREADY(DMAC_3_HREADY), + .DMAC_3_HRESP(DMAC_3_HRESP), + // CPU 0 Master Port .CPU_0_HADDR(CPU_0_HADDR), .CPU_0_HTRANS(CPU_0_HTRANS), @@ -1303,4 +1381,4 @@ module nanosoc_system #( .SYSTABLE_HREADYMUX(SYSTABLE_HREADY) ); -endmodule \ No newline at end of file +endmodule -- GitLab