1、如何历枚举成员?
当你想判断某个值是否是某枚举的成员时,可以遍历枚举成员与其作比较。遍历枚举类型可以用.first和.next函数来实现。再SV书本第47页,例2.50。
2、关联数组在V中的always块中被赋值为什么会vcs编译不通过?
因为想要定义一个无限大的mem,所以使用了关联数组,并且在always块中对其进行了赋值。但是vcs编译不通过,为什么呢?其实这种情况就是非阻塞赋值连接了一个动态的类型,但是这种不可以的,因为电路只能连接死的bit位宽,所以vcs编译不通过。如果换成assgin赋值,照样是编译不通过,原因是一样的。
那么在V中是否可以做到定义一个无限大的mem?从综合的角度来看是不可以的,因为rtl是要综合为固定的硬件的,也就是说综合后的硬件是固定的,所以是做不到无限大的。
3、打开各类文件
evince打开pdf文件。soffice 打开word等文档。
4、在UVM中使用宏定义传递参数,避免重复代码
例如`UVM_TESTCASE
`define UVM_TESTCASE(testname, seqname) \
class testname extends uvm_test; \
`uvm_compent_utils(testname) \
…… \
uvm_config_db……(……,seqname::type_id::grt()); \
endclass : testname \
之后需要定义一个名为tc_write,调用wrtie_seq的类,就可以直接如下:
`UVM_ TESTCASE(tc_write, write_seq);
这样不同的testcase可以直接调用这个宏完成testcase class的定义。
5、如何显示全路径?
使用命令pwd。
6、断言中出现(c==1,a=b)是什么意思?
这个一般是在断言文件中使用局部变量的时候会出现的用法,意思为前者为真的时候,将b的值赋给a(a是局部变量)。可见SVA书籍P77页。
7、vim开启鼠标点击定位光标
在vim编辑器内使用如下命令:【:set mouse=a】开启鼠标点击定位光标。
8、shell脚本中fi是什么意思?
shell中的fi单独没意思,和if语句搭配是if的结尾。
if [ $oldboy -eq 1 ];then
echo "good"
else
echo “bad”
fi ##这里的fi就是if结尾,在shell中不用不行,但py语言就不用。
9、`undef
指令`undef将取消先前定义的文本宏的定义。
10、$value$plusargs()怎么用?
相当于想传什么值就传什么值啊!你可以在外面给值!当然这个函数不一定给值,还可以给字符串!传字符串时,我们可以在sequence的重载等处,用处非常广哦~$value$plusargs(“line = %d”, line) //传line这个参数,并且输出的格式是%d(十进制)。
11、$readmemb(“filename”, mem)读出的全是X态,是为什么?
是因为文件打不开,说到底是文件的路径不对,这里可以使用绝对路径。
12、如何比较两个文件内容?
使用“diff”。例如比较文件1和文件2的内容是否一致,使用 diff 文件1 文件2 即可。
13、SV的输出格式:例如%m
%d 以及 %D 以十进制格式输出
%b 以及 %B 以二进制格式输出
%o 以及 %O 以八进制格式输出
%h 以及 %H 以十六进制格式输出
%e 以及 %E 以指数表示方式输出实数(real型)
%f 以及 %F 以十进制数表示方式输出实数(real型)
%g 以及 %G 以十进制数或者以指数表示方式输出实数
%s 以及 %S 以字符串格式输出
%c 以及 %C 以ASCII码格式输出
%m 以及 %M 输出层次名
%v 以及 %V 输出线网类型变量的强度
%t 以及 %T 以当前时间格式输出
14、solve…before约束
看以下的例子:
solve a before data约束的存在,随机变量a会先被赋予随机值,a为1或0的概率为1/2,接下来再为data随机变量赋随机值,其概率取决于a的值。
注:randc类型变量不被允许使用solve…before约束。
15、数组定位方法之find_index with
find_index with ()找出符合条件的索引。
find with ()找出符合条件的元素。
例如
int d[]=’{1,2,3,4,5,6}, tq[$];
tq = d. find with (item > 3); //{4,5,6}
tq = d. find_index with (item > 3); //{3,4,5}
更多数组定位方法见SV书本P35。
(2022.10.10-至今)
16、如何在同一窗口打开多个终端并实现快捷键切换?
1.用正常的方式打开一个终端。
2.使用组合键 ctrl+shift+t , 这时就在同一个窗口中打开了另一个终端,当然再按一次ctrl+shift+t,会再生成一个,需要多少了大家可以自行决定
3.按组合键Alt+1,就会切换到第一个终端,按Alt+2,就会切换到第2个终端,Alt+n,对应的就会切换到第n个终端。
17、如何让vim查找的时候不区分大小写?
在vim中输入:set ignorecase。
将这句命令加入.vimrc文件中,再source ~/.vimrc 后,重新打开的文件,就可以不区分大小写查找。
19、Kill端口和生成端口
记录一下,免得不记得时候到处找:
先登录SSH:ssh tansy@10.10.10.10
Kill指定端口:vncserver -kill :端口号
生成指定端口:vncserver :88 -geometry 1900x900
20、如何比对不同波形文件中的同一信号?
用verdi打开波形,选中信号,report输出信号为一个txt文件。比对txt文件即可。
21、同步操作两个波形文件
Verdi使用方法(2)— 高效对比两个波形_Willliam_william的博客-CSDN博客
22、python脚本知识:len函数和import xlrd
(1)len函数:可以用来判断某某是否为空。
作用:返回字符串、列表、字典、元组等长度。
语法:len(str)。
参数:str(要计算的字符串、列表、字典、元组等)。
返回值:字符串、列表、字典、元组等元素的长度。
(2)import xlrd:引入Excel库的xlrd,用来读取Excel数据
(3)注释:一种是用#符号注释(单行),一种是用"""符号注释(多行)。
23、iff
Systemverilog在@事件控制中添加了iff修饰词,只有当iff后的条件为真时,@事件才会触发。注意,iff可以在always和always_ff下使用,但是不能在always_comb、always_latch中使用。