基于UVM验证环境开发测试流程

2023-07-26

开发/测试一般流程在Visual Unit 4是怎样的?

已完成编码的项目
1) UT主管建立VU工程,分发给各测试工程师(每位启镇如测试工程师一个VU工程,或每个模块建立一个VU工程);
2) 各测试工程师实施测试,完成后将VU工程包交给开发工程师;
3)开发工程师针对未通过的测试,以eTDD方式修改小工程中的代码,全部测试通过后将VU工程包交回给测试工程师;
4)测试工程师确认后,测试完成,将小工程中的合格代码集成到大工程中。
单元测试由开发部门为主
1) 定义好公共接口旅派,即编写好公共头文件,建立好项目文件的目录结构;
2) UT主管按模块或任务建立VU工程,并将VU工程包交给各开发工程师。建立VU工程过程中,如果只有头文件,那么VU无法根据#include指令分辩需要用到的头文件,需在"高级"页点击"强制拷贝文件",将该VU工程需使用的头文件强制拷贝到VU工程;
3) 各开发工程师在小工程中开发,系统已自动生成桩代码,从编写第一个函数起,即可采用eTDD模式开发;
4)系统也在小工程中自动生成了桩代码,如有需要,可以在小工程中单独调试产品代码,当开发嵌入式项目时,这一特性很方便,例如,可以用Keil开发调试嵌入式程序,同时用VC6来编译测 试代码进行测试;
5)完成编码后将VU工程包交给测试工程师,测试工程师对照设计文档,检查现有用例是否符合设计,并利用"用例设计器"补充用例实现完整覆盖,然后将VU工程包交回开发工程师;
6)开发工程师针对未通过的测试,修改代码,使测试通过,完成后将VU工程包交回给测试工程师;
7)测试工程师确认后,开发/测试完成,将合格代码集成到大工程中。
测试部门为主、开发与测试并行
1)由程序员建立VU工程,程序员对代码和编译环境比较熟悉,建立VU工程的难度较小。
2)程序员编写代码,对于算法密集的函数,建议使用VU边开发边测试,由于VU的测试数据全面的描述了程序行为,程序员可以每写几行代码就执行测试,看看程序行为,这对整理和调整思路很有帮助,可以降低编程难度、提高效率。
3)程序员将VU工程定期或不定期交给测试部门,由测试部门完成全面测试。程序员可以继续开发。此时VU工程将出现分支,程序员手中的称为D工程,将增加产品代码,测试员手中的称为T工程,将增加测试数据。
4)测试员完成测试后,将T工程交给程序员,程序员将悄启该工程合并到D工程中,合并方法请参考下一节。
5)重复2、3、4,直到模块完成并通过测试。

商业银行将完成开发和测试环境的程序

D

用UVM来验证fifo呀,主要是怎么知道fifo空

异步FIFO通过比较读写地址进行满空判断,但是读写地址属于不同的时钟域,所以在比较之前需要先将读写地址进行同步处理,将写地址同步到读时钟域再和读地址比较进行FIFO空状态判断(同步后的写地址一定是小于或者等于当前的写地址,所以此时判断FIFO为空不一定是真空,这样更保守),将读地址同步到写时钟域再和写地址比较进行FIFO满状态判断(同步后的读地址一定是小于或者等于当前的读地址,所以此时判断FIFO为满不一定是真空,这样更保守),这样可以保证FIFO的特性:FIFO空之后不能继续读取,FIFO满之后不能继续写入。  大多数情形下,异步FIFO两端的时钟不是同频的,或者读快写慢,或者读慢写快,这时候进行地址同步的时候,可能会有地址遗漏,以读慢写快为例,进行满标志判断的时候需要将读地址同步到写时钟域,因为读慢写快,所以不会有读地址遗漏,同步后的读地址滞后当前读地址,所以可能满标志会提前产生。进行空标志判断的时候需要将写地址同步到读地址,因为读慢写快,所以当读时钟同步写地址的时候,必然会漏掉一部分写地址(写时钟快,写地址随写时钟翻转,直到满标志出现为止),那到底读时钟会同步到哪个写地址?不必在意是哪一个,我们关注的是漏掉的地址会不会对FIFO的空标志产生影响。比如写地址从0写到10,期间读时钟域只同步到了2,5,7这三个写地址,漏掉了其他地址。同步到7地址时,真实的写地址可能已经写到10地址,相当于“在读时钟域还没来得及觉察的情况下,写时钟域可能偷偷写了数据到FIFO去”,这样在比较读写地址的时候不会产生FIFO“空”读操作。漏掉的地址也没有对FIFO的逻辑操作产生影响。  我们可以对异步FIFO的地址采用binary编码,这样并不影响异步FIFO的功能,前提是读写地址同步时能够保持正确。这种情况在功能仿真时完全正确,问题只有到时序仿真时才会遇到。毛刺可以说是异步电路的杀手,一个毛刺被触发器采样后会被放大,然后传播,导致电路功能出错。binary编码的地址总线在跳变时极易产生毛刺,因为binary编码是多位跳变,在实现电路时不可能做到所有的地址总线等长,addressbusskew必然存在,而且写地址和读地址分属不同时钟域,读写时钟完全异步,这样地址总线在进行同步过程中出错不可避免,比如写地址在从0111到1000转换时4条地址线同时跳变,这样读时钟在进行写地址同步后得到的写地址可能是0000-1111的某个值,这个完全不能确定,所以用这个同步后的写地址进行FIFO空判断的时候难免出错。  这个时候gray码体现了价值,一次只有一位数据发生变化,这样在进行地址同步的时候,只有两种情况:1.地址同步正确;2.地址同步出错,但是只有1位出错;第一种正确的情况不需要分析,我们关注第二种,假设写地址从000->001,读时钟域同步出错,写地址为000->000,也就是地址没有跳变,但是用这个错误的写地址去做空判断不会出错,最多是让空标志在FIFO不是真正空的时候产生,而不会出现空读的情形。所以gray码保证的是同步后的读写地址即使在出错的情形下依然能够保证FIFO功能的正确性,当然同步后的读写地址出错总是存在的(因为时钟异步,采样点不确定)。这里需要注意gray码只是在相邻两次跳变之间才会出现只有1位数据不一致的情形,超过两个周期则不一定,所有地址总线busskew一定不能超过一个周期,否则可能出现gray码多位数据跳变的情况,这个时候gray码就失去了作用,因为这时候同步后的地址已经不能保证只有1位跳变了。  另外需要将地址总线打两拍,这是为了避免亚稳态传播,理论上将打两拍不能消除亚稳态现象,因为时钟异步,亚稳态不可避免,但是可以极大降低亚稳态传播的概率,低频情况下甚至STA不需要分析这里的异步时序,因为寄存器都可以在一拍内将亚稳态消除,恢复到正常0/1态。而在高频情况下则不一定,尤其在28nm工艺以下,需要检查两级触发器的延迟,保证延迟低,这样可以提高Tr,提高系统MTBF。

文章推荐

相关推荐