diff --git a/dram/resources/scripts/tests.py b/dram/resources/scripts/tests.py index 2c92bac5..0109e021 100644 --- a/dram/resources/scripts/tests.py +++ b/dram/resources/scripts/tests.py @@ -514,6 +514,25 @@ def write_to_read_and_read_to_write(connection): return TestSuceeded() +@test +def read_holds_dll_constraint_after_sref(connection): + cursor = connection.cursor() + query = """SELECT Phases.ID,PhaseBegin,PhaseName,TBankGroup from Phases INNER JOIN Transactions ON Phases.Transact = Transactions.ID AND TBank = :bank + WHERE PhaseName IN ('RD', 'RDA', 'SREF') ORDER BY PhaseBegin""" + + + for bankNumber in range(dramconfig.numberOfBanks): + cursor.execute(query,{"bank": bankNumber}) + lastRow = cursor.fetchone() + for currentRow in cursor: + if(currentRow[2] in ["RD","RDA"] and lastRow[2] == 'SREF'): + srefEndToRead = currentRow[1] - (lastRow[1] - dramconfig.clk) + if(srefEndToRead < dramconfig.tXSRDLL ): + return TestFailed("Read {0} starts {1} after end of sref {2}. Minimum time is {3}". + format(currentRow[0],formatTime(srefEndToRead),lastRow[0], formatTime(dramconfig.tXSRDLL))) + lastRow = currentRow + return TestSuceeded() + @test def sref_active_for_minimal_time(connection): """Checks that SREF is active for a minimal time (JEDEC 229, P. 41)"""