日常记录(60)全视界-MCDF与SV1

多通道数据整形器(Multi-Channel Data Formatter)

设计结构与接口

一共分为:上行数据通道(Slave的数据端口,3个)、仲裁、整形(7个 )、控制寄存器(4个)四个部分。

其中的仲裁器位于内部,没有外部接口对应。整形器有FMT_ID的通道号码未列出,其它都在图上进行了标识。

因为仲裁器在内部,对外部接口时序来讲,只说明上行数据通道、整形、控制寄存器三部分。另外,控制寄存器需要额外的寄存器地址和功能说明。

 

验证结构与分配

驱动

不同于绿皮书的名词和说法。这里使用激励发生器(Stimulator、drv)实现数据的发起,具体的实现上采用Channel initiator(发起器)、Registers(发起器)。

监视

监视器monitor,应该考虑到独立、复用、可维护,以及封装性,采取灰盒验证的策略,组件功能单一,因此最终应该设计出:每个不同点位的monitor,共6个。

比较

对来自不同的monitor信息进行存储、和检查。包括:Formatter的单独通路、MCDF的单独多条通路、Reg与Channel的通路对比。

倾向于集中管理激励与检查,体现统一,至于监视器,倾向于分散。

 

 

 

 验证与计划进度

划分好每个功能需要的时间,尽可能并行安排人员。

 

发生器的随机化

激励发生器视角

(和模块外部接口一致):

1. 时钟和复位

2. 寄存器配置

3. 上行数据通道输入

4. 整形器的反馈

激励种类视角

1. 从通道的下行数据输入速率,整形器FIFO深度测试

2. MCDF的自身功能,优先级,从端使能

3. 输入数据的关系,组合

4. 正常异常协议,错误返回值,异常错误的恢复。

5. 延时问题。

 

 

TimeSlot的再说明

preponed来自于上一个时隙的结尾。

active执行RTL的非阻塞,

inactive执行RTL的#0操作,

NBA执行阻塞操作,

observed执行SVA断言,

reactive执行tb代码。

postpone执行PLI、DPI的外部语言。

后面的任何对数据更改会重新进行active采样数据等操作。

 

\$exit

强制结束program

 

define parameter localparam

https://blog.csdn.net/u011729865/article/details/71774357

`define:可以跨模块的定义;
parameter:本module内有效的定义,可用于参数传递;
localparam:本module内有效的定义,不可用于参数传递;

所以,一般情况下,状态机的参数都是用localparam的。

 

 =与ref

在数据赋值上的=为数据值改变,对象本身的赋值,也是引用,数据值改变需要对象自定义copy。

ref为数据值的引用。

 

randc与rand

1. randc的成员优先于rand成员完成随机化。

2. 成员类句柄可以被声明为rand,内部的变量成员具有随机特性。

3. [std::]randomize(value),可以将普通变量进行随机。

 

4. 约束求解器支持vector(logic|int|{})、enum、struct packed

5. soft实现软约束,低优先级。

6. obj.randomize(null)不对所有变量随机,obj.arr.rand_mode(0)关闭随机属性,obj.acc1.constraint_mode(0)关闭约束块。

 

随机化的稳定性

1. 默认种子为0,各自的模块(不同的module)使用相同的种子。

2. 子线程RNG来源于父线程(模块里多个initial),根据需要进行获取,根据获取顺序分配随机值。对象同理。

3. \$srandom(seed_value)设置module的内部seed,srandom在类中设置对应类的seed。

4. post_random中存储使用过的随机值到队列,使用约束防止下一次随机出现已经使用过的值。在pre_random也可以进行一些预处理。

 

posted @ 2022-02-21 21:41  大浪淘沙、  阅读(259)  评论(0)    收藏  举报