一种存储器控制器验证系统、方法及记分板
技术领域
本发明属于存储器控制器技术领域,尤其涉及一种存储器控制器验证系统、方法及记分板。
背景技术
随着集成电路芯片的规模越来越大,在基于知识产权(Intellectual Property,IP)复用的片上系统(System On Chip,SOC)设计中,片上总线设计成为了最关键的问题。为此,业界出现了很多片上总线标准。其中由ARM公司推出的AMBA片上总线结构已经成为一种流行的工业标准。AMBA规范主要包括了AHB系统总线和APB(Advanced Peripheral Bus)外围总线。
图1是主模块、存储器控制器和存储器的连接示意图,主模块与存储器控制器通过AHB总线连接,存储器控制器和存储器之间通过存储器接口连接。现有的存储器控制器接收由主模块master module(发出AHB总线读/写操作的模块)通过AHB总线发出的读/写操作,再转换为存储器接口的读写操作,实现对存储器的读写操作。
此外,AHB总线读或写操作还可能被另一个读或写操作在任意时刻打断,即就是,AHB总线上某一读或写操作在进行中被另一个读或写操作打断继而执行后一个读或写操作,待后一操作完成后再继续执行前一读或写操作。这使得动态随机存储器(Dynamic Random Access Memory,DRAM)控制器的验证情况更为复杂,要充分的验证存储器控制器的正确性也更为困难。
图2是现有技术提供的验证存储器控制器的正确性流程图,具体过程是:在步骤S201中,发出总线写操作,写数据至写操作中指定的存储器的写入地址中。在步骤S202中,发出总线读操作,从上述写入地址中读取数据。在步骤S203中,将上述写入至存储器中的写入地址中的数据与读操作从该地址读取的数据进行比较,如果相同,则存储器控制器工作正常。
现有的验证存储器控制器的正确性的方案中,必须先进行写操作,再进行读操作,且读写操作必须是在相同情况,即读写地址,大小等条件必须完全相同才可以验证正确性。
这种验证方法对于单纯的AHB总线读写操作可以进行基本测试,但是不能建立与实际运行时完全相同的环境,因为实际中对AHB总线操作是随机的,不会按照这种先写后读的硬性要求来运行,例如:连续进行两次写操作,若后一个写操作会对前一个写操作产生影响,并导致错误,现有的测试方法就可能测不出来。而且,对于AHB总线的读写打断情况则更没有办法进行测试,如:一个写操作打断一个读操作时,我们没办法制作一个相反方向的操作,来验证其存储器控制器的正确性。只能制作一个读操作来测试上一个写操作是否正确,但读操作是否正确运行则没有办法验证。
因此,现有技术提供的存储器控制器验证方法在读写操作不一致时,无法成功验证存储器控制器是否工作正常。
发明内容
本发明的目的在于提供一种存储器控制器验证方法,旨在解决现有技术在读写操作不一致时,无法成功验证存储器控制器是否工作正常的问题。
本发明是这样实现的,一种存储器控制器验证方法,所述方法包括下述步骤:
记分板根据监测存储器控制器产生的监测事务和测试用例产生器产生的控制事务检测总线操作;
当所述总线操作中有写操作时,将所述写操作中的地址和该地址对应的数据写入预先设置类型的结构体中;
将生成的结构体存储在队列中;
当所述总线操作中有读操作时,将从队列中存储的结构体中或者从存储器中读取的与所述读操作中的读取地址相同的地址中存储的数据与通过所述读操作读取的数据进行比较,如果两者相同,表示存储器控制器工作正常;
其中,所述监测事务是由监测存储器控制器的接口总线时序所解析出来的总线操作描述;
所述控制事务是对主模块模拟器要传输给存储器控制器的总线操作的一个描述;
其中,所述当所述总线操作中有读操作时,将从队列中存储的结构体中或者从存储器中读取的与所述读操作中的读取地址相同的地址中存储的数据与通过所述读操作读取的数据进行比较,如果相同,表示存储器控制器工作正常的步骤具体为:
检查队列中是否有与所述读操作的读取地址相同的结构体;
当队列中有与所述读操作的读取地址相同的结构体时,从所述结构体中取出与所述读取地址相应的数据与通过所述读操作读出的数据进行比对,如果两者相同,表示存储器控制器工作正常;
当队列中没有与所述读操作的读取地址相同的结构体时,读取存储器中的与该读取地址相应的数据,与主模块模拟器通过所述读操作读出的数据进行比对,如果两者相同,表示存储器控制器工作正常。
本发明的另一目的在于提供一种记分板,所述记分板包括:
总线操作检测单元,用于根据监测存储器控制器产生的监测事务和测试用例产生器产生的控制事务检测总线操作;
结构体生成单元,用于当所述总线操作中有写操作时,将所述写操作中的地址和该地址对应的数据写入预先设置类型的结构体中;
队列生成单元,用于将生成的结构体存储在队列中;
验证结果生成单元,用于当所述总线操作中有读操作时,将从队列中存储的结构体中或者从存储器中读取的与所述读操作中的读取地址相同的地址中存储的数据与通过所述读操作读取的数据进行比较,如果两者相同,表示存储器控制器工作正常;
其中,所述监测事务是由监测存储器控制器的接口总线时序所解析出来的总线操作描述;
所述控制事务是对主模块模拟器要传输给存储器控制器的总线操作的一个描述;
其中,所述验证结果生成单元包括:
地址判断子单元,用于检查队列中是否有与所述读操作的读取地址相同的结构体;
第一验证结果生成子单元,用于当队列中有与所述读操作的读取地址相同的结构体时,从所述结构体中取出与所述读取地址相应的数据,与通过所述读操作读出的数据进行比对,如果两者相同,表示存储器控制器工作正常;
第二验证结果生成子单元,用于当队列中没有与所述读操作的读取地址相同的结构体时,读取存储器中的与该读取地址相应的数据,与主模块模拟器通过所述读操作读出的数据进行比对,如果两者相同,表示存储器控制器工作正常。
本发明的另一目的在于提供一种存储器控制器验证系统,所述系统包括如上所述的记分板,所述系统还包括测试用例产生器、主模块模拟器、存储器控制器以及存储器,其中,所述测试用例发生器发送控制事务至主模块模拟器和记分板,主模块模拟器根据所述控制事务产生符合总线时序的操作并将其传送至存储器控制器,通过存储器控制器的接口总线时序监测存储器控制器的总线操作,生成监测事务并传送至记分板。
在本发明中,当记分板接收到测试用例产生器产生的控制事务是将对存储器进行写操作时,存储即将写入到存储器中的数据以及该数据的存储地址至预先设置类型的结构体中,并添加到预先设置的队列中,当记分板接收到测试用例产生器产生的控制事务是将对存储器进行读操作时,将从队列中存储的结构体中或者从存储器中读取的与所述读操作中的读取地址相同的地址中存储的数据与通过所述读操作读取的数据进行比对,若数据相同,则测试通过,该验证方法在完成一次总线写操作以后,记住该写操作写入存储器中的数据以及该数据的存储地址,在检测到总线操作是读操作时,将读操作读取的数据与写操作写入的数据进行比较,不一定总线操作一定满足先写后读的时序,可以在各种总线时序下验证存储器控制器的正确性。
附图说明
图1是现有技术提供的主模块、存储器控制器和存储器的连接示意图;
图2是现有技术提供的验证存储器控制器的正确性的实现流程图;
图3是本发明实施例提供的存储器控制器验证的实现流程图;
图4是本发明实施例提供的存储器控制器验证系统的结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
在本发明实施例中,当记分板接收到测试用例产生器产生的控制事务是将通过总线对存储器进行写操作时,存储即将写入到存储器中的数据以及该数据的存储地址至预先设置类型的结构体中,并添加到预先设置的队列中,当记分板接收到测试用例产生器产生的控制事务是将通过总线对存储器进行读操作时,将从队列中存储的结构体中或者从存储器中读取的与所述读操作中的读取地址相同的地址中存储的数据与通过所述读操作读取的数据进行比对,若数据相同,则测试通过,该验证方法可以验证在各种总线时序情况下,存储器控制器能否对存储器进行正确控制。
图3示出了本发明实施例提供的存储器控制器验证方法的实现流程,详述如下:
在步骤S301中,记分板根据监测存储器控制器产生的监测事务和测试用例产生器产生的控制事务检测总线操作。
作为本发明的一个实施例,记分板先根据监测存储器控制器产生的监测事务以及测试用例产生器传输的控制事务检测主模块模拟器是否正确发出总线操作,然后根据流程判断存储器控制器是否正确执行总线操作,在本实施例中,主模块模拟器通过总线发送总线操作命令至存储器控制器,存储器控制器接收所述主模块模拟器发送的总线操作,所述总线操作包括写操作、读操作。其中,在步骤S301之前,存储器控制器验证方法还包括下面的步骤,第一步:测试用例产生器发送控制事务至主模块模拟器和记分板,该控制事务是对主模块模拟器要传输给存储器控制器的总线操作的一个描述,例如:主模块模拟器要传输给存储器控制器的总线操作是读还是写,是否会被另一个操作打断等;第二步:主模块模拟器根据所述控制事务产生符合总线时序的操作并将其传送至存储器控制器,例如,主模块模拟器接收测试用例产生器传输的控制事务,根据该控制事务产生符合总线时序的操作,再通过总线传输给存储器控制器;第三步:通过存储器控制器的接口总线时序监测存储器控制器生成监测事务并传送至记分板,所述监测事务是由监测存储器控制器的接口总线时序所解析出来的总线操作描述。最后,记分板根据监测存储器控制器产生的监测事务按照一系列的流程对存储器控制器是否正确执行总线操作进行判断。在本发明实施例中,总线是AHB总线,存储器控制器是DRAM控制器,存储器是DRAM。
在步骤S302中,判断接收到测试用例产生器产生的控制事务中的总线操作中是否有写操作,当所述总线操作中有写操作时,将所述写操作中的地址和该地址对应的数据写入预先设置类型的结构体中,并一一进行存储。
作为本发明的一个实施例,判断主模块模拟器发出的总线操作(打断和被打断的操作)中是否有写操作,当所述总线操作中有写操作时,将所述写操作中的地址和该地址对应的数据写入预先设置好类型的结构体中,并一一进行存储,其中结构体的类型预先设置,包括以字节为单位的写操作存储地址和该写操作存储地址中存储的相应的以字节为单位的数据。
在步骤S303中,将生成的结构体存储在队列中。
作为本发明的一个实施例,检查生成的结构体中存储的地址是否与队列中存放的结构体中存储的地址相同,如果相同,则用新生成的结构体替换队列中原来存储的结构体;否则直接将新生成的结构体添加到队列中,其中,队列是预先设置的,队列中存放的单位是预先设置类型的结构体。
在步骤S304中,判断接收到测试用例产生器产生的控制事务中的总线操作中是否有读操作,当所述总线操作中有读操作时,则从队列中存储的结构体中或者直接从存储器中读取与该读操作中的读取地址对应的存储地址中存储的数据。
作为本发明的一个实施例,判断主模块模拟器发出的总线操作(打断和被打断的操作)中是否有读操作,当所述总线操作中有读操作时,则首先检查队列中是否有与该读操作的读取地址相同的结构体,如果有,则从该结构体中取出与该读取地址相应的数据与主模块模拟器通过读操作从总线上读出的数据进行比对,否则,直接读取存储器中的与该读取地址相应的数据,与主模块模拟器通过读操作从总线上读出的数据进行比对。
在步骤S305中,将从队列中存储的结构体中或者直接从存储器中读取的与该读操作中的读取地址对应的存储地址中存储的数据与主模块模拟器通过读操作从总线上读取的数据进行比较,如果两者相同,则表示存储器控制器工作正常。
作为本发明的一个实施例,首先检查队列中是否有与该读操作的读取地址相同的结构体,如果有,则从该结构体中取出与该读取地址相应的数据与主模块模拟器通过读操作从总线上读出的数据进行比对,如果两者相同,则表示存储器控制器工作正常;否则,直接读取存储器中的与该读取地址相应的数据,与主模块模拟器通过读操作从总线上读出的数据进行比对,如果两者相同,则表示存储器控制器工作正常。
图4示出了本发明实施例提供的存储器控制器验证系统的结构,为了便于说明,仅示出了本发明实施例相关的部分。该存储器控制器验证系统包括:主模块模拟器41、存储器控制器42、存储器43、测试用例产生器44、记分板45。
其中,所述记分板45包括:结构体类型设置单元451、队列设置单元452、总线操作检测单元453、结构体生成单元454、队列生成单元455以及验证结果生成单元456。
结构体类型设置单元451用于预先设置结构体类型,所述结构体类型包括一写操作时写入存储器的数据和一所述数据在存储器中的存储地址,所述数据和存储地址均以字节为单位。
队列设置单元452用于预先设置队列,所述队列的存放单位是预先设置类型的结构体。
整个存储器控制器验证系统的工作过程详述如下:
测试用例产生器44发送控制事务至主模块模拟器41和记分板45,该控制事务是对主模块模拟器41要传输给存储器控制器42的总线操作的一个描述,例如:主模块模拟器41要传输给存储器控制器42的总线操作是读还是写,是否会被另一个操作打断等;第二步:主模块模拟器41根据所述控制事务产生符合总线时序的操作并将其传送至存储器控制器42,例如,主模块模拟器41接收测试用例产生器44传输的控制事务,根据该控制事务产生符合总线时序的操作,再通过总线传输给存储器控制器42;第三步:通过存储器控制器42的接口总线时序监测存储器控制器42生成监测事务并传送至记分板45,所述监测事务是由监测存储器控制器的接口总线时序所解析出来的总线操作描述。
记分板45的总线操作检测单元453根据监测存储器控制器42产生的监测事务以及测试用例产生器传输的控制事务检测主模块模拟器是否正确发出总线操作,然后根据流程判断存储器控制器是否正确执行总线操作。当接收到测试用例产生器产生的控制事务中的总线操作中有写操作时,通过结构体生成单元454将所述写操作中的地址和该地址对应的数据写入预先设置类型的结构体中,并一一进行存储,其中结构体的类型由结构体类型设置单元451预先设置,包括以字节为单位的写操作存储地址和该写操作存储地址中存储的相应的以字节为单位的数据,在本发明实施例中,总线是AHB总线,存储器控制器是DRAM控制器,存储器是DRAM。
队列生成单元455用于将生成的结构体存储在队列中。作为本发明的一个实施例,首先检查新生成的结构体中存储的地址是否与队列中存放的结构体中存储的地址相同,如果两者相同,则用新生成的结构体替换队列中原来存储的结构体;否则直接将新生成的结构体添加到队列中,其中,队列是通过队列设置单元452预先设置的,队列中存放的单位是结构体,该结构体的类型通过结构体类型设置单元451预先设置。
验证结果生成单元456根据监测存储器控制器42所产生的监测事务以及测试用例产生器传输的控制事务检测存储器控制器42是否正确执行总线操作,当接收到测试用例产生器产生的控制事务中的总线操作中有读操作时,将从队列中存储的结构体中或者从存储器中读取的与所述读操作中的读取地址相同的地址中存储的数据与通过所述读操作读取的数据进行比较,如果两者相同,表示存储器控制器工作正常。具体过程如下,检测测试用例产生器产生的总线操作(打断和被打断的操作)中是否有读操作,当所述总线操作有读操作时,则首先通过验证结果生成单元456的地址判断子单元检查队列中是否有与所述读操作的读取地址相同的结构体,如果队列中有与所述读操作的读取地址相同的结构体,则通过第一验证结果生成子单元从所述结构体中取出与所述读取地址相应的数据与通过所述读操作读出的数据进行比对,如果两者相同,表示存储器控制器工作正常;如果队列中没有与所述读操作的读取地址相同的结构体,则通过第二验证结果生成子单元读取存储器中的与该读取地址相应的数据,与主模块模拟器通过所述读操作读出的数据进行比对,如果两者相同,表示存储器控制器工作正常。另外,由于结构体是以字节为单位的,所以进行读操作时可能只有一部分数据可在队列的结构体中找到,另一部分要与直接读取存储器中的相应地址的数据进行拼接,才能完成所有的读操作数据比对,因此验证结果生成单元456还包括数据拼接子单元,用于将从队列中存储的结构体中读取的与所述读操作中的读取地址相同的地址中存储的数据与从存储器中相应的地址读取的数据进行拼接。
在本发明实施例中,当记分板接收到测试用例产生器产生的控制事务是将对存储器进行写操作时,存储即将写入到存储器中的数据以及该数据的存储地址至预先设置类型的结构体中,并添加到预先设置的队列中,当记分板接收到测试用例产生器产生的控制事务是将对存储器进行读操作时,将从队列中存储的结构体中或者从存储器中读取的与所述读操作指令中的读取地址相同的地址中存储的数据与通过所述读操作指令读取的数据进行比对,若数据相同,则测试通过,该验证方法可以验证在各种总线时序情况下,存储器控制器能否对存储器进行正确控制。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。