1.AHB SRAMC主要做了哪些事情?
一般从三个维度来回答,首先是待测设计的top结构,其次是数据流图,最后是主要功能。
(1) AHB SRAMC是挂接在AHB总线上的,AHB的slave,里面包含SRAM controller和八个SRAM颗粒。
(2)它主要完成总线的读写请求,AHB master发出写的命令,SRAMC控制器收到后,将其从AHB时序转换为SRAM时序,然后发给SRAM,将数据写入,AHB master发出读的命令,SRAM控制器收到后,将其转换为SRAM的读时序,进行数据的读出。
(3)实现的功能就是完成将AHB的读写时序转换为SRAM的读写访问时序,完成AHB的读写访问请求。
2.简述在TB中使用interface和clocking block的好处?
interface是一组接口,用于对信号进行一个封装,捆扎起来,如果想verilog那样对各个信号进行连接,每一层我们都需要对接口进行定义,若信号过多,很容易出现人为错误,而且提高可重用性,因此使用interface接口进行了连接,不仅可以简化代码,而且提高可重用性,除此之外,interface内部提供了其它一些功能,用于测试平台与DUT之间的同步和避免竞争。
clocking block:在interface内部我们可以定义clocking块,可以使得信号保持同步,对于接口的采样和驱动有详细的设置操作,从而避免TB与DUT的接口竞争。减少我们由于信号竞争导致的错误,采样提前,驱动落后,保证信号不会出现竞争。
sv中使用clocking模块控制同步信号,在interface中定义clocking模块,将信号同步到某一个特定的时钟,clcoking模块中所有信号都是同步驱动或采样,可以确保验证平台可以在正确的时间跟设计进行交互,clocking模块主要使用在验证平台中,不能用作RTL设计。一个interface中可以包含多个clocking模块。
3. 解释modport,解释interface,并对比他们
modport可以定义不同信号接入接口的方式,所以他定义在接口里面,interface是将多组信号合成一起,由一个端口表示,简化模块之间的连接,实现类与模块之间的通信。
modport为接口内部的信号提供不同的视图
一个interface中可以提供任意数量的modport
modport只是声明连接模块的信号的端口方向,input output input
4. 系统级SRAMC验证怎么验?
系统级验证,主要是CPU通过跑驱动软件(C语言写的)对总线上各个IP间的通信进行验证,确保系统的功能正确性,要考虑芯片的常用场景,比如CPU对sram的存储空间的读写操作的遍历,DMA实现momery到memory数据的搬运等。
5. config db的作用?以及传递其使用时的参数含义
config db机制主要作用就是传递参数使得TB的可配置性高,更加灵活,config db机制主要传递的有三种类型:
一种是interface虚拟接口,通过传递virtual interface去使得driver 和monitor能够与DUT连接,并驱动接口和采集接口信号
第二种是单一变量参数,如int string enum等,这些主要就是为了配置某些循环次数,id号是多少,等等。
第三种是object类,这种主要是当配置参数较多时,我们可以将其封装成一个object类,去包含这些属性和相关的处理方法,这样传递起来就比较简单明朗,不易出错。
config_db的参数主要由四个参数组成,如下所示,第一个参数必须是componment实例的指针,第二个参数是相对此实例的路径,第三个参数表示一个记号,用以说明这个值是传给目标中的哪个成员的,第四个参数是要设置的值。
6. 为什么使用基于断言的验证方法(ABV)?
(1)断言用于描述复杂设计的行为和属性
(2)ABV可以指导验证工作,加速验证进程,因为ABV通过白盒提供反馈信息,简化验证平台,可以将大量的检查任务转化为断言,替代用户自己定义的模型。
(3)SVA允许验证平台具有被动行为,也就是说根据断言的成功或者失败可以采取不同的行为。
7. 简单描述uvm中的脚本,以及他们的作用
uvm里面有很多通用的代码,这时候就需要节省时间节省效率,就有了脚本,我们是用脚本perl来写的脚本,perl在生成大量.sv文件时非常有用。
uvm_tb_gen.pl是perl脚本,是用来搭建验证平台testbench的,用于生成寄存器模型的脚本是uvm_ral_gen.pl,该脚本也是perl脚本,首先需要win环境下生成.csv的excle表格(里面包含所有的寄存器),然后转换为.ralf文件,然后通过reglen转换为.sv文件。
makefile也是perl的脚本,带来的最大的好处是自动化编译,一旦写好只要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率,其中=表示强制赋值,+=是指在前面的基础上追加一个参数,?=是指如果前面有,就用前面的,如果前面没有,就用现有的,表示一个询问。
8. 什么是自动化编译和增量编译?
自动化编译的过程是先编译DUT(RTL),然后编译model(比如DMA和SD卡的模型),最后是testbench(从接口到driver,agent,env等),最后是testcase,所以我们写路径的时候要把他们分开
增量编译是指如果你仿真1000个文件,仿真之后发现其中有两个有问题,然后你修改这两个文件随后再编译的时候,只是对这两个文件编译即可。
9. 什么是事务级建模(TLM)
事务级建模是一种在较高抽象级别上对系统设计或模块设计进行建模的方法,抽象出所有底层实现的细节。
这是验证方法学中用于提高模块化和重用性的关键概念之一,即使DUT的实际接口由信号级别表示,但大多数验证任务(如生成激励,功能检查,收集覆盖率数据等)都可以在事务级别上更好的完成,这有助于验证组件在项目之间重用和维护。
10. driver怎么得到interface的句柄?UVM的interface怎么连接DUT和testbench的?
二者都是通过UVM_config_db的get/set机制。
interface如果不做virtual声明的话,是不能在config中使用的,interface声明的是一个真实的物理接口,一般在driver中使用virtual interface,config传递的必须是virtual interface,否则传递的是一个实际的物理接口,这在driver中是不能实现的,且所有的组件都指向一个接口,这也是没有意义的。