- 博客(42)
- 收藏
- 关注
原创 关于uvm_driver(ahb_driver中的item)
两种类型的端口: uvm_seq_item_pull_port #(REQ, RSP) seq_item_port; uvm_analysis_port #(RSP) rsp_port; REQ req; RSP rsp;
2024-02-29 21:34:39
242
原创 Verilog中交换a,b两个变量的值
在verilog和systemverilog语言中,如果有两个变量a和b,在不使用第三个变量的方法,交换变量的值主要有两种方法:使用异或或者拼接;
2024-02-29 11:31:30
317
原创 Verilog中向量的位截取、拼接
是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中;是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中;其中,base可变,但是。以下都是正向切片方式;
2024-02-27 00:41:15
973
原创 “OVL断言“和“assert 断言“有什么区别和联系
综上所述,OVL 断言和 SystemVerilog `assert` 断言在设计目的、语法和特定功能上有一些差异,但它们都是基于断言的验证方法,用于描述设计性质和进行仿真验证,都为验证工程师提供了在验证中描述设计性质和约束的方式。选择使用哪种方法通常取决于具体的验证需求和环境。选择取决于具体的验证需求、工具和方法。- 虽然 OVL 和 SystemVerilog `assert` 断言有一些差异,但它们都属于基于断言的验证方法,目标都是提供一种描述设计性质和约束的方式。
2024-01-26 10:20:33
1064
原创 $hdl_xmr_force,$value$plusargs
因此,`$hdl_xmr_force("rkv_timer_tb.apb_rstn", "0");而后续的 `$hdl_xmr_force("rkv_timer_tb.apb_rstn", "1");在上面的例子中,"+my_parameter=%0d",是格式字符串,指定了期望的命令行参数格式。如果命令行中包含了类似 +my_parameter+=42 的参数,那么成功匹配,+my_parameter 中将包含值 42。"format string" 是一个格式化字符串,用于指定期望的命令行参数的格式。
2024-01-24 12:21:52
651
原创 systemverilog中关于覆盖率定义、例化、采样
典型例子:name:name可以不与这个覆盖率的名字相同;如下 关键词iff:可以使用关键词iff给coverpoint或者cover group添加条件翻转覆盖率:0 => 1翻转wildcard覆盖率:使用关键词wildcard创建多个状态或者翻转,在表达式中,任何X,Z或者?都会被当成0或1的通配符忽略的bin:对于那些不计算功能的域值可以使用ignore_bins来排除,最终不会计入覆盖路 ignore_bins hi = {[6,7]
2024-01-24 00:55:59
711
原创 $cast详解,转换前后句柄指向对象
在这个例子中,由于 `Derived` 是 `Base` 的派生类,因此可以将 `Derived` 类型的对象引用转换为 `Base` 类型的对象引用。总体而言,向上转换是相对安全的,因为它涉及将派生类对象视为其基类。而向下转换则需要谨慎处理,通常需要在转换之前进行类型检查以确保安全性。在 SystemVerilog 中,`$cast` 可以用于向上转换和向下转换。时,确保在转换之前检查源类型和目标类型是否兼容,以避免运行时错误。都是未初始化的对象引用或句柄。所引用的对象,否则,
2024-01-24 00:02:28
524
原创 uvm中adapter是自动执行的吗
在使用UVM时,通常无需手动触发适配器的执行,它会在需要时自动进行转换。然而,确保适配器已正确配置和连接是至关重要的,以便在需要时能够顺利地执行转换。:如果在UVM事务中使用了寄存器访问(例如,使用`uvm_reg_sequence`进行寄存器访问的事务),适配器也可能在这个上下文中被调用。:当进行寄存器读取或写入时,适配器会自动执行以将总线事务转换为寄存器模型可以理解的格式。
2024-01-22 23:41:25
373
原创 $sformatf、$formatf 和 print、display
总的来说,$sformatf和$formatf用于在字符串中格式化生成内容,而$display和print用于在仿真中输出到控制台。选择使用哪个取决于你的需求和代码的上下文。
2024-01-18 13:27:09
820
原创 uvm中寄存器设置值为什么有时用set(),有时用write()
总体而言,这两种方式在实现上可以有一些差异,但没有严格的规定。在具体的项目或团队中,可能会有统一的编码风格或规范,因此最好查看相关文档或规范以了解最佳实践。寄存器的值,并将最低位设置为 1。
2024-01-18 11:33:05
497
原创 uvm打印信息中常用的字符含义(%0d、\n、%S)
在格式字符串中,%0d是一个格式说明符,用于控制在格式化输出中如何处理整数。%0d0dd综合起来,%0d0d在这个示例中,%0d将整数number以十进制形式输出,并在输出的整数位数不足时使用零进行填充。如果number是一个两位数,输出将是两位,如果是一个一位数,则在前面用零进行填充。这样的格式说明符可以用于规范化输出,确保输出的整数具有一致的宽度。%s%s4\t表示制表符。在字符串中使用\t会导致文本中插入一个制表符。
2024-01-16 19:12:57
860
原创 get_reg_by_offset函数
其中无论是大端还是小端,addrs[0]是LSB 对应的地址。如果如7.4.1节(白皮书)那样使用了层次的寄存器模型,从最顶层的reg_block的get_reg_by_offset也可以得到子reg_block中的寄存器。即假如buf_blk的地址偏移是'h1000,其中有偏移为'h3的寄存器(即此寄存器的实际物理地址是'h1003),那么可以直接由p_rm.get_reg_by_offset('h1003)得到此寄存器,而不必使用p_rm.buf_blk.get_reg_by_offset('h3)。
2024-01-15 10:16:22
602
原创 解决一些验证问题Not available OpenAl‘s services are not available in your country
清除浏览器所有cookie,或者用一个全新的浏览器重新尝试。先通过Google play下载一个手机端应用,然后注册。
2024-01-12 10:58:23
610
1
原创 uvm_sequence中的body任务能否自动执行
在上面的例子中,用到了宏: uvm_do。这个宏是UVM中最常用的宏之一,它用于:①创建一个my_transaction的实例m_trans;③最终将其送给 sequencer。如果不使用uvm_do宏,也可以直接使用start_item与finish_item的方式产生transaction。答:sequence启动时,自动执行body。
2024-01-10 15:49:21
556
原创 APB_timer中的寄存器模型集成——代码理解
而对于传到bus上也需要用bus的sequencer进行和drv的传递,所以三者是要关联的,这样adapter才能工作。adapter、squencer、map三者的关系,首先需要在环境(一般在env层次时)需要连接三者通过。因为本身rgm充当sequence,adapter充当转换的桥梁,而rgm中因为有lock_model。调用build()函数才能创建uvm_reg,调用uvm_reg里的field等的例化配置。主要进行寄存器块rgm句柄的顶层例化,并将句柄传递给下层environment。
2024-01-08 22:38:14
1451
原创 vim替换操作
若option字段有c,如gc,则会出现如下提示:”replace with foo(y/n/a/q/l/^E/^Y)?,其中range和option字段都可以缺省不填。vim替换字符串的这些选项可以组合使用。Vim替换字符串命令的基本语法是。
2023-12-29 12:29:52
486
1
原创 Verilog和systemverilog中的“==”和“===”区别
对于等式运算符中的操作数有三态的变量,建议使用“===”和“!==”,如果不清楚等式运算符的操作数是否为三态的,也。Verilog和systemverilog中有两种类型的等式。
2023-11-27 22:02:47
363
1
原创 vim操作(文件对比、复制粘贴、剪切、查找字符)
比较和合并文件的时候经常需要结合上下文来确定最终要采取的操作。其他的相同的文本行被自动折叠。do 将差异点的另一文档的内容拷贝到当前文档(diff get)dp 将差异点的当前文档内容应用到另一文档(diff put)比较file1.log和file2.log两个文件内容的区别,不相同的部分会用颜色突出。ctrl-w w 跳到下一个窗口。ctrl-w j 跳到下方的窗口。ctrl-w k 跳到上方的窗口。ctrl-w l 跳到右侧窗口。
2023-11-27 00:10:48
2792
1
原创 1.vim基本操作(纵向编辑),2、#ifndef, #define, #endif的作用
也在其他的package include了,在第一个package被编译的时候,编译了这个文件,那再后面的package include进来了这个文件,就不会重复编译了,会加快编译速度。退出纵向编辑模式的同时所有选中的字符后都添加了“ >> result0”,回到命令模式。退出纵向编辑模式的同时所有选中的字符前都添加了“ping – c 4 ”,回到命令模式。通常被映射为文本粘贴,所以 Window 版的 Vim 的纵向编辑模式由。退出纵向编辑模式,同时所有被选中的数字都被改成了“5”,并回到命令模式。
2023-11-18 23:44:13
207
1
原创 sequence中的objection的控制、sv和.svh区别等
因为virtual sequence是起统一调度作用的,这种统一调度不只体现在transaction上,也应该体现在objection上。一是普通的sequence,二是中间层的virtual sequence,三是最顶层的virtual sequence。UVM的设计哲学就是全部由sequence来控制激励的生成,因此一般情况下只在sequence中控制objection。在sequence中提起sequencer的objection,当sequence完成后,再撤销此objection。
2023-11-17 15:46:10
125
1
原创 1、uvm寄存器 2、uvm_do系列宏3、m_sequencer和p_sequencer4、reg_intf reg_if(.*)
1、uvm寄存器2、uvm_do系列宏3、m_sequencer和p_sequencer4、reg_intf reg_if(.*)
2023-11-14 00:09:42
98
1
原创 2023.11.09-10笔记
1、uvm_analysis_port和analysis_export:2、uvm_analysis_imp_decl(_monitor):3、uvm_analysis_fifo,使用FIFO通信(白P125)4、端口都需要用new实例化,指明(端口名字,uvm_component类型的父节点变量)5、$sformat和$sformatf(少个f的反而多个变量,多个f的少个
2023-11-11 15:34:58
59
1
原创 省略get语句、check_config_usage()、TLM相关
一、省略get语句二、check_config_usage( )三、TLM相关
2023-11-09 10:44:32
59
1
原创 2023.11.03笔记
这里使用unpack_bytes函数将data_q中的byte流转换成tr中的各个字段。首先创建一个my_sequence的实例seq,然后调用start任务,start任务的参数是一个sequencer指针,必须指明,如果是在当前sequencer中启动sequence时,参数变为this,即seq.start(this);例如:tr.pack_bytes(data_q),调用pack_bytes将tr中所有的字段变成byte流放入data_q中,其中data_q必须是一个动态数组。
2023-11-03 22:39:00
419
原创 2023.11.02
set函数第四个参数表示要将哪个interface通过config_db传递给my_driver,get函数第四个参数表示把得到的interface传递给哪个my_driver的成员变量;set函数的第二个参数表示的是路径索引,无论传递给run_test的参数是什么,都会创建一个名字为uvm_test_top的实例,所以set第二个参数就是这个。通过run_test创建的实例是树根,并且树根的名字是固定的,为uvm_test_top。第三个参数就是set函数的第三个参数,这两个参数必须严格匹配;
2023-11-02 23:58:34
28
原创 2023.10.26学习笔记
感悟:module设计代码部分关注端口输入输出最重要,module:testbench测试平台部分,需要的是连接输入输出端口,然后进行激励就是提供输入值,得到输出值,然后看是否最终结果有无错误,从而判断验证的结果正确与否。(3)对wire型变量赋值,wire是线网,相当于实际的连接线,如果要用assign直接连接,就用wire型变量。assign相当于连线,一般是将一个变量的值不间断地赋值给另一个变量,就像把这两个变量连在一起,所以习惯性的当做连线用,比如把一个模块的输出给另一个模块当输入。
2023-10-29 14:09:18
43
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人