- 博客(51)
- 收藏
- 关注
原创 (5)AMBA总线介绍
文章目录AHB总结APBAHB总结主要组成部分Master、slaves、arbiter、decoder传输的过程流水线机制 address phase和data phase如何提高性能burst read/write仲裁机制总线控制权的移交slave短时间内无法响应HREADY信号拉低slave长时间内无法响应插入SPLIT/RETRYMaster不能进行传输插入BUSYAPB...
2022-01-06 10:03:27
793
原创 (4)AMBA总线介绍
文章目录地址译码从设备响应RETRY和SPLIT数据总线AHB仲裁信号总线主设备GRANT信号Split传输过程防止DeadlockAHB主设备接口AHB从设备接口AHB ArbiterAHB Decoder关注作者地址译码HSELx:选择从设备,指出由主设备所选择的从设备由地址译码器来提供选择信号一个从设备应该至少占用1KB的存储空间需要一个额外的缺省从设备来映射其它的存储地址从设备响应所访问的从设备必须响应这次传输从设备可能返回的响应:完成这次传输插入等待状态(HREADY)发
2022-01-05 20:34:44
1251
原创 (3)AMBA总线介绍
文章目录BURST传输地址计算举例注意关注作者BURST传输AHB Burst操作4beat、8beat、16beat、单个字节传输、未定义长度的传输支持incrementing和wrapping两种burst传输Incrementing burst地址是上一次的传输地址加1wrapping burst例:4beat的wrapping burst字传输(4byte)0x34 -> 0x38 ->0x3c ->0x30应用场合:cache填充为什么0x3c的下一个是0
2022-01-04 10:55:19
873
原创 (2)AMBA总线介绍
文章目录AHB信号基本AHB传输传输类型其它AHB控制信号关注作者AHB信号HRESETn 低电平有效HADDR[31:0] 32位系统地址总线HWDATA[31:0] 写数据总线,从主设备写到从设备HRDATA[31:0] 读数据总线,从从设备读到主设备HTRANS 指出当前传输的状态,有IDLE、BUSY、NONSEQ、SEQ四种HSIZE 指出当前传输的大小HBURST 指出传输的burst类型HRESP 从设备发给主设备的总线传输状态,有OKAY、ERROR、RETRY、SP
2022-01-03 09:42:34
783
原创 (1)AMBA总线介绍
文章目录系统总线介绍AHBAHB组成部分ASBAPBAPB组成部分AMBA协议其它有关问题DMA具体实施步骤关注作者系统总线介绍系统芯片中各个模块之间需要有接口来连接,总线作为子系统之间共享的通信链路。具有低成本、方便易用的优点。也存在着会造成性能瓶颈的缺点。AMBA(Advanced Microcontroller Bus Architecture)AMBA 1.0ASB和APBAMBA 2.0AHB,ASB和APBAMBA 3.0AMBA Advanced eXtensible I
2022-01-02 20:03:01
1145
原创 (3)TCL 基础入门
文章目录控制流——if命令循环命令——while循环变量——forforeach命令switch命令命令关注作者控制流——if命令语言: if test1 body1?else bodyn?TCL先把test1当作一个表达式求值,如果值非0,则把body1当作一个脚本执行并返回所得值,否则把test2当作一个表达式求值,如果值非0,则把body2当作一个脚本执行并返回所得值。循环命令——while语法:while test body参数test是一个表达式,body是一个脚本,如果表达式的
2021-12-31 14:50:21
1358
原创 (2)TCL 基础入门
文章目录简单变量数组unsetappendincr表达式list集合关注作者简单变量一个TCL的简单变量包含两个部分:名字和值。名字和值都可以是任意字符串。TCL解释器在分析一个变量置换时,只把从$符号往后直到第一个不是字母、数字或下划线的字符之间的单词符号变为要被置换的变量的名字。在最后一个命令行,我们希望把变量a.1的值赋给b,但是TCL解释器在分析时只把$符号直到第一个不是字母、数字或下划线的字符(这里是’.’)之间的单词符号(这里是’a’)当作要被置换的变量的名字,所以TCL解释器把a置换
2021-12-25 16:27:36
2053
原创 (1)TCL 基础入门
文章目录介绍linux下tcl运行准备脚本学习核心基础语法变量置换命令置换反斜杠置换注释符关注作者介绍TCL(Tool Command Language)是一种解释执行的脚本语言(Scripting Language)。它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。由于TCL的解释器是用一个C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作一个C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函数,每个应用程序都可以根据自己
2021-12-24 18:57:43
1884
原创 Vim文本编辑器
文章目录Vim快捷方向键以单次为单位移动从命令模式进入输入模式查找文本替换文本删除文本删除文本Vim保存退出文本Vim光标移动关注作者Vim快捷方向键以单次为单位移动快捷键功能描述h光标向左移动一位j光标向下移动一位(以回车为换行符)k光标向上移动一位l光标向右移动一位快捷键功能描述w或W光标移动至下一个单次的单词首b或B光标移动至上一个单次的单词首e或E光标移动至下一个单词的单词尾nw或nWn为数字,表示
2021-12-08 21:46:57
681
原创 (30)UVM 寄存器模型的应用场景和功能覆盖率收集
UVM 寄存器模型的应用场景在了解了寄存器模型的常规方法之后,我们需要考虑如何利用这些方法来检查寄存器、以及协助检查硬件设计逻辑和比对数据。在软件实现硬件驱动和固件层时,也会实现类似寄存器模型镜像值的方法,即在寄存器配置的底层函数中,同时也声明一些全局的影子寄存器(shadow register)。这些影子寄存器的功能就是暂存当时写入寄存器的值,而在后期使用时,如果这些寄存器是非易失的(non_volatile),那么便可以省略读取寄存器的步骤,转而使用影子寄存器的值。这么做的好处在于响应更迅速,而不
2021-11-27 10:14:35
5343
1
原创 (29)UVM 寄存器内建测试序列(built-in sequences)
UVM 寄存器内建测试序列(built-in sequences)文章目录UVM 寄存器内建测试序列(built-in sequences)内建序列内建序列示例寄存器健康检查关注作者不少有经验的UVM用户可能会忽略UVM针对寄存器模型内建的一些sequence,实际上如果可以将这些自建的序列作为验证项目一开始的健康检查必选项的化,这对于整个项目的平稳运行会有不小的贡献。这是因为在项目一开始的阶段,设计内部的逻辑还不稳定,对于verifier而言,如果想要跟上设计的进度,可以展开验证的部分无外乎是系统控
2021-11-26 09:19:38
5985
10
原创 (28)UVM 寄存器常规方法
UVM 寄存器常规方法文章目录UVM 寄存器常规方法reset()和get_reset()uvm_reg的访问方法,更全面了解uvm_reg_block、uvm_reg、uvm_reg_field三个类提供的用于访问寄存器的方法:将uvm_reg_sequence提供的方法(均是针对寄存器对象的,而不是寄存器块或者寄存器域)整理如下:结合着mirrored value、desired value和actual value,我们需要理解这四种方法在调用时,三种数值的变化时序关系:对于前门访问的
2021-11-25 14:41:39
1395
原创 (27)UVM 寄存器模型的预测(prediction)
# UVM 寄存器模型的常规方法@[TOC]mirror、desired和actual value我们在应用寄存器模型的时候,除了利用它的寄存器信息,也会利用它来跟踪寄存器的值。寄存器模型中的每一个寄存器,都应该有两个值,一个是镜像值(mirrored value),一个是期望值(desired value)。- 期望值是先利用寄存器模型修改软件对象值,而后利用该值更新硬件值;镜像值是表示当前硬件的已知状态值。- 镜像值往往由模型预测给出,即在前门访问时通过观察总线或者在后门访问时通过自动预测等方
2021-11-24 09:25:15
4068
原创 (26)UVM 寄存器访问方式
UVM 寄存器访问方式文章目录UVM 寄存器访问方式前门访问前门访问示例后门访问后门访问示例前门访问与后门访问的比较前门与后门的混合应用关注作者利用寄存器模型,我们可以更方便地对寄存器做操作。我们分成两种访问寄存器的方式,即前门访问(front-door)和后门访问(back-door)。前门访问,顾名思义指的是在寄存器模型上做的读写操作,最终会通过总线UVC来实现总线上的物理时序访问,因此是真实的物理操作。后门访问,值得是利用UVM DPI(uvm_hdl_read()、uvm_hdl_depo
2021-11-23 11:44:14
2551
1
原创 (25)UVM 寄存器模型集成
UVM 寄存器模型集成文章目录(24)UVM 寄存器模型集成MCDF访问寄存器的总线接口时序较为简单。控制寄存器接口首先需要在每一个时钟解析cmd。当cmd为写指令时,即需要把数据cmd_data_in写入到cmd_addr对应的寄存器中。当cmd为读指令时,即需要从cmd_addr对用的寄存器中读取数据,在下一个周期,cmd_addr对应的寄存器数据被输送至cmd_data_out接口。下面给出一端8位地址线,32位数据线的总线UVC实现代码。...
2021-11-23 09:30:00
912
原创 (24)UVM 寄存器建模
UVM 寄存器模型概览寄存器UVM寄存器中心化管理方式uvm_reg相关概念configure各参数函数uvm_reg_block寄存器建模要点和流程关注作者对于硬件有了解的读者,都知道寄存器是模块之间互相交谈的窗口。一方面可以通过读出寄存器的状态,获取硬件当前的状况,另外一方面也可以通过配置寄存器,使得寄存器工作在一定的模式下。
2021-11-22 10:27:24
1274
原创 (23)UVM 层次化sequence构建方式(layering sequence)
如果我们在构建更加复杂的协议总线传输,例如PCIe,USB3.0等,那么通过一个单一的传输层级会对以后的激励复用、上层控制不那么友好。对于这种更深层次化的数据传输,在实际中无论是VIP还是自开发的环境,都倾向于通过若干抽象层次的sequence群落来模拟协议层次。通过层次化的sequence可以分别构建transaction layer、transport layer和physical layer等从高抽象级到低抽象级的transaction转换。这种层次化的sequence构建方式,我们
2021-11-21 09:00:00
1406
1
原创 (20)UVM sequencer的仲裁机制
sequencer的仲裁机制文章目录sequencer的仲裁机制sequencer的仲裁机制介绍sequencer的锁定机制sequencer的锁定示例sequencer的锁定示例解析关注作者sequencer的仲裁机制介绍uvm_sequencer类自建了仲裁机制用来保证多个sequence在同时挂载到sequencer时,可以按照仲裁规则允许特定sequence中的item优先通过。在实际使用中,我们可以通过uvm_sequencer::set_arbitration(UVM_SEQ_ARB_
2021-11-20 18:45:56
1340
2
原创 (22)UVM 虚拟类序列(virtual sequence)
在上一节中,已经讲过了层次类序列(hierarchical sequence)。接下来要讲的是虚拟类序列(virtual sequence)。如何区别接下来讲到的v它们两者之间的共同点就是对于各个sequence的协调。它们的不同在于,hierarchical sequence面对的对象是同一个sequencer,即hierarchical sequence本身也会挂载到sequencer上面,而对于virtual sequence而言,它内部不同的sequence可以允许面向不同的sequencer种类。
2021-11-20 09:00:00
4158
原创 (21)UVM 层次类序列(hierarchical sequence)
本节开始,先抛出一个问题,如何完成验证的水平复用和垂直复用?- 就水平复用而言,它指的是如何利用已有资源,完成==高效的激励场景创建==。- 就垂直复用而言,可以完成==结构复用和激励场景复用==两个方面。无论是水平复用还是垂直复用,==激励场景的复用很大程度上取决于如何设计sequence==,使得底层的sequence实现合理的粒度,帮助完成水平复用,进一步依托于底层激励场景,最终可以实现底层到高层的垂直复用。以下图为例,介绍hierarchical sequence。其中DUT是一个
2021-11-19 14:49:53
1133
原创 (19)UVM 史上最强sequence相关宏操作总结
史上最强sequence相关宏操作总结文章目录史上最强sequence相关宏操作总结下面一段代码是对start()方法执行过程的自然代码描述,可以看出它们执行的顺序关系和条件:sub_seq.pre_start() (task)sub_seq.pre_body() (task) if call_pre_post==1 parent_seq.pre_do(0) (task) if parent_sequence!=null parent_seq.mid_do(this)
2021-11-19 08:57:30
2221
原创 (18)UVM sequencer和sequence
UVM sequencer和sequence文章目录UVM sequencer和sequence一、概述二、sequence和item发送实例一、概述了解了sequencer与driver之间传递sequence item的握手过程,同时也掌握了sequence与item之间的关系。接下来需要就sequence挂载到sequencer的常用方法做出总结,大家可以通过对这些常用方法和宏的介绍,了解到它们不同的使用场景。面对多个sequence如果需要同时挂载到sequencer时,那就面临着仲裁的
2021-11-18 18:52:40
867
原创 (16)UVM sequence和item
UVM sequence和item文章目录UVM sequence和item一、概述二、sequence item介绍一、概述无论是自驾item,穿过sequencer交通站通往终点driver,还是坐上sequence大巴,一路沿途观光,一路沿途观光,最终跟随导游 停靠到风景点driver。在介绍如何驾驶item和sequence,遵守什么交规,最终可以有序穿过sequencer抵达driver之前,有必要首先认识sequence与item之间的关系。这里的sequence指的是uvm_seq
2021-11-17 09:42:35
1443
原创 (15)UVM 序列
UVM 序列文章目录UVM 序列一、概述二、序列组件的互动三、继承关系四、提示五、总结一、概述在UVM世界,利用其核心特性,在创建了组件和顶层环境,并且完成组件之间的TLM端口连接以后,接下来就可以使得整个环境开始运转了。在经过一番实践,掌握了组件之间的TLM通信方式,开辟了建筑之间的道路、桥梁和河道以后,就可以进入紧张繁忙的物流期了。运转的必要条件是组件之间需要有事务(transaction)传送,这就同管道连接好后需要引入水流一样。接下来关于UVM序列,主要围绕下面几个核心词来阐述它们的作
2021-11-16 09:38:42
682
原创 (14)UVM 史上最全通信管道介绍
UVM通信管道文章目录UVM通信管道一、前言二、TLM FIFO三、Analysis Port四、Analysis TLM FIFO五、Request & Response 通信管道总结1.uvm_tlm_fifo与uvm_analysis_tlm_fifo联系与区别关注作者一、前言TLM通信的实现方式,这些通信有一个共同的地方,即都是端对端的,同时在target一端需要实现传输方法,例如put()或者get()。这种方式在实际使用时也可能会给用户带来一些烦恼,如何可以不自己实现这些传输方
2021-11-15 20:33:32
2229
1
原创 (13)UVM 史上最全TLM单向/双向/多向通信介绍
UVM TLM单向通信 单向通信(unidirectional communiction)指的是从initiator到target之间的数据流向是单一方向的,或者说initiator和target只能扮演producer和consumer中的一个角色。双向通信(bidirectional communication)的两端也分为initiator和target,但是数据流向在端对端之间是双向的。TLM多向通信多向通信(multi_directional communication)仍然是两个组件之间的通信。
2021-11-15 09:22:59
2093
1
原创 (12)UVM TLM通信(transaction level modeling)概述
TLM通信(transaction level modeling)文章目录TLM通信(transaction level modeling)一、前言二、基本概念三、TLM通信步骤四、分类五、端口的使用一、前言端口通信是组件与组件之间。在芯片开发流程中,有两个地方对项目的助推起到了关键作用:系统原型系统原型一般是通过硬件功能描述文档来模拟硬件行为,而行为要求不同于RTL模型。系统原型可以提供一个准确到硬件比特级别、按照地址段访问、不依赖于时钟周期的模型,该模型通常基于SystemC语言,而系统原
2021-11-14 14:23:11
1373
原创 (11)UVM 如何构建好的UVM验证环境?
UVM 构建环境的要素一、前言UVM带来的环境复用,相比于之前SV验证环境做到了下面的几个优势:各个模块的验证环境是独立封装的,对外不需要保留数据端口,因此便于环境的进一步集成复用。由于UVM自身的phase机制,在顶层协调各个子环境时,无需考虑由于子环境之间的例化顺序而导致的对象句柄引用悬空的问题。由于子环境的测试序列是相对独立的,这使得顶层在复用子环境测试序列而构成virtual sequence时,不需要其它额外的迁移成本。UVM提供的config_db配置方式,使得整体环境的结构和运行
2021-11-14 10:20:21
1084
原创 (10)UVM 环境组件结构回顾
UVM 环境组件结构回顾文章目录UVM 环境组件结构回顾一、uvm_top二、uvm_test三、构建环境的主要组件四、uvm_component关注作者一、uvm_topuvm_top是uvm_root类的唯一实例,即是UVM世界的"一"。它由UVM创建和管理。它所在的域是uvm_pkg。uvm_top是所有test组件的顶层。所有验证环境中的组件在创建时都需要指明它的父一级。如果某些组件在创建时指定父一级的参数为"null",那么它将直接隶属于uvm_top。不过这么做存在风险,
2021-11-13 11:21:18
904
原创 (9)UVM 环境组件家族
环境组件家族文章目录环境组件家族一、uvm_driver二、uvm_monitor三、uvm_sequencer四、uvm_agent五、uvm_scoreboard六、uvm_env七、uvm_test关注作者SV环境中的验证组件按照功能需要,被称之为激励器(strimulator)、检测器(monitor)和检查器(checker)。这三个核心组件与验证环境中的三个关键特性对应,即激励、监测和检查。在过往那么多验证方法学中,都有与其对应的组件(component)。UVM组件是从UVM基类继承的
2021-11-12 21:46:25
1316
4
原创 (8)UVM 学会消息管理才会让你在验证中游刃有余
UVM 消息管理文章目录UVM 消息管理一、前言二、消息方法三、消息宏四、消息机制五、回调函数关注作者一、前言在一个好的验证系统应该具有消息管理特性,它们是:通过一种标准化的方式打印信息过滤(重要级别)信息打印通道这些特性在UVM中均有支持,UVM提供了一系列丰富的类和方法来生成和过滤消息:消息方法消息处理消息机制二、消息方法在UVM环境中或者环境外,只要有引入uvm_pkg,均可以通过下面的方法来按照消息的严重级别和冗余度来打印消息。function void uvm_r
2021-11-12 09:07:19
733
原创 (7)UVM 怎么用好config机制?
config机制文章目录config机制一、概述二、interface传递三、变量设置四、object传递五、实例六、总结七、建议关注作者一、概述在验证环境的创建过程build phase中,除了组件的实例化,配置也是必不可少的。为了验证环境的复用性,通过外部的参数配置,使得环境在创建时可以根据不同参数来选择创建的组件类型、组件实例数目、组件之间的连接以及组件的运行模式等。在更细致的环境调节(environment tuning)中有更多的变量需要配置,例如for-loop的阈值、字符串名称、随
2021-11-11 09:31:46
352
原创 (6)UVM phase机制
phase机制文章目录phase机制一、前言二、执行机制三、 phase例子四、十二个分支phase五、UVM编译和运行顺序六、UVM仿真开始七、UVM仿真结束关注作者一、前言SV的验证环境构建中,我们可以发现,传统的硬件设计模型在仿真开始前,已经完成例化和连接了;而SV的软件部分对象例化则需要在仿真开始后执行。虽然对象例化通过调用构造函数new()来实现,但是单单通过new()函数无法解决一个重要问题,那就是验证环境在实现层次化时,无法保证例化的先后关系,以及各个组件在例化后的连接。此外如果需
2021-11-10 10:54:39
1304
原创 (5)UVM 核心基类
UVM核心基类一、前言二、域的自动化三、拷贝(copy)四、比较(compare)五、打印(print)六、打包和解包(pack&unpack)关注作者
2021-11-09 13:03:52
733
原创 (4)UVM 覆盖方法(override)
UVM 覆盖方法文章目录UVM 覆盖方法一、概述一、概述工厂提供的便利—覆盖覆盖机制可以将其原来所属的类型替换为另外一个新的类型。在覆盖之后,原本用来创建原属类型的请求,将由工厂来创建新的替换类型。覆盖带来的便利:1.无需再修改原始代码,继而保持了原有代码的封装性。2. 新的替换类型必须与被替换类型相兼容,否则稍后的句柄赋值将失败,所以使用继承。//新定义的类型必须继承于原有的类型...
2021-11-08 10:24:20
3337
原创 (3)UVM 工厂机制
工厂机制文章目录工厂机制一、工厂的意义二、工厂机制三、构建函数new四、uvm_coreservice_t类工厂(factor)机制是UVM的真正魅力所在。工厂机制也是软件的一种典型设计模式(design pattern)。一、工厂的意义UVM工厂的存在就是为了更方便地替换验证环境中的实例或已注册的类型,同时工厂的注册机制也带了配置的灵活性。 这里的实例或者类型替代,在UVM中称作覆盖(override),而被用来替换的对象或者类型,应该满足注册(registration)和多态(polymorph
2021-11-07 10:57:43
1210
5
原创 (2)UVM 类库地图
UVM类库地图文章目录UVM类库地图一、前言二、类库地图三、类库地图解析关注作者一、前言在SV模块中,验证环境整体的构建,是从底层模块的验证组件搭建到通信和激励生成。这些元素无论是软件对象的创建、访问、修改、配置,还是组件之间的通信都是通过用户自定义的方式来实现的。UVM验证方法学作为之前所有方法学的融合版本,从自身初衷而言,就是将验证过程中可以重用和标准化的部分都规定在其方法学的类库当中,通过标准化的方式减轻了验证人员构建环境的负担。在构建验证环境时需要考虑的五大因素是:1.组件的创建和访问
2021-11-06 14:10:46
671
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人