自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

原创 剑指offer day3

reverse函数,字符串从位置n开始左转 定义哈希表,存储bool型变量,判断出现,为true

2022-07-09 09:23:15 220 1

原创 剑指offer day2

用栈来辅助,压入栈,再输出 遍历链表,将链表的后一个节点的指针指向前一个节点,为了更改之后,还要保存后一个节点的地址,cur = next。 因为随机指针的存在,有可能指向的节点还未创建;用哈希表记录当前节点的对应新节点的创建情况,检查(当前节点的next节点)和(当前节点random指向节点),如果两个节点没有没创建,立刻递归进行创建。当拷贝完成,回到当前拷贝层,则需要考虑节点可能会被多个节点指向的情况,所以要检查当前节点是否被拷贝过。在实际操作中,还要考虑空节点的情况。...

2022-07-07 14:31:21 244

原创 剑指offer day1

1.用两个栈实现队列用一个栈作为输入栈inStack,用于appenTail,用一个栈作为输出栈outStack,用于deleteHead;每次deleteHead,若输出栈为空,则将输入栈依次pop,push到输出栈中,则输出栈中从栈顶到栈尾部就是队列从队首到队尾的元素。2.包含最小函数的栈如果在a存入栈之前,已经有b,c,d,那么在a pop之前,b,c,d一定在栈中,所以在a入栈时,将栈中的最小元素m存起来,利用辅助栈与之对应。...

2022-07-06 14:12:08 218

原创 c++线程锁

“锁”的本质属性是为内存中的各种变量提供“访问保护”,计算机定义为互斥量(mutex)。mutex:互斥访问的量,在多线程编程中起作用,c++11开始提供了std::mutex,对多线程的加锁操作提供了很好的支持。例:假定有一个全局变量counter,启动两个线程,每个都对该变量自增10000次,最后输出该变量的值为了显示多线程竞争,导致结果不正确的现象,在每次自增操作的时候都让当前线程休眠1ms对应的cmakelists.txt自增操作“counter++”不是原子操作,而是由多条汇编指令完成

2022-07-03 14:57:52 5626

原创 c++性能优化

1.继承:抽象设计是有损失的,在继承体系中子类的创建会调用父类的构造函数,销毁时会调用父类的析构函数,这种消耗会随着继承的深度直线上升, 不要过度的抽象和继承,更为严重的是多重继承中并且有虚函数的存在情况更为复杂,的确,这些问题设计开销,但是,多种继承减少了编码的负担,同时也让问题的解决方案更加简洁,这当然要付出一些代价。总之,与n个基类的多重继承层次相关的额外虚函数表有n-1个。派生类和最左边的非虚基类共享一个虚函数表。因此,带有2个基类的多种继承层次,有1个(2-1)基类的虚函数表和1个派生类的虚函数表

2022-07-02 17:04:34 1233

原创 c++常见关键字

bool:布尔类型,属于基本类型的整数类型,取值为真和假true:具有布尔类型的字面量,表示真false:具有布尔类型的字面量,表示假char:表示字符型,定义了字节的大小,char表示单字节字符wchar_t:表示宽字符型,表示多字节字符int:整型数double:双精度浮点数,精度不小于floatfloat:浮点数short:long:long double表示精度不小于double的浮点数signed:前缀修饰整数类型,有符号,不可修饰wchar_t,char16_t,char32_tunsigned

2022-07-02 14:40:10 3440

原创 ic验证实战-20天挑战day1

1.验证ip模板VIP :verification ip验证ipSOC:包含处理器、存储器和片上逻辑的集成电路验证ip也是购买的,验证ip比设计ip要便宜需要考虑子系统之间的交互总线vip检查总线协议最大的两家VIP提供商cadence和synopsys在选择VIP时候,需要考虑以下的一些因素:目前公司所使用的仿真器提供上是否有对应的VIP,其协议版本是否与设计协议版本相匹配如果选择另外一家公司的VIP,需要考虑它是否能够与目前的仿真器兼容,以及是否能够与目前已有的可.

2022-06-14 21:07:23 713

原创 ic验证笔记-20天挑战day20

1.寄存器模型的常规方法每一个寄存器的field都有两个值,一个是镜像值(mirrored value),一个是期望值(desired value)镜像值可能域硬件实际值(actual value)不一致。mirrored value与desired value是寄存器模型的属性,而actual value对应着硬件的真实数值。uvm提供了两种用来跟踪寄存器值的方式:自动预测:uvm_reg_map::set_auto_predict()显式预测(explicit):环境中独立的pr.

2022-05-30 21:49:25 753

原创 ic验证笔记-20天挑战day19

1.寄存器模型硬件的各个功能模块由处理来配置功能以及访问状态,而与处理器的对话是通过寄存器的读写来实现的。寄存器的硬件实现是通过触发器,而每一个比特位的触发器都对应着寄存器的功能描述一个寄存器由32个比特位构成,将单个寄存器拆分之后,又可以分为多个域(field),不同的域代表着某一项独立的功能。不同的域,对外部的读写而言,又分为WO(write-only),RO(read-only,只读)和RW(read and write,读写),还有一些特殊行为(quirky)的寄存器,例如读后擦.

2022-05-23 21:31:59 280

原创 ic验证笔记-20天挑战day18

1.sequencer和sequencestart()和`uvm_do()挂载的区别通过uvm_sequence::start()来挂载root sequence,而在内部的child sequence可以通过宏uvm_do()来实现。class bus_trans extends uvm_sequence_item; rand int data; `uvm_object_utils_begin(bus_trans) ...

2022-05-18 15:42:45 507

原创 ic验证笔记-20天挑战day17

1.sequence和item,sequencer和driver之间的关系transaction在sequence中传输,到达driver

2022-05-15 22:41:30 361

原创 ic验证笔记-20天挑战day16

1.TLM2.0通信TLM2.0主要包括:双向的阻塞或者非阻塞接口时间标记统一的数据包TLM2.0的传输是双向的,意味着在一次完整传输中有request和response类型TLM2.0支持blocking和nonblocking两种transport方式blocking的传输方式要求在一次传输过程中,完成request和response的传输nonblocking的传输方式将request和response的传输分为了两个独立的单向传输,而两次传输整体视为完成一次握手传.

2022-05-12 22:23:53 327

原创 ic验证笔记-20天挑战day15

1. TLM通信系统原型一般是通过硬件功能描述文档来模拟硬件行为,而行为要求不同于RTL模型。系统原型可以提供一个准确到硬件比特级别,按照地址段落访问,不依赖于时钟周期的模型。芯片验证实在RTL模型初步简历后,通过验证语言和方法学例如SV/UVM来构建验证平台。组件之间的通讯基于TLM,而在driver与硬件接口之间需要将TLM抽象事务降解到基于时钟的信号级别。系统原型阶段和芯片验证阶段均使用TLM通信方式。前者是为了更快的实现硬件原型之间的数据通信,后者是为了更快的实现组件之间的数据通.

2022-05-09 21:17:12 204

原创 ic验证笔记-20天挑战day14

1.uvm结构回顾uvm_top是uvm_root类的唯一实例, 是uvm世界的“一”由uvm创建和管理所在的域是uvm_pkguvm_top是所有test组件的顶层所有验证环境中的组件在创建时都需要指明他的父一级,某些组件在创建时指定父一级的参数为“null”,那么它将直接隶属于uvm_top。这么做存在风险,并不推荐。uvm_top提供一系列的方法来控制仿真,例如phase机制,objection防止仿真退出机制uvm_top->test->env->s.

2022-05-06 22:02:29 282

原创 ic验证笔记-20天挑战day13

1.组件家族注册-uvm_object,uvm_component,uvm_component继承于uvm_report_object,uvm_report_object继承于uvm_objectuvm_component-report,override,phaseuvm_component的层次,所以有parent参数configdb配置name字符串uvm_component组件-uvm_driver,uvm_monitor,uvm_sequencer,uvm_agent,uvm.

2022-05-04 22:54:37 312

原创 ic验证笔记-20天挑战day12

1.核心基类uvm_object继承自uvm_void, 但是uvm_void是一个虚类,没有任何的变量和方法。继承自uvm_void,有两个类,一个是uvm_object,还有一个是uvm_port_baseuvm_object核心方法:copyclonecompareprintpack/unpackclass box extends uvm_object; int volume = 120; color_t color = WH...

2022-05-03 15:02:47 423

原创 ic验证笔记-20天挑战day11

1.验证方法学的概述uvm(universal verification methodology)通用验证方法学统一验证方法学的内容:uvm的类库和核心机制核心uvm组件和层次构建方式uvm组件间的通信方式深入uvm测试场景的构成uvm的寄存器模型应用2.类库地图验证环境的需求:组件的创建和访问环境的结构创建,组件之间的连接和运行不同阶段的顺序安排激励的生成,传递和控制测试的报告机制uvm类1.uvm_void,uvm_object(核.

2022-04-29 23:17:59 312

原创 ic验证笔记-20天挑战day10.2

1.参数化的类提高代码的复用率//实现一个简单的mailboxclass mailbox; local int queue[$]; task put(input int i); queue.push_back(i); endtask task get(ref int o); //阻塞的 wait(queue.size() > 0);// 等待有数...

2022-04-29 12:14:50 209

原创 ic验证笔记-20天挑战day10.1

1.类型转换显式转换:静态转换:加上单引号动态转换:$cast(get, src),有返回值隐式转换:如左侧5位矢量,右侧4位矢量,右侧位宽扩展父类句柄转换为子类句柄 $cast(h2,h1) h2.super.del找到父类变量$cast(target,src)会检查句柄所指向的对象类型,而不仅仅检查句柄本身一旦源对象和目的句柄是同一类型,或者是目的句柄的扩展类,$cast()函数执行即会成功,返回1,否则返回02.虚方法类的特性:封装,继承,多态类的多态通.

2022-04-28 20:52:38 113

原创 ic验证笔记-20天挑战day9.2

1.覆盖组//两种例化方式//1covergroup CovPort;CovPort = new();//2CovPort cg1 = new();//使用时间促发采样event t;covergroup CovPort @(t);coverpoint ifc.cb.port;2.数据采样coverpoint 指定采样一个变量或表达式时,sv会创建很多的“仓(bin)”来记录每个数值被捕捉道德次数这些bin是衡量功能覆盖率的基本单位cove..

2022-04-27 22:37:41 204

原创 ic验证笔记-20天挑战day9.1

1.覆盖率类型覆盖会迭代进行使用反馈回路来分析覆盖率的结果覆盖率是伴随着仿真进行的代码覆盖率工具会创立相应的数据库仿真器带有翻译代码覆盖率的工具,不需要额外代码行覆盖率:多少行代码被执行路径:穿过代码和表达式的路径有哪些已经别执行过高翻转:那些单位比特变量的值为0或1状态机覆盖率:状态机那些状态和状态转换已经被访问过关注点应该放在设计代码的分析上未经测试的设计代码里可能隐藏硬件漏洞,也可能仅仅就是冗余的代码代码覆盖率衡量的是测试对于硬件设计描述的实现究竟有.

2022-04-26 22:59:11 494

原创 ic验证笔记-20天挑战day8

1.线程的使用module(模块)之间需要通信和同步,各个模块是独立运行的线程,通过相邻信号的变化来完成信号之间的线程同步。initial和always可以视作线程,initial线程不一定会结束,always一定不会结束,会一直占用资源。线程被触发需要降低仿真时的内存负载措施:降低模块之间的信号跳变频率只在必要的时候创建软件对象在不需要时钟的时候关闭时钟在数据带宽需求低的时候降低时钟频率(频率引发产生事件的多少)beginend //顺序运行forkj.

2022-04-23 22:56:11 385

原创 ic验证笔记-20天挑战day7

1.sv随机约束和分布随机测试相比于定向测试要求更复杂,随机不意味着绝对自由,需要满足一定的联系器件配置:通过寄存器和系统信号环境配置:随机化验证环境,例如合理的时钟和外部反馈信号原始输入数据:例如mcdf数据包的长度,带宽,数据间的顺序延时:握手信号之间的时序关系,例如valid和ready,req和ack之间的时序关系协议异常:如果反馈信号给出异常,那么设计是否可以保持后续数据处理的稳定性随机化函数 std::randomsize调用randomize()的变量必须是.

2022-04-20 14:07:33 324

原创 ic验证笔记-20天挑战day6

1.验证中类的引入激励生成器(stimulus generator):生成激励内容驱动器(driver):将激励以时序形式发送到DUT监测器(monitor):监测信号并记录数据比较器(checker):比较数据验证环境的不同组件其功能和所需处理的数据内容是不相同的不同环境的同一类型的组件其所具备的功能和数据内容是相似的2.类的定义class Transaction; bit [31:0] addr, crc, data[8];//不能使用re...

2022-04-19 15:44:20 175

原创 ic验证笔记-20天挑战day5.2

1.sv接口interface可以在硬件域和软件域使用dut和tb之间的数据驱动关系都可以用interface实现interface arb_if(input bit clk);logic [1:0] grant, request;logic rst;endinterfacemodule arb(arb_if arbif);... always @(posedge arbif.clk or posedge arbif.r...

2022-04-18 22:12:43 244

原创 ic验证笔记- 20天挑战 day5.1

1.questasim基础操作默认会打开library(库) 和 transcript(命令和仿真区域)新建项目file->new->Project(新建文件夹)->add existing file(copy file)编译文件选中文件->右击complie->complie selected(编译过的文件会在library标签下的work中找到)双击编译过的文件,打开仿真环境右击Library标签下的work中编译过的文件,选中edit,可以.

2022-04-18 13:24:34 342

原创 ic验证笔记-20天挑战 day4

1.组合和非组合数组非组合数组:wire[7:0] table[3:0] //地址定义在左侧[7:0]是连续的,[3:0]是不连续的非组合数组的初始化需要使用'{}来进行int data[0:1][0:3] = '{'{0,1,2,3},'{0,1,2,3}};组合数组:logic [7:0][3:0] data;//连续存储组合型还可以用来定义结构体typedef struct packed{logic[7:0] data;logic[7:0] crc;}d.

2022-04-17 22:41:48 161

原创 ic验证笔记-20天挑战day3

1 SV定宽数组遍历initial beginbit[7:0] src[3] dst[5];for(int i=0; $size(src); i++) //$size(src)src[i] = i;foreach(dst[j]) //foreach,不需要对j进行声明dst[j] = src[i] * 2;end2动态数组int dyn[]; // 声明动态数组initial begindyn = new[5];// 分配5个元素foreach(..

2022-04-16 23:16:47 167

原创 ic验证笔记-20天挑战day1.2

1.设计实现一个16x8的双端口RAMRAM宽度是8bitRAM深度是16ADDR位宽是2^4,范围是0...15module dp_ram(write_clock,read_clock,write_allow,read_allow ,write_addr,read_addr,write_data,read_data);parameter DLY = 1;parameter RAM_WIDTH = 8;//宽度parameter RAM_.

2022-04-15 22:27:54 104

原创 ic验证学习笔记-20天挑战day2.1

1.验证语言:systemverilog2.SV常见数据类型2.1数组声明以多维数组为例int array [0:7][0:3]//完整声明int array[8][4]//紧凑声明2.2数组元素赋值int array[0:3] = `{0,1,2,3};array[0:2] = `{0,1,2};//前三个元素赋值array= `{4{8}};//全部赋值为8array = `{0,default:1};//赋值为{0,1,1,1}2.3数.

2022-04-15 21:54:24 332

原创 ic验证笔记-20天挑战day1

1.进制数表示两位二进制数2’bxx,两位八进制数2’oxx,两位十进制数2‘dxx,两位十六进制数2‘hxx;十六进制数的表示0...9,a,b...f2.时序电路电路的输出取决于当前时刻的输入和电路状态,具有记忆功能3.硬件描述层次 门级:与或非门寄存器传输级别:RTL(register transfer level),使用verilog语言进行描述行为级4.verilog基础4.1全加器module fulladd(cout, sum,.

2022-04-14 17:53:19 515

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除