
System Verilog
文章平均质量分 58
借问众神明.
犹当晚学,不可自弃
展开
-
fork join_none易错点
分析上述两种不同情况,可以发现,当延时语句在fork内部时,则此时父线程在i=3之前均无阻塞,那么此时forkjoin_none不会执行,仅当i=3时,父线程被阻塞,则forkjoin_none开始执行,所以打印结果为333。本篇博客记录一下自己在实际过程中遇见的易错的语法细节。具体看见sv标准(1800-2012)...原创 2022-07-25 14:40:02 · 988 阅读 · 0 评论 -
systemverilog 中的always_comb, always_latch, always_ff
在verilog中,仅从alwasy关键字中不能直接看出设计者需要设计的是什么电路,为此SystemVerilog把always细化成always_comb, always_ff, 和always_latch。使综合工具可以自动检查各种细节,降低了设计失误的可能。always_comb表示设计者想要设计一个组合逻辑电路。中使用alway_comb以后,不必再写敏感信号列表。另外,always_comb会告诉综合工具,这里需要的是一个组合逻辑电路,假如我们设计时,if语句或者case语句没有写完整,在综合时,原创 2022-06-08 16:26:28 · 2081 阅读 · 0 评论 -
【verilog中的阻塞赋值与非阻塞赋值】
文章目录1: 非阻塞赋值语句2:阻塞赋值语句总结1: 非阻塞赋值语句非阻塞(Non_Blocking)赋值方式块结束后才完成赋值操作。b的值并不是立刻就改变的。对于时序电路中的always块的reg信号,一般采用非阻塞语句赋值。这种方式的赋值并不是马上执行的,也就是说always块内的下一条语句执行后,b并不等于a,而是保持原来的值。always块结束后,才进行赋值。如:module no_blocking (clk, a ,c ); input cl原创 2022-05-26 10:51:28 · 2122 阅读 · 0 评论 -
【sv中的继承与多态】
文章目录继承继承原创 2022-04-29 16:18:21 · 3489 阅读 · 3 评论 -
UVM产生异常激励的方法
在UVM中,提供了三种产生异常激励的方法(以白皮书中源码为例)在my_transaction中添加一个crc_err的标志位这样,在post_randomize中计算CRC前先检查一下crc_err字段,如果为1,那么直接使用随机值,否则使用真实的CRC。class my_transaction extends uvm_sequence_item; rand bit[47:0] dmac;//A 48-bit Ethernet destination address rand bi原创 2022-04-23 14:37:22 · 771 阅读 · 0 评论 -
Systemverilog中关于@和wait的区别
Systemverilog中@和wait區別及應用案例分析 前言:在SystemVerilog中,用来触发事件时,使用->;用来等待事件使用@或者wait。那么@和wait有什么区别呢?在Verilog中当一个线程在一个事件上发生...转载 2022-04-18 21:30:03 · 3525 阅读 · 0 评论 -
verilog中数组的部分选择
在HDLbits中看见如下一道题:创建一个 4 位宽、256 对 1 的多路复用器。 256 个 4 位输入全部打包成一个 1024 位输入向量。 sel=0 应该选择[3:0] 中的位,sel=1 选择[7:4] 中的位,sel=2 选择[11:8] 中的位等。解题代码如下:module top(input [1023:0] in,input [7:0] sel,output [3:0] out);assign out = in[sel*4 + 3 : sel*4 + 0];endmod原创 2022-03-30 18:58:01 · 4871 阅读 · 0 评论 -
寄存器访问方法
本文转载自UVM糖果爱好者教程 - 16.寄存器访问方法 UVM的寄存器抽象层(RAL)提供了几种访问寄存器的方法。 这篇文章将解释寄存器访问方法的工作原理。 在Register Abstraction中,我们介绍了RAL的概述并解释了如何定义寄存器。 在这篇文章中,我们将介绍如何访问寄存器。uvm_reg_field的属性在深入了解寄存器访问方法之前,让我们看看如何存储寄存器值。 如寄存器抽象中所示,uvm_r转载 2022-03-26 21:54:49 · 1732 阅读 · 0 评论 -
fifo深度计算
最近遇到关于fifo深度计算的知识点,于是想以一个例题来学习学习。题目描述:在一个fifo中,有一个100MHz的写时钟,每100个周期写入80个数据,另外有一个80MHz的读时钟,每个周期读出1个数据,那么fifo的深度应该设置为多大?从题中可以看出,这个fifo为异步的,要计算其最大的深度,首先需要考虑,我们计算的深度应该是fifo读写最繁忙的时间段,即写入数据最容易溢出的点,于是就涉及到back to back的概念.设想fifo在100个周期中,前20个周期不写入数据,随后80个周期写入,原创 2022-03-16 16:08:26 · 842 阅读 · 0 评论 -
模块(module), 程序块(program)的区别
文章目录moduleprogram注意点区别module在verilog中,模块可以用来描述从简单的门元件到复杂的系统 (例如一个微处理器)的任何一种硬件电路。模块除了可以为硬件建模外,也可以用来封装验证平台,在模块内部,我们可以例化采用模块定义的DUT和采用 program或者class封装的验证平台。program程序块可以被看作是一个具有特殊执行语义的模块。相当于软件领域。一旦被声明,一个程序块可以在需要的层次位置 (典型情况是顶层)中被实例化,并且它的端口可以像任何其他模块一样。程序块内的类原创 2022-03-08 12:07:20 · 2697 阅读 · 0 评论 -
【sv中枚举类型与字符串语法学习】
文章目录枚举基本语法类型转换枚举类型内置方法字符串内置方法枚举基本语法枚举类型可以用来声明一组整型的命名常量,定义具有强类型的枚举变量。枚举类型还可以使用枚举名字而不是枚举值来方便地引用或显示。当没有指定数据类型的时候,缺省的数据类型是 int。在枚举类型中使用的任何其他数据类型都要求显式地声明。枚举类型定义了一组具有名字的值。无论是枚举名 还是它们的 (整型) 数值都必须是唯一的。它们的值可以被设置为任意整型常量值,或者从初始值 0开始递增 (默认情况)。如果将两个值设置到相同的枚举名,或者设置的值原创 2022-03-08 11:31:48 · 1700 阅读 · 0 评论 -
【$fopen函数的用法】
文章目录语法介绍uvm中的用法语法介绍$fopen函数的功能是使用给定的模式 mode 打开 filename 所指向的文件。文件顺利打开后,指向该流的文件句柄就会被返回。如果文件打开失败则返回 0。$fopen函数格式如下:<file_desc> = $fopen("", “”);filename–指包含的要打开的文件名称mode指打开文件的格式而file_desc在使用前必须先被声明。mode的格式类型如下表:字符含义rread,读wwri原创 2022-03-03 13:05:28 · 2963 阅读 · 0 评论 -
【sv中浅拷贝与深拷贝】
文章目录前言浅拷贝(shallow copy)深复制UVM中实现深复制的方法前言本文通过实际代码编译介绍了sv中浅复制和深复制的区别浅拷贝(shallow copy)先给出实际代码module shallow_copy(); class A; integer j = 5; endclass class B; integer i =1; A a; function new(); this.a=new(); endfunction原创 2022-02-28 19:37:22 · 2132 阅读 · 0 评论 -
关于句柄与new函数的简单理解
前言在实际应用中,经常会遇到句柄和new函数,但是对二者的意义一直没有搞明白。通过查阅资料,谈谈个人对句柄与new函数的理解,有错误还请各位批评指正!句柄通常以类class的名字声明一个句柄,如driver drv;在声明句柄drv的时候,drv会被初始化为null值,此刻还没有为其分配一个对象。new函数drv = new();通过new函数,创建driver对象,并为其分配空间。同时,在new函数在为对象分配内存的时候,也会对其变量进行初始化,且会返回一个存储着对象内存的地址给句柄。因此原创 2022-02-22 20:08:59 · 390 阅读 · 0 评论 -
【SV中local::的用法】
在使用内嵌约束randomize()with {CONSTRAINT}时,约束体中的变量名的查找顺序默认是从被随机化对象开始查找,但如果调用randomize()函数局部域中也有同名变量,那就需要使用local::来显式声明该变量来源于外部函数,而非被随机化的对象(在约束中也可用this/super来索引这些变量)具体代码示例如下:class chnl_generator; rand int pkt_id = -1; rand int ch_id = -1; rand int原创 2022-02-16 11:15:04 · 2069 阅读 · 0 评论 -
System verilog 中ref参数的用法及注意事项
ref介绍在module,function或者task中有input,output,inout等具有方向的声明变量,它们在作为参数传递的过程中是作为参数值传递的,效率较低,数据在每一次方法的调用过程中均需要被复制。而ref参数传递的则为传递参数的引用地址,本文介绍了ref的用法和注意事项。refmodule ref_1;int hao;initial begin hao = 0; #10 hao = 4; #10 hao = 8; #10 $stop; end原创 2022-02-14 22:18:59 · 4071 阅读 · 2 评论