建议通过一个帧的信息域段表示帧类型,不同类型的帧,对payload,控制字段等帧的信息进行修改,帧尾格式相对固定。
统一格式的帧结构对验证者开发BFM组件(driver, monitor)有益。通常,一个接口对应一组BFM组件。如果该接口的多种报文格式都是统一的,验证者就可以把BFM的代码也统一起来。在driver中,对报文进行解析和驱动可以封装成一个task,多种报文,多次调用即可。在monitor中,对接口信号进行采样和组包可以封装成一个task,多种报文,多次调用即可。这样可以使BFM的代码归一化,减少重复和冗余,缩短环境错误的debug时间,减少环境平台的错误数量。
如果一个接口的多种报文的帧结构不统一,在driver和monitor中都要针对不同的报文结构,专门开发相关的解包驱动task和采样task。这样代码量就多了。言多必失,代码写多了也容易出错。
第四,仿真加速。
相对于FPGA验证和EMU验证,EDA验证仿真速度非常满。因此,当DUT有传输大量数据的场景时,如果设计者能添加加速仿真模式,等比例缩小传输数据量以减少EDA仿真时间,可提升仿真效率。验证的目的是发现DUT中的bug,是通过激励覆盖全部的DUT逻辑分支。如果对同一个逻辑分支用大量的数据量反复覆盖,不会增加DUT整体的代码覆盖率,对功能覆盖率也贡献微薄,反而是白白浪费了宝贵的仿真时间。
加速仿真模式下,令DUT等比例缩小传输数据的前提是,数字逻辑对数据量的处理是归一的,是一致的。数据流经过的逻辑分支是唯一的,恒定的。
目前,在逻辑设计中使用加速仿真策略也比较流行。例如在PCIe物理层协议中,规定当软件配置了Turbo_Sim模式(加速仿真),本来连续传输1024个Training Sequence业务报文,减少到只传输2个即可。再例如,某显示驱动芯片的测试模式,正常情况下需要传输65536个Byte的测试码型,在加速仿真模式下,只需要传输256个即可。
加速仿真模式,可以通过定义特定的宏来实现,也可通过配置寄存器来实现。通过配置寄存器使能加速仿真模式,对验证者更加友好。其原因有二:
其一,通过配置寄存器的方式,不会改变DUT的代码。Merge覆盖率数据不受加速和非加速两种模式的影响。
其二,通过配置寄存器的方式,加速仿真模式的测试用例和非加速仿真的测试用例可直接放在一起回归,不用在命令行添加额外的控制字符。
第五,信号命名。
寄存器表单中的寄存器域名称字符与数字逻辑内部的Reg名称字符保持一致。验证者可根据表单字符串在RTL代码中搜索寄存器信号,而不用每次都麻烦设计同学。
设计者在集成多个模块,包数字逻辑的顶层模块TOP wrapper时,顶层端口信号要与内部模块的端口信号名称保持一致。验证者在IT验证平台中重用UT平台时,与DUT连接的interface文件可直接重用UT的代码。
以上五点赘述,仅是小小的IC验证者在窥视高深莫测的芯片微架构设计和数字逻辑设计时,嘴里嘟嘟囔囔发的几句牢骚意见而已。不当之处,架构师和设计者们还是要多多保函,一笑而过。
突然,有人问,数字逻辑的可验证性设计,用英语怎么说?毕竟有很多在外企工作的小伙伴。
大家苦苦思考。“有了!”经验丰富的IC设计者田同学一拍大腿,说到:“在设计领域,本来就有DFX威廉希尔官方网站
一说。Design For X,面向产品生命周期的设计,X可以是生命周期的任一环节。例如DFT,design for test面向测试的设计。DFI,design for inspec
tion面向检验的设计。DFS,design for service面向维护的设计。这个数字逻辑的可验证性设计,就叫DFV吧,design for verification。”
原作者:一只特立独行的猪