From a9d81a4a52068e347c35dc902deb0740a1a74ae1 Mon Sep 17 00:00:00 2001 From: dwn1c21 <dwn1c21@soton.ac.uk> Date: Thu, 26 Sep 2024 17:50:49 +0100 Subject: [PATCH] v1.0 fix Idle transfers when cache is valid --- .../logical/ahb_qspi_interface.v | 6 ++++-- verif/cocotb/ahb_qspi_tests.py | 21 ++++++++++++------- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/logical/ahb_qspi_interface/logical/ahb_qspi_interface.v b/logical/ahb_qspi_interface/logical/ahb_qspi_interface.v index 32a07f4..00d5163 100644 --- a/logical/ahb_qspi_interface/logical/ahb_qspi_interface.v +++ b/logical/ahb_qspi_interface/logical/ahb_qspi_interface.v @@ -60,7 +60,7 @@ reg [1:0] last_HTRANS; reg qspi_ready; reg qspi_started; -assign HREADYOUT = qspi_ready; //(current_state==IDLE)? 1'b1 : qspi_ready; +assign HREADYOUT = (current_state==IDLE && last_HTRANS==2'b00) ? 1'b1: qspi_ready; //(current_state==IDLE)? 1'b1 : qspi_ready; always @(posedge HCLK or negedge HRESETn) begin if(~HRESETn) begin @@ -83,7 +83,9 @@ end always @(*) begin next_state = IDLE; case(current_state) - IDLE: if(HSELx & HWRITE & ~qspi_ready) + IDLE: if(HTRANS==2'b00) + next_state = IDLE; + else if(HSELx & HWRITE & ~qspi_ready) next_state = WAIT_WRITE; else if(HSELx & ~qspi_ready) next_state = WAIT_READ; diff --git a/verif/cocotb/ahb_qspi_tests.py b/verif/cocotb/ahb_qspi_tests.py index db76779..660fd77 100644 --- a/verif/cocotb/ahb_qspi_tests.py +++ b/verif/cocotb/ahb_qspi_tests.py @@ -346,7 +346,7 @@ async def QSPI_READ_TESTS(dut): QSPI_CTRL_REG = QSPI_CTRL_REG | (1<<25) await tb.config_ahb_master.write(0x00, QSPI_CTRL_REG) - n_reads = 64 + n_reads = 512 start_time = cocotb.utils.get_sim_time(units='ns') for i in range(0,n_reads): @@ -367,10 +367,12 @@ async def QSPI_READ_TESTS(dut): CACHE_STATUS_tmp = await tb.config_ahb_master.read(CACHE_CONFIG_ADDR+0x04,4) CACHE_STATUS = int(CACHE_STATUS_tmp[0]['data'],16) - while((CACHE_STATUS&(0x3))==0): + while((CACHE_STATUS&(0x3))!=2): + CACHE_STATUS_tmp = await tb.config_ahb_master.read(CACHE_CONFIG_ADDR+0x00,4) CACHE_STATUS_tmp = await tb.config_ahb_master.read(CACHE_CONFIG_ADDR+0x04,4) CACHE_STATUS = int(CACHE_STATUS_tmp[0]['data'],16) await Timer(time=10, units='us') + print(CACHE_STATUS) print(CACHE_STATUS) @@ -381,7 +383,7 @@ async def QSPI_READ_TESTS(dut): data = await tb.data_ahb_master.read(i*4,4) end_time_uncached = cocotb.utils.get_sim_time(units='ns') dt_uncached = end_time_uncached - start_time_uncached - + await Timer(time=10, units='us') start_time_cached = cocotb.utils.get_sim_time(units='ns') for i in range(0,n_reads): data = await tb.data_ahb_master.read(i*4,4) @@ -396,11 +398,16 @@ async def QSPI_READ_TESTS(dut): await tb.config_ahb_master.write(0x08, 0x0FF) await tb.config_ahb_master.write(0x08, 0x1FF) tb.log.info("Time taken = %f", dt) - BW = n_reads*4*32/(8*dt*1e-3) - BW_uncached = n_reads*4*32/(8*dt_uncached*1e-3) - BW_cached = n_reads*4*32/(8*dt_cached*1e-3) + BW = n_reads*4/(dt*1e-3) + BW_uncached = n_reads*4/(dt_uncached*1e-3) + BW_cached = n_reads*4/(dt_cached*1e-3) + + tb.log.info("dt APB: %f ns", dt) + tb.log.info("dt caching: %f ns", dt_uncached) + tb.log.info("dt cached: %f ns", dt_cached) + - tb.log.info("Bandwidth: %f MB/s", BW) + tb.log.info("Bandwidth APB: %f MB/s", BW) tb.log.info("Bandwidth caching: %f MB/s", BW_uncached) tb.log.info("Bandwidth cached: %f MB/s", BW_cached) -- GitLab