codeblock快捷键
ctrl+G 跳转。
ctlr+J 生成补全。
cygwin用于获得开发环境。注意安装路径要对,特殊字符路径和codeblocks不兼容。
codeblock返回上一处:点击光标即可。
VS code快捷键
Shift Alt F:vs code格式化代码
Ctrl Shift O:打开函数列表
Ctrl P:快速打开文件,或者跳到指定行
Esc:禅模式退出,
DW_minmax文件
这个文件是一个库,在EDA工具安装路径下可以找到,
参见:http://ee.mweda.com/ask/265861.html
~/eda/synopsys/K-2015.06/dw/sim_ver
莱文斯坦距离
莱文斯坦距离在UVM中有用到,主要是提示用户是否是错误输入了,而输入本应该是怎样的。
https://xiaoyuhen.com/blog/2019-03-16-levenshtein-distance/
这个讲解非常好。莱文斯坦距离主要用在用户偶尔输入了错误的字符串,然后根据已有的字符串判定大体上应该输入哪个字符串。
莱文斯坦距离就是比较字符串A如果要变为字符串B,那么需要做增删改操作单个字符的最小次数。在算法实现层面上使用动态规划,以子问题的形式获知最终的问题结果。
char* 和 char[]区别
https://blog.csdn.net/u012611878/article/details/78291036
1.char是变量,值可以改变, char[]是常量,值(指针)不能改变。
2.char[]对应的内存区域总是可写,char指向的区域只读
3.char * 和char[]的初始化操作有着根本区别:前者指向了常量(字符串常量),后者则指向了变量(字符数组)
可增删constraint的实现方法
约束定义出来的class,本身的成员变量中,包括了item和约束两部分。
为了能够动态的添加和删除对特定item的约束。实现方法代码如下:
以下代码的实现在module中,initial语句也在module中。
重点在于add_instance_constraint方法,当创建了一个constrained_item以后,
对该item的实例增加两个约束,而这两个约束在增加的过程中,先将约束本身指向对应的item,
获得一个带有item实例的约束,然后将该约束放入到队列中。
放入两个约束到队列后,这两个约束同时指向了constrained_item,
从而constrained_item在调用randomize函数后,可以执行多个约束的同时生效。
class item;
rand int val;
endclass
class constrained_item extends item;
local rand abstract_constraint #(TYPE) instance_constraints[$];
function void add_instance_constraint(abstract_constraint #(TYPE) c);
abstract_constraint #(TYPE) c_copy = new c;
c_copy.set_object(this);
instance_constraints.push_back(c_copy);
endfunction
endclass
virtual class abstract_constraint #(type T = int);
protected T object;
function void set_object(T object);
this.object = object;
endfunction
endclass
class only_even_values extends abstract_constraint #(item);
constraint c {
object.val % 2 == 0;
}
endclass
class only_even_values2 extends abstract_constraint #(item);
constraint c {
object.val> 0;
object.val< 100;
}
endclass
initial begin
automatic constrained_item i = new();
automatic only_even_values only_even = new();
automatic only_even_values2 only_even2 = new();
i.add_instance_constraint(only_even);
i.add_instance_constraint(only_even2);
repeat (100) begin
if (!i.randomize())
$fatal(0, "Randomization failure");
$display("%p", i);
end
end
$fatal的传参
$fatal会隐式调用$finish,因此$fatal和$finish都有一个退出号码,这个退出号码默认是1。
巴科斯范式命令行语法
https://www.cnblogs.com/uakora/p/11809501.html
命令 <必选参数1|必选参数2> [-option {必选参数1|必选参数2|必选参数3}]
[可选参数…] {(默认参数)|参数|参数}
尖括号< >:必选参数,实际使用时应将其替换为所需要的参数
大括号{ }:必选参数,内部使用,包含此处允许使用的参数
方括号[ ]:可选参数,在命令中根据需要加以取舍
小括号( ):指明参数的默认值,只用于{ }中
竖线|:用于分隔多个互斥参数,含义为“或”,使用时只能选择一个
省略号…:任意多个参数
ralgen生成的寄存器模型存在覆盖率的警告(uvm-1.2)
添加如下代码:
uvm_config_db#(int)::set(this, "*", "include_coverage", 0)
标签:constraint,object,快捷键,char,item,only,参数,莱文
From: https://www.cnblogs.com/bai2022/p/17923469.html