随笔分类 -  System Verilog基础

摘要:not intersect 总结 所有的组件都是通过class进行建模 通过interface进行连接形成测试平台 每一个class都是一个SV文件,进行结构化管理 搭建testbench的主要目的是对DUT进行测试的,主要关注DUT的interface和feature,只要拿到interface就 阅读全文
posted @ 2024-03-11 10:09 Icer_Newer 阅读(22) 评论(0) 推荐(0) 编辑
摘要:内容 断言属性 支持多时钟 并发断言 总结 在时钟复位的时候,不会进行assertion 阅读全文
posted @ 2024-03-11 10:08 Icer_Newer 阅读(5) 评论(0) 推荐(0) 编辑
摘要:内容 Sequence匹配 $表示无穷大,随着仿真时间一直持续,占内存比较大 sequence是可以进行嵌套的 sequence重复操作符 sequence采样函数 $past(b,n) - 前n个时钟周期的b的值 sequence操作符 总结 阅读全文
posted @ 2024-03-11 09:04 Icer_Newer 阅读(55) 评论(0) 推荐(0) 编辑
摘要:内容 断言有很多,这里主要讲解SVA 立即断言和并发断言是SVA的核心 断言Assertion 假设有一个valid信号只能维持一个时钟周期,如果valid信号超过两个时钟周期就表示valid信号出错了 使用SV语法写monitor.sv检测信号 int cnt_valid; always @(po 阅读全文
posted @ 2024-03-10 00:03 Icer_Newer 阅读(614) 评论(0) 推荐(0) 编辑
摘要:覆盖率分为功能覆盖率和代码覆盖率 基于覆盖率驱动的验证技术 覆盖率检测可以采用穷举方法或者是随机检测的方法 功能覆盖率是根据spec提取出功能点然后定义的功能覆盖率 功能覆盖率模型 功能覆盖率收敛 功能覆盖率数据 功能覆盖率数据的归一化和分析 代码覆盖率 断言覆盖率 功能覆盖率 基于覆盖率驱动的验证 阅读全文
posted @ 2024-01-28 12:49 Icer_Newer 阅读(209) 评论(0) 推荐(0) 编辑
摘要:内容 时钟上升沿就是一个事件,event是一个关键字,可以触发事件 mailbox - 用于传递信息,将信息给到mailbox进行传递 内部线程通信 事件传递,对于线程进行控制 对于数据和资源进行传递 内部线程通信机制:Verilog event event - 是一个数据类型 -> - 触发事件 阅读全文
posted @ 2024-01-27 23:04 Icer_Newer 阅读(57) 评论(0) 推荐(0) 编辑
摘要:内容 assign d = a & b; assign e = b | c; begin...end之间的语句是串行执行的 fork....join语句是并行执行的 逻辑仿真工具中的并发性 仿真工具的时间更新,等到一个时刻所有的线程执行完成才会更新仿真时间 并发线程执行 线程遇到等待语句之后才会停止 阅读全文
posted @ 2024-01-24 00:35 Icer_Newer 阅读(49) 评论(0) 推荐(0) 编辑
摘要:Coverage Driver Verification 可约束的随机化验证,用于测试的值可以再一定范围内进行随机,具体的范围可以进行约束,比如可以跑100次,然后查看覆盖率,可以通过覆盖率进行度量验证的进度 内容 随机化的变量往往需要添加一定的约束,通过添加约束让值在一定的范围内进行随机 随机化验 阅读全文
posted @ 2024-01-23 23:17 Icer_Newer 阅读(580) 评论(0) 推荐(0) 编辑
摘要:oop:封装\继承\多态 new() new()函数用于申请内存空间并且进行变量的初始化 多态 父类引用指向子类对象 虚方法看对象,实方法看句柄 ref参数 ref声明的端口信号,在进行参数传递时,共享同一个变量存储空间,即“引用”传递进来的实参,而不是复制传递的参数。 int array[]= { 阅读全文
posted @ 2024-01-23 00:54 Icer_Newer 阅读(6) 评论(0) 推荐(0) 编辑
摘要:根据绿皮书对之前的知识点进行补充 1.验证导论 system verilog硬件验证语言(Hardware verification Language,HVL)特点 受约束的随机激励生成 功能覆盖率 更高层的结构,面向对象编程 多线程以及线程之间的通信 支持HDL数据类型,比如verilog四值逻辑 阅读全文
posted @ 2024-01-22 21:36 Icer_Newer 阅读(12) 评论(0) 推荐(0) 编辑
摘要:静态变量 继承性(Inheritance) 抽象类和虚方法virtual methods 多态(Ploymorphism) 通过基类的变量可以使用子类的对象 基类中定义的virtual functiond都是共工方法,可以被子类使用 子类重写父类的方法能被父类看到,那就需要虚方法。虚方法就是一个基本 阅读全文
posted @ 2024-01-22 20:59 Icer_Newer 阅读(22) 评论(0) 推荐(0) 编辑
摘要:内容 面向对象编程 面向对象的基本概念 对象没有办法直接操作,需要通过handle(指向对象的指针)进行操作 面向对象的基本术语 面向对象的优势 类的定义 实例化对象 new() - 产生具体对象,开辟新的内存空间 句柄handle 对象内存空间释放 使用对象 与其他语言类似通过"."进行调用对象和 阅读全文
posted @ 2024-01-21 22:48 Icer_Newer 阅读(16) 评论(0) 推荐(0) 编辑
摘要:内容 system verilog过程语句:自增和自减操作符 逻辑比较操作符 逻辑值为1bit inside语句 变量类型转换 强制类型转换:$cast() 变量位宽转换 变量符号位转换 for循环语句 for循环中定义的int i和外部的int i是两个变量 for循环控制语句 do...whil 阅读全文
posted @ 2024-01-21 21:58 Icer_Newer 阅读(11) 评论(0) 推荐(0) 编辑
摘要:联合数组 在内存中分配的空间可以是不连续的 联合数组方法 数组的方法 数组使用推荐 结构体 枚举类型 字符串变量类型String 操作符 阅读全文
posted @ 2024-01-21 19:55 Icer_Newer 阅读(4) 评论(0) 推荐(0) 编辑
摘要:动态数组 数组定义的时候不用给定数组元素个数 动态数组实例 例1 队列 阅读全文
posted @ 2024-01-21 18:31 Icer_Newer 阅读(4) 评论(0) 推荐(0) 编辑
摘要:system verilog可以用于设计也可以进行验证 语法规则 SV新数据类型 SV数据类型 bit - 0-255 byte - -127 - 128 # 快速进行sv文件仿真 VCS -R -sverilog xxx.sv // 使用二值逻辑产生时钟,不用给clk赋初值,初始值为0 bit c 阅读全文
posted @ 2024-01-21 15:27 Icer_Newer 阅读(33) 评论(0) 推荐(0) 编辑
摘要:时钟域的理解 在仿真过程中,时钟跳变的一瞬间,CPU将时间域划分为不同的时钟域执行不同的代码 信号在芯片中都是金属丝,在进行跳变的时候都是电容的充放电过程,通常使用时钟上升沿进行模拟,而不使用时钟下降沿 // define the interface interface mem_if(input w 阅读全文
posted @ 2023-12-27 23:00 Icer_Newer 阅读(18) 评论(0) 推荐(0) 编辑
摘要:Clocking:激励的时序 memory检测start信号,当start上升沿的时候,如果write信号拉高之后,将data存储到mem中 start\write\addr\data - 四个信号是同时在start上升沿进行,在采样的时候,testcase和Dut都是module,write采样的 阅读全文
posted @ 2023-12-07 23:46 Icer_Newer 阅读(20) 评论(0) 推荐(0) 编辑
摘要:内容 验证平台与待测设计的连接 VTB driver和dut之间的连线通过tb中声明wire连线 通过例化dut的方式进行连接 A module的input连接到B module的output SVTB SV:*端口连接 SV:name端口连接 Verilog传统连接方式的缺点 interface 阅读全文
posted @ 2023-12-07 22:14 Icer_Newer 阅读(24) 评论(0) 推荐(0) 编辑
摘要:内容 module/block有100个feature,验证需要有1000个test,需要有计划,按照节点进行 验证策略 验证RTL code和design spec一致性 资源:VCS license/磁盘空间 验证内容:功能验证 验证结束 - test pass/coverage 验证进度 验证 阅读全文
posted @ 2023-12-07 21:25 Icer_Newer 阅读(51) 评论(0) 推荐(0) 编辑