- 博客(38)
- 收藏
- 关注
原创 流水线的dependence问题(指令相关性)
今天被问到了流水线的dependence问题,一开始没听懂,然后硬猜应该问的是指令相关性,之后查询了一下,硬猜满分(手动狗头),顺便总结一下。指令的相关性,指令流水线的一个特点是流水线中的各条指令之间存在一些相关性,使得指令的执行受到影响。要使流水线发挥高效率,就要使流水线连续不断地流动,尽量不出现断流情况。然而,由于流水过程中存在的相关性冲突,断流现象是不可避免的。
2022-08-21 11:05:19
2146
1
原创 uvm_event和sv中的event的区别
uvm_event和sv中的event的区别:SV中event是单纯一个类型(声明了就可以用),而UVM的uvm_event是一个类(需要相应的创建或拿到句柄)。uvm_event是通过从资源池获取共享的对象句柄,避免组件之间的相互依赖。event被->触发之后,会触发使用@等待该事件的对象;uvm_event通过trigger()来触发,会触发使用wait_trigger()等待的对象。如果要再次等待事件触发,event只需要再次用->来触发,而uvm_event需要先通过reset()方法重置初
2022-08-15 14:14:54
2179
原创 systemverilog中@和wait的区别
事件阻塞@/wait()和事件触发->同时发生时,wait()阻塞可以正常等到事件触发,而@阻塞与事件触发产生竞争,有可能等到也有可能等不到触发而一直阻塞。
2022-08-15 11:00:52
2795
原创 uvm数字IC验证覆盖率收集
在进⾏芯⽚验证时,最重要的⼀个环节就是完成对dut的覆盖率收集⼯作,覆盖率主要分为下⾯三类:1、代码覆盖率2、功能覆盖率3、断⾔覆盖率如何完成覆盖率收集?
2022-07-20 10:55:38
5872
原创 UVM中 sequence中的starting_phase
在UVM中,由于driver以及monitor中main_phase常常是一个死循环,故常常将仿真验证平台的进程控制放在sequence中。在sequence中可以使用starting_phase来控制验证平台的关闭。那怎么为sequence中的starting_phase赋值呢?......
2022-07-16 18:16:36
3552
1
原创 SV笔记:static 和 automatic 概念及相关规定
目录1 首先总结如下:2 全局变量和局部变量3 静态变量和动态变量4 静态方法和动态方法class中成员和方法默认为automatic,program、module、interface、package中函数和任务和变量默认为静态的。在讨论静态变量和动态变量之前,我们先说全局变量和局部变量的概念。变量可以分为动态(automatic)和静态(static),静态变量的特点:动态变量的特点:如下,使用静态变量count来计数所创建的实例数目:解释代码:static 和 automatic 除了可以修饰类中
2022-06-27 23:22:08
5252
1
原创 UVM寄存器模型RAL——寄存器域uvm_reg_field配置方法configure()的参数说明
代码如下:class ctrl_reg extends uvm_reg; `uvm_object_utils(ctrl_reg) uvm_reg_field reserved; rand uvm_reg_field pkt_len; rand uvm_reg_field prio_level; rand uvm_reg_field chnl_en; ... virtual function void build(); //所在寄存器、fi.
2022-05-29 12:33:20
5347
1
原创 UVM中的get_type_name(),get_name(),get_full_name()方法
1、简明解析get_type_name(),get_name(),get_full_name()首先需要明确的是,在工厂注册机制下,get_type_name(),get_name()在component组件类和object基类中的返回值是一样的,而get_full_name()在不同类型的类中,会有不同的返回值。get_type_name():返回对象的class名; get_name():返回创建对象时,传入的字符串; get_full_name():在component类会返回当前co
2022-05-28 21:44:58
11777
1
原创 uvm_config_db的set()与get()方法
1、set方法1.1 方法原型:uvm_config_db#(T)::set(uvm_component cntxt, string inst_name, string filed_name, T value);1.2 举个栗子:uvm_config_db#(int)::set(this, "c1", "val1", 100);1.3 参数含义1)#( )括号中是要传送的数据类型T,可以是:virtual interface; 单一变量值如:int,string,enum等
2022-05-28 12:56:04
7531
3
原创 编程:输入日期(月、日)判断是否有效、并输出是今年的第几天(IC笔试题)
有一段时间没认真写过C代码了,顺便回顾一下基础语法:2022联发科实习笔试题:(15分) [简答题] 给出2022年的某一个日期(月日用空格分隔) e.g. 5 30,输出以下内容:1)该日期是否为有效日期(如2月29为无效日期) (Valid/Invalid)2)若该日期有效,则同时输出该日期为该年第几天思路:2022年12个月每个月的天数是固定的,可以用一个数组保存下来; 如果输入的月数小于1或者大于12,输入日期无效;输入的日数在当月范围之外,则输入日期无效; 若日期有效,用
2022-05-14 15:42:32
742
原创 VS Code如何配置C\C++环境 步骤详解
目录1 下载vscode(若提前下载好,直接跳转到3 配置C/C++环境:)2 配置为中文界面3 配置C/C++环境:3.1 准备3.2 配置环境变量3.2.1 首先安装MinGW编译器:3.2.2 然后配置环境变量:3.3配置编译器:3.3.1vscode安装C/C++扩展3.3.2 配置编译器1 下载vscode(若提前下载好,直接跳转到3 配置C/C++环境:)去vscode官网Visual Studio Code - Code E...
2022-05-14 12:52:07
18848
10
转载 SV -- Assertions 断言
文章目录 SV -- Assertions 断言 1.简介 1.1 立即断言 2.SVA (system verilog assertion) 2.1 Sequence 2.2 Property 2.2.1 implication 2.2.2 repetition 重复操作 2.2.3 go to repetition 跟随重复 2.2.4 Nonconsecutive repetition 非连续重复 2.2.5
2022-05-04 21:49:34
14264
2
原创 Questa Sim生成覆盖率文件时报错:Failed to open coverstore data file 。。。
在用Questa Sim跑测试文件时,添加仿真指令如下:可以跑通,然后输入“ run -all ”指令运行测试文件,也可以正常跑通,之后点击End Simulation结束仿真:但是并没有得到覆盖率文件,查看命令行信息发现有报错:报错信息:# ** Error: (vsim-7) Failed to open coverstore data file "C:UsersÂ61Desktop està³/mcdf_full_random_test_1634670461.data" in
2022-05-04 21:28:28
930
1
原创 对SV中的ref关键字的理解
绿皮书《systemverilog验证——测试平台编写指南》97页,有对ref端口的简单描述:ref端口是对变量(不能是net)的引用,它的值是该变量最后一次赋值。并没有给出具体使用场景,那上边这句话要怎么理解呢?使用ref声明的端口信号,在进行参数传递时,共享同一个变量存储空间,即“引用”传递进来的实参,而不是复制传递的参数。举个栗子就好理解了:比如下边一段代码:int a = 0;task change_test(string name, ref int num)
2022-05-04 18:03:09
10985
2
原创 零、RISC-V SoC软核代码笔记详解——前言
前言:过去几年RISC-V飞速发展,这股从美国兴起的RISC-V大流愈演愈烈。由于目前中国IC行业受到国外不同程度的排挤,在国内大力发展RISC-V这个完全开源的精简指令集架构,显得尤为重要。而目前国内很多芯片的龙头企业都已经进军RISC-V架构的芯片领域,如紫光展锐、华为海思、阿里平头哥等。从市场角度来说,RISC-V还是有很多事情要做的,其生态建设,高端场景应用都需要进一步发展。所以推动RISC-V的教学和发展就愈发重要。如果想要拿RISC-V架构的SoC来参加FPGA开发或者数字IC设计相关的
2022-04-27 14:57:31
11036
7
原创 verilog中的可综合和不可综合语句总结
Verilog是描述硬件电路的,它是建立在硬件电路的基础上的。有些语法结构是不能与实际硬件电路对应起来的,也就是说我们在把一个语言描述的程序映射成实际硬件电路中的结构时是不能实现的。task和function都是可综合的,不过综合出来的都是组合逻辑电路。要想可综合,task和function内部必须是组合逻辑。 循环语句(repeat、while、for)也可以用于可综合电路设计,当采用循环语句进行计算和赋值操作时,可以综合得到逻辑电路。verilog中可综合语句:input、output、p.
2022-04-12 22:36:18
15162
2
原创 数字设计基础——卡诺图的应用
目录1 完成逻辑函数的逻辑运算2用卡诺图记忆格雷码3卡诺图消除组合逻辑中的冒险(毛刺)1 完成逻辑函数的逻辑运算eg.已知两逻辑函数F1(A,B,C)=∑m(0,1,3),F2(A,B,C)=∑m(0,4,5,7),试用卡诺图分别求出F1+F2;Fl·F2和Fl+F2。解:将逻辑函数Fl、F2在同一张卡诺图中表示出来,将函数出现的1填在卡诺图小方格的左上角,将函数F2出现的l填在卡诺图小方格的左下角,如图4; 求Fl+F2时,将Fl、F2卡诺图中出现的所有1都画入包围圈,...
2022-04-08 11:34:13
4015
原创 RAM、ROM及其细分存储器对比详解笔记
以下是根据B站up主:爱上半导体,所发布的视频制作的PPT如需要原版PPT可以在下边链接中获取哦~不要客气哦(手动狗头)提取码:ba64各类存储器介绍https://www.aliyundrive.com/s/rJ9pMGAUaf4...
2022-03-24 11:52:47
1264
1
转载 数字IC验证面试(常问题88道)
Q1. 定宽数组、动态数组、关联数组、队列各自特点和使用定宽数组:属于静态数组,编译时便已经确定大小。其可以分为压缩定宽数组和非压缩定宽数组:压缩数组是定义在类型后面,名字前面;非压缩数组定义在名字后面。Bit [7:0][3:0] name; bit[7:0] name [3:0]; 动态数组:其内存空间在运行时才能够确定,使用前需要用new[]进行空间分配。 关联数组:其主要针对需要超大空间但又不是全部需要所有数据的时候使用,类似于hash,通过一个索引值和一个数据组成,索引值必须是唯一的。
2022-03-24 11:37:28
20194
4
原创 数字IC设计流程相关名词梳理及各流程EDA工具总结
目录1. 数字IC设计流程相关名词梳理半定制设计(ASIC):RTL ( Register Transfer Level)设计:功能验证:逻辑综合:形式验证:STA ( Static Timing Analysis,静态时序分析) :时钟树综合CTS(Clock Tree Synthesis):布局布线:Extrat RC和STA:版图物理验证:GDSII文件:2. IC设计过程中用到的EDA工具总结1. 数字IC设计流程相关名词梳理 半定制设计
2022-03-16 20:02:31
5023
原创 数字IC设计(ASIC设计)完整流程详解
目录I、ASIC设计流程一、确定项目需求二、前端流程三、后端流程II、IC设计流程相关名词梳理(含各流程EDA工具梳理)III、IC设计流程整理(图片)I、ASIC设计流程一、确定项目需求1. 确定芯片的具体指标:物理实现制作工艺(代工厂及工艺尺寸);裸片面积(DIE大小,DIE由功耗、成本、数字/模拟面积共同影响);封装(封装越大,散热越好,成本越高)。性能指标:速度(时钟频率);...
2022-03-16 19:56:08
35654
1
原创 十一、RISC-V SoC外设注解——UART接口 时序设计 代码讲解(终篇)
十一、RISC-V外设解析——UART模块(终篇)上一篇博文中注释了TIMER模块,现在来介绍UART模块。终于迎来了最后一篇关于RISC-V SoC软核注解的博文,在本篇的最后会上传额外添加详细注释的工程代码,完全开源,如有需要可自行下载。目录1. 结构2.基础知识3. UART模块3.1 输入和输出端口3.2 程序注解4.后记1. 结构如下图,UART模块也是通过总线与内核进行交互的。2.基础知识(1)UART是指通用异步收发传输。(2)同..
2022-03-08 20:45:49
4642
4
原创 十、RISC-V SoC外设——timer定时器 代码讲解
上一篇博文中注释了SPI外设模块,现在来介绍timer定时器模块。目录1. 结构2. timer模块2.1 输入和输出端口2.2程序注解3.总结参考:1. 结构如下图,TIMER模块也是通过总线与内核进行交互的。该模块的主要功能是通过计数器达到计数阈值,来触发定时器中断。2. timer模块2.1 输入和输出端口inputwireclk,inputwirerst, //内核给外设inputwir...
2022-03-08 13:43:22
5878
1
原创 八、RISC-V SoC外设——GPIO接口 代码讲解
八、RISC-V外设解析——GPIO&SPI前几篇博文中注释了RISC-V的内核CPU部分,从这篇开始来介绍RISC-V总线上挂载的外设部分。结构如下图,我们之前介绍的RISC-V内核部分,是图中左上角的RISC-V处理器核。而内核和所有的外设都挂载在总线上,内核通过总线和外设进行数据交互。这六个外设中,RAM和ROM外设已经在之前的博文中进行了解析,因此不再赘述。现在我们来介绍外设中的GPIO外设。2.GPIO模块2.1 输入和输出端口inputwireclk,...
2022-03-08 09:46:11
6017
原创 九、RISC-V SoC外设——SPI接口 代码讲解
3.SPI模块 3.1基础知识SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工,同步的通信总线。 SPI通讯协议的优点是支持全双工通信,通讯方式较为简单,且相对数据传输速率较快;缺点是没有指定的流控制,没有应答机制确认数据是否接收。 一主多从(无论有多少个从设备,都共同使用这3条总线;而每个从设备都有独立的这一条 CS_N 信号线,低电平有效)如下图所示:CPOL/CPHA及通讯模式 SPI通讯协议一共有四种通讯模式,模式 0、模式
2022-03-08 09:46:07
3514
原创 六、RISC-V SoC内核——通用寄存器 代码讲解
tinyriscv这个SoC工程的内核cpu部分,采用经典的三级流水线结构进行设计,即大家所熟知的:取值—>译码—>执行三级流水线。上一篇博文中注释了中断模块,现在来介绍通用寄存器reg.v模块:目录1. reg在内核中的位置2.RISC-V通用寄存器3. reg.v4.主要功能5. 代码注释参考:1. reg在内核中的位置如下图,绿色的方块是通用寄存器reg,从位置上可以看出,通用寄存器在功能上,主要承担译码和执行部分的临时数据存储:2.R...
2022-03-07 11:24:35
4831
4
原创 五、RISC-V SoC内核——中断 代码讲解
tinyriscv这个SoC工程的内核cpu部分,采用经典的三级流水线结构进行设计,即大家所熟知的:取值—>译码—>执行三级流水线。上一篇博文中注释了执行模块,现在来介绍中断模块:目录1. 中断结构图2. csr_reg 控制与状态寄存器2.1 中断和异常概述2.2 csr_reg.v基础知识2.3 csr_reg.v注解3. clint.v 模块注解3.1 接口定义3.2 程序内容4. ctrl.v模块(跳转和流水线暂停)4.1 ctrl接口定义
2022-03-07 10:01:41
10924
5
原创 七、RISC-V SoC内核——总线 代码讲解
上一篇博文中注释了中断模块,现在来介绍总线模块rib.v:(这个RIB总线协议为工程原作者自定义的总线协议)目录1. rib.v功能2. rib总线接口注解3. 总线工作机制3.1. 总线仲裁机制3.2. 主设备选择访问从设备4. 对RIB总线的理解参考:1. rib.v功能设想一下一个没有总线的SoC,处理器核与外设之间的连接是怎样的。可能会如下图所示:可见,处理器核core直接与每个外设进行交互。假设一个外设有一条地址总线和一条数据总线,总共有N..
2022-03-06 16:40:06
7402
2
原创 四、RISC-V SoC内核注解——除法(试商法)代码讲解
inyriscv这个SoC工程的内核cpu部分,采用经典的三级流水线结构进行设计,即大家所熟知的:取值—>译码—>执行三级流水线。上一篇博文中注释了执行模块,现在来介绍执行模块中的除法模块:这个软核内部的除法单元是在div.v文件中实现。采用试商法来实现除法运算,试商法的计算过程如下:注意要点:1.每次除法运算至少需要33个时钟周期才能完成,用状态机来实现;2.主要需要判断并执行的指令有4种类:wire op_div = (op_r == `INST_DIV); /
2022-03-06 16:32:25
4120
4
原创 三、RISC-V SoC内核——执行 代码讲解
tinyriscv这个SoC工程的内核cpu部分,采用经典的三级流水线结构进行设计,即大家所熟知的:取值—>译码—>执行三级流水线。上一篇博文中注释了译码模块,现在来介绍执行模块:目录1. 执行模块的注解2. ex.v(组合逻辑电路)2.2 乘法操作注解3. ram.v功能:存储临时数据。1. 执行模块的注解RISC-V内核的执行部分:涉及到ex.v、ram.v、div.v等模块。其中div.v会在下一章节详细叙述。执行部分详细结构图:接下来分模块对.
2022-03-06 16:24:23
4735
6
原创 二、RISC-V SoC内核注解——译码 代码讲解
tinyriscv这个SoC工程的内核cpu部分,采用经典的三级流水线结构进行设计,即大家所熟知的:取值—>译码—>执行三级流水线。上一篇博文中注释了取值模块,现在来介绍译码模块:目录1. 译码模块的整体介绍2. RISCV指令RV32I、RV32M介绍3. 译码模块的注解3.1 id.v(组合逻辑电路)3.2 id_ex.v(时序逻辑电路)1. 译码模块的整体介绍RISC-V内核的译码部分:涉及到id.v、id_ex.v、ctrl.v、clint.v、...
2022-03-06 11:37:12
7206
2
原创 SV学习笔记:句柄传递及句柄的类型转换
SystemVerilog:句柄传递和类型转换问题总结笔者在习句柄传递和转换时,发现有一些需要注意的点,因此总结了一下,顺便在这下边叭啦记录一下:一、父类句柄与子类句柄之间的类型转换子类句柄可以赋值给父类句柄(但是父类句柄不可以赋值给子类句柄),如下:super= sub;其中:super为父类句柄,sub为子类句柄。赋值后含义为:此时的父类句柄super已经指向了子类的对象。 虽然父类的句柄super指向了子类,但它仍然是父类的句柄,因此用该句柄调用方法/属性时,只能访问.
2022-02-27 10:36:10
3146
5
转载 浏览器主页被劫持篡改了怎么办
就想下载个驱动,结果一通操作把我的 Edge 浏览器主页篡改成了 桔梗网,就下面这个网站。。。算了不喷它了,来说说怎么改回去吧。其他浏览器的修改方式相同。找到 Microsoft Edge 浏览器的桌面快捷方式,点击右键选择 属性,首先在 常规 选项栏中的 属性 的 只读 去掉,注意这步一定要有,不然后面会有权限问题,如下:然后到 快捷方式 选项栏中,将 目标(T) 选项中 msedge.exe" 后面的网址(如下面第一幅图)删掉,空格也要给它删干净!!如下面第二幅图,然后点击 应用,再
2022-02-25 14:56:58
442
2
原创 SV学习笔记——randc为什么不能随机化产生具有唯一元素值的数组
“如果想要产生一个随机数组,它的每一个元素值都是唯一的。如果使用randc数组,那么数组的每一个元素都会独立的随机化,并不会按照我们的本意使得数组中的元素值都是唯一的。” 在学习路科验证的课程的SV语言部分之四随机约束一讲中有上述这么一句话,路桑在这里没有细讲,当时一头雾水,想着randc这个关键词修饰的变量,随机化之后产生的随机值不是不会重复嘛?然后翻了下绿皮书(《SystemVerilog验证——测试平台编写指南》),第六章“随机化”章节中,6.13.5小节“产生具...
2022-02-24 15:16:40
2634
5
原创 一、RISC-V SoC内核——取指 代码讲解
RISC-V内核结构——取指:tinyriscv这个SoC工程的内核cpu部分,采用经典的三级流水线结构进行设计,即大家所熟知的:取值—>译码—>执行三级流水线。在注解工程中的“取指”代码之前,先回顾一下CPU执行指令的简略过程(以三级流水线为例):CPU内部主要由:寄存器(Register):多种寄存器各司其职,有程序计数器(即程序指针PC,Program Counter),用来记录要执行的指令的地址;指令寄存器,用来暂存指令内容;数据寄存器,一般为通用寄存器,用来保存指令执行
2022-02-20 18:38:40
9841
5
原创 数字电路复位信号设计(异步复位、同步释放)笔记详解
复位信号设计(异步复位、同步释放)笔记详解1 时序设计1.1 复位信号设计(异步复位、同步释放)1.1.0 复位恢复时间和清除时间首先解释一下恢复时间(recovery time)和清除时间(removal time):(以复位信号低电平有效为例)复位恢复时间(recovery time):撤销复位时,复位信号无效到时钟有效沿来临之间需要维持的最小的时间,类似于同步时钟的建立时间setup time;复位清除时间(removal time):复位时,在时钟有效沿来临之后复位信号还需要保持复位
2021-09-09 21:49:30
8865
8
原创 Verilog实现1位全加器及输出逻辑解析
Verilog实现1位全加器及输出逻辑解析1、半加器、全加器是什么 半加器电路指对两个输入数据位(a、b)相加,输出一个结果位(sum)和进位(cout),但没有计算进位输入的加法器电路。 相比半加器,全加器是将进位输入也代入计算的加法电路,同样输出一个结果位和进位。1位全加器就是计算带进位输入的1位二进制数的加法电路,多个一位全加器进行级联可以得到多位全加器。2、1位全加器的Verilog实现 了解了什么是1位全加器,那怎么有Verilog实现它呢,首先直接上代码:module full
2021-08-22 20:53:26
31276
13
总线协议相关资料AMBA、AXI中文版等等
2024-03-02
Verilog-学习资料
2024-03-02
2021年之前的一些IC领域的笔试面试合集,及秋招相关资料
2024-03-02
2022.4月联发科实习笔试题(包含个人整理的参考答案)
2024-01-21
数字IC验证+高拓迅达+实习提前批+笔试题(含答案)
2023-06-12
数字IC验证+UVM验证+异步FIFO验证+笔试分享
2023-06-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人