- 博客(22)
- 收藏
- 关注
原创 system $countones
$countones这个函数跟约束搭配使用,或者用于assertion中都不错,这个函数是计算一组bus信号里面1的个数约束sig_A只能随机一bit 1出来std::randomize(sig_A) with {$countones(sig_A)==1;};检测sig_A是one hot信号,assert($countones(sig_A)==1);另外sva还有一个专门的函数$onehot(sig_A); ...
2022-02-08 17:50:43 1802
原创 system Verilog中的include
今天仿真的时候遇到一个编译不通过的问题,问题的地方是这样的,模块A里面include一段代码(注意不是module),代码以单独.sv方式存在,然后filelist里面我是这样写的+incdir+/svasva/A.svsva/B.sv下面是A的代码module A();`include “B.sv”endmodule仿真一致报B.sv有问题,然后反复检查B.sv感觉没有问题,尝试着把B的代码直接放到A里面没有问题,想半天也想不通问题出在哪,最后试了一下把filelist里面的sva/B.
2021-12-14 14:09:04 978 1
原创 Static and automatic tasks
Tasks defined within a module, interface, program, or package default to being static, with all declared itemsbeing statically allocated. These items shall be shared across all uses of the task executing concurrently.Tasks can be defined to use automatic
2021-12-07 10:03:39 479
原创 system verilog $clog2的使用
下面使system verilog手册的原文描述The system function $clog2 shall return the ceiling of the log base 2 of the argument (the log rounded up toan integer value). The argument can be an integer or an arbitrary sized vector value. The argument shall betreated as an
2021-11-30 14:45:07 12905
原创 简单写一下uvm_transaction的写法
开头老是想打Hi,就像写信一样,class xx_transaction extends uvm_sequence_item; rand int id ; rand bit [xx:0] signal_A ; constraint con_init { soft (signal
2021-11-24 19:14:55 1908
原创 system verilog整数除法计算时要注意的点
请看下面的代码module test();int a=1;int b=2;int c=3;int d=4;real e=0;initial begin #1; e=a/d; $display("a is %d, d is %d, e is %f",a,d,e); #1; e=b/d; $display("b is %d, d is %d, e is %f",b,d,e); #1; e=c/d; $display("
2021-11-24 17:39:49 3299
原创 关于system verilog “<<” 符号的使用,期望结果与预期不符
system verilog里面的“<<”用来做移位操作,但是使用的时候要注意溢出问题:比如 reg [7:0] A;A=1; (A<<2) 得到的结果是4A=‘hEA; (A<<2) 得到的结果是’hA8, 高两位被干掉了,需要注意,因为很多时候我们使用这个期望的结果是‘hEA*4,但是实际与期望不符的,应该是system verilog移位后位宽与移位之前保持一致导致的。...
2021-11-22 18:03:26 1127
原创 状态转变过程中的一些验证要点
比如A=‘d0 B='d200A=0 ~ 99是猫状态、B=100 ~ 200是狗状态,我们验证的时候很多就是取0 ~ 99然后看状态是不是猫,然后取100~200的某个值,检查状态是不是狗,还有就是从猫跳到狗,从狗跳到猫,除了上面以外,还是需要有一个扫描case,从0加到200,在从200见到0,如果A到B的跨越的值特别大可以适度加大一点点,但是后期回归的时候最好有一个特别比较全的扫描。...
2021-11-04 13:24:51 69
原创 excel的行列开始位置,某单元格坐标,以及python读取excel
import re, sys, osimport xlrdimport timeimport copyfrom collections import OrderedDict wb = xlrd.open_workbook(file_in) #####print(wb.sheet_names()) ws = wb.sheet_by_name(sheet_name) row=1 while ws.cell_value(row, COL_DOT) != "beg
2021-11-01 10:02:23 835
原创 system verilog $fell
这个$ fell是说从一个非0的值到0,今天仿真遇到一个奇怪的问题,$ fell 被异常触发了,明明触发条件一直为0,怎么就触发了呢,后来想想可能是由于开始是没有时钟的,虽然波形显示为0,但是实际被认为是一个非零的值,然后时钟有了之后彻底变为0,所以导致被触发,不知道理解对不对,如果有知道的请下面留言,谢谢...
2021-10-21 15:39:37 335
原创 fork join_any
今天写代码有一个地方理解有点问题,fork join_any的意思是如果内部任何一个线程完成,程序往下执行,但是没有完成的线程还会继续执行,并不是停止,例如我想写一个行为,信号A持续为高1ms,状态跳转st0->st1,如果A持续时间不足1ms,那么状态不跳转,今天写的时候忘记了加disable fork,导致fork join_any内部的两个先后都执行了,结果状态判断就出错了,我期望的是一个begin end执行完成后另一个就不继续执行了,所以需要加上disable fork
2021-10-13 17:30:43 1207
转载 C指针比较好的讲解
前言、复杂类型说明要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其优先级和运算优先级一样,所以我总结了一下其原则:从变量名处起,根据运算符优先级结合,一步一步分析.下面让我们先从简单的类型开始慢慢分析吧:int p; //这是一个普通的整型变量int *p; //首先从P 处开始,先与*结合,所以说明P 是一个指针,然后再与int 结合,说明指针所指向的内容的类型为int
2021-10-13 10:55:39 56
原创 C指针初始化理解
指针使用前必须初始化,否则不知道指到哪里,有可能指到不存在的空间,也可能指到一个已存在的空间,第一个能报错,第二个int *p;int a[10];p=&a[0];这是一种初始化,好理解一些。但是实际使用的时候很多时候写成下面这样int a[10];int *p=&a[0];这种我一开始很不理解,因为 p明明是表示a[0]存放的变量,而p才是存放地址的,运算符 * 是间接寻址或者间接引用运算符,怎么可以把&a[0]的地址赋值给p呢(即把a[0]地址赋值给a[0]存放的
2021-10-12 16:18:43 83
原创 功能覆盖率
功能覆盖率面向控制(SVA)SVA主要是针对时许控制的检查,bind到需要检查的module上面向数据(COVERGROUP)covergroup用来收集各个控制寄存的变量是否被覆盖到(coverpoint),以及变量间的交叉覆盖(cross cover)covergroup是在scoreboard检查ok后进行收集的。...
2021-10-09 11:26:23 219
原创 simulin学习笔记
这两天由于工作需要在弄simulink,一个非常强大的工具,以前没有接触过,本次工作内容是把模块里面一些固定的constant量作为input口给拉出来,这样可以实现实时改变参数。使用的工具是matlab的simulink。下图是一个mux的模块叫做index Vector,第一个输入时控制位,网上找到说这个东西选择都是1+控制变量值,其实不是的,这个与index Vector的配置有关,这个可以选择从0开始还是从1开始,如果从0开始那么就是从控制变量+1,如果从1开始,那么控制变量值是多少就输出哪个分
2021-10-09 11:17:36 630
原创 system verilog $signed使用,以及环境变量设置通过export
日常小结:2021/8/23对于$signed做了如下测试,我们已知的是int的signed类型的,logic是unsigned类型的,如果我们想要把unsigned类型的变量转为signed类型的,就要用到这个函数,并且根据测试结果,4bit unsigned类型的logic,变成32bit位宽的int类型,如果加$signed就会自动补足高位为1,即如果我们的4bit有符号数是4’b1111,其实表示的是-1,使用$sign是可以变成32位的int型的-1,参考下面的例子。所以我们在设计中遇到一些
2021-08-23 19:43:47 1217
原创 修改simvision字体大小
由于屏幕分辨率比较高,默认情况下simvision的Source Browser的字体很小,看起来有点费劲,我们可以添加Xdefaults到~/.simvision/下,方法如下:cp /opt/cadence/XCELIUM/share/cdssetup/simvision/app-defaults/SimVision ~/.simvision/Xdefaults然后修改Xdefaults的下面选项值即可,调到自己看起来合适的大小。。。SimvisionSrcBrowser.fixedFont:
2021-06-22 13:36:40 3334 5
原创 加begin-end匹配,高亮语言,
.VIMRC的写法 if v:lang =~ "utf8$" || v:lang =~ "UTF-8$" set fileencodings=ucs-bom,utf-8,latin1endifset nocompatible " Use Vim defaults (much better!)set bs=indent,eol,start " allow backspacing over everything in insert mode"set ai " always set aut
2021-06-11 16:26:13 917
原创 disable fork
自己最近用到disable fork发现一个问题,xrun仿真器貌似不支持fork : lab1theat1;theat2;join_anydisable lab1;按照书上介绍,当theat1或者theat2任意一个发生后,终止未完成的fork进程,但是xrun仿真器仿真出来的结果是并没有终止未完成的进程所以我们应该使用disable fork;来终止线程,这个可以把所有子线程也全部终止![graph TD;A-->B;B-->C;](https://img-bl
2021-02-03 14:14:24 858 1
原创 linux的常用操作批量修改文件内容和文件名,杀进程
linux下一些便捷操作批量修改文件内容find -type f -name “*.sv” | xargs sed ‘s#old#new#g’ -iold/new是替换的内容批量修改文件名rename ‘old’ ‘new’
2021-01-23 23:29:50 83
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人