《IC验证学习资料》是一份全面介绍集成电路验证技术与方法的学习文档,旨在帮助工程师掌握IC设计中的验证流程和技巧。
IC验证学习涉及使用FPGA(现场可编程门阵列)和模拟器来测试集成电路芯片的正确性和性能表现。
知识点一:对比 FPGA 和 模拟器
* FPGA 的速度较快,而模拟器的速度则比仿真工具快。
* 使用模拟器可以查看内部信号、设置断点并保存波形等操作。
* 模拟器实质上是基于FPGA构建,并由EDA公司进行封装和集成以方便用户调试。
知识点二:四值逻辑与二值逻辑
* 四值逻辑属于硬件范畴,而二值逻辑则为软件概念。
* 对于32位的变量来说,不论Integer还是int均相同。然而,在命名时需注意:integer代表的是四值形式,而较短的“int”则是二进制表示。
* 当宽度不一致的情况下,需要明确是补0还是补1。
知识点三:枚举类型与整型的区别
* 枚举可以直接赋给整数变量但反之则不行,需进行转换才能实现逆向操作;
* 在定义过程时如果未特别指定automatic或static,则默认为静态(static)属性。
知识点四:接口(Interface)和模块(Module)
* 接口可以包含实例化其他接口,但是不能直接实例化模块。
* 模块则既可以例化接口也可以例化其它模块。
知识点五:历史命令与$display/$error区别
* 使用history命令可查看先前的指令记录;
*$display用于输出信息而$error则是用来报告错误情况。使用后者时建议在打印出错信息时采用$error以获得更清晰的信息展示效果;
知识点六:枚举类型赋值实验
* 直接将整数赋给枚举变量是不允许的,需要先进行转换。
* 方法一:st2 = state_t(1);不推荐使用,因为后面不会显示错误信息;
* 方法二:$cast(st3,4);此方法可以正确输出并处理错误情况。
知识点七:结构体的应用
* 结构体内可包含多个数据成员;
* 使用%p打印格式时,默认以十进制形式展示结构内容;
* 可将结构定义为未打包(unpacked)或打包(packed)类型。
知识点八:类(Class)的使用方法
* 类与模块类似,但区别在于前者内部是动态变量而后者则是静态。
* 在Class中不能直接嵌入initial和always块;只能通过调用其他函数来实现;
*Sv语言规定只有对象拥有指针(句柄),其它类型如整数、字符串等没有这种机制。
知识点九:动态数组与类实例创建
* 动态数组的创建过程容易与类实例化混淆。
* 在initial语句中定义的对象会一直存在,这属于静态变量,在整个程序运行期间都会保持其状态不变。
知识点十:使用指针(句柄)
* 如果在类里声明了静态成员,则可以直接通过类名来访问这些属性;
* 类中的静态方法禁止调用动态的实例成员变量;
知识点十一:保护和局部作用域的应用
* 添加protected或local关键字后,外部对象将无法访问该类内部的成员及其相关函数。