自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(50)
  • 收藏
  • 关注

原创 计算机组成原理——存储器

一、存储器与CPU的连接1.1 单块存储芯片与CPU的连接**问题:**数据总线宽度>存储芯片字长无法直接进行读取!解决方法:通过多块存储芯片的连接解决字长不匹配的问题!请看下节1.2 多块存储芯片与CPU的连接与上一节中的主存结构不同的地方:将MAR和MDR都集成在了CPU中,MDR通过数据总线与主存进行交互,MAR通过地址总线与主存进行交互,主存中会包含多块存储芯片1.2.1 位扩展法Ai:地址总线Di:数据总线WE:使能信号CS:片选信号这里的8Kx1bit的存储芯

2022-04-13 10:49:49 2104

原创 AMBA总线协议(包含AHB与APB)

文章目录一、AMBA总线中AHB/APB/AXI协议的区别1.1 AHB协议1.1.1 AHB组成1.1.2 AHB基本信号(经常会问Htrans和Hburst,以及AHB的边界地址怎么确定)1.2 APB协议1.2.1 APB状态转移1.2.2 APB写传输1.2.3 APB读传输一、AMBA总线中AHB/APB/AXI协议的区别AHB(Advanced High-performance Bus)高级高性能总线。APB(Advanced Peripheral Bus)高级外围总线AXI (Adva

2022-02-03 18:15:37 2803 1

原创 寄存器模型(RAL,Register Abstraction Layer)——UVM

component与component直接可以使用port进行通信,component与object之间是不可以使用port,需要使用event,wait_ptrigger和wait_trigger的区别是一、register model重新有前门后门访问,后门访问是可以直接层次引用,使得访问寄存器中比较简单。二、register model的使用三、前门使用adapter转换,嫁给你trans转换REG2BUS:...

2022-02-02 22:42:49 3768

原创 UART协议

文章目录一、UART协议1.1 UART协议1.2 UART协议硬件连接1.3 UART协议传输格式1.4 UART协议传输步骤二、UART design spec2.1 UART design spec概述2.2 UART design spec接口信号2.3 UART design spec发逻辑2.4 UART design spec接收逻辑通信协议是通信协议在组织设备之间的通信时扮演着重要角色。它基于系统要求而以不同方式进行设计。此类协议具有特定的规则,为实现成功通信,不同设备都遵循该规则。S

2022-01-22 13:41:48 4365

原创 使用VCS的ralgen来生成寄存器模型——UVM

标题一、编写test.ralf文件用于生成ral文件1.1test.ralf文件1.2 makefile二、adapter一、编写test.ralf文件用于生成ral文件1.1test.ralf文件register ctrl { bytes 4; left_to_right; field rev { bits 27; access ro; reset 'h0; } field RE { bits 1; access rw; rese

2022-01-21 10:08:24 3678 4

原创 同步通信(event)——UVM

一、event1.1UVM中的event与SV中的event不同之处UVM中的event与SV中event不同之处是,SV中主要是对同一个对象进行IPC,UVM是不局限于一个对象的,它还为了解决不同的component线程同步问题,还需保持UVM的封闭性,所以它建立了新的同步通信手段(uvm_event、uvm_event_pool和uvm_event_callback)1.2 uvm_event的应用...

2022-01-15 18:32:23 1353

原创 message——UVM

文章目录一、什么是冗余度1.1 冗余度的概念以及各种打印方式1.2 冗余度设置方法一、什么是冗余度1.1 冗余度的概念以及各种打印方式四种打印消息的方法`define uvm_info(ID,MSG,VERBOSITY)`define uvm_warning(ID,MSG)`define uvm_error(ID,MSG)`define uvm_fatal(ID,MSG)冗余度是指从安全角度考虑多余的一个量,也就是为了能够去过滤信息的一个考核值,为了能够让log文件的更加可读;冗余度阈

2022-01-15 00:31:00 347

原创 sequence机制——response、sequence library与layer sequence

一、response的使用1.1 response机制如果在验证平台中,sequence需要根据driver对于transaction的response来决定接下来要发送的数据。sequence机制允许driver返回一个response给sequence。但是在sequence中需要使用get_response任务,并且driver中需要使用put_responseclass my_driver extends uvm_driver; ... task run_phase(uvm_phase

2022-01-14 20:01:43 799

原创 gvim配置

g ~/.gvimrc配置set filenencoding=utf-8,ucs-bom,gb18030.gbk,gb2312,cp936set termencoding=utf-8set encoding=utf-8set fenc=utf-8set fencs=utf-8,ucs-bom,gb18030.gbk,gb2312,cp936au BufRead,BufNewFile *.sv set filetype=systemveriloghighlight StatusLine g

2022-01-13 23:43:56 295

原创 域自动化(field automation)——UVM

文章目录一、域自动化(field automation)基础1.1 核心基类(uvm_void)与uvm_object的关系1.2 field automation相关的宏二、与uvm_object相关2.1 copy2.2 compare2.3 print2.4 clone2.5 pack2.5.1 driver打包byte流2.5.2 monitor打包byte流三、与uvm_component相关3.1 与uvm_objecet不同之处3.2 uvm_component域自动化注册方式3.3 省略co

2022-01-09 21:19:50 1687

原创 UVM组件(以APB协议为例)——UVM

class base_test extends uvm_test; `uvm_component_utils(base_test) apb_enviroment apb_env; scoreboard scb; uvm_tlm_analysis_fifo#(apb_trans)mst_fifo; uvm_tlm_analysis_fifo#(apb_trans)slv_fifo; function new(string name = "base_test",uvm_componen

2022-01-08 21:05:42 2548

原创 phase机制-UVM

文章目录一、phase机制1.1 为什么要使用phase机制?1.2 phase是如何运行的?1.3 phase的调试二、objection机制2.1 UVM关于objection在run-time phase的执行方法2.2 UVM关于objection在run_phase的执行方法三、domain的应用一、phase机制UVM中的phase机制是将仿真阶段层次化,各个phase按照先后顺序执行,并且同一层次的phase中的层次化组件之间按照顺序执行1.1 为什么要使用phase机制?从上图中可

2022-01-08 18:18:31 2004

原创 config_db——UVM

文章目录一、UVM路径1.1 什么是UVM路径二、config_db的使用2.1 config_db函数参数2.2 set/get()2.2.1 set()2.2.2 get()2.3 使用实例2.3.1 传递interface2.3.2 配置sequence与传递参数2.3.3 配置变量三、config_db的特殊用法3.1 多重set/get3.2 省略get3.3 wait_modified( )一、UVM路径1.1 什么是UVM路径class base_test extends uvm_tes

2022-01-08 18:11:45 1572

原创 sequence机制(数据激励的产生、配置方式)——UVM

一、关于sequence机制1.1 为什么使用sequence机制sequence机制的目的是为了将激励的产生功能从driver中剥离出来。这样在不同的测试用例中,就可以将不同的sequence设置成sequencer的main_phase的default_sequence,当sequencer执行到main_phase时,发现有default_sequence,那么它就启动sequence。这样就可以在不改变driver的情况下完成不同的激励驱动。1.2 如何理解sequenceuvm_seq

2021-12-30 23:50:09 2933

原创 第一次使用uvm相关环境设置以及test_case的启动——UVM

一、TB中需要改动的地方//1、导入uvm库文件import uvm_pkg::*;`include "uvm_macros.svh"//2、与sv中不一样的地方是他不会由new()的过程了initial begin run_test();end//3、生成fsdb波形文件initial begin $fsdbDumpfile("sim.fsdb");//生成波形文件 $fsdbDumpvars(0,top_tb,"+all");//确定将top_tb下面的所有信号都进行dump

2021-12-28 22:29:45 4449

原创 工厂机制(factory)-UVM

一uvm_do的作用

2021-12-25 22:48:44 1375

原创 数字IC验证面试题

文章目录一、systemVerilog数据类型1.1 队列的操作1.2 队列和各种数组之间的关系1.3 mailbox和queue的关系二、Verilog时序电路2.1 数字电路主要分为哪几类?为什么使用触发器或锁存器?2.2 setup/hold violation2.3 亚稳态的原因以及消除方法有哪些?2.4 阻塞赋值与非阻塞赋值的区别与联系是什么?2.5 触发器与锁存器的联系与区别?三、sv线程通信3.1 fork...join有哪三种呢?具体的区别和联系是什么?如何关闭fork进程和等待进程?3.2

2021-12-25 16:27:41 5212

原创 break、continue、return的关系与区别

一、break在循环结构中使用break语句,如果执行了break语句,那么就退出循环,接着执行循环结构下面的第一条语句。如果在多重嵌套循环中使用break语句,当执行break语句的时候,退出的是它所在的循环结构,对外层循环没有任何影响。二、continuecontinue语句是这5种结束循环的方式中最特殊的,因为它并没有真的退出循环,而是只结束本次循环体的执行;在for循环中,首先执行表达式1(注意表达式1在整个循环中仅执行一次),接着执行表达式2,如果满足条件,那么执行循环体,如果在循环体

2021-12-21 22:06:00 283

原创 UVM基本介绍(UVM class hierarchy、验证平台、树状图)

一、为什么使用UVM随着芯片的功能逐渐增多以及愈发难以理解,通过仿真器的波形去检查验证设计变得越来越困难了。为了缩短和简化验证时间,我们需要标准化验证平台。由于RTL代码是使用verilog语言,但是验证没有标准化,不能够重复利用。UVM能够提供验证平台标准化,这里是我们会使用UVM的原因;但是UVM的什么方面能够提高它的复用性呢?各个模块的验证环境是独立封装的,对外不需要保留数据端口,因此便于环境的进一步集成复用。独立封装:独立封装可以专业点的叫法:自闭性。它是指单元组件只能可以成为独立行为,不

2021-12-21 21:30:10 2321

原创 异步复位同步释放-verilog

一、相关概念1.1 异步复位复位什么时候有效:通常使用低电平有效异步复位:不受时钟控制,只要出现复位信号无论clk是什么状态,系统就会进行复位操作always@(posedge clk or negedge rst_n)begin if(!rst_n) ...; else if(...)begin ...; ...; endend异步复位的问题:在真实的系统中复位信号的释放,可能会导致芯片进入位置的亚稳态,会让所有的复位都

2021-12-21 12:15:57 3320

原创 跨时钟数据传输问题(Clock domain crossing)-verilog

一、跨时钟数据传输可能产生的问题当两个不同时钟域的系统进行对接,由于对接的端口是异步可能会出现许多我们不希望出现的情况(setup/holdtime violation、亚稳态、数据传输不稳定)。1.1什么是异步?不同的时钟频率:相同时钟周期,但是相位不同:1.2 处理跨时钟域的数据传输的方案采用握手信号交互采用异步FIFO二、握手信号2.1 只使用握手信号存在的问题A module向B module进行传递数据,想要利用握手信号达到不同时钟传输数据的目的,这里利用了req和

2021-12-19 16:30:29 1406

原创 router(五)-Synopsys验证实验

一、interface的建立在这里插入代码片

2021-12-14 23:32:18 671

原创 ref的用法-systemverilog

标题class transaction; rand bit[3:0]sig;endclassmodule top_tb; transaction tr1; transaction tr2;function disp1(transaction tr); $display("Creat out of func!")标题标题

2021-12-14 22:46:52 1175

原创 router(四)-Synopsys验证实验(OOP封装)

四、OOP封装将packet信息封装进packet class里;利用random在class里面随机产生sa、da和payload;创建两个packet对象,一个用于DUT,另一个用于重构DUT的输出;使用包嵌入去验证DUT的操作;在第三部分,我们已经添加了self-check的monitor,这个部分会把packet的相关信息封装到类的结构中,然后在generator创建一个随机的Packet对象然后send、receive和checkDUT在这个packet是否正确。4.1定义pac

2021-12-11 14:01:21 287

原创 router(三)-Synopsys验证实验(self-checking)

三、self-checking开发一个monitor(get_payload)去采样router的输出;开发一个checker去验证recv()得到的get_payload()得到的router的输出,通过对比size、元素等对比来验证;同时运行driver和monitor,也就是同时运行send()和recv();通过针对错误的 DUT 执行测试平台来验证自检机制3.1 build the top-level test environmentprogram automatic test(

2021-12-11 13:59:41 442

原创 router(二)-Synopsys验证实验(send packet)

二、sending packets through router这个模块会建立器simulus generator,protocol transactors and device driver,2.1发送数据相关定义通过router发送数据包l来指定使用哪个输入端口和输出端口,以及发送什么数据。,所以需要定义源地址sa,目标地址da,传输的数据payload;payload里面包含的数据是一个多个字节组成的[7:0] payload[$]其中[7:0]表示一个字节,[$]队列队列使用之前需要进行

2021-12-11 13:58:38 460

原创 router(一)-Synopsys验证实验(reset DUT)

一、reset DUT1.1 创建interface首先定义interface的时候可以直接把DUT里面的信号全部copy过来,然后把input/output都设为logic。声明一个由信号时钟的posedge驱动的时钟块。这个时钟块将被测试程序用来执行同步驱动器和样本。这个时钟块中信号的所有方向都必须与测试程序相关。注意在定义clocking block里不需要定义位宽,如果input/output前面定义了#2ns,那么default的设定就不起作用了;interface router_io(

2021-12-11 13:57:28 655

原创 对特定的fork进行有效disable(mask fork)-systemVerilog

一、disable fork终止父进程的说明`define DELAY 10module top_tb;bit valid;task taska(int delay);fork:thread_a begin:sub_thread_a $display("@%0t:ENTER SUB_THREAD_A",$time); wait(top_tb.valid == 1'b1); $display("@%0t:ENTER SUB_THREAD_A",$time); end:

2021-12-05 21:29:55 722

原创 this的用法(类的存放问题、静态方法中的情况、如何区分形参和对象属性)-systemverilog

一、类内的property和method的空间存放问题在面向对象语言中,可能会声明很多的对象,而我们通常会对当前自己的对象进行操作,这时需要一些符号表示对当前对象的引用。在类中方法[return_type]function_name(class_type const this,other_argsreturn_type>>>function的返回类型class_type>>>当前function所属的类other_arrgs>>>当前func

2021-12-04 00:17:29 493

原创 DPI(import和export的方法)-sv

DPI的全称就是Direct Programming Interface,总结来说就是systemverilog和其他语言的接口。这里主要是用于C的接口。允许SystemVerilog调用一个C函数,就像任何其他本地SystemVerilog函数/任务一样,除此之外变量直接从/传递到C/ c++。whySystemVerilog用户他们想要重用C/ c++设计和测试平台。DPI很容易将C/ c++代码连接到SVSystemVerilog可以调用C, C可以调用SV支持function和task

2021-11-30 22:46:36 2863

原创 SVA序列表达式操作符(intersect、within、throughout、first_match、matched)

构造一些比较复杂的序列时,常用的交叠操作符有时已经不能满足要求。1.intersect通常来说使用方法是(sequence)intersect(sequence),两端不能是property,需要确认两端的sequence都同时开始;两个sequence长度也相同;module top_tb;logic clk;logic sig0,sig1,sig2,sig3,sig4;initial begin clk = 1'b0; forever #1 clk = ~clk;

2021-11-28 16:45:02 4125

原创 SVA断言函数(assert、assume、rose、fell、stable、past、changed、重复操作)——sv

一、总线断言函数$onehot(BUS):BUS中有且仅有1bit是高,其他是低$onehot0(BUS):BUS中有不超过1bit是高,也允许全0;$isunknown(BUS):BUS中存在高阻态或未知态;$coutones(BUS) == n:BUS中有且仅有n bits 是高,其他是低$past(signal,cycle_num,1):returun of cycle past value of signal二、assert和assume分类形式化验证示例as

2021-11-28 15:20:20 10789

原创 覆盖率(covergroup触发、覆盖率数据采样(条件、翻转、wailcard、忽略))-sv

断言设计和验证都需要,范围:接口、FSM、标准协议、好处:缩短时间、监控设计端口的、可以集成为分类:立即(过程)、并行函数:每一个都需要敲一遍;SVA的层次:布尔表达式-sequence-property-assert,也就是他的flowspec提取逻辑关系-建立sequence-property-cover assert,方便注意:不能改设计代码,借助仿真器,可以映射RTL里面的信号,层次化引用,前提是TB和设计都是Verilogtb.c_inst.a_inst.sig1赋值给TB里面的

2021-11-27 21:47:59 6694 1

原创 关于DUT与assert断言bind绑定在一起——SVA

一、为什么需要bind一般在设计RTL代码中,如果设计人员在其中写了assert,这样能够很方便在仿真去收集设计代码的运行结果和情况。但是如果没有写assert,但是我们验证人员是没有办法去修改设计代码的,所以我们需要将assertion与DUT设计绑定在一起。module test(clk,rst,sig0,sig1);input sig0;input clk,rst;output sig1;bit sig1;always@(posedge clk)begin if(rst == 1'

2021-11-25 21:54:28 2626 1

原创 SVA(立即断言、并发断言、触发判断)-概述

sequencesequence可以调用sequence,property调用,比sequence高以层,类似调用,创建断言的步骤:根据spec提取逻辑关系或者时序关系建立sequence的表达式建立property,调用对应的sequence断言属性:a1:assert property()cover assert a1触发判断:连续时钟中由于信号的变化,判断多个事件/信号的行为关系,$isunkown,查看是否不定态,总线的断言函数断言可以有使能,控制全局性断言检查,状态.

2021-11-23 22:24:34 7568

原创 关于@(posedge clk)和@(itf.cb)的区别

一、采样region区别@(posedge clk)采样是在active region,相当于observe region,这里会采样最新的值;@(itf.cb)采样会在prepone region二、具体示例代码在这里插入代码片

2021-11-23 20:21:56 4534

原创 随机约束、随机分布、随机数组等-systemverilog

一、简

2021-11-18 23:26:02 651

原创 并发线程和线程间通信(event、mailbox和semaphore)-systemVerilog

一、简介要了解什么是线程之前,我们要了解什么叫进程。进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。比如在Windows系统中,一个运行的exe就是一个进程。线程是指进程中的一个执行流程,一个进程中可以运行多个线程。在实际硬件中,时序逻辑通过触发器和时钟来激活,组合逻辑通过输入变化而变化。在Verilog中也是通过initial和always、连续赋值语句等进行模拟。但是对于我们的验证环境来说,我们会使用许多并发执行的线程,这要求sv能够控制和不断选择下

2021-11-14 11:59:14 1387

原创 AHB-lite协议

一、概述AMBA AHB-Lite解决了高性能合成设计的要求。它是一个总线接口,支持单个master总线并提供高带宽操作。最常见的 AHB-Lite slave设备是内部存储器设备、外部存储器接口和高带宽外围设备。 尽管低带宽外设可以作为 AHB-Lite slave设备,但出于系统性能原因,它们通常挂载在 AMBA 高级外设总线 (APB) 上。AHB-Lite实现了高性能、高时钟频率系统所需的功能,包括:burst 传输单时钟沿操作non-tristate implementation宽

2021-11-11 11:46:05 2612 1

原创 类的封装继承多态以及virtual interface-SV

回顾竞争与冒险timeslot:以事件调度进行仿真,哪一个事件进行需要顺序,需要层次化队列,Verilog:active-inactive–postponed,能够避免语句执行混乱,postponed区(#1 step)clocking 不只是在interface、module,不需要例化直接使用;clocking block ##1表示等待一个clocking block,或是在##n;一般情况下设计中不会使用clocking block,会在验证中使用;program里面循环:在initi

2021-11-09 17:01:02 2170 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除