From 79ab6f6a085a93a77772005a5fbafc0879c12d15 Mon Sep 17 00:00:00 2001 From: Daniel Newbrook <dwn1c21@soton.ac.uk> Date: Tue, 27 Aug 2024 12:40:06 +0100 Subject: [PATCH] Update address ranges and fix byte writes and reads --- logical/SRAM/verilog/SRAM.v | 2 +- makefile | 9 +- .../nic400_sram_chiplet.xml | 22 +- .../nic400_tlx_sram_chiplet.xml | 205 +----------------- verif/cocotb/sram_chiplet_tests.py | 25 ++- 5 files changed, 44 insertions(+), 219 deletions(-) diff --git a/logical/SRAM/verilog/SRAM.v b/logical/SRAM/verilog/SRAM.v index 35f5f4b..9684460 100644 --- a/logical/SRAM/verilog/SRAM.v +++ b/logical/SRAM/verilog/SRAM.v @@ -19,7 +19,7 @@ module SRAM ( integer i; // Write-strobe loop variable integer j; // Mask-bit loop variable - assign Addr = memaddr[20:4]; + assign Addr = memaddr[20:2]; // ------------- // Memory arrays // ------------- diff --git a/makefile b/makefile index cfdae38..5880139 100644 --- a/makefile +++ b/makefile @@ -6,11 +6,16 @@ include ./make.cfg build_sie300_sram_ctrl: @$(SIE300_IP_LOGICAL_DIR)/generate --config ./socrates/BP301_SRAM/config/SRAM_ctrl.yaml --output ./logical/SMC -build_nic400: +build_nic400_sram_chiplet: socrates_cli --project sram_chiplet -data ../ --flow build.configured.component configuredComponentName=nic400_sram_chiplet +build_nic400_tb: + socrates_cli --project sram_chiplet -data ../ --flow build.configured.component configuredComponentName=nic400_tb +build_tlx_sram_chiplet: + socrates_cli --project sram_chiplet -data ../ --flow build.configured.component configuredComponentName=nic400_tlx_sram_chiplet + make_project: socrates_cli --project sram_chiplet -data ../ --flow AddNewProject -first_time_setup: make_project build_sie300_sram_ctrl +first_time_setup: make_project build_sie300_sram_ctrl build_nic400_sram_chiplet build_nic400_tb build_tlx_sram_chiplet diff --git a/socrates/nic400_sram_chiplet/nic400_sram_chiplet.xml b/socrates/nic400_sram_chiplet/nic400_sram_chiplet.xml index 62145b3..5079c85 100644 --- a/socrates/nic400_sram_chiplet/nic400_sram_chiplet.xml +++ b/socrates/nic400_sram_chiplet/nic400_sram_chiplet.xml @@ -152,13 +152,13 @@ <MappedBlock> <InterfaceRef>AXI_SRAM</InterfaceRef> <Offset>0</Offset> - <Range>65536</Range> + <Range>2031616</Range> <Visibility>true</Visibility> </MappedBlock> <MappedBlock> <InterfaceRef>APB_PVT</InterfaceRef> - <Offset>65536</Offset> - <Range>4096</Range> + <Offset>2031616</Offset> + <Range>65536</Range> <Visibility>true</Visibility> </MappedBlock> </MemoryMap> @@ -231,7 +231,7 @@ <address_ranges> <name>mm0</name> <range> - <addr_max>0xFFFF</addr_max> + <addr_max>0x1EFFFF</addr_max> <addr_min>0x0</addr_min> <remap> <bit>default</bit> @@ -241,8 +241,8 @@ </remap> </range> <range> - <addr_max>0x10FFF</addr_max> - <addr_min>0x10000</addr_min> + <addr_max>0x1FFFFF</addr_max> + <addr_min>0x1F0000</addr_min> <remap> <bit>default</bit> <present>true</present> @@ -383,7 +383,7 @@ <address_ranges> <name>mm0</name> <range> - <addr_max>0xFFFF</addr_max> + <addr_max>0x1EFFFF</addr_max> <addr_min>0x0</addr_min> <remap> <bit>default</bit> @@ -393,8 +393,8 @@ </remap> </range> <range> - <addr_max>0x10FFF</addr_max> - <addr_min>0x10000</addr_min> + <addr_max>0x1FFFFF</addr_max> + <addr_min>0x1F0000</addr_min> <remap> <bit>default</bit> <present>true</present> @@ -1087,19 +1087,19 @@ <link> <slave_if> <name>AXI_CHIPLET_IN</name> + <master_if>AXI_SRAM</master_if> <master_if>APB_PVT<parent>apb_group0</parent> </master_if> <master_if>apb_group0</master_if> - <master_if>AXI_SRAM</master_if> </slave_if> </link> <link> <slave_if> <name>AHB_ADP</name> + <master_if>AXI_SRAM</master_if> <master_if>APB_PVT<parent>apb_group0</parent> </master_if> <master_if>apb_group0</master_if> - <master_if>AXI_SRAM</master_if> </slave_if> </link> </architecture> diff --git a/socrates/nic400_tlx_sram_chiplet/nic400_tlx_sram_chiplet.xml b/socrates/nic400_tlx_sram_chiplet/nic400_tlx_sram_chiplet.xml index e394faa..55348a4 100644 --- a/socrates/nic400_tlx_sram_chiplet/nic400_tlx_sram_chiplet.xml +++ b/socrates/nic400_tlx_sram_chiplet/nic400_tlx_sram_chiplet.xml @@ -32,7 +32,7 @@ <AllowBrokenBurst>false</AllowBrokenBurst> <SLAVE_CLOCK>clk_s</SLAVE_CLOCK> <MASTER_CLOCK>clk_m</MASTER_CLOCK> - <FW_USER_DEFINED_WIDTH>24</FW_USER_DEFINED_WIDTH> + <FW_USER_DEFINED_WIDTH>16</FW_USER_DEFINED_WIDTH> <FW_PACKING_STRATEGY>widest_div_4</FW_PACKING_STRATEGY> <FW_TLX_TIMING_CLOSURE>false</FW_TLX_TIMING_CLOSURE> <REV_PACKING_STRATEGY>widest_div_4</REV_PACKING_STRATEGY> @@ -209,208 +209,7 @@ </Paths> <VirtualNetworks/> </Specification> - <Architecture> - <NICConfigFile><?xml version="1.0" encoding="iso-8859-1" ?> -<periph> -<product_version_info major_version="00" minor_revision="2" major_revision="1" minor_version="0" part_quality="rel" minor_code="50000" major_group="bu" product_code="nic400_tlx"/> -<validator_version_info minor_revision="1" major_revision="22" /> - <global> - <qos_status>false</qos_status> - <buser_width>0</buser_width> - <hcg_en>false</hcg_en> - <virtual_networks_status>false</virtual_networks_status> - <rsb_arch_central_ring>false</rsb_arch_central_ring> - <thin_links_status>true</thin_links_status> - <awuser_width>0</awuser_width> - <license_status>unlicensed_nic</license_status> - <dpe_status>false</dpe_status> - <aruser_width>0</aruser_width> - <cc_type>async</cc_type> - <pl_id_width>4</pl_id_width> - <ruser_width>0</ruser_width> - <wuser_width>0</wuser_width> - </global> - <amib> - <master_if_port_name>M1_m_m</master_if_port_name> - <multi_region>false</multi_region> - <tide>0</tide> - <tlx> - <power_domain_crossing>false</power_domain_crossing> - <fwd_tlx> - <pl_clock_ratio>1</pl_clock_ratio> - <dll_link_user_def_width>24</dll_link_user_def_width> - <pl_reg_stages>0</pl_reg_stages> - <dll_link_width_option>widest_div_4</dll_link_width_option> - </fwd_tlx> - <rev_tlx> - <pl_clock_ratio>1</pl_clock_ratio> - <dll_link_user_def_width>8</dll_link_user_def_width> - <pl_reg_stages>0</pl_reg_stages> - <dll_link_width_option>widest_div_4</dll_link_width_option> - </rev_tlx> - <tlx_enable>true</tlx_enable> - <ahb_bridge>false</ahb_bridge> - <reg> - <type>fifo</type> - <impl>present</impl> - <depth>6</depth> - <name>aw</name> - <location>boundary</location> - </reg> - <reg> - <type>fifo</type> - <impl>present</impl> - <depth>6</depth> - <name>w</name> - <location>boundary</location> - </reg> - <reg> - <type>fifo</type> - <impl>present</impl> - <depth>6</depth> - <name>b</name> - <location>boundary</location> - </reg> - <reg> - <type>fifo</type> - <impl>present</impl> - <depth>6</depth> - <name>ar</name> - <location>boundary</location> - </reg> - <reg> - <type>fifo</type> - <impl>present</impl> - <depth>6</depth> - <name>r</name> - <location>boundary</location> - </reg> - <reg> - <type>fwd</type> - <impl>absent</impl> - <name>d</name> - <location>tlx_fwd</location> - </reg> - <reg> - <type>fwd</type> - <impl>absent</impl> - <name>d</name> - <location>tlx_rev</location> - </reg> - </tlx> - <slave_if_data_width>32</slave_if_data_width> - <multi_ported>false</multi_ported> - <vn_external>none</vn_external> - <vid_width>4</vid_width> - <apb_config>false</apb_config> - <qv_out>false</qv_out> - <master_if_addr_width>32</master_if_addr_width> - <clock_domain_name_slave_if>clk_s</clock_domain_name_slave_if> - <clock_domain_name_master_if>clk_m</clock_domain_name_master_if> - <protocol>axi4</protocol> - <dest_type>peripheral</dest_type> - <name>M1_m</name> - <vn_external_bridge>none</vn_external_bridge> - <trustzone>nsec</trustzone> - <slave_if_port_name>M1_m_s</slave_if_port_name> - <clock_boundary>async</clock_boundary> - <master_if_data_width>32</master_if_data_width> - <reg> - <type>rev</type> - <impl>present</impl> - <name>aw</name> - <location>slave_port</location> - </reg> - <reg> - <type>rev</type> - <impl>present</impl> - <name>w</name> - <location>slave_port</location> - </reg> - <reg> - <type>rev</type> - <impl>present</impl> - <name>ar</name> - <location>slave_port</location> - </reg> - <reg> - <type>fwd</type> - <impl>absent</impl> - <name>b</name> - <location>slave_port</location> - </reg> - <reg> - <type>fwd</type> - <impl>absent</impl> - <name>r</name> - <location>slave_port</location> - </reg> - <reg> - <type>fwd</type> - <impl>absent</impl> - <name>aw</name> - <location>master_port</location> - </reg> - <reg> - <type>fwd</type> - <impl>absent</impl> - <name>w</name> - <location>master_port</location> - </reg> - <reg> - <type>fwd</type> - <impl>absent</impl> - <name>ar</name> - <location>master_port</location> - </reg> - <reg> - <type>fwd</type> - <impl>absent</impl> - <name>b</name> - <location>master_port</location> - </reg> - <reg> - <type>fwd</type> - <impl>absent</impl> - <name>r</name> - <location>master_port</location> - </reg> - </amib> - <connect> - <ruser>false</ruser> - <wuser>false</wuser> - <src>M1_m</src> - <awuser>false</awuser> - <out_trans>16</out_trans> - <dest>external</dest> - <src_port>M1_m_m</src_port> - <protocol>axi4</protocol> - <buser>false</buser> - <out_reads>16</out_reads> - <lock>false</lock> - <out_writes>16</out_writes> - <dest_port>M1_m_m</dest_port> - <aruser>false</aruser> - </connect> - <connect> - <ruser>false</ruser> - <wuser>false</wuser> - <src>external</src> - <awuser>false</awuser> - <out_trans>32</out_trans> - <dest>M1_m</dest> - <src_port>M1_m_s</src_port> - <protocol>axi4</protocol> - <buser>false</buser> - <out_reads>16</out_reads> - <lock>false</lock> - <out_writes>16</out_writes> - <dest_port>M1_m_s</dest_port> - <aruser>false</aruser> - </connect> -</periph> -</NICConfigFile> - </Architecture> + <Architecture/> <Deliverables> <IPXACT/> <RTL/> diff --git a/verif/cocotb/sram_chiplet_tests.py b/verif/cocotb/sram_chiplet_tests.py index ddeadc2..3b108f6 100644 --- a/verif/cocotb/sram_chiplet_tests.py +++ b/verif/cocotb/sram_chiplet_tests.py @@ -60,6 +60,26 @@ class TB: for i in range(cycle): await RisingEdge(self.dut.clk_in) +async def init_sram(dut, tb, base_addr, size=0x8000): + data = bytearray([0]*2048) + for offset in range(0, size-0x800, 0x800): + await tb.axi_master.write(base_addr+offset, data) + await RisingEdge(dut.clk_in) + +async def SRAM_test_write(dut, tb, base_addr, byte_lanes, size): + for length in list(range(1, byte_lanes*2))+[8192]: + for offset in list(range(byte_lanes))+list(range(8192-byte_lanes, 8192)): + tb.log.info("length %d, offset %d", length, offset) + addr = offset + base_addr + test_data = bytearray([x % 256 for x in range(length)]) + + await tb.axi_master.write(addr, test_data, size=size) + data = await tb.axi_master.read(addr, length) + assert data.data == test_data + + await RisingEdge(dut.clk_in) + await RisingEdge(dut.clk_in) + @cocotb.test() async def SRAM_TEST(dut,idle_inserter=None, backpressure_inserter=None, size=None): tb = TB(dut) @@ -72,5 +92,6 @@ async def SRAM_TEST(dut,idle_inserter=None, backpressure_inserter=None, size=Non await tb.cycle_reset() tb.set_idle_generator(idle_inserter) tb.set_backpressure_generator(backpressure_inserter) - data = bytearray([0]*2048) - await tb.axi_master.write(0x00000000, data) + await init_sram(dut, tb, 0x00000000) + await init_sram(dut, tb, 0x1F0000 - 0x8000, size=0x8000) + await SRAM_test_write(dut, tb, 0x0, byte_lanes, size) -- GitLab