• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

还没有RTL?So easy! 验证仍然Go!

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文转自:http://www.eetop.cn/blog/html/28/1561828-445916.html

一、引言

词汇解释(Fabric):

Fabric是一个简单的带缓冲的两端口开关。每个通信路径包含5个信道,每个信道不是Ready信道就是Valid信道,它们都类似于 AMBA® AXI™ 信道。Fabric支持多事务,流水线和大型突发数据传输。它也支持按优先级传输。这是一个用SV写的模型。关联数组用于管理队列外的transactions,队列和动态数组用于管理列表。类用于保持所传送的信息。

 

构建UVM测试平台是一个艰苦的工作,尤其当RTL不能用于测试的时候,这个工作更难。 SystemVerilog是一个强大的建模语言,在RTL可用之前可以用于构建硬件高层次的模型。这种模型可以快速编写,并可以根据需要使功能完整。本文将描述创建和使用fabric模型来建立和造就一个测试平台,当RTL可用时它只需微调就可以插入测试平台模型。

 

本文的主要贡献:呈现出中等复杂的通信fabric的全功能模型;使用SystemVerilog编写模型;并建立一个可重复使用的测试平台,该平台可支持模块测试以及系统级测试。测试平台的实现本文不讨论,有关更多信息,请联系作者。

 

二、Fabric模型实现及测试

RTL实现一个与AXI相似的 fabric:这是一个简单的fabric(比AMBA AXI简单),但有服务质量,有高端功能的支持。验证团队希望对fabric的验证尽早开始,但在早期,RTL功能还不可用。为了验证团队在验证环境里尽早开始工作,具有DUT的早期模型是大家期望的。

 

DUT和fabric两者模型将被用来代替真正的RTL,而且具有足够的功能来提供一个有用的测试环境用于构建早期测试平台。该模型不是RTL的完整功能的版本。对早期验证而言,建立完整功能的RTL模型并提供有限的额外验证点将是一个过于庞大的任务。

 

fabric在顶部和底部各有两个端口,顶部端口可连接至任一底部端口。DUT是两个fabric的组合,如下图所示。一个request从Master1(M1)或Master2(M2)下发,向Slave1(S1)或Slave2(S2)流动,这取决于许多因素,包括QoS和地址映射范围定义。

连接是虚拟的--数据传输发生在从master跳变到slave,而且,连接作为独立信道被管理。

其信道

信道是最基础的总线,是各种信号的集合,由RA,RD,WA,WD及子信道组成,通过SystemVerilog interface实现。

 

其测试平台

测试平台是一个规则的UVM测试平台,有env,test,agent,driver,sequencers,sequences和transactions(都是UVM基础构成)。基础的sequence向一个地址写入随机数,再从这个地址读数,并和写入数据比较,通过这种方式自检。

  • 序列

序列完成读和写。内置的序列先写然后从同一地址读,接着比较读写数据,每个序列被分配在它的读取和写入内存范围之内。

  • transaction

transaction 不是读就是写,它有一个地址和一个有效数据载荷,并且,有服务请求字段质量。标签字段还没用在测试平台上,但可以由我们搭建的集成化fabric设置。

  • 测试

这是一个简单的测试,但很方便提供多线程。它用两个数组保存关心的接口--master和monitor接口。这通过uvm_config_db来设置。

 

FABRIC SLAVE

fabric slave的实现是很简单的,slave等待VALID 和 READY在时钟上升沿时为高电平。当满足这个条件时,发生传输。在这种情况下传输是复制总线值到一个代表传输的类容器(比如read_address_c)。该read_address_c包被推入到slave管理的ra_q中。其他一些线程将决定如何处理队列中的新成员。

FABRIC RA SLAVE 服务

在fabric中,一个线程(RA_Channel1线程)在等待从fabric_slave1管理的ra_q里事务,当事务到达时,它会被从队列中删除,并创建一个新的标签,这种新的标签的关键在于追踪返回值。

 

原始的传输包含一个'tag'或'id'。tag是由master接口创建,也是一个简单的能够匹配和组织并行传输的计数器。如果没有tag,master就不会知道去哪些READ地址来读取READ数据。这个功能将决定RA的request去往哪个输出slave端口。

 

FABRIC 标签

fabric 标签是由连同slave和master信息的原始标签组成的,作为通过第二个fabric的transaction,标签再次被扩展,这次标签是16位-此前的“扩展标签”只是看起来像一个到第二个fabric的“普通标签”。

 

FABRIC MASTER 接口

fabric master RA_Channel线程会在发现RAQ队列里有东西时醒来,这个新到来的东西会被弹出队列,变成了针摆动。

 

THE SLAVE 

slave相当简单,和其他slave共享存贮句柄,这有一个物理存储器(mem_interface),但是有两个slave接口使用它。RA Channel识别读请求和推压标签到rd_work队列,而rd_work队列由RD_Channel线程服务,The RD_Channel线程被唤醒,为每一个RD响应。

 

顶层测试

顶层测试实例化了6个信道,2个输入信道,2个输出信道,以及2个负责两个fabric中间连接的信道;实例化了两个master接口,每个都连接到输入信道;实例化两个fabric,每个连接到合适的信道;最后,实例化了两个slave和两个monitors和实际存储器。

简单存储器

简单的存储器(mem_interface)有两个功能:读取和写入。他们提供了一种简单的方法来封装存储访问,每次读写回显到标准输出,如果某个位置被读取,却从来没有被写入,则会产生错误并立即停止仿真。

 

三、结论

本文描述了一个简单的类似于AXI的fabric框架的实现,它可以被用来测试早期开发的UVM测试平台。它使用了高层次的SystemVerilog功能,比如线程,动态数组,关联数组,队列和简单的类来管理复杂的真正的fabric的实现。

 

当前系统是灵活的,可以用来作为测试工具,测试新的算法或者其他地址映射方案来控制传送流。实现fabric的代码不到1000行,5天之内写完,另一个人兼职5天内调试好。这个模型易于读,易于扩展新功能。这并不是适合当前综合工具的模型,而是用于在设计阶段早期实现复杂功能的模型;得以尽早开始测试和验证。

 

在本例中,建模的DUT是一个fabric,但SystemVerilog可以写任何模型,SystemVerilog是一个功能强大的通用编程语言。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Fabricgosdk初始化所需证书解析发布时间:2022-07-10
下一篇:
[算法Rust,Go,Python,JS实现)]LeetCode之38-报数发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap