分类: system verilog

4 篇文章

Package打包公共函数进阶
我们封装公共函数时,是希望它通用性足够强,可以在多个应用场景中被调用; 说到增强通用性,参数化是最为常见的一种手段; 所以我们在Package打包公共函数时,引入参数类。 package comm_utils_pkg; /* * split bits into bit queue. */ class one_arg#(int arg0); stat…
Package打包公共函数遇到的一些问题
1丶为什么这么做? 我们将一些公共函数封装进Package,方便我们重用,尤其是继承项目,好处尤为明显; 其次,这样做更符合高内聚,低耦合的编码要求。 2丶问题 package comm_utils_pkg; `include "uvm_macros.svh" import uvm_pkg::*; function void bits2byte(b…
带参数的宏定义的一种用法
1 丶应用场景: 当我们 interface 中有几组信号的驱动或采样方式相同时,我们可以把 interface 中的信号作为参数来声明宏定义,将这些相同的操作以带参数的宏定义方式抽象出来。 2 丶举例: 前段时间写 axi master bfm 时,axi 有 5 个通道,每个通道都有一个握手机制;当 a 信号拉高后,进入等待握手状态,开启一个无…
学会打包思想,善用结构体
最近在做项目的时候,发现自己写的代码不是很好,一个 function 或者 task 要好几百行, 主要原因就是,在写代码的时候,想到哪就写到哪,用到之前哪写过的代码就直接粘过来用, 以前还没有什么感觉,甚至觉得这样做还有好处, 想想将一部分代码封装成 function 或者 task,如果抽象程度很高,立意不是很明确,在环境里面调来调去,很容易发…