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

相关文章

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

sky-take-out项目中Redis的使用示例详解

《sky-take-out项目中Redis的使用示例详解》SpringCache是Spring的缓存抽象层,通过注解简化缓存管理,支持Redis等提供者,适用于方法结果缓存、更新和删除操作,但无法实现... 目录Spring Cache主要特性核心注解1.@Cacheable2.@CachePut3.@Ca

SpringBoot通过main方法启动web项目实践

《SpringBoot通过main方法启动web项目实践》SpringBoot通过SpringApplication.run()启动Web项目,自动推断应用类型,加载初始化器与监听器,配置Spring... 目录1. 启动入口:SpringApplication.run()2. SpringApplicat

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

在ASP.NET项目中如何使用C#生成二维码

《在ASP.NET项目中如何使用C#生成二维码》二维码(QRCode)已广泛应用于网址分享,支付链接等场景,本文将以ASP.NET为示例,演示如何实现输入文本/URL,生成二维码,在线显示与下载的完整... 目录创建前端页面(Index.cshtml)后端二维码生成逻辑(Index.cshtml.cs)总结

Spring Boot项目如何使用外部application.yml配置文件启动JAR包

《SpringBoot项目如何使用外部application.yml配置文件启动JAR包》文章介绍了SpringBoot项目通过指定外部application.yml配置文件启动JAR包的方法,包括... 目录Spring Boot项目中使用外部application.yml配置文件启动JAR包一、基本原理

Springboot项目登录校验功能实现

《Springboot项目登录校验功能实现》本文介绍了Web登录校验的重要性,对比了Cookie、Session和JWT三种会话技术,分析其优缺点,并讲解了过滤器与拦截器的统一拦截方案,推荐使用JWT... 目录引言一、登录校验的基本概念二、HTTP协议的无状态性三、会话跟android踪技术1. Cook

springboot项目中集成shiro+jwt完整实例代码

《springboot项目中集成shiro+jwt完整实例代码》本文详细介绍如何在项目中集成Shiro和JWT,实现用户登录校验、token携带及接口权限管理,涉及自定义Realm、ModularRe... 目录简介目的需要的jar集成过程1.配置shiro2.创建自定义Realm2.1 LoginReal

idea Maven Springboot多模块项目打包时90%的问题及解决方案

《ideaMavenSpringboot多模块项目打包时90%的问题及解决方案》:本文主要介绍ideaMavenSpringboot多模块项目打包时90%的问题及解决方案,具有很好的参考价值,... 目录1. 前言2. 问题3. 解决办法4. jar 包冲突总结1. 前言之所以写这篇文章是因为在使用Mav