- 博客(333)
- 资源 (11)
- 收藏
- 关注
原创 【IC前端虚拟项目】数据搬运指令处理模块前端实现虚拟项目说明
感觉第一个项目其实设计的难度不太大(当然我写出来的bug也不少哈),验证环境搭建也比较简单,整个项目更加侧重于熟悉流程和设计验证的入门。而且包传输协议更多应用在网络芯片架构中,和现在比较火的处理器方向距离比较远。所以呢第二个虚拟项目就显得挺有必要了。
2023-12-02 18:24:47 309 3
原创 ICer的脚本练习专栏介绍与全流程目录
完成芯片的入门虚拟项目专栏之后,决定开始更新更适合IC宝宝的脚本练习专栏ψ(*`ー´)ψ。专栏会涉及到perl、python、shell、tcl、makefile、awk、vba、html、css等语言,当然并不会面面俱到,仍然以入门和示例讲解为主。内容上会综合很多之前我已经在博客上完成的脚本,对开发和代码进行进一步的讲解,因此如果已经比较了解脚本语言和操作的,不建议订阅该专栏否则会失望的。后续如果有修改和调整,会及时在本页面更新。
2023-08-31 16:24:36 354
原创 【IC萌新虚拟项目】Package Process Unit项目全流程目录
Package Process Unit虚拟项目是芯片设计与验证新员工的培训项目,一般会分配6~10周的时间独立开发该项目并完成验收。在整个项目中,新员工需要熟悉工作站、项目流程、公共环境与代码等,并根据方案文档独立设计ppu模块,之后进行功能验证与综合等芯片交付流程。
2023-06-03 23:10:55 2231 9
原创 【IC前端虚拟项目】write_path子模块DS与RTL编码
那么rece_xxxx_buffer和send_xxxx_buffer这两组buffer怎么用呢,大的规则就是,达到发送标准的数据就放到send_buffer,没达到的就暂存在rece_buffer等下一笔数据过来。第一笔返回的数据中有10byte有效,根据地址偏移shift后发现没有满足发送的要求(写效率最高,指令内的写出数据是来连续的,即只有一条指令的第一笔写和最后一笔写的前后可以出现strb为0的情况),所以要等待下一笔数据到来。3.first_buffer:标记这笔数据是否为一个指令的第一笔数据;
2024-03-28 16:36:02 9
原创 【IC前端虚拟项目】read_path子模块DS与RTL编码
而在计算得到一个指令能拆多少个transfer后,再根据burst_len(即一个transaction中可以包含多少个transfer),就可以把指令一笔一笔的拆分为transaction了,每个transaction就是一笔ar请求。在学习完成AXI4协议后,再继续进行read_path模块的搭建。过多的细节请参考代码吧!要维护的三个核心寄存器就是如上所示这三个了,需要注意的是因为burst_len和outstanding是可以配置的,因此每一笔ar请求发出去之后地址如何跳转是需要分别考虑的。
2024-03-15 17:55:14 31
原创 【ICer的脚本练习】给模块顶层生成一个dummy文件 —— gen_dummy
gen_dummy这个脚本的应用场景是这样的:在已经确定了顶层接口之后,模块的开发人员A开始模块编码。这个时候我们就可以走另外一条路,那就是先提供一个空的顶层集成先用着,等模块的代码初步完成了再去交付真正的顶层。那么显然我们用一个正则匹配可以获取到接口的信息,不过当你实践起来的时候会发现有些情况会很难受,最难受的点出现在哪呢?于是我们发现了一个问题,就是给信号赋值时候我们需要信号的真实位宽,所以在Class Port里最好专门做一个函数,来分析出信号的位宽。已经知道输入的文件了,下一步自然就是解析文件。
2024-03-11 18:05:58 58
原创 【IC前端虚拟项目】inst_buffer子模块DS与RTL编码
同样的,写完成后进行一样的操作。于是,在代码中维护了四个指针:inst_in_ptr表示指令待写入的位置,inst_cmt_ptr表示待提交指令的位置,rd_done_ptr表示已经读完成位置,wr_done_ptr表示已经写完成。结构的核心部分是一个8项深的cmt_buffer,用于接收、存放和提交指令,同时buffer中还记录着本条指令的状态:读完成、写完成。一般指令的cmt_queue类型结构必然是支持乱序的,不过因为项目里指令本身就是顺序执行的,所以采用顺序更新的结构就可以了。
2024-03-01 17:27:31 165
原创 【IC前端虚拟项目】MVU寄存器文档编写与RTL代码生成
那可就多了,先依据软件的需求把他们需要上报的状态都加上,然后再把内部关键的状态机、计数器、状态信号都加上,再把busy/empty、时间戳啥的记上。最后别忘了,把能够“甩锅”的信号都记上,比如对外接口的valid/ready状态、ostd状态等等。兜兜转转又回到了寄存器,但是没有办法,虚拟项目肯定要贴近真实真实项目的,而一个真实项目里不管是做模块设计还是SOC设计,寄存器总是难以避免的。在上层我已经帮你包好啦,直接在顶层例化这个模块就好,所有的结构都已经体现在接口上了。寄存器文档在rtl的reg目录下。
2024-01-15 19:12:40 150 2
原创 【IC前端虚拟项目】MVU子模块DS文档编写与注意事项
后续在其他公司,对DS的要求也是测次不齐。DS - Design Specification(设计规格):"DS" 表示设计规格,它是在架构规格之后,进一步细化和准备进入实际设计和开发的文档。判断DS文档是否合格,有一个最简单的标准,就是进行项目和模块交接时,后来者能够通过DS文档看懂整个模块80%以上的代码。于我个人而言,DS文档还是应该尽量丰富的,因为我是一个不爱写代码注释的人(我那些注释基本都是用来生成代码的)。通俗来说,DS这东西就是写给自己看的,是在编码前进行思路梳理和电路描述的文档。
2024-01-15 15:58:26 269
原创 【IC前端虚拟项目】MVU FS文档编写与注意事项
FS - Functional Specification(功能规格):"FS" 表示功能规格,它是芯片设计和开发的早期阶段的一个文档。Feature List:功能列表,即为功能进行编号,罗列模块的各项功能。罗列的粒度自己把控即可,这部分通常也作为测试点的参考。Introduction:介绍模块功能以及模块的主要特性,子章节里可以着重介绍几个主要的功能点和实现方案或是实现目的(为了支撑哪些更上层的功能);Block Diagram:结构框图以及对框图的描述,通常还会有对主要通路或主要子模块的功能说明;
2024-01-06 22:51:06 585
原创 【IC前端虚拟项目】工程目录组织说明
这些全部是手撕代码,当然会借助verilog-mode/auto_testbench/gen_uvm_agent/gen_uvm_tb等诸多工具辅助开发,不需要担心。文档目录在“MVU芯片前端设计验证虚拟项目”中,截至本篇文章时,包含了MVU_FS.md/project_req.md和mvu_vp_list.xlsx三个文件。由于目前只完成了代码编写和功能验证,目录内容暂不全面,后面会逐步补全。
2023-12-07 19:41:58 270
原创 【IC前端虚拟项目】linux工作站下工程的配置和使用说明
我使用的是芯王国的虚拟机,大家可以关注其公众号进行虚拟机的获取。然后source一下就可以了。基本的工程目录使用方式就是这些。
2023-12-07 19:20:33 145
原创 【IC前端虚拟项目】git和svn项目托管平台的简单使用说明
我个人在工作中svn和git都有使用过,感觉上来讲,芯片项目开发使用git有些“不值当”,因为很少有多人同时开发同一个文件的场景,这使得分支管理不是非常的重要。而一旦分支较多时(尤其设计分支和验证分支),对于bug修改和提交同步也带来了一些困扰,所以至今我还是喜欢基于svn的芯片项目管理。对于大型项目或需要分布式开发的情况,Git更为强大,因为它提供了更灵活的分支管理和更高效的版本控制机制。分支和标签: 分支和标签在SVN中存在,但相对来说较为复杂,并且在操作时会对整个目录进行复制。
2023-12-06 20:15:16 430
原创 最亮那颗星的中年危机 —— 程序员的职场困境与破局
伴随科技的迅猛发展,计算机走进千家万户,智能终端深深融入每个人的生活,程序员这一职业群体也逐渐成为了现代社会中不可或缺的一部分。然而,就像其他职业一样,有高峰就会伴随低谷,曾经意气风发的程序员在当今的职场环境中也难免遇到困境。
2023-11-03 17:06:52 6216
原创 【ICer的脚本练习】tcl语法熟悉和工具tcl的实例
TCL(Tool Command Language)是一种简单但功能强大的脚本语言,它经常用于自动化任务、测试和快速原型开发。你看这个名字就能知道,这个语言最主要的作用就是用来操作工具,尤其我们常用的EDA比如vcs、verdi、dc、pt等。所以这篇文章我们就先熟悉下tcl的语法,然后再看看tcl对eda工具的使用好啦。
2023-10-14 01:04:06 766
原创 【ICer的脚本练习】shell的三剑客:grep/sed/awk
大大小小的脚本我们写了几个了,在上一篇我们借助bashrc简单了解了bash语言的一些语法和组织规则。这一篇呢我们还是回到shell简单看下三个常用命令,毕竟脚本也可以视为复杂的命令尤其shell脚本其实就可以理解为命令的集合。grep/sed/awk被称为linux三剑客,具有强大的文本处理能力,使用得当的情况下可以获得比写脚本更高效的体验。这也正引出我的另外一个思考:不要遇到事就想着写脚本,先看看原生的命令是不是已经给你搞定了。
2023-10-09 20:37:19 196
原创 【ICer的脚本练习】基于shell语言咱们来搞一搞bashrc
shell语言在芯片前端的工作中有两个主要的作用,一是流程自动化脚本,二是工作站环境的配置。为什么shell用于流程自动化相较于perl和python我感觉最舒服呢,个人理解是shell在linux中是真实的线程不像python即使用os.system()这种操作也是创建的虚拟线程,即使里面cd /path但是实际上是没有cd过去的。而shell不同,你在里面写cd /path那是真的会跳转回去的。
2023-10-04 23:51:39 124
原创 入职芯片开发部后,每天摸鱼之外的时间我们要做些什么呢
作为一个由经过层层面试和offer筛选,刚刚以优秀的面试结果入职某fabless芯片研发公司的芯片前端工程师,每天摸鱼之外的时间,你需要做些什么呢?一大早(当然11点前都算一大早)走进位于一线城市黄金地段的公司大门,坐在部门每月花了3000块钱为你租的工位上,打杯咖啡配上刚刚买的一屉小笼包开心的补充好能量。
2023-09-25 23:02:16 492
原创 【HELLO NEW WORLD】一封来自开放自动化时代的邀请函
施耐德电气开放自动化平台,迈向开放、高效与韧性、可持续、以人为本的未来工业。是人类在信息世界开启的第一行也是我们走进自动化领域迎来的第一句问候如今面临向数字化与自动化加速转型的新变局工业领域迫切地需要一场变革走向更加高效、智能、多元的工业时代先锋是走在时代前面的人先锋去探索走出困局之事顺势而动 为所当为开放自动化平台的问世便是我们对于工业自动化时代先锋的回答一封来自开放自动化时代的邀请秉承施耐德电气不断开拓创新的一贯理念。
2023-09-11 16:50:01 624 1
原创 【ICer的脚本练习】通过perl脚本来检查仿真log的结果
这是一个非常简单的perl脚本示例,展示一下perl语言“极简”的编码习惯。perl是我脚本入门的语言,一度也是最擅长的,但是因为python的强势现在我基本不写perl了。上一个大的perl脚本是用来做代码生成的,我至今记忆尤深写了3000多行各种循环正则套用,一旦debug间隔时间超过1周我就根本看不懂这脚本了。可见perl的可读性确实吧,真的不高,即使他写起来确实爽。
2023-09-10 00:42:13 260
原创 【ICer的脚本练习】正则表达式里重点记住几项足够应对面试官
一旦你在简历中写上了“熟悉xxx脚本语言”,那么面试官就不可避免的会问你脚本相关的知识点。那么在众多知识点里,评选出来哪个是最常考的呢?个人的经历是正则表达式。
2023-09-08 15:28:31 129
原创 【ICer的脚本练习】脚本使用的思维培养 —— 用例回归
脚本思维本质上是对重复人力操作的汇总与提炼,也就是说如果一件事情可以通过人不需要大量思考的按部就班操作能够完成,那么理论上脚本就可以进行替代。那么什么时候需要写脚本呢?这个问题就有点类似于在写代码时,我们什么时候要封一个函数、一个宏定义呢?
2023-09-03 17:05:45 520
原创 【ICer的脚本练习】“精通各种语言的hello world!“
这一节呢主要是检查一下Linux和win环境是不是能正常的支持咱们的脚本学习,所以来答应各种语言的hello world!,毕竟打印了就是学会了٩(๑❛ᴗ❛๑)۶顺便从最基础的细节咱们一点一点来。
2023-09-02 11:54:14 528
原创 【ICer的脚本练习】脚本语言介绍和使用场景分析
在芯片开发领域中,脚本指的是用于自动化执行特定任务或流程的程序。这些脚本可以是各种编程语言的程序,包括但不限于Tcl、Perl、Shell、Python等。在芯片设计过程中,脚本被广泛用于各种任务,例如创建和编辑设计文件、执行仿真测试、生成报告等。使用脚本可以大大提高设计效率,减少重复性工作,并确保整个设计流程的一致性。
2023-08-31 18:00:33 236
原创 【芯片前端】auto_testbench的大版本升级——加入简单预期与自动比对
在上次完成自诩为“定向验证的巅峰之作”之后,我觉得这个工具应该是写到头了,不过最近的实践中我发现,对于auto_testbench的主要应用场景——CBB与UT的验证而言,如果能不依赖于方法学进行一些简单预期和比对,还是可以大幅收敛debug时间的。
2023-08-15 01:05:27 601
原创 【IC萌新虚拟项目】随机用例与定向用例的补充
完成sanity通包之后,我们需要进一步的补充case以完善测试场景。芯片验证本身就是通过随机去覆盖和冲击大到一颗芯片小到一个模块的使用场景,因此随机用例是我们验证case的主体。当然对于随机的程度,一般而言层级越高随机程度越低,比如对于一个小模块我们可以任意的去随机,甚至一些不会出现的场景我们也可以去测试一下;而对于芯片顶层的验证,一般就会遵循使用场景来规划用例了。
2023-08-10 18:03:08 374
原创 【IC萌新虚拟项目】代码覆盖率收集与反馈
实际参与过项目的同学一定对质量活动这四个字深恶痛绝,项目进入质量活动阶段时,意味着RTL的时序和面积功耗等主要指标已经基本通过验收,debug阶段也已经进行了很长事件已经覆盖了大部分的功能场景。那么这个时候就进入到前端的收尾阶段了。此时验证的同学更多的是在补充定向用例,收功能覆盖率的corner场景,而验证同学就会收集代码覆盖率,这个过程一般会持续1~2个月(当然了,领导是不会让你只收覆盖率的)。
2023-08-10 17:11:46 468
原创 【IC萌新虚拟项目】spt_core模块基于dc的综合环境搭建与面积时序优化
当验证的同学正在疯狂写测试点,补充测试用例各种找茬找bug时候,设计的同学也要进入到跑综合修时序优化面积的阶段了。还是老样子,关于芯片综合的知识就不在本文中赘述,项目仍以实践为导向。
2023-08-10 16:26:11 440
原创 【IC萌新虚拟项目】功能覆盖率文件合入与功能覆盖率收集
上一篇文章我们已经完成了测试点的相关指导,在工程目录下看到一份推荐的测试点分解文档。当然这只是一种参考,大家可以按照自己的理解进行测试点分解,并在实践中不断完善和改进测试点分解的能力。完成测试点分解后,下一步就是将测试点转化为覆盖率文件。一般而言,覆盖率的收集和测试点是呈对应关系的,当然这个东西并不绝对。在测试点文档中进行反标的一般称之为plan coverage,整体的称之为function coverage。
2023-08-09 20:59:23 450
原创 【IC萌新虚拟项目】测试点文档组织与完善
我个人的习惯是,把测试点文档的编写放在sanity通包的后面进行,因为环境搭起来之后每个测试点怎么去测试会有比较清晰的思路,而且搭建环境相对来说也是熟悉方案的过程,而组织测试点本身就需要对方案有比较深的了解。当然了这个看具体的项目进程和整体安排就好。
2023-08-06 16:56:59 249
原创 【IC萌新虚拟项目】sanity case与寄存器测试case通包
上一篇文章中千辛万苦的把验证环境搭了起来,然后寄存器访问直接就挂了,之后这一周就慢慢的调bug终于完成了sanity通包。
2023-08-06 11:11:12 428
原创 excel中使地址按十六进制进行数值递增的函数
那这一看显然不是直接拖鼠标就能完成的了,所以我们需要借助一些exel的内置函数。所以之后做寄存器文档时候,只要是连续的地址空间把第一个地址写好,之后就用这个函数顺着往下一拽就可以了!这里是尼德兰的喵·芯片设计相关文章,欢迎您的访问!让我们一起为成为芯片前端全栈工程师而努力!
2023-08-01 16:56:01 977
原创 【前端设计】尝试一文搞懂verilog parameter的全部细节
P5和P6很好的说明了,显性定义的type是不会被后面的value所覆盖的,P5的属性:type = signed,range = [15:0],value = -7,P6的属性:type = unsigned,range = [15:0],value = 65529。parameter中是可以包含运算的,像这种就是运算得出结果后在遵循之前的规则,因此P4的属性为:type = unsigned,range = [31:0],value = 10。这是我们最常用的写法了,此时P0的属性由后面的5来决定。
2023-07-31 19:05:40 857
原创 【学习笔记】关于RAW图片的概念学习
能为我介绍一下raw图片吗?当谈论"Raw图片"时,通常指的是未经压缩和处理的图像数据,它包含了从图像传感器捕获的原始像素信息。Raw图片是相机直接获取的图像数据,没有经过任何图像处理或色彩编码。主要特点和优势:无损数据:Raw图片是未经压缩的,因此它没有任何数据损失。相比于其他压缩格式(如JPEG),Raw图片保留了从图像传感器捕获的每个像素的原始信息,因此可以实现更高的图像质量。更大的动态范围:Raw图片通常具有较高的位深度,如12位或14位,这使得它们能够捕获更大的动态范围。
2023-07-31 00:46:18 2458
原创 【面试题】与通义千问的芯片前端设计模拟面试归纳
两个小时,与chatGPT进行了一场数字IC前端设计岗的面试_尼德兰的喵的博客-CSDN博客和GPT-3.5的回答可以对比品尝,味道更好。
2023-07-30 16:29:24 534
原创 【学习笔记】关于图像YUV格式分类和排布方式的全学习
先来明确一些问题,以便咱们之后更加顺利的进行学习。1.什么是图像YCrCb/YUV格式?YCrCb格式是一种将彩色图像表示为亮度(Y)和色度(Cr和Cb)分量的色彩编码系统。它在数字图像处理和计算机视觉中被广泛使用,特别是在图像压缩和视频编码领域。通常而言,YCrCb格式与YUV格式只是在数值和取值范围上有一些不同,但在实践中通常可以互换使用。具体来说,YCrCb格式包含以下三个分量:YCrCb格式是一种将彩色图像表示为亮度(Y)和色度(Cr和Cb)分量的色彩编码系统。
2023-07-29 10:45:21 1129
ieee system verilog standard 1800-2017.pdf
2020-02-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人