![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
systemverilog
文章平均质量分 78
bleauchat
证明自己,同时验证你的选择是错误的!
展开
-
systemverilog中的bind
即使 dut_assert.sv 中不包含 断言,bind 依旧可以将 dut_assert 与 dut 连接起来;由此,可以得出结论,bind 时,bind 的 dut 中的信号必须是 dut module中的信号名,而不能是 dut 实例的输入输出信号名!可以看到,此时 bind dut,相当于 bind 了2次,所以打印语句打印2次;也就是说,此时改为 dut 的实例名,相当于只 bind 了1次,所以打印1次;,也就是说 property 中包含的信号都是从 interface 的外部给进来的;原创 2022-09-30 02:13:21 · 4921 阅读 · 0 评论 -
verilog-延迟语句
verilog延时原创 2022-09-21 00:21:42 · 8993 阅读 · 0 评论 -
systemverilog 中的 `define ---带参数的宏函数--macro function
上面的例子中A_SRAM_RW 为定义的宏函数, dst_cc_num 和 src_cc_num 均为宏的形参,在宏函数中 引用 形参,需要在参数前后加 ``;需要注意的是,由于在第24行展开时,$display 必须带;1. 用 macro 定义简单的 function,使代码简洁。似乎宏参数的替换并不需要在 参数的 前后加上 ``需要注意的是,宏函数 不接受传进来的变量,如下是错误的:--这里有待商榷。原创 2022-09-08 23:42:22 · 2204 阅读 · 1 评论 -
重载(overload)和重写(override)的区别
重载和重写原创 2022-07-14 16:29:08 · 2996 阅读 · 1 评论 -
DPI基础知识
dpi基础介绍原创 2022-06-06 22:16:05 · 2989 阅读 · 0 评论 -
package包
systemverilog中的package 为在module、interface、program之间共享parameter、data、type、function、task、class等提供了额外的机制;在package 中一般包括类型定义、task、function以及class等,这些条目(item)都不能包含层次引用,如在某个包的class 中给某个rtl路径下的变量赋值,这是不允许的;为了在一个范围内使用 package 中的内容,必须在使用之前导入package;如果在某个 module原创 2021-12-13 23:21:13 · 1684 阅读 · 0 评论 -
$monitor, $strobe, $write以及$display的区别及使用场景
$display 与 $strobe来看下面一个例子:结果如下:这里 $display 语句是在 active 区域执行的,而 44行的赋值语句则是在 NBA 区域执行的,所以每次 $display 打印出来的 a 的值都是前一个值;而对于 $strobe ,是当每次 #5 时刻所有的操作都执行完后才开始打印,所以 $strobe 打印出来的值都是每次 a 更新后的值;总结来说:当 $strobe 被调用的时刻所有的语句都执行完了,$strobe 才打印文本,这包括阻塞和非阻塞的原创 2021-12-04 16:47:26 · 4701 阅读 · 0 评论 -
uart接口用systemverilog实现
1.发送模块module uart_tx(clk,rst,start,tx_data_in,tx,tx_active,done_tx);parameter clk_freq = 50000000; //MHzparameter baud_rate = 19200; //bits per secondinput clk,rst;input start;input [7:0] tx_...原创 2019-08-12 19:17:27 · 1443 阅读 · 0 评论 -
SV之操作符和表达式
目录Assignment operators 赋值操作Wild equality and wild inequality 不定值的比较struct expressions 结构体表达式Streamingoperators 流操作符inside 操作符Assignment operators 赋值操作+= -= *= /= %= &= ...原创 2019-06-27 16:27:34 · 15380 阅读 · 0 评论 -
SV之流程控制
目录loop循环'break' and 'continue'选择语句Blocking & Non-BlockingEventfunctiontaskfinal blocksequenceloop循环(1)while and do-whiledo...while与while的区别就是前者至少会执行一次.格式如下:while ...原创 2019-05-24 10:06:10 · 11038 阅读 · 1 评论 -
SV之覆盖率
目录Coverage 覆盖率Functional Coverage 功能覆盖率Cross Coverage 交叉覆盖Coverage Options 覆盖率选项Coverage methods 覆盖率方法Coverage system task 覆盖率系统任务Coverage 覆盖率覆盖率用来衡量设计中已经被测部分和未测部分的比例,通常被定义为已达到所需验证部分...原创 2019-05-22 21:01:29 · 26248 阅读 · 15 评论 -
SV的testbench例子-加法器
下图是一个加法器的框图:输入管脚包括a、b、valid和clk、reset,以及一个输出管脚c。TestBench Without Monitor, Agent and Scoreboard不带monitor、agent和scoreboard的结构如下:(1)定义transactiontransaction的作用主要是定义随机化的输入输出管脚,并输出显示....原创 2019-05-26 21:11:56 · 4842 阅读 · 5 评论 -
SV之testbench概述
What is the purpose of a testbench ?testbench允许我们通过仿真来验证设计的功能,它包括了设计以及驱动设计的激励.(1)产生不同类型的输入激励;(2)利用产生的激励驱动设计;(3)设计处理输入产生输出;(4)对比设计的输出与期望的输出;(5)如果发现功能bug则修改设计以修复bug;Components of a testben...原创 2019-05-25 22:27:29 · 1957 阅读 · 0 评论 -
SV之其他
目录Dynamic CastingPackagefile operationsParameters and `defineDynamic Casting如果在两种不同的数据类型之间赋值,这一般是不允许的,必须添加关键字$cast.$cast可以是任务或者函数,两者之间的差别在于函数$cast当赋值成功时会返回1;如果赋值失败,则返回0.语法格式如下:functi...原创 2019-05-25 21:59:09 · 1509 阅读 · 0 评论 -
第三章-过程语句和子程序
目录3.1过程语句3.2任务、函数和void函数3.3任务和函数概述3.3.1在子程序中去掉begin...end3.4子程序参数3.4.1C语言风格的子程序参数3.4.2参数的方向3.4.3高级的参数类型3.4.4参数的缺省值3.4.5采用名字进行参数传递3.4.6常见的代码错误3.5子程序的返回3.5.1返回语句return3.5....原创 2019-05-01 20:14:29 · 1140 阅读 · 0 评论 -
第五章-面向对象编程基础
目录5.1概述5.2考虑名词而非动词5.3编写第一个类(class)5.4在哪里定义类5.5OOP术语5.6创建新对象5.6.1没有消息就是好消息5.6.2定制构造函数5.6.3将声明和创建分开5.6.4new( )和new[ ]的区别5.6.5为对象创建一个句柄5.7对象的解除分配5.8使用对象5.9静态变量和全局变量5.9.1简...原创 2019-05-03 20:40:22 · 1354 阅读 · 1 评论 -
第四章-连接设计和测试平台
验证一个设计需要经过几个步骤:生成输入激励、捕获输出响应、决定对错和衡量进度。但是首先你需要一个合适的测试平台,将它连接到设计上,如下图:测试平台包裹着设计,发送激励并且捕获设计的输出。测试平台组成了设计周围的“真实世界”,模仿设计的整个运行环境。由于verilog的端口描述繁琐,代码常会长达数页,并且容易产生连接错误,所以测试平台需要一种更高层次的方法来跟设计建立通信。你需要一种可靠的描...原创 2019-05-05 21:02:25 · 2561 阅读 · 1 评论 -
第七章-线程以及线程间的通信
目录7.1线程的使用7.1.1使用fork...join和begin...end7.1.2使用fork...join_none来产生线程7.1.3使用fork...join_any来实现线程同步7.1.4在类中创建线程7.1.5动态线程7.1.6线程中的自动变量7.1.7等待所有的衍生线程7.1.8在线程间共享变量7.2停止线程7.2.1停止单个线程...原创 2019-05-19 22:31:19 · 1585 阅读 · 0 评论 -
SV之fork语句
目录fork joinfork join_anyfork join_nonewait forkdisable forkalways_comboalways_latchalways_fffork joinfork...join内部的线程都会并行执行,直至处理完内部所有线程后才会结束块语句。fork join 例子:module fork...原创 2019-05-20 12:57:29 · 4127 阅读 · 1 评论 -
SV之task和function
目录taskfunctionArgument Passing 参数传递task任务可以包含参数声明、输入参数、输出参数、输入参数、寄存器、事件和零或多个行为语句.任务可以是static(静态的)也可以是automatic(动态的)。静态任务为所有任务调用共享相同的存储空间,动态任务为每个任务调用分配唯一的堆叠存储空间。SV允许:在静态任务中声明动态变量,也可以在动态任...原创 2019-05-20 14:08:08 · 14913 阅读 · 1 评论 -
第六章-随机化
目录6.1介绍6.2什么需要随机化6.2.1器件配置6.2.2环境配置6.2.3原始输入数据6.2.4封装后的输入数据6.2.5协议异常、错误(error)和违规(violation)6.2.6延时6.3SV中的随机化6.3.1带有随机变量的简单类6.3.2检查随机化(randomise)的结果6.3.3约束求解6.3.4什么可以被随...原创 2019-05-08 20:46:01 · 5672 阅读 · 1 评论 -
SV之class
目录class类的定义方式类的实例化和对象的创建类的构造方法newthis关键字类的静态属性和静态方法Class Assignment 类的赋值Shallow Copy 简单复制对象deep copy 深层复制Parameterised Classes 常数类Classes Inheritance 类的继承Overriding ...原创 2019-05-20 18:46:14 · 7578 阅读 · 5 评论 -
SV之随机化和约束
目录Randomization 随机化Randomization Methods 随机化方法Array Randomization 数组随机化Constraint Blocks约束块External Constraint blocks 外部约束块Constraint Inheritance约束的继承inside操作符Weighted Distribu...原创 2019-05-20 22:39:00 · 36249 阅读 · 7 评论 -
SV之Assertions 断言
目录SV中的断言Building blocks of SVA SV断言中的内建块SVA Sequence 和 propertyImplication operator 关联操作SVA built in methodsdisable iff and ended constructVariable delay in SVA SVA中的可变延时多时钟Mul...原创 2019-05-22 15:29:12 · 44106 阅读 · 10 评论 -
第二章-数据类型
目录2.1内建数据类型2.1.1逻辑(logic)类型2.1.2双状态数据类型2.2 定宽数组2.2.1定宽数组的声明和初始化2.2.2 常量数组2.2.3 基本的数组操作-for和foreach2.2.4 基本的数组操作-复制和比较2.2.5 同时使用位下标和数组下标2.2.6 合并数组2.2.8合并数组和非合并数组的选择2.3动...原创 2019-04-29 22:26:40 · 2580 阅读 · 0 评论