- 博客(35)
- 收藏
- 关注
原创 SVA介绍----重复运算符
重复运算符连续重复运算符1. 信号的连续重复2. 序列的连续重复3. 带延迟窗口的序列的连续重复4. 连续重复和可能运算符跟随运算符非连续重复运算符如果给定信号“start”在任何时钟上升沿,出现上升沿;然后,时钟下个周期起,a信号连续持续三个周期的高电平;然后,下个时钟周期,信号”stop“为高;利用此前的方法,我们可以这样写://冗余的代码写法sequence test; @(po...
2019-07-04 23:49:35 2221
原创 SVA介绍----SVA检验器(参数/选择运算符/true表达式)
SVA检验器使用参数的SVA检验器使用选择运算符的SVA检验器使用true表达式的SVA检验器使用参数的SVA检验器SVA允许像verilog一样在检验器中使用参数,这位创建可重用的属性提供了很大的灵活性,比如两个信号之间的延迟信息就可以参数化。//声明参数化的检验器module gen_chk(input logic a,b,clk); parameter delay =1; pro...
2019-07-04 23:09:35 1800
原创 SVA介绍----SVA的时序窗口
SVA的时序窗口1. 非固定延迟的时序2. 重叠的时序窗口3. 无限的时序窗口4. ended结构到目前为止,前面记录的都是固定的正延迟,其实sva也支持不同的描述延迟的方法。1. 非固定延迟的时序//检查a&&b成功后,那么在接下来的1~3个时钟周期内,信号c应该至少在一个时钟周期为高电平property p12; @(posedge clk) (a&b) |...
2019-07-04 00:11:26 2297 3
原创 SVA介绍----蕴含操作符
蕴含操作符蕴含操作符简介1. 交叠蕴含2. 非交叠蕴含3. 后续算子带固定延迟的蕴含4. 使用序列/表达式作为先行/后续算子的蕴含蕴含操作符简介property : p7; @(posedge clk) a ##2 b;endpropertya7: assert property(p7) $dispaly("property p7 successed.\n"); else ...
2019-07-03 23:14:56 6459 1
原创 SVA介绍----一个简单的断言
一个简单的断言书写1. 序列1.1 简单的信号检查序列:// 序列s1检查信号‘a’在每个时钟上升沿都为高电平:seuqnce s1; @(posedge clk) a;endsequence1.2 边沿定义的序列// 序列s2检查信号‘a’在每个时钟上升沿为上升沿/下降沿/保持稳定:seuqnce s2; @(posedge clk) $rose(a); ...
2019-07-03 22:29:07 2660
原创 SVA介绍-----断言基础
断言基础什么是断言?为什么使用SVA?system verilog的调度SVA术语1. 并发断言新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowc...
2019-07-03 21:47:54 7600
原创 The UVM Primer -- chapter 23 UVM Sequence
chapter 23 UVM Sequence此前,我们通过tester/put&get port/driver将激励和测试平台分割开来,但是我们并没有将data stimulus从structure中分离出来。tester需要创建新的transaction,并将其送至测试平台,这意味着tester需要选择transaction的顺序,并经其送至测试平台。我们可以通过override t...
2019-04-03 23:45:46 427
原创 The UVM Primer -- Chpater 22 UVM Agent
Chpater 22 UVM Agent将测试平台不断模块化是一件美妙的事情,无论我们使用它来封装硬件中的块,固件中的子程序还是软件中的对象,模块化都会隐藏复杂性并改善生活。 模块化还允许我们将经过测试的功能重用为硬件中的IP,固件中的库和软件中的类库。成功模块化的关键是支持严格且不变的接口。定义接口允许用户(以及未来的自我)自信地使用模块化组件,而不必担心其内部工作。UVM 提供了Age...
2019-03-30 23:28:41 681
原创 The UVM Primer -- Chpater 21 UVM Transaction
Chpater 21 UVM Transaction21.1 Storing Data in Objects从学习本书开始,我们将测试平台拆分形成一个小模块,每个模块,每个class只专注于一件事情。尽力避免一个class需要详细了解另一个class的工作内容的场景,两个不同class之间可以通过port的方式传递数据。以上工作都使得我们的测试平台变得十分高效,但是我们还留下了一些遗憾:没有对...
2019-03-29 23:04:17 1020 2
原创 The UVM Primer -- Chpater 20 Class Hierarchies and Deep Operatrion
Chpater 20 Class Hierarchies and Deep Operatrion20.1 class hierarchies为了避免到处copy代码,和提高代码重用率,我们通过类继承(extends component)、共用对象句柄(uvm_put_port)实现。我们重新通过Lion的例子帮助理解deep operation:假设我们目前的class层次结构如下:...
2019-03-22 22:25:13 231
原创 The UVM Primer -- Chpater 19 UVM Reporting
Chpater 19 UVM Reporting19.1 UVM Report Macro测试平台在运行过程中,会产生大量数据和信息。这些信息需要筛选之后,才能呈献给我们,否则我们无法处理海量的信息。UVM提供Report来解决这个问题,通过uvm_report的宏,将需要打印的信息分级,并且我们可以在end_of_elaboration_phase()中控制输出。UVM提供四种不同打印等...
2019-03-20 23:01:11 546
原创 The UVM Primer -- Chapter 18 Put and Get Ports in Action
Chapter 18 Put and Get Ports in Action上一章,我们介绍了使用put和get port进行线程间通信的机制,本章我们将put/get port机制假如TinyALU测试平台。从学习UVM开始,UVM就不断地把测试平台拆解成一个个小的功能模块,这样易于debug和重用。本章我们将tester按照功能进行拆分。tester的两个功能:选择操作类型op_ty...
2019-03-17 10:50:04 249
原创 The UVM Primer -- Chapter 17 Interthread Communicaton
Chapter 17 Interthread Communication上一章介绍了单线程内的各组件间的传输过程,本章介绍线程间的通信,以生产者-消费者为例:module producer(output byte shared, input bit put_it, output bit get_it); initial //线程1 repeat(3) begin ...
2019-03-16 21:35:39 294
原创 The UVM Primer -- Chapte 16 Using Analysis ports
Chapte 16 – Using Analysis ports in a testbench测试平台中所有的组件可以分为两种:驱动DUT运行 & 观察DUT变化。我们此前的测试平台中,tester_h就是用于驱动仿真平台运行,scoreboard_h和coverage_h用于监控DUT的行为。从UVM的角度来看,scoreboard和coverage组成了测试平台的_analysis...
2019-03-16 00:19:48 273
原创 The UVM Primer -- Chapter14&15 Talking to multiple objcts
Chapter 15 Talking to Multiple Objects既然我们使用OOP编写程序,那么就应该充分利用OOP编程的优势。我们希望在测试平台中,避免每个模块都读取BFM备份,然后根据clock信号一拍拍的采集数据,进行数据处理。我们希望可以让objects之间可以通信,后面我们将逐步介绍两种object communication的方式:Single-Thread Comm...
2019-03-14 00:30:16 272
原创 The UVM Primer -- Chapter 13 UVM Environments
The UVM Primer – Chapter 13 UVM Environments前面两节介绍了使用factory机制创建顶层对象uvm_test,并在uvm_test中例化uvm_componnets;UVM会自动的调用uvm_components中的各个phase,并且自为每个componnet的run_phase开启独立的进程.这样的方式易于理解,却难以复用。采用以上方式,每次定...
2019-03-10 13:03:55 332
原创 The UVM Primer -- Chapter 12 UVM Component
Chapter 12 UVM Component12.1 继承UVM Component测试平台可以分为三大部分:structure,sequences,data:structure:描述测试平台的各组件并将其组合在一起;sequences:描述送往DUT的命令的序列;data:描述送往DUT的命令中的仿真数据;UVM component是testbench structure的...
2019-03-08 00:10:12 345 1
原创 The UVM Primer -- Chapter 11 UVM Tests
Chapter 11 UVM Tests11.1 Creating Test with Factory利用工厂机制,我们可以只编译一次测试平台,然后使用factory机制运行不同的测试用例,通过向UVM传入+UVM_TESTNAME的string型变量调用工厂机制,并创建对象。vsim testbench -coverage +UVM_TESTNAME=add_testvsim tes...
2019-03-06 22:41:41 448 2
原创 The UVM Primer - OOP篇
THe UVM Primer - OOP篇1. SystemVerilog interface概念:systemverilog中通过 interface将各个module的信号封装起来,这样testbench中各个模块不需要处理信号级别的接口,各模块从总线功能模型(Bus Function Model, BFM)拷贝一份信号备份,在各模块内部使用,进而可以通过封装实现协议级的功能模型。优势:...
2019-02-01 22:49:46 980 2
原创 Perl中级技巧
Perl中级技巧1. 切片列表、数组、哈希中往往包含很多信息,但是我们也许只需要其中的少量元素。假设Bedrock图书馆中用一个大文件来存放借阅者信息,文件的每一行都描述了一个读者,用6个字段(冒号:为分隔符)分别描述借阅者姓名、借书证号码、住址、住宅电话、工作电话和当前借阅数量。文件内容类似于:fred flintstone:2168:301 Cobblestone Way:555-...
2019-01-11 21:07:17 324 1
原创 Perl进程管理
Perl进程管理1. system函数在perl中启用子进程的最简单的方法是使用system函数,如需要使用perl调用 Unix 的 date 命令,告诉 system 要虚运行的外部程序的名称即可: system ‘date’;perl运行的程序成为父进程;system根据当前进程创建一份拷贝,这份拷贝被称作子进程;子进程会继承父进程的标准输入、标准输出以及标准错误;一般 ...
2019-01-04 23:44:21 1366
原创 Perl字符串与排序
Perl字符串与排序1. 字符串操作函数1.1 index() 字符串查找函数index 可以用于查找给定的字符串a是否出现在某个字符串b中,其实就是找到a在b中出现的位置;找到匹配字符返回index,否则返回-1;用法1: index($str1,$str2)含义:查找 $str2 在 $str1 中出现的位置,从字符串首位开始查找;用法2: index($str1,$str2...
2018-12-30 12:50:17 759
原创 Perl目录操作
Perl目录操作1. 工作目录1.1 当前工作目录程序运行的时候总有一个相应的工作目录,后续要做的事情都是从这个目录开始的。借助标准模块的Cwd模块,我么可以查看当前目录。#!/usr/bin/perl#code1use v5.10;use Cwd;say "The cuurent working directory is:",getcwd();#打印的路径应该就是程序的保存位置...
2018-12-29 21:38:36 3554
原创 文件测试
文件测试1. 文件测试操作符perl提供了一组用于测试文件的操作符,借此可以返回特定的文件信息。通常使用 -x的形式调用,其中x值得时特定的测试操作,如-w -r等。通过特定的文件测试符,可以让我们的程序变得更加智能。使用格式: -r $filename (连字符+测试场景 文件名称或文件句柄)#!/usr/bin/perl#使用-e判断文件是否存在#如果文件存在,调用die函...
2018-12-23 11:34:47 505
原创 Perl其他控制结构
Perl其他控制结构1. unless & until 控制语句1.1 unless控制结构在 if 条件语句中,只有当条件为真时,才执行某块代码,而unless条件语句,可以使得条件为假时,执行某块代码。#!/usr/bin/perlunless ($fred =~ /\A[A-Z_]\w*\z/i) { #除非条件为真,否则打印 pr...
2018-12-21 23:34:53 235
原创 Perl正则表达式(3) - 用正则表达式处理文本
用正则表达式处理文本3.1 替换操作3.1.1 用s///进行替换操作 (substitution)如果把m//想象为文理处理器的字符串“查找”功能,那么s///就是查找并替换功能。如:s/Barney/Fred/; 可以实现将Barney替换为Fred的处理。与m// 和 qw//类似,s///也可以使用其他定界符如:s{barney}{fred};s#barney#%fr...
2018-12-16 12:48:43 988
原创 Perl正则表达式(2) - 用正则表达式进行匹配
Perl正则表达式2. 用正则表达式进行匹配2.1 用 m// 进行匹配到目前为止,我们都是讲正则表达式的内容写在一对斜线内,如/fred/。但其实这是 m// 的简写,其中m代表match,和之前看到的 qw// 类似,我么可以自行选择用于保卫内容的一堆字符作为边界,所以上面这个例子可以改写为m{fred},m[fred],m!fred!等。在不冲突的情况下,建议使用双斜线 // 或 ...
2018-12-15 12:28:07 3962
原创 Perl正则表达式(1) - 正则表达式基础知识
Perl正则表达式1. 基础知识Perl中正则表达式(regular expression)默认匹配 $_ 中的字符串,匹配成功就返回真,否则返回假;Perl匹配正则表达式时,可以使用变量内插,先完成变量内插,取出变量中的字符串后,编译正则表达式。1.1 regex中的通配符点号 . (元字符)可以匹配除换行符 \n 之外的任意单个字符;点号 . 代表的不是它字符本身,但是...
2018-12-14 23:43:42 1812
原创 Perl哈希
哈希哈希是一种数据结构,和数组相似的是可以容纳任意多的值,并且可以按需取用,而她和数组的不同之处在于,检索方式不同,数组是以数字下标来检索,而哈希是以唯一的名字来检索。哈希的组成因素:一个个键-值对键:只能用普通的字符串表示,数字会被强制转换成字符串,2 -> ‘2’。(唯一性)值:可以是任何标量,整数,浮点数,字符串,undef等。(非唯一性)哈希表增大时,perl随机选取任...
2018-12-09 11:23:52 1095
原创 Perl输入与输出 (二)
Perl输入与输出(2)2 文件句柄文件句柄(filehandle)其实是perl程序里面代表Perl进程和外界I/O进行通信的接口,也就是说,文件句柄其实是这种接口的名字,而不是文件的名字,通过这种机制,Perl几乎可以喝任何一个外部实体交换信息。句柄命名句柄的名称和其他Perl标志符一样,必须由字母,数字和下划线组成,但是不能以数字开头;为了避免和其他字符混淆,建议句柄用全部大写...
2018-12-08 22:27:49 800
原创 Perl输入与输出
Perl输入与输出(1)1. 标准输入和标准输出1.1 从标准输入读取标准输入分类行操作符<STDIN>钻石操作符<>双钻石操作符<<>>#!/usr/bin/perl#行输入操作符,每次只读取标准输入的一行while (defined($line = <STDIN>)) { #读取标准输入 ->...
2018-12-08 00:45:41 1056
原创 Perl子程序
Perl子程序1. 子程序的基本属性1.1 子程序的定义要定义子程序,首先要以关键字 sub 开头,再加上子程序名,花括号,花括号中包含的是函数的主体。子程序可以被定义在程序的任意位置;不需要对子程序进行事先声明;子程序是全局的,如果定义了两个重名的子程序,后面的子程序会覆盖前面的那个;#a simple subroutinesub marine{ $n += 1; prin...
2018-11-30 22:45:54 822
原创 Perl数据类型:列表与数组
列表与数组1. 列表和数组的定义列表:指的是存储列表的有序集合;(真实的数据)数组:存储列表的变量;(存储列表的容器)对比与标量,列表对应于数据,数组对应于变量;数组和列表的特性:数组和列表的每个元素都是单独的标量变量,拥有独立的标量值,这些值是有序的(顺序固定);数组和列表都有对应的整数作为索引,从0开始,依次递增;数组和列表的每个元素都都是独立的,因此其类型可以不同(...
2018-11-29 00:12:52 821
原创 Perl 数据类型:标量
Perl 数据类型:标量(scalar)0. Perl 的优势和劣势:Perl适合在几分钟内写出虽然难看但是却够用的一次性程序;Perl擅长处理和文字有关的问题;不适合封闭式二进制可执行文件(opaque binary);标量分类标量数据:(常量) 固定数据,表示确定的数据内容;标量变量:(变量) 可变数据,表示数据的存储容器;1. 标量数据:数字Perl处理数字是用的...
2018-11-23 23:38:04 490
原创 System_Verilog打印格式
system_verilog display format1. 简介$display 和 $write的区别:$display系的系统函数:会在输出的末尾自动添加换行符(newline character);$write系的系统函数:光标会停留在输出的末尾,不会自动换行。$display 和 $write相同之处:按照参数列表的顺序输出参数;参数可以是引号内的字符串(quo...
2018-11-18 10:37:56 40820 3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人