- 博客(9)
- 收藏
- 关注
原创 sv的几个难点
2.几个较灵活的数据类型,如关联数组;5.接口中的modport,时钟块等;1.随机变量的约束,各种形式;4.dpi的参数类型对应;
2024-01-16 22:07:28
409
1
原创 uvm sequence发送transaction的几种方法
其中只有第3是包含实例化和随机化的,2是包含实例化的,1既不包含实例化,也不包含随机化。对于2来说,需要在create和send之间随机化完成。对1来说,需要在finish_item之前随机化完成。对于2来说,有一些需要更多参数的宏定义,例如。
2023-12-31 23:02:18
785
原创 uvm sequence仲裁和优先级
3.通过is_relevant函数使sequence失效,sequencer仲裁时会查看sequence的is_relevant函数,返回为1时,sequence有效,否则无效,因此可以重载is_relevant来使sequence失效,通常is_relevant函数里要实现一个让sequence无效的条件,但是注意,当sequencer发送完所有sequence后,会调用有is_relevant的sequence里的wait_for_relevant,如果没有则会报错。
2023-12-31 21:20:26
541
原创 数字芯片设计领域Git入门最基本用法
回到刚刚git commit完成的阶段,假如自己反悔了,不想commit了,那么怎么回退呢,又有两个恶命令,第一git reset --soft HEAD^,推荐是用这个方式,这个方式是恢复到git add的状态,也就是暂存区,保留修改。还有一种比较暴力的方式,git reset --hard HEAD^,直接去掉所有的改动,并且恢复到git add前的状态,也就是unstage阶段。以上就是在芯片设计验证领域,git 80%的使用情况,当然还有切换分支,rebase等操作,使用较少,后续再补充。
2023-09-17 16:19:33
203
1
原创 uvm中m_sequencer和p_sequencer
sequence的启动方式有两种,一种是直接用start(指定sequencer)显示启动,一种是设置好default sequencer, 按照指定的格式。无论是哪种方式,都已经决定了,一个sequence的启动sequencer。那么m_sequencer就是这个默认sequencer的指针,嵌套sequence的时候,启动不同的sequence可以start(m_sequencer),但是如果想直接获得sequencer里面的成员变量,则无法直接用m_sequencer.a的方式获得,原因是m_seq
2022-03-19 12:22:45
1138
原创 UVM 子 sequence与父 sequence里有同名 sequence 的执行选择问题
首先区分,调用同名的task dispatch() 是在子sequence A_0 还是父sequence A,如果是在A_0,则不存在重载问题,就是调用A_0自己的task,无论A里的task定义成virtual的与否。此时想执行A的task,必须用super.dispatch() ;如果是在A里面调用task,也是首先查看本身自己的task,但是此时存在重载问题,看父类里是否把task定义成了virtual ,如果是virtual,则调用的是子类A_0里的task,否则重载不成功还是执行父类自己的tas
2022-03-07 17:12:00
518
原创 perl脚本学习笔记
1.哈希的键值对,可以用键值对全列表的方式,用逗号隔开,但是会发现键值对列表有时候会难以区分,要靠数数,所以更加清晰的做法是,用胖箭头=>来表示,键值对,左边是键。例如my %last_name =(fred => 'filinstone',dino=>'undef',);哈希函数keys和values,在列表上下文中,分别可以得到整个哈希的键列表和值列表,my @k = keys %hash,在标量上下文中,这两个函数都会返回,哈希中元素(键值对)的个数。
2022-02-17 23:32:27
371
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人