system verilog
system verilog 的小知识
倔强的萤火虫
既然有光,那就去追
展开
-
异步fifo的设计与验证
书接上文,上一篇介绍了略简单的同步fifo,接下来开始较为复杂的异步fifo。1.同步fifo与异步fifo的区别当设计中只有一个时钟时,所有的寄存器否用同一个,不会出现传输速度不匹配的情况;但是当设计中存在多个时钟信号,并且在这几个时钟域中传递数据,就可能出现因时钟信号不匹配而产生数据丢失的现象,这时候需要异步fifo进行数据的缓存,保证数据能够正常的传输,因此一般异步fifo会包含一个双端口的ram.2.异步fifo组成图1.异步fifo模块组成(6个):顶层模块、双口RAM、.转载 2021-11-27 17:05:38 · 3996 阅读 · 2 评论 -
学习笔记1
case语句是组合逻辑,用阻塞赋值语句1、时序逻辑,使用“非阻塞赋值”。2、 锁存器(latch)建模,使用“非阻塞赋值”。3、组合逻辑,使用“阻塞赋值”4、 当在同一个always块里面既为组合逻辑又为时序逻辑时,使用“非阻塞赋值”。5、组合逻辑输出时,为消除毛刺会在输出端加一个触发器,即使用非阻塞赋值6.寄存器输出没有毛刺...原创 2021-11-13 21:12:59 · 71 阅读 · 0 评论 -
同步FIFO的设计和验证
1.FIFO是什么?fifo是一种先进先出的数据缓存器,与普通存储器的区别是没有外部读写地址线,只能顺序读写,不能随机读写。2.使用场景(1)数据缓冲:当突然一股数据流突发写入,fifo可以暂时将数据暂存,起到缓冲作用,且使后续处理流程平滑。(2)时钟域的隔离:主要用于异步FIFO。对于不同时钟域的数据传输,可以通过fifo进行隔离,避免跨时钟域的数据带来的设计和约束上的复杂程度。(3)用于不同宽度的数据接口。3.fifo的分类同步fifo:读时钟与写时钟是同一个时钟异步fi原创 2021-11-22 21:36:56 · 3842 阅读 · 0 评论 -
system verilog 进程与通信
1.task 与 functions(1.1)task 任务可以包含参数声明、输入参数、输出参数、输入参数、寄存器、事件和零或多个行为语句。任务可以是static(静态的)也可以是automatic(动态的)。静态任务为所有任务调用共享相同的存储空间,动态任务为每个任务调用分配唯一的堆叠存储空间。SV允许:在静态任务中声明动态变量,也可以在动态任务中声明静态变量; 声明端口的更多功能; 在任务结束前使用return返回; (返回值是什么???) 通过引用、值、名称和...转载 2021-11-29 23:08:50 · 631 阅读 · 0 评论 -
system verilog的随机和约束
背景:验证两种方法一种是直接用例,指哪打哪,即遍历每一个具体的例子;另一种是随即用例:全面打击,覆盖意想不到的地方。直接用例在测试量很大时费时费力。1.为什么使用随机 使验证能朝着可量化流程方向发展;让可测激励空间的向量更加容易枚举。提高验证的效率。特点:1)自动生成测试随机激励 : 改变驱动DUT的数据特性 2) 随机选择测试用例 : 随机运行已知的有效测试 3)随机测试平台中的参数 : 随机选择端口,地址,操...转载 2021-11-28 20:44:05 · 1681 阅读 · 0 评论 -
system verilog的断言assertion
1.什么是断言?断言通常被称为序列监视器或者序列检验器;是对设计应当如何执行特定行为的描述,是一种嵌入设计检查。如果检查的属性(property)不是我们期望的表现,那么在我们期望事件序列的故障上会产生警告或者错误提示。断言用来检查模拟序列行为或者激励生成的正确性,断言作为功能验证的一种重要手段,可以脱离测试用例而覆盖测试点,所以断言覆盖率可以是功能覆盖率的一部分,完善的断言能为全面的功能覆盖率尺度打下良好的基础。2.可以添加什么类型的断言?设计层面:设计意图相关的断言;接口层面:模块.原创 2021-12-02 23:46:26 · 6000 阅读 · 0 评论 -
system verilog 面向对象的特征
object oriented programming (oop) 面向对象编程使用户能够创建复杂的数据类型,并且将这些数据类型的程序紧密的联合在一起。用户可以在更加抽象的层次建立测试平台和系统级模型,通过调用函数来执行一个动作而不是改变信号的电平。oop的基本单元:类class封装了数据和操作这些数据的子程序对象是类的实例,类是对象的模板。比如人是一个类,是一个模板,里面有吃饭睡觉说话等特性,然后男人女人老人小孩就是类的实例化对象。在SV中,这样描述P a;//P是定义的一个类,属于一个数原创 2021-11-28 19:14:58 · 437 阅读 · 0 评论 -
快时钟域与慢时钟域之间的转化
慢到快的DUTmodule slow2quick ( // input input rst_n , // system reset input clka , // clockA input clkb , // clockB input leve原创 2021-11-18 21:46:48 · 1805 阅读 · 0 评论 -
system verilog的数据类型
1.内建的数据类型 1.1 logic类型:任何需要线网的地方都可以用logic; 但是不能有多个结构性驱动。多驱动与双向总线只能用wire 是四状态。 1.2 双状态的数据类型:目的为了提高仿真器的性能并且减少内存的使用量。 双状态:0、1 四状态:0、1、x 、z2.使用ty...原创 2021-11-28 18:31:22 · 583 阅读 · 0 评论 -
2.状态机的一段式(one always)、三段式(three always)的练习
联系状态图如图所示真值表stata y1 y2 y3 (格雷码) 00 01 10 11 0 000 000/0 111/1 001/1 011/1 1 001 000/0 001/0 011/0 001/0 2 011 011/0 011/0 010/1 010/1 3 010 010/1 111/1 010/1 111/1 ..原创 2021-11-14 14:11:20 · 254 阅读 · 0 评论 -
跨时钟域相关的知识点
模块之间有数据交互,但是用的不是一个时钟进行驱动,存在相位与频率的不同,由于电路本身的特性(中间态存在时间长),在同一时刻不同元器件对同一信号的判断出现不一致现象,称为亚稳态。这就需要同步器进行同步,减小亚稳态传播下去的概率。跨时钟域:模块之间有数据交互,但是用的不是同一个时钟进行驱动。在跨时钟处理单bit信号时,慢时钟域到快时钟域下的处理方式比较简单,将在慢时钟域下的信号在快时钟域下打三拍处理,取二拍与三拍信号进行处理,将慢时钟域的信号分解为在快时钟域下的上升沿脉冲信号与下降沿脉冲信号。//原创 2021-11-20 20:05:22 · 867 阅读 · 0 评论 -
握手信号的代码
transmit端module transmit(tclk,reset_tclk,t_rdy,data_avail,transmit_data,t_data,r_ack); input tclk; input reset_tclk; input data_avail; input [31:0] transmit_data; input r_ack; output原创 2021-11-20 14:35:19 · 244 阅读 · 0 评论 -
握手信号的知识
transmit端module transmit(tclk,reset_tclk,t_rdy,data_avail,transmit_data,t_data,r_ack); input tclk; input reset_tclk; input data_avail; input [31:0] transmit_data; input r_ack; output原创 2021-11-20 14:33:02 · 276 阅读 · 0 评论 -
system verilog的覆盖率
覆盖率是衡量验证完备性的重要指标覆盖率提现验证的充分性功能覆盖率成为衡量验证进度以及验证充分性的重要手段,提供了一个标志验证工作完成的相对客观指标。可以根据覆盖率的情况随时调整验证的策略,调整验证资源。功能覆盖率和设计意图紧密相连,代码覆盖率衡量设计的实现情况。1.覆盖率的类型代码覆盖率:检查代码是否冗余,设计要点是否被遍历,被检测的对象是RTL设计代码,由仿真工具自动生成;用来度量被检测代码中每个执行语句是否被执行到。功能覆盖率:检查规格功能是否被覆盖,被检测对象是自定义的容器,需要采原创 2021-12-04 20:24:57 · 621 阅读 · 0 评论