芯片验证自学入门教程
小白蒋,双非学校材料硕士转行芯片验证,更知道0基础的怎么学习,特地整理《芯片验证工程师自学教程》,包括必学的linux操作、systemverilog语言学习、makefile脚本、python脚本、vcs仿真软件verdi工具使用查看波形,以及UVM项目源码学习。
优惠券已抵扣
余额抵扣
还需支付
¥299.90
¥399.90
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
小白蒋博客
这个作者很懒,什么都没留下…
展开
-
芯片验证学习-本地环境shell配置(包含tcshrc和cshrc配置)
tcshrc文件配置如下。原创 2023-08-18 13:51:38 · 580 阅读 · 0 评论 -
芯片工程师-补充知识学习1-二进制十六进制学习
作者:小白蒋,公众号:小白蒋,7年材料专业学长转行芯片验证。因为最近,跟很多粉丝聊天,了解到,其中有很多人,一点基础没有,包括二进制数都没接触过,所以今天整理了一篇二进制数讲解。相信大家都知道,对于计算机,cpu只识别0和1两个值,所以在计算机里面,会用到二进制数。那么二进制数和十进制数,是怎么转换呢?二进制十进制001110211310041015110611171000810019101010原创 2022-04-17 19:35:25 · 1052 阅读 · 0 评论 -
芯片工程师-补充知识学习2-bit、byte和word的讲解
目录背景:基本概念:举例:问题1:例如一个8K空间内存,等于多少个word?问题2:如果 8 k空间的起始地址是 `0x2000_0000`,那么结束地址是多少呢?背景:因为我自己也是完全的非科班转行,0基础的学习的,所以知道很多跟我一样的同学,对一些基础知识但是肯定会用到的知识不了解,比如今天要讲的bit、byte、word。基本概念:bit:也叫比特,是二进制单位( binary unit)的缩写,它的值是0和1;byte:也叫字节,在计算机中,约定好了,1byte=8bit,就跟1cm=10原创 2022-04-23 12:00:57 · 1345 阅读 · 3 评论 -
芯片工程师-必须掌握的linux操作-第一讲
一个从材料专业,转行芯片验证初级工程师,自己也是从0基础开始学习入门,更知道0基础的人应该怎么去学习。现在工作三个多月了,特地花时间给大家写这篇文章。希望能关注、支持下。为什么芯片验证工程师必须要学习linux命令?答:① 芯片工程师主要的职责,就是与IC设计工程师和系统工程师密切合作,开发验证平台,能够根据项目要求产生测试计划,产生代码及功能覆盖率,撰写验证报告。②简单点说,主要工作内容,是编写代码去验证设计的对不对。那么问题来了,编写代码,在什么环境呢,我现在告诉你,都是在linux系统中进原创 2020-10-30 20:33:13 · 4349 阅读 · 4 评论 -
芯片验证工程师-必须掌握的linux操作-第二讲
芯片验证工程师每天的工作环境就是linux系统所以掌握linux操作命令尤为重要上一讲介绍了5个命令,是必须要记住的因为我现在入职芯片验证三个月了那些命令是每天必须敲的我就直接给你们整理最常用的今天介绍的第一个命令是:touch含义就是:新建一个文件,注意是文件,不是文件夹下面跟我一起敲一下命令,加深印象①首先:右击桌面,选择 Open in Terminal②输入 ls,查看下面有什么文件发现,有我们上一节创建的 learn 文件夹③ 进入 learn 文件夹输入命令: c原创 2020-11-05 00:23:16 · 2487 阅读 · 11 评论 -
芯片验证工程师-必须掌握的linux操作-第三讲
芯片验证工程师有没有中年危机作为一个已经入职学长告诉你真实情况:1、公司里大佬全部是干了十几年、二十年的前辈,芯片行业不像计算机,更新迭代没那么快,而且芯片流片成本很高,所以越老越值钱。2、干这行,女孩子多吗?没入行之前,我都不知道,女孩子这么多,告诉你,30%的比例是肯定有的,可能女孩子更坐的坐做,毕竟经验积累靠流片次数,你流片越多,越值钱,因为流片成本太高了。流片:英文 Tape Out,像流水线一样通过一系列工艺步骤制造芯片。 芯片成功流片:像流水线一样通过一系列工艺步骤制造芯片成功,没原创 2020-11-14 12:51:54 · 1821 阅读 · 1 评论 -
芯片验证工程师-必须掌握的linux操作-第四讲
最近工作有点忙,等月底写一篇,怎么搭建简单的testbench(验证平台),也就是怎么灌激励,看波形;芯片验证岗位,等你有工作经验后,真的香。大家加油学习!!!第一个命令:cp含义:复制一个文件使用:cp tb.v tb_1.v说明:就是复制tb.v文件,名字叫做tb_1.v这时候,我们确认下,输入cat tb_1.v,就看到打印的信息跟tb.v里面内容一样,代表复制成功。第二个命令:grep需求:如果需要查找一个内容,怎么办(注意是查找内容,不是查找文件名)代码:grep -ni原创 2020-11-25 22:51:12 · 883 阅读 · 2 评论 -
芯片验证工程师-必须掌握的linux操作-第五讲
最近一直忙着工作,太懒了,更新好慢!今天给大家补关于linux系统虚拟机,关注公众号:小白蒋,回复虚拟机免费获取。第一个命令:chmod含义:改变文件或目录的读、写、执行的允许权限使用:chmod 777首先,新建一个文件:touch xiaobai然后用vim打开文件xiaobai然后按一下键盘 i,就进入vim的编辑模式,输入 echo “xiaobaijiang”然后按一下键盘ESC键,在按 :wq 保存退出(这些操作在前面有讲过,忘了的小伙伴去复习前面几讲)在按一个ENTER原创 2020-12-26 22:27:36 · 1001 阅读 · 2 评论 -
芯片验证自学,IC验证自学入门教程:ASIC芯片设计流程讲解
作者:小白蒋,材料专业自学芯片验证最近在学习IC验证相关知识,整理了一下IC芯片设计流程:ASCI设计芯片流程1、Marketing request(有市场需求)2、Architecture Spec(编写架构文档)3、Algorithm Emulation(做算法模型,评估下哪些可行,软件C/C++/matlab)4、Design Spec(得到设计文档)5、RTL coding(设计代码)6、IP level RTL simulation(做IP级的仿真,EDA工具:Synospsys公原创 2020-07-16 15:57:35 · 4759 阅读 · 5 评论 -
芯片验证工程师自学——SystemVerilog学习1——数据类型和定宽数组
学习背景:因为我本身是材料专业的本科+研究生,所以更知道完全0基础的人,该怎么去学习这种抽象的类似编程的学习。所以完全从非科班的角度去带领大家去学习芯片验证,本文针对所有完全0基础的人去学习Systemverilog语言。本人从事芯片验证工程师两年,如果文中有地方说的不对,欢迎留言交流。语言背景:之前也有很多材料专业想转行的同学问我,要不要学习verilog,我的回答是,这种转行的,你更应该关注的”应试技能“,因为芯片验证工程师可以不会verilog,但是不能不会systemverilog。(我自原创 2022-04-23 12:43:32 · 816 阅读 · 0 评论 -
芯片验证学习——systemverilog绿皮书代码运行讲解一
代码运行讲解1、书上代码2、用vcs运行代码2.1在terminal窗口输入 `g 1.sv`,复制下面代码:2.2在terminal窗口输入3、以后遇到代码就像2中一样这样搞;1、书上代码2、用vcs运行代码2.1在terminal窗口输入 g 1.sv,复制下面代码:module TEST; initial begin byte k[4][6]; foreach(k[i,j]) begin k[i][j] = i*10 + j; end fo原创 2022-05-07 18:46:08 · 2728 阅读 · 0 评论 -
芯片验证工程师-systemverilog中系统函数补充讲解
systemverilog中系统函数讲解系统函数$fopen作用?系统函数$fscanf作用?系统函数$feof作用?系统函数$fclose作用?举例讲解1:结果展示:系统函数$fopen作用?打开文件系统函数$fscanf作用?读取文件内容;系统函数$feof作用?判读文件是否读完;系统函数$fclose作用?关闭文件;举例讲解1:比如有一个文件1.sv命令行敲入g tb.sv,复制下面代码:module TEST(); integer file; string var原创 2022-04-23 23:03:05 · 1182 阅读 · 0 评论 -
VCS第一讲:vcs和verdi演示一个简单的验证case
vcs软件使用方法和verdi怎么使用?首先需要先成功安装好vcs软件和verdi软件;(如果没有软件,可以私信我,拒绝白嫖)确认方法:①在terminal中输入vcs,不会提示缺少license,如下图所示:②命令行,输入verdi,如下显示如果没报错,就说明vcs和verdi已经成功安装了!下面给大家用一个简单lab演示下, 怎么使用vcs和verdi:一、先写rtl代码:在命令行,输入gvim counter.v,然后把下面 代码拷贝进去:module counter(原创 2021-05-20 21:28:55 · 5013 阅读 · 2 评论 -
芯片验证工程师-必会linux系统环境和验证脚本makefile配置
需求:1)比如定义一些快捷键,输入 g 就可以打开 gvim;2)在验证环境里面,获取当前目录绝对路径;3)makefile脚本根据命令行传参数进行选择;实现代码:1)a、命令行敲入 gvim ~/.tchsrc or gvim ~/.cshrc含义:打开home目录下的 .tcshrc文件或者.cshrc文件b、在里面输入 alias g gvim含义:给gvim指令起别名叫做 g,然后关闭terminal,在重新打开一个即可;2)a、命令行输入 g Sourceme;b、在里面输入原创 2021-12-08 20:23:34 · 2956 阅读 · 0 评论 -
芯片验证学习实验1-全加器仿真操作学习,用vcs和verdi实操,有源代码
软件:vcs-2016,verdi-2016系统:linu系统本文目录:1、设计代码2、验证代码3、filelist文件4、makefile脚本5、仿真调试1)在命令行输入 make run,进行仿真;2)输入 make verdi,打开波形;6、清理文件代码源码:1、设计代码在命令行敲入 gvim full_adder.v,然后把下面代码复制进去,保存退出gvim;//-----------------------------------------------------------//原创 2021-10-30 12:55:49 · 1060 阅读 · 2 评论 -
芯片验证学习实验2-moore状态机和mealy状态机编写和仿真,用vcs和verdi实操,有源代码
前言:面试必问,状态机写法,moore状态机和mealy状态机,代码编写、仿真测试、区别理解!状态机设计学习和仿真项目练习1、moore状态机a)场景:b)原理图分析输入信号:输出信号:c)状态机跳转图d)代码实现①moore状态机设计代码②moore状态机验证平台代码③moore状态机验证平台脚本④filelist文件⑤执行脚本1、moore状态机a)场景:有一个饮料售卖机,饮料价格为2.5元,只支持0.5元、1元硬币,用moore状态机实现购买的原理;b)原理图分析输入信号:one、hal原创 2021-11-07 22:45:12 · 686 阅读 · 0 评论 -
芯片验证学习-设计知识补充学习1-四选一选择器
芯片验证学习,在实际工作中,也需要掌握了解部分设计知识。注意只是部分,所以没必要去从头到尾学习设计,这样会耽误你很多时间;并且初级验证工程师对设计会要求很低,毕竟你是做验证的,而非设计李。下面给大家介绍常见的四选一选择器://-----------------------------------------------------------// FileName: full_adder.v// Creator: xiaobaijiang// time: 2021-10-30// wchat原创 2021-10-30 15:02:57 · 970 阅读 · 0 评论 -
芯片验证学习-设计知识补充学习2-38译码器
芯片验证学习,在实际工作中,也需要掌握了解部分设计知识。注意只是部分,所以没必要去从头到尾学习设计,这样会耽误你很多时间;并且初级验证工程师对设计会要求很低,毕竟你是做验证的,而非设计。下面给大家介绍常见的38译码器://-----------------------------------------------------------// FileName: full_adder.v// Creator: xiaobaijiang// time: 2021-10-30// wchat:原创 2021-10-30 15:15:41 · 387 阅读 · 0 评论 -
芯片验证学习-设计知识补充学习3-D触发器
目录D触发器异步复位同步复位触发器复杂DFF写法D触发器异步复位module dff_async_pre (data, clk, preset, q); input data, clk, preset; output q; parameter U_DLY = 1; req q; always @ (posedge clk or negedge preset) begin if (~preset) q <= #U_DLY 1'b1; else q &原创 2021-10-30 15:56:16 · 377 阅读 · 0 评论 -
芯片验证学习-设计知识补充学习4-锁存器和触发器、寄存器区别?如何实现时钟门控
锁存器和触发器、寄存器区别?如何实现时钟门控1、锁存器、触发器、寄存器区别?2、clocking gate时钟门控背景?3、实现门控时钟方法?1)与门2)锁存门控3)锁存门控毛刺的解决方法:拓展:为什么不用寄存器解决毛刺问题呢,要用锁存器?1、锁存器、触发器、寄存器区别?锁存器(latch):是电平触发的存储单元,数据存储的动作(状态转换)取决于输入时钟(或者使能)信号的电平值,尽当锁存器处于使能状态时,输出才会随着数据输入发生变化。触发器(flip-flop)是边沿敏感的存储单元,数据存储的动作(状原创 2021-12-06 19:30:44 · 532 阅读 · 0 评论 -
功能覆盖率基础知识第一讲,功能覆盖率的建模(covergroup、coverpoint、bins)
功能覆盖率的建模1、以验证计划为起点,编写可以仿真的功能覆盖率模型;2、在验证平台中采样变量和表达式的值(coverpoint);触发条件当验证平台 triger(触发)trans_ready事件时,采样 CovPortevent trans_ready;covergroup CovPort@(trans_ready); coverpoint ifc.cb.port; // Measure coverageendgroup定义覆盖点:信号和表达式采样数据:任何收集覆盖信息1、在原创 2021-08-31 15:07:41 · 4340 阅读 · 0 评论 -
功能覆盖率实验第一讲:利用vcs和verdi查看功能覆盖率
新建一个cov_sys.sv文件:module test();logic [2:0] addr;wire [2:0] addr2;assign addr2 = addr + 1;covergroup address_cov; ADDRESS : coverpoint addr { option.auto_bin_max = 10; } ADDRESS2 : coverpoint addr2 { option.auto_bin_max = 10; }endgr原创 2021-08-25 11:40:28 · 8608 阅读 · 0 评论 -
功能覆盖率实验第二讲:coverage中at_leat用法
coverage中at_least用法实例代码演示cover_ev.sv文件module test();logic [2:0] addr;wire [2:0] addr2;reg ce;assign addr2 = addr + 1;covergroup address_cov () @ (posedge ce); option.name = "address_cov"; option.comment = "This is cool"; //opt原创 2021-08-31 16:58:09 · 282 阅读 · 0 评论 -
功能覆盖率实验第三讲:具体工程中写的例子
wwdg_sva.svh文件`ifndef WWDG_SVA__SVH`define WWDG_SVA__SVHinterface wwdg_sva #()( input PCLK, input PRESETn, input wdt_rst_tmp, input [6:0] pwdata, input pwdata7, input writen_enable00,原创 2021-09-03 14:10:45 · 284 阅读 · 0 评论 -
芯片验证自学-IC验证学习,覆盖率vdb文件怎么合并
比如 A case的覆盖率文件为 a.vdb,B case的覆盖率文件为 b.vdb,那么可以用下面指令合并生成新的覆盖率文件 merge.vdb。在用vcs仿真完成后,每个case都保存了覆盖率,怎么把多个case的覆盖率vdb文件进行合并。原创 2023-01-14 18:04:14 · 2990 阅读 · 0 评论 -
uvm实操第一讲,初识uvm,用UVM打印hello word
必备软件:1、vcs要安装成功;2、uvm环境要设置好;没有的,可以私信我!需求,uvm实验一:初识uvm利用uvm打印一个hello world操作步骤:第一步,首先在命令行输入 gvim hello_uvm.sv,敲入下面代码`include "uvm_pkg.sv"`include "uvm.sv"module hello_uvm; import uvm_pkg::*; `include "uvm_macros.svh" initial begin `u原创 2021-07-06 21:43:14 · 1345 阅读 · 0 评论 -
芯片验证学习-项目中uvm环境component如何和sequence传参数值
需求:在实际项目中,uvm环境下,如果在scoreboard得组件中,有个data值,需要传递给sequence中作为比较?解决方法:采用uvm_config_db的方法;代码如下在component的run_phase中,uvm_config_db#(int)::set(this, "*", "data", data);在sequence的post_body中,uvm_config_db#(int)::get(null,"","data",data);...原创 2022-02-08 11:24:03 · 1925 阅读 · 0 评论 -
芯片验证学习-项目中通过DPI-C获取当前绝对路径WOKRDIR怎么做
需求:芯片验证学习,在实际项目中有个 $WOKRDIR路径,在sv代码里面需要获取当前绝对路径,怎么做?解决办法:通过 DPI-C 获取当前绝对路径;代码演示:1.sv文件如下import “DPI-C” function string getenv(input string env_name);module TEST; initial begin $display("dir---%s",{getenv("WORKDIR"), "1.sv"}); endendmodul原创 2022-02-08 10:42:25 · 596 阅读 · 0 评论 -
芯片验证工程师——C环境中常用的task定义
目录读出一个地址中的值:往一个地址中写值:写task:读task:sleep tasktest_passtest_fail读出一个地址中的值:int data;data = *(volatile uint32_t *)(0x20000004);往一个地址中写值:*(__IO uint32_t *)(0x20000004);写task:void cpu_write(int addr, int wdata){ *(volatile unsigned int *) addr =wdata;原创 2022-05-11 23:40:21 · 326 阅读 · 0 评论 -
验证环境中,常用task一些整理
作者:小白蒋wechat:jianfuk场景需求:在一些case里面,我需要等待一个状态表示位起来,如果不起来我就等待一段时间报错。用到的systemverilog语法:fork_join_any, break, forever代码:task sequence::wait_op_done(output bit[31:0] rdata, input int unsigned poll_interval=100, int unsigned timeout=2000); fork:proc_wa原创 2022-04-18 14:00:26 · 468 阅读 · 0 评论 -
验证环境中定义宏,简化工作量
`define TC_CASE(tc_name, seq_name) \class ``tc_name`` extends base_test; \ `uvm_component_utils(``tc_name``) \ function new(string name = "``tc_name``", uvm_component parent); \ super.new(name, parent); \ endfunction \ function void build_phase(uvm_原创 2022-03-17 16:18:11 · 511 阅读 · 0 评论 -
面试必问,带你直接理清systemverilog中多态和类型转换(用代码举例讲解)
作者:小白蒋;面试必问,带你直接理清systemverilog中多态和类型转换(用代码举例讲解)1、多态①多态的意思:②多态的应用场景:③代码演示a、 在termial窗口输入 g 1.svb、在terminal窗口输入c、可以看到输出结果如下所示:d、分析输出结果:2、动态类型转换2.1、代码2.2、向上类型转换2.3、向下类型转换2.3.1、第一种报错:2.3.2、第二种报错:2.3.3、第三种报错2.3.4、正确的代码1、多态①多态的意思:通过父类的变量可以使用子类的对象,通过基类的变量直接引原创 2022-02-19 16:24:55 · 994 阅读 · 0 评论 -
芯片验证学习-仿真中巧用$fdisplay函数,把一些debug信息打印在另外的log中
目录1、$fdisplay()函数说明:2、在项目中使用:a、先指定一个存放debug信息的log文件;b、把想打印的信息放在上面log里面去;1、$fdisplay()函数说明:$fdisplay(把数据写入到制定的文件中去)2、在项目中使用:a、先指定一个存放debug信息的log文件;fp = $fopen({`DIR_PATH, ".debug.log"});b、把想打印的信息放在上面log里面去;$fdisplay(fp, "the addr:%h", addr);.....原创 2022-05-28 08:08:50 · 920 阅读 · 0 评论 -
芯片验证工程师-后仿环境一些设置参考
目录1、反标SDF文件介绍:2、反标系统函数介绍3、反标在项目中实操1、反标SDF文件介绍:在SDF格式中可以指定固有延迟(intrinsic delays),互连延迟(interconnect delays),端口延迟(port delays),时序检查(timing checks),时序约束(timing constraints)和路径脉冲(PATHPULSE)。使用VCS读取SDF文件时,会将延迟值“反向标注(back-annotates)”到设计中,即在源文件中添加或者更改延迟值。2、反标系原创 2022-05-28 07:56:00 · 1168 阅读 · 0 评论 -
验证工作中,python语言使用场景1:生成固定格式数据文件
wechat:jianfuk背景介绍:验证工作中,python语言使用场景1:生成固定格式数据文件;如下所示:我们一个model需要提前加载一个文件进来,但是文件的数据格式如下:@00000000 0@00000000 0@00000000 1@00000000 1@00000000 0@00000000 1@00000000 0python语言代码演示:在命令行敲入g 1.pyimport randomfor i in range(8192): a = "@%08d原创 2022-04-18 20:47:23 · 553 阅读 · 0 评论 -
python脚本,递归修改符合文件后缀的文件内容
【代码】python脚本,递归修改符合文件后缀的文件内容。原创 2022-12-20 22:51:25 · 211 阅读 · 0 评论 -
芯片验证工程师——脚本学习——vncconfig拷贝东西的时候,经常失效需要关闭重开的解决方案
目录需求:脚本文件展示:脚本代码展示:脚本执行:需求:当你打开vncconfig的时候,在linux跟windows之间拷贝东西,老是失效,需要关闭vncconfig在重新打开,有脚本解决嘛?脚本文件展示:脚本代码展示:脚本执行:python gen_vnc.py...原创 2022-05-15 09:51:34 · 721 阅读 · 0 评论 -
【uart篇】synopsys uart vip配置使用
作者:小白蒋本文主要记录下,synopsys uart vip如何配置使用?首先是 uart_configuration.sv 文件,直接继承自 uart vip agent configuration;class uart_configuration extends svt_uart_agent_configuration; `uvm_object_utils(uart_confiration) function new(string name="uart_configuration");原创 2022-03-23 16:06:36 · 4572 阅读 · 6 评论