AHB—SRAM项目之5 reference_model与scoreboard(SV自学笔记)

2023-10-14 11:40

本文主要是介绍AHB—SRAM项目之5 reference_model与scoreboard(SV自学笔记),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这一部分的内容是重难点所在。开始该部分之前应该至少掌握sram的基本架构和reference model与scoreboard的数据流向。

Reference model用于模拟DUT的功能,对DUT的行为做一个预测,来看看DUT的行为是否正确,并且把结果送入scoreboard与DUT的结果进行一个比较。

首先因为要将driver和sb连起来,所以mailbox用于通信,在两者中均声明一个mailbox传递相同类型的参数,并起同样的名字。在本例中,在两者之外实例化mailbox,即在env中实例化mailbox。操作如下:

 

  1. 在env中实例化一个mailbox,将mailbox放在env里面

  1. 在driver和scoreboard里声明mailbox传递数据包的属性,并用new函数实现mailbox与env的通信。

 接着考虑将driver内部的信号传递出去给sb,由于结束一笔trans时,我们通常会将结束的内容放入mst_pending_que_acpt,因此将其中的数据传给sb去模拟DUT即可。注意:红框内mailbox多余,相同的变量类型不可以多次声明。否则编译可以通过,但信号不会真正连接起来。

接下来在driver中将要传给scoreboard的数据发送到mailbox,注意应该判断一笔trans结束时,从pending_que中拿出要结束的trans,并且给到mst_pending_que_acpt,那么刚好mst_pending_que_acpt中就包含了所有我们写入DUT和scoreboard的信号(除了读取的数据,因为读的数据是从DUT给到总线上的,所以当hwrite为低时,应该把总线上的读信号打包入数据包内),所以将mst_pending_que_acpt这个经过DUT的数据包放入mailbox中发送给scoreboard与reference model作比较。

 

写scoreboard代码的核心部分,需要了解DUT在存数据的时候的方式。

首先要知道RTL里面地址结构是如何的。这里一定要理解这句话的含义,由于64K为2**16个地址(每个地址8bits)。因此,地址位宽16bit。每32个bit(4个bist)组成一个mem[index],因此放入一个8bit数据时,首先可以根据地址的低两位判断放在哪个bist里(也就是确定了放在哪个列里),然后杀掉低两位根据地址的其他高位确定放在哪个mem[index]里,也就是哪一行里,因为每行4个bist,不看低两位正好相当于除以4,确定了行列后,将数据放入到对应的位置上即可。

举个hsize为8bit的例子,总线位宽是32bit数据中的8个有效,地址需要放到5里,5是8’b0000_0101,根据低两位判断在bist1里,再根据高位判断在mem[1]行,对应的位置是mem[1][15:8]。

这里需要理解为什么要将数据的[15:8]放在地址[15:8]里,因为总线数据位宽是一个物理参数,只要定成了32bit就是无法改变的,每次传送数据时,都是将32bit的数据传递过来,只不过当hsize是8bit有效时,要根据相应规则判断哪8个bit为有效。因为传入的地址是4'b0101,所以[15:8]有效,同样当hsize为16bit时,也是根据传入的地址判断是哪16个bit有效,而传输如果是32bit的,那么则是一次传输的32个bit都是有效的。

对于写入数据无需进行比较,因为写到DUT和scoreboard中的数据总是相同的。但读操作有所不同,因为读操作时数据来源是不同的,要将DUT中的数据和reference model流出的数据做比较。并通过打印语句给出比较结果。

如果发现在score board的reference model里面读出来的数据和DUT流出的数据一致,则说明是匹配的,但是此处需要注意的是匹配符号应该使用===全等号,否则对于x仿真器会判别为不相等。

在测试写出的sc是否能够正确跟我们想要的结果一致的时候,我们应该设法控制输入的数据波形更容易观测。以下是我们目前搭建的验证平台基本概况。

这篇关于AHB—SRAM项目之5 reference_model与scoreboard(SV自学笔记)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/210264

相关文章

Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)

《Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)》文章介绍了如何使用dhtmlx-gantt组件来实现公司的甘特图需求,并提供了一个简单的Vue组件示例,文章还分享了一... 目录一、首先 npm 安装插件二、创建一个vue组件三、业务页面内 引用自定义组件:四、dhtmlx

SpringBoot项目注入 traceId 追踪整个请求的日志链路(过程详解)

《SpringBoot项目注入traceId追踪整个请求的日志链路(过程详解)》本文介绍了如何在单体SpringBoot项目中通过手动实现过滤器或拦截器来注入traceId,以追踪整个请求的日志链... SpringBoot项目注入 traceId 来追踪整个请求的日志链路,有了 traceId, 我们在排

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

golang内存对齐的项目实践

《golang内存对齐的项目实践》本文主要介绍了golang内存对齐的项目实践,内存对齐不仅有助于提高内存访问效率,还确保了与硬件接口的兼容性,是Go语言编程中不可忽视的重要优化手段,下面就来介绍一下... 目录一、结构体中的字段顺序与内存对齐二、内存对齐的原理与规则三、调整结构体字段顺序优化内存对齐四、内

配置springboot项目动静分离打包分离lib方式

《配置springboot项目动静分离打包分离lib方式》本文介绍了如何将SpringBoot工程中的静态资源和配置文件分离出来,以减少jar包大小,方便修改配置文件,通过在jar包同级目录创建co... 目录前言1、分离配置文件原理2、pom文件配置3、使用package命令打包4、总结前言默认情况下,

python实现简易SSL的项目实践

《python实现简易SSL的项目实践》本文主要介绍了python实现简易SSL的项目实践,包括CA.py、server.py和client.py三个模块,文中通过示例代码介绍的非常详细,对大家的学习... 目录运行环境运行前准备程序实现与流程说明运行截图代码CA.pyclient.pyserver.py参

IDEA运行spring项目时,控制台未出现的解决方案

《IDEA运行spring项目时,控制台未出现的解决方案》文章总结了在使用IDEA运行代码时,控制台未出现的问题和解决方案,问题可能是由于点击图标或重启IDEA后控制台仍未显示,解决方案提供了解决方法... 目录问题分析解决方案总结问题js使用IDEA,点击运行按钮,运行结束,但控制台未出现http://

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时

C语言小项目实战之通讯录功能

《C语言小项目实战之通讯录功能》:本文主要介绍如何设计和实现一个简单的通讯录管理系统,包括联系人信息的存储、增加、删除、查找、修改和排序等功能,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录功能介绍:添加联系人模块显示联系人模块删除联系人模块查找联系人模块修改联系人模块排序联系人模块源代码如下

SpringBoot项目中Maven剔除无用Jar引用的最佳实践

《SpringBoot项目中Maven剔除无用Jar引用的最佳实践》在SpringBoot项目开发中,Maven是最常用的构建工具之一,通过Maven,我们可以轻松地管理项目所需的依赖,而,... 目录1、引言2、Maven 依赖管理的基础概念2.1 什么是 Maven 依赖2.2 Maven 的依赖传递机