数字IC设计工程师需要清楚的signoff点

6 篇文章 0 订阅
2 篇文章 1 订阅

作为一名数字IC设计工程师,虽然核心工作是设计,但其他相关工作亦很重要,亦需要了解。下面简单的给出从设计开始到流片前的多个步骤使用的工具和相关的signoff点。

阶段0:准备好相应的版本控制工具和文档存储共享工具

版本控制工具:GIT,输入为RTL代码

文档资料存储共享工具:SVN,输入为RTL的设计相关文档

阶段1:RTL设计文档编写阶段

使用的工具:基本的办公软件

输入为算法文档、算法程序、协议等

输出为RTL设计文档,模块操作流程和约束等文档

注:一般情况下先是对算法或者协议之类的进行学习;然后根据学习的东西编写RTL的设计文档和模块的相关验证操作流程文档,如果能请组内人员一起review,则更好;然后才是RTL代码的设计。这里给出一个简单的RTL设计文档的例子,实际使用时可根据情况完善。

RTL设计文档至少需要包含如下这些部分:

1 文档标题,版本号,作者,修订历史记录(修改者信息,版本号,修订内容,修订日期—),文档目录,图目录,表目录等;

2 模块整体设计要实现的功能以及模块在整体工程中的位置结构

3 模块整体设计所采用的设计思路和实现原则

4 整体组织结构,整体的控制流、数据流和顶层IO接口设计原则和方案

5 整体验证思路和方案,包括验证的数据配置和流程图

6 各个子单元的设计思路,包括了子单元的设计框图,IO端口名称及其作用和测试波形描述

7 关键节点的位置、作用以及测试波形的描述

总体来说文档编写的原则包括:先写总体方案,然后描述详细的设计方案,两者缺一不可;要包含为了提高测试覆盖率和验证设计系统结构的方案;时序描述应逐级开展,首先完成顶层的时序设计,然后对单个模块进行描述。

阶段2:RTL代码阶段

使用的工具有:Verilog语言、文档编辑器VIM、spyglass语法检查工具

输入是来自与算法的spec文件或者相应的协议

需要达到的标准:1 符合代码的编写规范;

                             2 spyglass lint检查中出现的error需要为0,并确认warning没有问题;

                             3 完成spyglass cdc的检查和确认;

                             4 spyglass lint/dft报告中确认除第三方IP外无blackbox,error为0,确认warning没有问题,没有使用既带rest又带set的寄存器;

                             5 能实现模块的主要功能;(这一点可以放在阶段3中,不过这一步应有设计者完成)

阶段3:仿真验证阶段

使用的工具有:VCS、Verdi、SystemVerilog、UVM

输入为:RTL代码,验证操作流程文档、算法代码

需要达到的输出标准:1 功能覆盖率100%;

                                    2 代码覆盖率(分支覆盖率、FSM——状态机的覆盖率、翻转覆盖率)100%,如果有部分覆盖率没有达到100%,需要算法和IC设计给出相应的合理说明;

                                   3 相关的验证文档和验证结果报告文档;

阶段4:综合阶段

使用的工具为:Design Compiler

输入为:RTL代码、.db的库文件、SDC约束文件

输出标准要求:1 综合时的corner需要包含高温和低温的ss;

                         2 读取RTL设计文档时没有error,并确认存在的warning无影响;

                         3 确认link log中没有unresolved(没有解析的),没有error;

                         4 读取约束文件时没有error,并确认warning没有影响;

                         5 检查时序,确认没有uncontrained endpoint,没有timing loop;

                         6 查看时序报告,确认没有时序违反,尤其是setup time的时序违反,没有与memory相关的min pulse/period违反;

                         7 查看面积报告;

                         8 查看ICG coverage; 

阶段5:时序分析、功耗分析阶段

使用的工具为PT/PTPX

输入为:SDC、.db文件、网表(netlist)文件

输出标准:1 要对最差情况下的setup进行分析(要包含高低温);

                  2 要对最好情况进行hold分析(包含高低温);

                  3 功耗分析需要分析常温、高温、低温的情况;

阶段6:形式验证阶段

使用的工具为FM

输入为:.db文件、RTL代码、网表(netlist)

输出标准:1 确认除第三方IP外无blackbox;

                  2 确认无set_constant/don't verify等设置;

                  3 确认无unverify/abort point;

                  4 结果pass后,还需要确认log;

阶段7:版图阶段

使用工具为:ICC

输入为:netlist网表文件、约束文件SDC、MILKYWAY

输出标准:1 确认关键信号路径上的连线宽度及VIA数目满足要求;

                   2 电源接入处满足最大电流容限要求;

                   3 ……

阶段8:物理验证阶段

使用的工具:HERCULES/CALIBRE V2LVS

输入有:RULE DECK,GDS,网表

输出标准:……

阶段9:寄生参数提取阶段

使用的工具:STARRC

输入:……

输出:……

阶段10:时序分析\后仿真\形式验证\功耗分析阶段

使用的工具有:PT、PTPX、FM、VCS、Verdi

输入有:网表文件、SDF文件、SDC文件、波形文件、DB文件

输出标准:1 后端时序分析时要确认时序裕量要在所有工艺角>0,最小脉宽时满足要求,时序分析要确认所有warning没有问题,不允许有error;

                  2 功耗分析需要提供门级仿真波形,并进行timebased模式和average模式下的分析;

                  3 FM的要求如上所说;

                  4 后放怎需要覆盖最好与最差的SDF;

阶段11:IP产品检查阶段

使用工具有:library compiler

输入:

输出标准:

最后,以上项目都检查通过后,才可以tapeout,即将相应的文件给到工厂进行芯片制造。

由于自己涉及的内容有限,有些阶段没有列出,有些阶段可能也不全面,如广大同行前辈之类的看到并有时间的话,欢迎补充指正。

  • 5
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
较为完整的vc++ 画图程序 IMPLEMENT_SERIAL(CShape,CObject,1) IMPLEMENT_SERIAL(CLine,CShape,1) IMPLEMENT_SERIAL(CRectangle,CShape,1) IMPLEMENT_SERIAL(CCircle,CShape,1) IMPLEMENT_SERIAL(CCurve,CShape,1) IMPLEMENT_SERIAL(CEllipse,CShape,1) CShape::CShape(void) { } CShape::~CShape(void) { } CRect CShape::GetBoundRect() { CRect BoundingRect; // Object to store bounding rectangle BoundingRect = m_EnclosingRect; // Store the enclosing rectangle // Increase the rectangle by the pen width BoundingRect.InflateRect(m_Pen, m_Pen); return BoundingRect; // Return the bounding rectangle } void CShape::Serialize(CArchive& ar) { CObject::Serialize(ar); if(ar.IsStoring()) { ar<<m_Color<<m_Brush<<m_EnclosingRect<<m_Pen; } else { ar>>m_Color>>m_Brush>>m_EnclosingRect>>m_Pen; } } CLine::CLine(void) { } CLine::~CLine(void) { } // CLine class constructor CLine::CLine(CPoint Start, CPoint End, COLORREF aColor,int PenWidth) { m_StartPoint = Start; // Set line start point m_EndPoint = End; // Set line end point m_Color = aColor; //m_Brush=aBrush;// Set line color m_Pen = PenWidth; // Set pen width // Define the enclosing rectangle m_EnclosingRect = CRect(Start, End); m_EnclosingRect.NormalizeRect(); } // Draw a CLine object void CLine::Draw(CDC* pDC) { // Create a pen for this object and // initialize it to the object color and line width of 1 pixel CPen aPen; if(!aPen.CreatePen(PS_SOLID, m_Pen, m_Color)) { // Pen creation failed. Abort the program AfxMessageBox(_T("Pen creation failed drawing a line"), MB_OK); AfxAbort(); } CPen* pOldPen = pDC->SelectObject(&aPen;); // Select the pen // Now draw the line pDC->MoveTo(m_StartPoint); pDC->LineTo(m_EndPoint); pDC->SelectObject(pOldPen); // Restore the old pen } void CLine::Serialize(CArchive& ar) { CShape::Serialize(ar); if(ar.IsStoring()) { ar<<m_StartPoint<<m_EndPoint; } else { ar>>m_StartPoint>>m_EndPoint; } }
松下通讯协议(PLC) RCS Read single point of contact information 读取单个触的状态信息 WCS Write single point of contact information 写入单个触的状态信息 RCP Read plural point of contact information 读取多个触的状态信息 WCP Write plural point of contact information 写入多个触的状态信息 RCC Read word unit of contact information 读取字单位的触的状态信息 WCC Write word unit of contact information 写入字单位的触的状态信息 SC Preset word unit in contact area 预置字单位的触 RD Read data area 读取数据寄存器值 WD Write data area 写入数据寄存器值 SD Preset of data area 预置数据寄存器值 RS Read timer and counter set value area 读取定时器/计数器目标值 WS Write timer and counter set value area 写入定时器/计数器目标值 RK Read timer and counter elapsed value area 读取定时器/计数器经过值 WK Write timer and counter elapsed value area 写入定时器/计数器经过值 MC Registration and reset of monitor contact 登录及复位监控触 MD Registration and reset of monitor data 登录及复位监控数据 MG Monitor execution 执行监控 RR Read system register 读取系统寄存器 WR Write system register 写入系统寄存器 RT Read Programmable Controller (PC) status 读取PLC 当前状态 RP Read program 读取程序 WP Write program 写入程序 RM Remote control (RUN/PROGRAM mode switching) 遥控(运行/编程模式切换) AB Transmission abort command 传输终止指令
解决c++中崩溃问题,捕捉程序中种种异常,产生dmp信息以方便修改, 适用windows平台。 1 CrashHooker 为异常捕捉模块 2 CrashRptTest 为模拟各种异常模块 【分为主线程和其他线程】 (1)seh (2)C++ terminate() call. (3)C++ unexpected() call. (4)C++ pure virtual function call (VS .NET and later). (5)C++ new operator fault (VS .NET and later). (6)Buffer overrun error (VS .NET only). (7)Invalid parameter exception (VS 2005 and later). (8)C++ SIGABRT signal (abort). (9)C++ SIGFPE signal (flotating point exception). (10)C++ SIGILL signal (illegal instruction). (11)C++ SIGINT signal (CTRL+C). (12)C++ SIGSEGV signal (invalid storage access). (13)C++ SIGTERM signal (termination request). (14)c++ vectored exception 3 CrashRptTest 模块设置异常捕获 (1)在主进程入口处定义CrAutoInstallHelper对象,并设置起启动参数。 注意:在定义CrAutoInstallHelper前调用SetErrorMode(SEM_NOGPFAULTERRORBOX), 定义CrAutoInstallHelper后调用DisableSetUnhandledExceptionFilter()接口, 这样可以在系统前捕获到异常。 (2)在线程入口处定义CrThreadAutoInstallHelper对象。 4 dmprpt 为信息和dmp收集模块,需要web配合可以参考php模块 (1) file.php 用于接收文件 【本机测试使用】 (2) test.php 用于保存参数 【本机测试使用】 5 进程间通信使用了共享内存技术,进行参数的传递, 参考CShareMemParas类,参数收集使用了CDmpInfoGather类,适合 社区项目,其他项目请酌情修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值