尼德兰的喵
这个作者很懒,什么都没留下…
展开
-
【IC前端虚拟项目】验证环境方案思路和文档组织
同样的,环境中的ram_model也暂时不需要投入太多的经历,把主要的力量放在base_test和env内rm的搭建上才会事半功倍,而后在学习了virtual seq之后再来独立的写一下ram_model。而关于验证方案文档,大部分时候都不是太重要,有结构图和组件说明已经足以。相比而言,测试点文档才是重中之重,下一篇我们就从测试点文档介入。原创 2024-04-10 11:36:16 · 127 阅读 · 0 评论 -
【IC前端虚拟项目】SDC文件编写与DC综合环境组织
最后是io.sdc的设置,mvu的接口实际上是比较简单的所以直接通过get_ports的方式把接口区分输入和输出拉出来就可以,注意要把时钟去除掉,一般我们也会把复位单独处理不过因为mvu面积不大一拍内复位信号抵达所有的寄存器也没有什么压力,所以保留在里面也没关系。这个文件中我们定义了后面要使用的众多变量,注意clk_period决定了时钟频率此处设置为1单位默认为ns,因此默认的综合频率是1Ghz,并且将uncertainty设置为1/200,latency设置为1/5,这里可以根据实际情况设置经验值。原创 2024-04-09 13:21:34 · 275 阅读 · 0 评论 -
【芯片验证】通关寄存器与ral_model —— backdoor后门访问实操测试
在之前工作的基础上,补充关于关于寄存器后门访问的测试,以及如何在流程上进行后门路径生成方法(放在下一篇吧)。以及和两份官方资料。虚拟项目中的寄存器结构,不过该虚拟项目中的寄存器结构和本专栏中所设置的结构完全一致,因此仅供参考即可,仍就可以用该专栏中之前的结构与代码就行啦。原创 2024-04-03 17:56:50 · 46 阅读 · 0 评论 -
【IC前端虚拟项目】mvu顶层集成的原则与技巧
我自己规划和集成顶层一般有一个习惯,就是在top层下面封装core层和其他模块,比如mvu的top层下例化了mvu_reg和mvu_core两个模块,而mvu_core下面是前三篇文章中所阐明的模块:inst_buffer、read_path和write_path。当然了,集成工具还有很多这个只是我个人使用比较熟练的罢了。2.区分时钟域和复位域,保证core层是独立的时钟复位不需要糅杂太多的其他的考虑,比如本设计中,如果加入了配置寄存器快速复位,那么mvu_reg和mvu_core的复位域就必然不同了;原创 2024-03-31 22:14:10 · 72 阅读 · 0 评论 -
【IC前端虚拟项目】git和svn项目托管平台的简单使用说明
我个人在工作中svn和git都有使用过,感觉上来讲,芯片项目开发使用git有些“不值当”,因为很少有多人同时开发同一个文件的场景,这使得分支管理不是非常的重要。而一旦分支较多时(尤其设计分支和验证分支),对于bug修改和提交同步也带来了一些困扰,所以至今我还是喜欢基于svn的芯片项目管理。对于大型项目或需要分布式开发的情况,Git更为强大,因为它提供了更灵活的分支管理和更高效的版本控制机制。分支和标签: 分支和标签在SVN中存在,但相对来说较为复杂,并且在操作时会对整个目录进行复制。原创 2023-12-06 20:15:16 · 451 阅读 · 0 评论 -
【IC前端虚拟项目】MVU FS文档编写与注意事项
FS - Functional Specification(功能规格):"FS" 表示功能规格,它是芯片设计和开发的早期阶段的一个文档。Feature List:功能列表,即为功能进行编号,罗列模块的各项功能。罗列的粒度自己把控即可,这部分通常也作为测试点的参考。Introduction:介绍模块功能以及模块的主要特性,子章节里可以着重介绍几个主要的功能点和实现方案或是实现目的(为了支撑哪些更上层的功能);Block Diagram:结构框图以及对框图的描述,通常还会有对主要通路或主要子模块的功能说明;原创 2024-01-06 22:51:06 · 614 阅读 · 0 评论 -
【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 · 169 阅读 · 0 评论 -
【IC前端虚拟项目】linux工作站下工程的配置和使用说明
我使用的是芯王国的虚拟机,大家可以关注其公众号进行虚拟机的获取。然后source一下就可以了。基本的工程目录使用方式就是这些。原创 2023-12-07 19:20:33 · 164 阅读 · 0 评论 -
【IC前端虚拟项目】MVU子模块DS文档编写与注意事项
后续在其他公司,对DS的要求也是测次不齐。DS - Design Specification(设计规格):"DS" 表示设计规格,它是在架构规格之后,进一步细化和准备进入实际设计和开发的文档。判断DS文档是否合格,有一个最简单的标准,就是进行项目和模块交接时,后来者能够通过DS文档看懂整个模块80%以上的代码。于我个人而言,DS文档还是应该尽量丰富的,因为我是一个不爱写代码注释的人(我那些注释基本都是用来生成代码的)。通俗来说,DS这东西就是写给自己看的,是在编码前进行思路梳理和电路描述的文档。原创 2024-01-15 15:58:26 · 291 阅读 · 0 评论 -
【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 · 47 阅读 · 0 评论 -
【IC前端虚拟项目】3周搞定虚拟项目时间安排
本工程为IC虚拟项目工程,预期完成时间为3~4周,规划如下。原创 2024-03-19 11:32:19 · 128 阅读 · 2 评论 -
【IC前端虚拟项目】MVU寄存器文档编写与RTL代码生成
那可就多了,先依据软件的需求把他们需要上报的状态都加上,然后再把内部关键的状态机、计数器、状态信号都加上,再把busy/empty、时间戳啥的记上。最后别忘了,把能够“甩锅”的信号都记上,比如对外接口的valid/ready状态、ostd状态等等。兜兜转转又回到了寄存器,但是没有办法,虚拟项目肯定要贴近真实真实项目的,而一个真实项目里不管是做模块设计还是SOC设计,寄存器总是难以避免的。在上层我已经帮你包好啦,直接在顶层例化这个模块就好,所有的结构都已经体现在接口上了。寄存器文档在rtl的reg目录下。原创 2024-01-15 19:12:40 · 174 阅读 · 2 评论 -
【IC前端虚拟项目】数据搬运指令处理模块前端实现虚拟项目说明
感觉第一个项目其实设计的难度不太大(当然我写出来的bug也不少哈),验证环境搭建也比较简单,整个项目更加侧重于熟悉流程和设计验证的入门。而且包传输协议更多应用在网络芯片架构中,和现在比较火的处理器方向距离比较远。所以呢第二个虚拟项目就显得挺有必要了。原创 2023-12-02 18:24:47 · 411 阅读 · 3 评论 -
【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 · 297 阅读 · 0 评论 -
【IC前端虚拟项目】MVU模块方案与背景熟悉
mvu根据指令进行数据的搬运,将所有的数据搬运完成后向idu进行指令提交。原创 2023-12-13 14:58:03 · 275 阅读 · 0 评论 -
【ICer的脚本练习】给模块顶层生成一个dummy文件 —— gen_dummy
gen_dummy这个脚本的应用场景是这样的:在已经确定了顶层接口之后,模块的开发人员A开始模块编码。这个时候我们就可以走另外一条路,那就是先提供一个空的顶层集成先用着,等模块的代码初步完成了再去交付真正的顶层。那么显然我们用一个正则匹配可以获取到接口的信息,不过当你实践起来的时候会发现有些情况会很难受,最难受的点出现在哪呢?于是我们发现了一个问题,就是给信号赋值时候我们需要信号的真实位宽,所以在Class Port里最好专门做一个函数,来分析出信号的位宽。已经知道输入的文件了,下一步自然就是解析文件。原创 2024-03-11 18:05:58 · 91 阅读 · 0 评论 -
【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 · 183 阅读 · 0 评论 -
【IC萌新虚拟项目】随机用例与定向用例的补充
完成sanity通包之后,我们需要进一步的补充case以完善测试场景。芯片验证本身就是通过随机去覆盖和冲击大到一颗芯片小到一个模块的使用场景,因此随机用例是我们验证case的主体。当然对于随机的程度,一般而言层级越高随机程度越低,比如对于一个小模块我们可以任意的去随机,甚至一些不会出现的场景我们也可以去测试一下;而对于芯片顶层的验证,一般就会遵循使用场景来规划用例了。原创 2023-08-10 18:03:08 · 409 阅读 · 0 评论 -
【IC萌新虚拟项目】spt_core模块基于dc的综合环境搭建与面积时序优化
当验证的同学正在疯狂写测试点,补充测试用例各种找茬找bug时候,设计的同学也要进入到跑综合修时序优化面积的阶段了。还是老样子,关于芯片综合的知识就不在本文中赘述,项目仍以实践为导向。原创 2023-08-10 16:26:11 · 451 阅读 · 0 评论 -
【IC萌新虚拟项目】验证环境结构与验证方案文档
在上一步中我们清理了rtl的lint error,从这个时间点后虚拟项目需要分两个路线:设计路线和验证路线。那么我们优先进行验证路线的文档与代码开发(因为工作量比较大),之后再回过头进行设计路线的开发。与之前一样,本文档仍以提供思路为主,不作为正式交付的验证方案文档。原创 2023-07-13 17:49:00 · 612 阅读 · 0 评论 -
【IC萌新虚拟项目】cpu_if的接口cpu_agent utils搭建
spt_agent utils已经完成了(虽然之后可能还会有微调),接下来完成配置通路cpu interface对应的utils。这个通路比较特殊,一是带反馈的接口,二是时序上非常的复杂,而且还是个异步接口。鉴于除非在芯片最外围的模块,我们平时极少面对这种接口,因此个人的建议是不要在这里的时序上花费太多的时间,“又不是不能用”,嗯。原创 2023-07-18 20:23:28 · 370 阅读 · 0 评论 -
【IC萌新虚拟项目】测试点文档组织与完善
我个人的习惯是,把测试点文档的编写放在sanity通包的后面进行,因为环境搭起来之后每个测试点怎么去测试会有比较清晰的思路,而且搭建环境相对来说也是熟悉方案的过程,而组织测试点本身就需要对方案有比较深的了解。当然了这个看具体的项目进程和整体安排就好。原创 2023-08-06 16:56:59 · 270 阅读 · 0 评论 -
【IC萌新虚拟项目】寄存器文档整理与ral_model生成
完成utils组件的搭建之后,距离组织整体的验证环境还差啥呢?观察一下可以发现还需要:ral_model和RM,那么这一章我们来完成ral_model的组织。,本章所涉及的代码均已上传gitee/ral目录。原创 2023-07-22 00:16:55 · 330 阅读 · 2 评论 -
【IC萌新虚拟项目】代码覆盖率收集与反馈
实际参与过项目的同学一定对质量活动这四个字深恶痛绝,项目进入质量活动阶段时,意味着RTL的时序和面积功耗等主要指标已经基本通过验收,debug阶段也已经进行了很长事件已经覆盖了大部分的功能场景。那么这个时候就进入到前端的收尾阶段了。此时验证的同学更多的是在补充定向用例,收功能覆盖率的corner场景,而验证同学就会收集代码覆盖率,这个过程一般会持续1~2个月(当然了,领导是不会让你只收覆盖率的)。原创 2023-08-10 17:11:46 · 510 阅读 · 0 评论 -
【IC萌新虚拟项目】spt_if的接口spt_agent utils搭建
基于前文我们所规划的验证环境结构来一步步的搭建UVM框架,第一步呢就是spt_agent。原创 2023-07-16 18:44:56 · 393 阅读 · 1 评论 -
【IC萌新虚拟项目】功能覆盖率文件合入与功能覆盖率收集
上一篇文章我们已经完成了测试点的相关指导,在工程目录下看到一份推荐的测试点分解文档。当然这只是一种参考,大家可以按照自己的理解进行测试点分解,并在实践中不断完善和改进测试点分解的能力。完成测试点分解后,下一步就是将测试点转化为覆盖率文件。一般而言,覆盖率的收集和测试点是呈对应关系的,当然这个东西并不绝对。在测试点文档中进行反标的一般称之为plan coverage,整体的称之为function coverage。原创 2023-08-09 20:59:23 · 488 阅读 · 0 评论 -
【IC萌新虚拟项目】sanity case与寄存器测试case通包
上一篇文章中千辛万苦的把验证环境搭了起来,然后寄存器访问直接就挂了,之后这一周就慢慢的调bug终于完成了sanity通包。原创 2023-08-06 11:11:12 · 466 阅读 · 0 评论 -
【IC萌新虚拟项目】ppu整体uvm验证环境搭建
本篇文章完成ppu整体uvm环境搭建的指导,在进行整体环境搭建之前,请确认spt_utils、cpu_utils和ral_model均已经生成。之后所有的filelist均使用$PPU_ROOT以适配不同的下载目录。原创 2023-07-27 00:44:32 · 916 阅读 · 3 评论 -
【IC萌新虚拟项目】ppu模块基于spyglass的lint清理环境搭建与lint清理
RTL代码在交付给验证同时进行功能验证时,可以同步进行lint的清理工作。一般而言影响编译和仿真的问题会在vcs的error和warning中被修正,因此清理lint的过程可以与功能验证同步进行。原创 2023-06-21 20:57:54 · 974 阅读 · 0 评论 -
【IC萌新虚拟项目】ppu模块的编译环境搭建与RTL编译
虚拟机为芯王国公众号提供的虚拟机,虚拟机内置vcs工具,大家可以关注后自行获取。关于编译环境的搭建,一些储备知识请参考之前的文章。【芯片前端】以vcs编译环境为例做一个适用于芯片前端的极简版Makefile实操教程_nc run_尼德兰的喵的博客-CSDN博客【验证小白】编译、仿真与波形 —— 基于VCS的通用superbench平台搭建_superbench 验证_尼德兰的喵的博客-CSDN博客【芯片前端】可能是定向验证的巅峰之作——auto_testbench_尼德兰的喵的博客-CSDN博客。原创 2023-06-11 22:57:40 · 555 阅读 · 0 评论 -
【IC萌新虚拟项目】Package Process Unit项目全流程目录
Package Process Unit虚拟项目是芯片设计与验证新员工的培训项目,一般会分配6~10周的时间独立开发该项目并完成验收。在整个项目中,新员工需要熟悉工作站、项目流程、公共环境与代码等,并根据方案文档独立设计ppu模块,之后进行功能验证与综合等芯片交付流程。原创 2023-06-03 23:10:55 · 2388 阅读 · 11 评论 -
【IC萌新虚拟项目】spt_core RTL代码与spt代码
【代码】【HISI IC萌新虚拟项目】spt_core RTL代码与spt代码。原创 2023-06-03 22:32:35 · 175 阅读 · 0 评论 -
【IC萌新虚拟项目】spt_core模块方案文档
spt_core为实现包转发功能的模块,为spt模块的核心部分。spt还包含test_core和spt_core访问sram的分发功能。该文档仅为参考spt_core模块概述spt_core需要实现的功能如下:1 、根据头域 (Header) 指示,开始一包的接收;2 、净荷内容进行字节序的转换,高位字节放低位,低位字节放高位;3 、对小于等于 4 个字节的“毛刺包”直接丢弃,不统计:4 、对接收包进行头域 (Header) 的检查,头域不正确的包直接丢弃;原创 2023-06-03 19:15:09 · 633 阅读 · 2 评论 -
【面试题】有哪些良好的verilog/systemverilog编码习惯?
良好的Verilog编码习惯可以提高代码的可读性、可维护性和可重用性,减少错误和调试的时间,同时也有助于提高代码的质量和可靠性。原创 2023-03-21 15:36:46 · 643 阅读 · 0 评论 -
一些时序题计算
时序题原创 2017-09-18 22:50:42 · 3492 阅读 · 8 评论 -
【面试题】verilog always块中,rst_n信号是否可以与其他信号做逻辑再作用于分支上?
如果在异步复位信号之前执行了任何逻辑操作,那么这些操作可能会被复位信号的影响所覆盖,这可能导致电路在不可预测的状态下运行。在设计数字电路时,经常需要使用一个复位信号来将系统恢复到一个已知的初始状态。信号被用于异步复位,这意味着当复位信号被触发时,所有的寄存器和状态变量将被重置。由于异步复位的影响是立即的,因此。通常是一个复位信号的名称,其中“n”表示该信号是低电平有效的(active-low signal)。信号必须直接连接到电路中的异步复位输入,而不能在其他逻辑和寄存器之前进行逻辑操作。原创 2023-03-31 20:14:33 · 759 阅读 · 0 评论 -
【0.4基础的条件准备两周之后的数字IC前端设计校招面试】0.4进化到1.0——试官总爱问的几个点
前言书接上文:https://blog.csdn.net/moon9999/article/details/96715661把状态机写完之后,最好自己找个项目实战下,没有必要太大,重点培养自己的并行思维、时序思维和数据流思维,我记推荐一本书《Verilog HDL高级数字设计(第二版)》,书非常厚但是非常有意义,也是我研究生课程教材里对我帮助最大的一本书。有时间的话一定要把这本书吃透,没有...原创 2019-07-22 23:30:27 · 1535 阅读 · 36 评论 -
两个小时,与chatGPT进行了一场数字IC前端设计岗的面试
原创 2023-04-07 12:50:09 · 623 阅读 · 2 评论 -
【IC前端设计校招面试】常见笔试与面试考点思维导图
原创 2020-04-06 16:54:20 · 1792 阅读 · 0 评论 -
hold time的一些思考点
写这个博客的原因是看到了这个题:时钟周期为T,触发器D1的时钟沿到来到触发器Q变化的时间Tcq(CLK--Q)最大为T1max,最小为T1min,逻辑组合电路的延迟时间最大为T2max,最小为T2min,问触发器D2的建立时间和保持时间。之后又在面试时候又被问到了相关的问题,因此想要总结一下。什么是保持时间(hold time)?保持时间就是指的对于一个触发器来说(如下图的D触发...原创 2017-09-14 13:41:40 · 10368 阅读 · 1 评论