基于令牌桶的模拟总线有效带宽的仿真组件及方法
技术领域
本发明涉及EDA(ElectronicDesignAutomation,电子设计自动化)验证技术领域,具体来讲是一种基于令牌桶的模拟总线有效带宽的仿真组件及方法。
背景技术
现在越来越多的芯片内部用到总线技术,而受限于晶振时钟的精度,往往总线的设计带宽要大于承载业务的带宽。如设计承载ODU4(其带宽为239/227×99532800kbit/s,约104.7944Gbit/s)的总线可能会被设计成为320bit位宽,时钟速率为349.92M,即带宽为111.9744Gbit/s,大于被承载的业务(ODU4)的带宽。
由于总线的带宽大于所承载业务的带宽,因此,总线上的数据不是每个时钟周期都是有效的。总线数据有效使能占空比可以由以下公式表示:
在仿真中模拟类似的总线接口最难的就是控制总线数据有效信号。现有的做法是,按照带宽比例关系算出大致的占空比,然后通过这个固定占空比来控制总线的数据使能信号。这种做法有很多弊端,具体表现如下:
第一,很多情况下总线带宽不能被总线所承载的业务带宽除尽,因此,固定占空比的做法不可能精确。而总线带宽是一定的,如果在模拟总线数据有效使能占空比时,结果偏大或者偏小都会导致总线所承载的业务带宽偏大或者偏小。如果把总线看成是DUT(Designundertest,被测试对象)的入口,业务端口看成是DUT的出口,那么这种不精确导致DUT入口数据量大于出口数据量,或者DUT入口数据量小于出口数据量,对DUT中的缓存产生影响,使仿真无法继续或者仿真结果不准确。
第二,总线所承载的业务带宽是会有变化的,根据每种业务种类的不同,需要模拟几个到几百ppm(partpermillion,百万分之几)的偏差。当总线带宽变化时,总线数据有效信号的占空比也会相应的变化,如果采用固定占空比的做法就需要重新设计。
第三,固定占空比的做法没有固定的算法,导致每个不同的场景都需要重新设计。比如产生一个占空比为3/7和4/11的数据有效信号就不可能用同一种算法。
第四,采用固定占空比做法产生出来的数据有效信号不容易做到均匀,可能会对DUT中的缓存造成冲击。比如产生一个占空比为4/11的数据有效信号,无论怎么排布空闲都不能被均匀分布,而采用固定占空比的做法,每隔11个周期将会是一个循环,很有可能导致某段空闲比其他空闲多几拍,或者某段有效数据比其他有效数据多几拍这种情况。
总之,现有的总线有效带宽模拟方法在精确性、灵活性、重用性以及均匀性方面都无法满足越来越复杂的总线验证需求。
发明内容
针对现有技术中存在的缺陷,本发明要解决的技术问题为:设计一种在精确性、灵活性、重用性以及均匀性方面都能满足总线验证需求的总线有效带宽模拟方案。
为解决以上技术问题,本发明采取的技术方案是:提供一种基于令牌桶的模拟总线有效带宽的仿真组件,包括写侧延迟计算模块、写侧令牌控制模块、读侧延迟计算模块以及读侧令牌控制模块;
所述写侧延迟计算模块用于:根据写侧设置的总线所承载业务的带宽、数据宽度以及当前总线所承载业务的带宽偏差计算出写侧写入一拍数据所需要的延迟周期;
所述写侧令牌控制模块用于:每当延迟写侧计算的延迟周期后,在有写请求时,根据数据宽度将当前令牌桶内的令牌数量进行相应增加;所述令牌桶内的令牌数量与数据量对应,通过对令牌桶内令牌数量的动态调整模拟总线数据有效信号占空比;
所述读侧延迟计算模块用于:根据读侧设置的时钟频率以及当前总线时钟的频偏计算出读侧读出一拍数据所需要的延迟周期;
所述读侧令牌控制模块用于:每当延迟读侧计算的延迟周期后,在有读请求来临且总线可以输出数据时,进行数据的输出,并在输出数据后,根据读侧设置的总线宽度将当前令牌桶内的令牌数量进行相应减少。
在上述技术方案的基础上,所述写侧令牌控制模块在没有写请求时,不改变当前令牌桶内的令牌数量;所述读侧令牌控制模块在没有读请求来临或者总线不可以输出数据时,不改变当前令牌桶内的令牌数量。
在上述技术方案的基础上,所述读侧令牌控制模块判断总线可以输出数据的依据为:当前令牌桶内的令牌数量大于等于设置的令牌桶的可读门限。
在上述技术方案的基础上,所述写侧延迟计算模块计算写侧的延迟周期的计算公式为:
在上述技术方案的基础上,所述读侧延迟计算模块计算读侧的延迟周期的计算公式为:
本发明还提供一种基于令牌桶的模拟总线有效带宽的方法,其中,所述令牌桶的令牌数量与数据量对应,通过对令牌桶内令牌数量的动态调整模拟总线数据有效信号占空比;该方法包括写侧流程和读侧流程两个并行的步骤:
写侧流程:
步骤SW1:设置写侧总线所承载业务的带宽、数据宽度以及总线所承载业务的带宽偏差的初始值,转入步骤SW2;
步骤SW2:根据写侧设置的带宽、数据宽度以及当前的带宽偏差计算出写侧每拍数据的延迟周期,转入步骤SW3;
步骤SW3:延迟经计算得到的延迟周期后,若有写请求,则根据数据宽度将当前令牌桶内的令牌数量进行相应增加,返回步骤SW2;
读侧流程:
步骤SR1:设置读侧总线宽度、时钟频率、总线时钟的频偏的初始值,转入步骤SR2;
步骤SR2:根据读侧设置的时钟频率以及当前的总线时钟的频偏计算出读侧每拍数据的延迟周期,转入步骤SR3;
步骤SR3:延迟经计算得到的延迟周期后,若有读请求且总线可以输出数据,则产生读使能输出数据,并根据总线宽度将当前令牌桶内的令牌数量进行相应减少,返回步骤SR2。
在上述技术方案的基础上,步骤SW3中,若没有写请求,则不改变当前令牌桶内的令牌数量;步骤SR3中,若没有读请求或者总线不可以输出数据,则不改变当前令牌桶内的令牌数量。
在上述技术方案的基础上,步骤SR1还包括以下步骤:设置令牌桶的初始门限和可读门限,所述可读门限根据读侧的总线宽度进行设置;步骤SR3中判断总线可以输出数据的依据为:当前令牌桶内的令牌数量大于等于所述可读门限。
在上述技术方案的基础上,步骤SW2中计算写侧每拍数据的延迟周期的计算公式为:
在上述技术方案的基础上,步骤SR2中计算读侧每拍数据的延迟周期的计算公式为:
本发明的有益效果在于:
本发明借鉴了令牌桶的思想,采用令牌来控制总线数据有效信号,将总线承载的有效带宽及总线带宽分别刻画成写侧时钟和读侧时钟,并用延迟来实现,最终通过对令牌数量的动态调整精准地模拟了总线数据有效信号占空比。
具体来说,在写侧,每当写入数据的时候,令牌桶内的令牌数量进行相应地增加,令牌数量增长则代表每个写周期内数据量的增长。在读侧,当需要输出且令牌桶中的令牌数量达到输出条件时,数据有效信号为高,总线可以输出数据,且令牌桶中令牌数量进行相应减少;当不需要输出或者令牌桶中的令牌数量不够输出条件时,数据有效信号则为低,总线不可以输出数据,且令牌桶内令牌数量不变。
通过这种动态调整可以做到非常精准地模拟总线数据有效信号占空比,且需要模拟总线所承载带宽偏差时,只需要通过参数修改写侧时钟即可,非常灵活。不同的总线只需要配置参数即可,可以复用到任何总线仿真环境中。由于刻画的写时钟在一定的配置下是一定的,如果输入是均匀的,令牌桶中令牌增加速度是均匀的,那么输出的总线有效信号则是均匀的。由此可见,本发明在精确性、灵活性、可复用性以及均匀性方面都满足了越来越复杂的总线验证的需要。
附图说明
图1为本发明实施例中基于令牌桶的模拟总线有效带宽的仿真组件的框图;
图2为本发明实施例中基于令牌桶的模拟总线有效带宽的方法的流程图;
图3为截取一段仿真时间的实例波形图。
具体实施方式
下面结合附图及具体实施例对本发明作进一步的详细描述。
参见图1所示,本发明实施例提供一种基于令牌桶的模拟总线有效带宽的仿真组件,包括写侧延迟计算模块、写侧令牌控制模块、读侧延迟计算模块以及读侧令牌控制模块;其中,所述令牌桶的令牌数量与数据量对应(即一个令牌对应一个字节的数据),通过令牌数量的动态调整精准地模拟总线数据有效信号占空比;
所述写侧延迟计算模块用于:根据写侧设置的总线所承载业务的带宽、数据宽度以及当前总线所承载业务的带宽偏差计算出写侧写入一拍数据所需要的延迟周期;
所述写侧令牌控制模块用于:每当延迟写侧计算的延迟周期后,在有写请求时,根据数据宽度将当前令牌桶内的令牌数量进行相应增加;
所述读侧延迟计算模块用于:根据读侧设置的时钟频率以及当前总线时钟的频偏计算出读侧读出一拍数据所需要的延迟周期;
所述读侧令牌控制模块用于:每当延迟读侧计算的延迟周期后,在有读请求来临且总线可以输出数据时,进行数据的输出,并在输出数据后,根据读侧设置的总线宽度将当前令牌桶内的令牌数量进行相应减少。
参见图2所示,本发明同时提供了一种基于令牌桶的模拟总线有效带宽的方法,该方法包括写侧流程和读侧流程两个并行步骤,其中,
写侧流程具体包括以下步骤:
步骤SW1:设置写侧总线所承载业务的带宽、数据宽度以及总线所承载业务的带宽偏差的初始值,转入步骤SW2;
步骤SW2:根据写侧设置的带宽、数据宽度以及当前的带宽偏差计算出写侧每拍数据的延迟周期,转入步骤SW3;
可以理解的是,总线所承载业务的带宽、数据宽度为固定值,总线所承载业务的带宽偏差在实际操作过程中为可变化值;其中,步骤SW2中计算写侧的延迟周期的计算公式为:
步骤SW3:延迟经计算得到的延迟周期后,若此时有激励数据写请求,则根据数据宽度将当前令牌桶内的令牌数量进行相应增加,返回步骤SW2;若没有激励数据写请求,则不改变当前令牌桶内的令牌数量,返回步骤SW2。
读侧流程具体包括以下步骤:
步骤SR1:设置读侧总线宽度、时钟频率、总线时钟的频偏的初始值、令牌桶的初始门限以及可读门限,转入步骤SR2;
可以理解的是,令牌桶的可读门限根据读侧的总线宽度进行设置,即
步骤SR2:根据读侧设置的时钟频率以及当前的总线时钟的频偏计算出读侧每拍数据的延迟周期,转入步骤SR3;
可以理解的是,时钟频率为固定值,总线时钟的频偏在实际操作过程中为可变化值;其中,步骤SR2中计算读侧的延迟周期的计算公式为:
步骤SR3:延迟经计算得到的延迟周期后,若有读请求且当前令牌桶内的令牌数量大于等于可读门限(即总线可以输出数据),则产生读使能输出数据,并根据总线宽度将当前令牌桶内的令牌数量进行相应减少,返回步骤SR2;若没有读请求或者令牌数量小于可读门限(即总线不可以输出数据),则不改变当前令牌桶内的令牌数量,返回步骤SR2。
为了更好的理解本发明,下面通过具体实施例对本发明做进一步说明。本实施例以320bit位宽、时钟速率为349.92M,带宽为111.9744G的总线为实例,其承载的业务为ODU4,带宽为239/227×99532800kbit/s,约104.7944Gbit/s,但本发明不局限于此应用。
具体来说,写侧流程为:
步骤SW1:由于仿真环境输入数据是按字节的,因此,设置写侧总线所承载业务的带宽为239/227×99532800kbit/s、数据宽度为8bit、总线所承载业务的带宽偏差的初始值为0ppm,转入步骤SW2;
步骤SW2:根据写侧设置的带宽、数据宽度以及当前的带宽偏差计算出写侧每拍数据的延迟周期,转入步骤SW3;
例如:当前的带宽偏差仍为0ppm,则根据写侧的延迟周期计算公式可得出,当前写侧的
步骤SW3:延迟经计算得到的延迟周期后,若此时有激励数据写请求,则根据数据宽度将当前令牌桶内的令牌数量相应增加1(即增加的),返回步骤SW2;若没有激励数据写请求,则不改变当前令牌桶内的令牌数量,返回步骤SW2。
读侧流程为:
步骤SR1:设置读侧总线宽度为320bit、时钟频率为349.92MHz、总线时钟的频偏的初始值为0ppm、令牌桶的初始门限为0以及可读门限为40,转入步骤SR2;
步骤SR2:根据读侧设置的时钟频率以及当前的总线时钟的频偏计算出读侧每拍数据的延迟周期,转入步骤SR3;
例如:当前的总线时钟的频偏仍为0ppm,则根据读侧的延迟周期计算公式可得出,当前读侧的
步骤SR3:延迟经计算得到的延迟周期后,若有读请求且且当前令牌桶内的令牌数量≥可读门限40(即总线可以输出数据),则产生读使能输出数据,并根据总线宽度将当前令牌桶内的令牌数量相应减少40(即增加的),返回步骤SR2;若没有读请求或者令牌数量小于可读门限(即总线不可以输出数据),则不改变当前令牌桶内的令牌数量,返回步骤SR2。
图3为截取一段仿真时间的结果,可以看到产生的数据有效信号占空比为101/108,约为0.935185,总线所承载的业务带宽和总线带宽比为104.7944/111.9744,约为0.935878,本发明很好地模拟了总线有效带宽。同时,最小连续有效数据为14拍,最大连续有效数据为15拍,无效数据均为1拍,非常均匀。如果参考更长时间的结果,由本发明产生的数据有效信号占空比将无限逼近总线所承载的业务带宽和总线带宽比,且理论精度不会超过1ppm。
本发明借鉴了令牌桶的思想,保证了通过模拟数据有效信号精确地刻画总线有效带宽为总线所承载的业务带宽,保证了数据有效信号的均匀性,不会对DUT中缓存造成影响,可适应任何总线所承载业务带宽偏差的要求,同时可以复用到任何总线中,提高了仿真环境搭建的效率,满足了越来越复杂的总线验证需求。
本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。