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

相关文章

Python开发文字版随机事件游戏的项目实例

《Python开发文字版随机事件游戏的项目实例》随机事件游戏是一种通过生成不可预测的事件来增强游戏体验的类型,在这篇博文中,我们将使用Python开发一款文字版随机事件游戏,通过这个项目,读者不仅能够... 目录项目概述2.1 游戏概念2.2 游戏特色2.3 目标玩家群体技术选择与环境准备3.1 开发环境3

SpringBoot项目中报错The field screenShot exceeds its maximum permitted size of 1048576 bytes.的问题及解决

《SpringBoot项目中报错ThefieldscreenShotexceedsitsmaximumpermittedsizeof1048576bytes.的问题及解决》这篇文章... 目录项目场景问题描述原因分析解决方案总结项目场景javascript提示:项目相关背景:项目场景:基于Spring

解决Maven项目idea找不到本地仓库jar包问题以及使用mvn install:install-file

《解决Maven项目idea找不到本地仓库jar包问题以及使用mvninstall:install-file》:本文主要介绍解决Maven项目idea找不到本地仓库jar包问题以及使用mvnin... 目录Maven项目idea找不到本地仓库jar包以及使用mvn install:install-file基

springboot项目如何开启https服务

《springboot项目如何开启https服务》:本文主要介绍springboot项目如何开启https服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录springboot项目开启https服务1. 生成SSL证书密钥库使用keytool生成自签名证书将

将Java项目提交到云服务器的流程步骤

《将Java项目提交到云服务器的流程步骤》所谓将项目提交到云服务器即将你的项目打成一个jar包然后提交到云服务器即可,因此我们需要准备服务器环境为:Linux+JDK+MariDB(MySQL)+Gi... 目录1. 安装 jdk1.1 查看 jdk 版本1.2 下载 jdk2. 安装 mariadb(my

Node.js 数据库 CRUD 项目示例详解(完美解决方案)

《Node.js数据库CRUD项目示例详解(完美解决方案)》:本文主要介绍Node.js数据库CRUD项目示例详解(完美解决方案),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考... 目录项目结构1. 初始化项目2. 配置数据库连接 (config/db.js)3. 创建模型 (models/

springboot项目中常用的工具类和api详解

《springboot项目中常用的工具类和api详解》在SpringBoot项目中,开发者通常会依赖一些工具类和API来简化开发、提高效率,以下是一些常用的工具类及其典型应用场景,涵盖Spring原生... 目录1. Spring Framework 自带工具类(1) StringUtils(2) Coll

Spring Boot项目部署命令java -jar的各种参数及作用详解

《SpringBoot项目部署命令java-jar的各种参数及作用详解》:本文主要介绍SpringBoot项目部署命令java-jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收... 目录前言一、基础命令结构二、常见的 Java 命令参数1. 设置内存大小2. 配置垃圾回收器3. 配置线程栈大小

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

Spring Boot项目中结合MyBatis实现MySQL的自动主从切换功能

《SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能》:本文主要介绍SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能,本文分步骤给大家介绍的... 目录原理解析1. mysql主从复制(Master-Slave Replication)2. 读写分离3.