
system verilog
文章平均质量分 80
XtremeDV
行走在码农和硅农之间
展开
-
github上包含SystemVerilog的仓库
NAMEOWNERSTARSURLDESCRIPTIONhdmihdl-util472https://github.com/hdl-util/hdmiSend video/audio over HDMI on an FPGAnontrivial-mipstrivialmips394https://github.com/trivialmips/nontrivial-mipsNonTrivial-MIPS is a synthesizable superscala...原创 2020-12-08 22:29:27 · 2566 阅读 · 0 评论 -
github上包含VIP的仓库
NAMEOWNERSTARSURLDESCRIPTIONtvip-axitaichi-ishitani47https://github.com/taichi-ishitani/tvip-axiAMBA AXI VIPAHB2GodelMachine43https://github.com/GodelMachine/AHB2AMBA AHB 2.0 VIP in SystemVerilog UVMriscv-vipjerralph29https://...原创 2020-12-08 21:57:04 · 3688 阅读 · 1 评论 -
github上点赞前100的关于UVM的仓库
NAMEOWNERSTARURLDESCRIPTIONuvmprimerraysalemi174SystemVeriloghttps://github.com/raysalemi/uvmprimerlogictymonx136SystemVeriloghttps://github.com/tymonx/logicUVMReferenceVerificationExcellence110SystemVeriloghttps://github.com...原创 2020-12-07 21:58:44 · 5531 阅读 · 0 评论 -
systemverilog在for循环中使用fork_join和fork_join_none的区别
我想在一个for循环中fork_join或者fork_join_none语句实现多线程, 假如我使用经典的方法:for(int index=0;index<14;index++)begin automatic int idx=index; fork begin `uvm_do_on(sequence_inst,p_sequencer.m...原创 2018-03-12 17:32:47 · 22221 阅读 · 16 评论 -
通过$readmemh/$readmemb系统函数将值读入关联数组
VCS从2009.06版本开始允许通过$readmemh / $readmemb系统任务,将数据从数据文件读取到关联数组中。以下是将数据读取到关联数组中的语法bit [32-1:0] mem_hash[*];-------------------------------------------------- ------------------------------$readmem...原创 2020-04-29 19:56:02 · 1761 阅读 · 0 评论 -
SystemVerilog Assertion支持动态delay或者repeat
package sva_delay_repeat_range_pkg; // int d1, d2; // bit a, b, c=1'b1; // sequence q_s; a ##1 c; endsequence // sequence my_sequence; e ##1 d[->1]; endsequence //--------...转载 2020-01-17 14:27:30 · 2030 阅读 · 0 评论 -
控制SystemVerilog Assertion的关闭打开
module my_control (); initial begin : disable_assertions_during_reset $display ("%0t %m Disabling assertions during init..", $time); $assertoff (0, top_tb.cpu_rtl_1); @ (top_tb.reset_n ...转载 2020-01-17 14:22:50 · 5671 阅读 · 0 评论 -
SystemVerilog:如何处理UVM中的reset(第2部分)
前一段时间,我写了一篇有关如何处理UVM agent组件中的reset的文章。有人问了一个很好的问题:如何处理计分板上的reset?在本文中,我将与您分享我在验证环境中处理reset的方式。假设我们有一个带有APB接口的DUT,用于访问某些内部寄存器。与在agent中处理reset一样,在完整的验证环境中,我尝试在每个组件中实现handle_reset()函数,并且应从env组件中的一...翻译 2019-10-13 11:03:55 · 2604 阅读 · 2 评论 -
SystemVerilog:如何处理UVM中的reset(第1部分)
即使听起来很简单,但在实际实现中,在UVM agent中处理reset也不是那么简单。在本文中,我将介绍一种处理reset的通用机制,该机制可以在任何UVM agent中重复使用。让我们考虑一下,我们有一个具有以下架构的UVM agent:步骤#1:处理agent组件中的reset因为agent是最重要的组件,所以我们可以在其中实现一些逻辑,该逻辑可以检测到reset何时变为活动...翻译 2019-10-12 21:46:41 · 6198 阅读 · 1 评论 -
Vim按文件类型改变缩进
最近在写RTL代码的时候,发现同事用emacs编写的代码,用verilog mode自动缩进的话,我用gvim打开后,代码缩进会乱,为了保持和emacs保持一致,需要设置vim的缩进。在我的.vimrc中,默认情况下设置为:set tabstop=4 set softtabstop=4 set shiftwidth=4 set noexpandtab 而em原创 2015-06-12 09:31:51 · 2504 阅读 · 0 评论 -
vim system verilog语法高亮
vim编辑器system verilog语法高亮文件,带有个人编写的关于uvm验证环境常用语法的高亮支持。原创 2015-04-12 22:06:24 · 3294 阅读 · 2 评论 -
RSA crt 签名与验签 systemverilog DPI 制作以及openssl genrsa生成RSA私钥与签名验证指令dgst使用
rsa crt 签名 验签 systemverilog DPI 制作在这次的rsa crt 签名和验签的sv dpi编写过程中,需要生成rsa 私钥和公钥,并用rsa 私钥进行签名,rsa公钥进行验签,本来打算用nist提供的标准测试向量,但是由于标准向量中,没有CRT(中国剩余定理)求模幂使用的一些parameter。https://csrc.nist.gov/projects/cryptographic-algorithm-validation-progr原创 2017-12-01 17:41:01 · 5778 阅读 · 0 评论 -
bug和debug的定义
写了九年的博客,我猜测至少有一半的内容是围绕代码质量或调试进行的。 虽然我写关于这些主题的文章,花费了很多时间,但是无论出于何种原因,直到昨天,我才意识到我没有一个可靠的关于debug定义,或者甚至是针对debug问题的bug定义。在debug的时候,我们到底在debug什么。 我想我是还是有对什么是bug以及debug代码意味着什么的通常的理解的。 意识到这可能并非如此,我想出了一个定义来解释b...翻译 2018-03-15 10:11:01 · 4055 阅读 · 0 评论 -
UVM糖果爱好者教程 - 1.概述
Accellera最近发布的UVM可能会改变验证的未来,因为验证方法似乎在这个UVM中得到巩固。本专栏将提供关于这种新的验证方法的简单教程。本教程不是关注AXI,OCP或其他系统总线,而是基于jelly-bean生成器(DUT)的假设示例。TB将以受限制的随机方式生成许多jelly-bean风味,并且该系统将评估可口风味。这里不需要任何系统总线的知识。下面描述下教程中使用的验证组件。上图显示了验证...翻译 2018-03-16 14:52:57 · 4774 阅读 · 3 评论 -
UVM糖果爱好者教程 - 2.食谱
虽然上一篇文章澄清了 jelly-bean taster的验证部分,但这篇文章将聚焦在jelly-bean食谱。jelly-bean食谱作为transaction从jelly_bean_sequencer传递给jelly_bean_driver。该transaction被称为jelly_bean_transaction。该transaction基于其风味,颜色和其他特征来定义jelly_bean。...翻译 2018-03-16 15:40:07 · 1973 阅读 · 0 评论 -
UVM糖果爱好者教程 - 3.传输和序列
TransactionsJelly-Bean Transactionjelly_bean_transaction类根据口味,颜色和其他特征定义jelly_bean食谱。 它还具有称为口味的特性,以保持jelly_bean_taster(DUT)对口味的反应。 口味和颜色之间的关系在约束块(12行)中定义。 例如,如果口味是苹果口味,则颜色必须是红色或绿色(不是蓝色)。更新(2014年4月2日):在...翻译 2018-03-16 16:22:26 · 2403 阅读 · 4 评论 -
systemverilog中怎样才能使用foreach和fork一起并行执行?
这个问题不是UVM特定的,但我正在处理的示例与UVM相关。我在UVM环境中有几个agents,我想在所有这些agents上并行启动sequence。如果我如下图这样做:foreach (env.agt[i])begin seq.start(env.agt[i].sqr);endseq首先在env.agt [0].sqr上执行。一旦完成,它就会执行env.agt[1].sqr,这种方式是按顺...原创 2018-03-12 15:26:02 · 3760 阅读 · 3 评论 -
关于systemverilog randomize()的简单问答
Question:我认为随机化单个变量给验证工程师提供了更大的灵活性。 也许systemverilog的设计者没有足够的预见到这一点。 也许他们可以看看其他语言,并借鉴一些良好的语言功能。LRM中的12.10节(在线随机变量控制)似乎表明我们可以将参数传递给randomize()来指定要随机化的特定变量。 你能否对此发表评论?Answer: 我同意随机化单个变量给验证工程师提供了更大的灵活性,但这...原创 2018-03-12 23:16:33 · 11881 阅读 · 0 评论 -
UVM中的p_sequencer和m_sequencer
p - parent sequencer - 要处理的实际sequencer类型的句柄,这个是自己定义的。m - m_表示隐藏或局部变量(member),m_sequencer是uvm_sequencer_base类型,定义在uvm_sequence_item类中。可以使用`uvm_declare_p_sequencer宏声明p_sequencer。但是你也可以在sequence中做以下相同的事情...原创 2018-03-19 11:14:29 · 16057 阅读 · 3 评论 -
关于SystemVerilog向下类型转换
Question: SystemVerilog是否支持向下类型转换(将基类对象转换为派生类对象)? 如果可以,怎么做?以下downcast示例不起作用:class base; int a = 5;endclassclass extend extends base; int b = 1;endclassmodule test; initial begin base ...翻译 2018-03-13 15:00:30 · 1572 阅读 · 0 评论 -
SystemVerilog 类对象,变量和句柄
类对象是你在调用其构造函数 new()时创建的类定义的实例。 在SystemVerilog中,所有类对象都是动态创建的; 在时间0之后或之后.LRM不指定如何或何时可以销毁对象 - 只有当它不能被销毁时。类变量是变量的值表示对类对象的引用。 像任何其他变量一样,类变量的生命周期取决于它的定义方式和位置(静态,自动或动态)。类句柄表示对类对象的引用的值。 您永远无法查看或表示句柄的文字值(除特殊句柄...翻译 2018-03-13 16:11:38 · 4644 阅读 · 0 评论 -
SystemVerilog应该在什么时候用 带.clone()方法的$cast?
在UVM的例子中,你会发现很多地方使用了$cast,其中一些是$cast(rhs_,rhs.clone()),而另一些则没有使用.clone()($ cast(rhs_,rhs))。那么到底什么时候应该使用.clone()方法呢?实际用不用.clone()方法取决于你是否计划修改正在$cast的对象。在SystemVerilog中,类变量的赋值或$cast只会将句柄复制到对象,而不是对象本身。 大...原创 2018-03-13 16:57:25 · 8000 阅读 · 4 评论 -
UVM糖果爱好者教程 - 4.代理
上一篇文章集中讨论了 jelly-bean系统的transaction和sequence。本文将深入解释验证环境中的验证组件。interface在这一部分,将提供接口(jelly_bean_if)的一般解释及其绑定验证组件和jelly-bean(DUT)的作用。下图显示了jelly_bean_if的内容。实质上,jelly_bean_if已包含从jelly_bean_transaction中的属性...翻译 2018-03-19 16:00:27 · 2363 阅读 · 0 评论 -
SystemVerilog $random()可以被约束吗?
你不应该在SystemVerilog中使用$random,不幸的是,SystemVerilog LRM仍然有使用$random的例子。 你应该使用$urandom,$urandom_range或std::randomize()来获得大多数现代验证环境所需的随机稳定性。你可以对简单范围约束使用$urandom_range(Min,Max),或对单个变量使用std :: randomize(myvar...翻译 2018-03-13 17:20:35 · 6329 阅读 · 0 评论 -
在SystemVerilog Constraints中调用function(约束中调用函数)的陷阱
这里有一个例子:class constraint_container; rand int unsigned a, b, c; function int unsigned get_a(); return a; endfunction function int unsigned value_of(int unsigned value); return value;...翻译 2018-03-13 17:40:18 · 3120 阅读 · 0 评论 -
在Verilog中是怎么处理wire's和reg's的
在Verilog中有一个独特的概念,大多数初学者无法理解,就是现在SystemVerilog硬件描述语言(HDL)中的wire(网络)和reg(变量)之间的区别。这个概念是每个有经验的RTL设计人员都应该熟悉的,但是现在有许多验证工程师没有Verilog经验,试图为他们的测试平台采用SystemVerilog。验证方法学课程倾向于专注于面向对象编程(OOP)的测试平台设计,但不包括这个主题,认为它...翻译 2018-03-13 18:34:39 · 1000 阅读 · 0 评论 -
从systemverilog函数中返回队列或者动态数组
来看一下下面这段代码: function integer[$] get_register_name; integer ret[$]; ret.push_back(1); ret.push_back(2); return ret; endfunction在我使用的VCS编译器中,是编译不过的。那么如果想从函数中,返回队列或者动态数组,我们应该怎么做呢?答案就...原创 2018-03-14 09:52:37 · 8497 阅读 · 0 评论 -
SVA 中$rose的理解
上图中第一个时序图中的属性'checkiack'将会通过,因为 'inter'和'iack'信号都符合$ rose的要求(两个连续的时钟值不同,'0'后跟'1')。 但是,第二个时序图失败,因为虽然$rose(intr)符合$rose的要求,'iack'没有。 'iack'在两个时钟沿之间不会从'0'变为'1'。$rose并不意味着posedge,$fell并不意味着negedge。 换句话说,一...原创 2018-03-14 13:56:30 · 7349 阅读 · 3 评论 -
UVM糖果爱好者教程 - 7.虚拟序列
你知道如果将两个柠檬和两个椰子混合,jelly beans会产生柠檬酥皮派的味道吗?而两种草莓和两种香草的混合,jelly beans会产生草莓脆饼的味道?这篇文章将提供关于创建这些新jelly beans食谱的虚拟序列的解释。Overview第一个图显示了本文中使用的验证组件的关系。前一篇文章中的jelly_bean_taster(DUT)是“增强的”,通过两个jelly_bean_ifs同时接...翻译 2018-03-30 16:34:42 · 1082 阅读 · 0 评论 -
UVM糖果爱好者教程 - 5.验证环境
本文将介绍其他的验证组件。Subscribers功能覆盖率收集器(jelly_bean_fc_sucbscriber)将生成的 jelly beans视为计数器。从monitor发送的jelly_bean_transaction通过21行上的write函数的sample方法进行采样,并对 jelly beans的风味,颜色和其他特征的交叉覆盖。class jelly_bean_fc_subscri...翻译 2018-03-21 13:57:03 · 2076 阅读 · 4 评论 -
深入理解abstract class和interface class
理解抽象类abstract class和interface在Java语言中都是用来进行抽象类(本文中的抽象类并非从abstract class翻译而来,它表示的是一个抽象体,而abstract class为Java语言中用于定义抽象类的一种方法,请读者注意区分)定义的,那么什么是抽象类,使用抽象类能为我们带来什么好处呢?在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样...转载 2018-04-08 09:15:01 · 328 阅读 · 0 评论 -
UVM糖果爱好者教程 - 8.配置
这篇文章将解释UVM配置对象,因为之前的文章并没有太多的介绍。 jelly-bean验证平台使用jelly_bean_agent_config和jelly_bean_env_config两种配置对象。 前者配置jelly_bean_agent,后者配置jelly_bean_env。 下图显示了验证平台和配置相关类的类图。 Ve...翻译 2018-04-08 17:32:57 · 1201 阅读 · 0 评论 -
UVM糖果爱好者教程 - 6.品尝
这篇文章揭示了糖果爱好者系列UVM教程的预期成果。使用创建的验证组件并写出测试用例,然后实际软件仿真运行。Test这个特殊的例子将告诉你如何开发一系列各种无糖的jelly_beans。测试类如下所述。class jelly_bean_test extends uvm_test; `uvm_component_utils(jelly_bean_test) jelly_bean_env...翻译 2018-03-26 14:03:34 · 1112 阅读 · 0 评论 -
SVA中的局部变量
局部变量是SVA语言中最强大的特性之一,它使得检查设计中复杂的流水线行为成为可能。SVA中的局部变量是动态变量,也就是说它会在每一个sequence实例化的时候动态创建,在sequence结束的时候自动销毁。以下图为例:局部变量可能是您经常使用的功能。它们可以用于序列(sequence)或者属性(property)。之所以称之为局部是因为它们对声明它的sequence是局部的,对其他sequenc...原创 2018-03-27 15:11:29 · 2213 阅读 · 0 评论 -
UVM糖果爱好者教程 - 9.寄存器抽象
本文将解释如何使用UVM寄存器抽象层(RAL)来生成寄存器事务。下图显示了用于这篇文章的验证平台。 除此之外,jelly_bean_reg_block,jelly_bean_reg_adapter和jelly_bean_reg_predictor是用于寄存器抽象的类。 Verification Platform下图显示了RAL相关类的...翻译 2018-04-17 16:43:59 · 1911 阅读 · 1 评论 -
面向对象编程基本概念
引言 在软件工程的早期,史诗般的挣扎着项目的复杂性,增长以及管理大型开发团队的挑战。面向对象编程(OOP)为软件社区引入了一场革命,以帮助解决这些问题。 OOP专注于模块化,改变容忍度,代码重用,易于理解和分布式开发。今天大多数项目都使用面向对象的概念。由于C ++引入了OOP,因此用户体验已经产生了关于如何最好地利用OOP的更多知识。有很多关于面向对象的协议和更多的争论。应该鼓励哪些功能? C ...翻译 2018-04-18 15:41:53 · 6530 阅读 · 0 评论 -
第3章 立即断言
立即断言是简单的非时域断言,它们像程序块中的语句那样执行。将它们解释为类似“if”条件语句下表达式。只有在指定程序语句的情况下才可以使用立即断言。 图3.1描述了立即断言的基础知识。这是所谓的,因为它在程序执行到这个程序块时立即执行。它不会等待'下一个时钟边缘'自行启动。断言之前可以使用电平敏感或边沿敏感的语句。正如我们将看到的那样,断言只能在'采样/时钟边沿'敏感逻辑而不是电平敏感逻辑上工作。 ...翻译 2018-04-23 11:00:29 · 5017 阅读 · 0 评论 -
第4章 并发断言:基础(序列,属性,断言)
这些是时域断言,允许使用基于时钟(采样)边缘的语义创建复杂序列。这与完全组合逻辑的立即断言相反,并且不允许时域序列。 并发断言是SVA语言的要旨。它们被称为并发,因为它们与其余的设计逻辑并行执行。让我们从基础开始,继续讨论并发断言的复杂概念。 让我们先学习并发断言的基本语法,然后研究它的语义。 图4...翻译 2018-04-23 14:32:03 · 8790 阅读 · 10 评论 -
UVM糖果爱好者教程 - 10.糖果厂内部
UVM工厂用于创建UVM对象和组件。 这篇文章将解释使用jelly_beans的UVM工厂(如您所期望的)并揭示工厂幕后发生了些什么。::type_id在Transactions和Sequences中,我们定义了jelly_bean_transaction类。 然后,one_jelly_bean_sequence创建了一个jelly_bean_transaction对象,如下所示:jb_tx = ...翻译 2018-04-19 10:16:36 · 1847 阅读 · 0 评论 -
第1章 介绍
介绍 正如业界众所周知的那样,28纳米及以下节点的设计复杂性正在爆炸式增长。小尺寸要求和高性能,低功耗和小面积的相互矛盾的要求导致了如此复杂的设计架构。多核,多线程和功耗,性能和面积(PPA)需求加剧了设计复杂性和功能验证。 负担在于功能和时间域验证,以确保设计符合规范。 RTL(和虚拟平台级别)功能验证不仅重要,而且硅验证也很重要。工程团队需要几个月才能验证实验室中的硅片的日子已经结束。在硅前...翻译 2018-04-19 15:57:48 · 3571 阅读 · 2 评论