订阅中国电子电路教学 ↑ 请点击上方蓝色小字 微信公众平台:wangzhenyu_1000 芯片设计这个行当 ,从大的方面讲,主要分模拟和数字两大块, 而每大块又分前端和后端, 我想大部分同学对这个肯定是非常清楚的, 下面就数字电路聊聊芯片设计的一些事情,就是芯片设计有哪些活做, 这并不是全面完整的系统介绍,只是个人的了解和总结, 希望抛砖引玉,也许不全面, 不正确, 欢迎同学们指正和补充。 系统设计主要设计到功能定义及架构设计, 总线架构的配置,模块设计,数据流的分配, 时钟的设计等问题。总线包括模块之间,模块与MCU核之间,或者外部主机和芯片之间通信,或者测试需要等等一系列因素。 时钟涉及到数据流的规划, 通信接口或内部MCU的时钟约定,工艺条件,功耗等因素。模块需要明确接口和定义。 在系统级设计上, 特别是很多数模混合电路中或对功耗有特别要求的电路中,还要有电压域的设计,不同模块之间,功能模块和接口之间可能都需要根据工艺条件,功耗要求设置不同的电压。 无论是时钟,还是电压,都可以通过控制开关来实现功耗的要求,时钟实现比较简单,在大部分电路中都可以实现这种时钟控制,电压控制一般是实现在集成有电源管理芯片的较大规模芯片上。但未来趋势是即使没有电源管理芯片,电压的gating也需要纳入考虑范围。 在 SOC系统设计上,一个重要的环节是MCU 内核的选型,现在常用的内核一般是ARM, 较老的ARM7, Arm9等系列,较新的是三大系列cortex A , R, M, 具体的用途不做详细诉述,选定好后核需要根据需要进行设置,一般做硬件的人不需要对它的指令集了解太多,但是需要了解它的总线接口,数据总线,指令总线, 以及存储系统的设计,一般需要安排ROM, RAM分别作为指令和数据存储器,由于ROM是不可更改的,一般也需要加入flash作为补丁程序写入地。也可能需要外部存储器或者DMA控制器来增加外 部存储空间。地址的分配是按照功能需要来进行的,现在有很多工具如synopsys的DesignKits可以产生外部总线代码及进行地址分配。 第一步完成系统和功能定义后, 就要实施的就是RTL实现, RTL是专门描述硬件电路的工具语言, 有verilog和VHDL, RTL的特点就是硬件上的同时触发性,不同于软件的按顺序执行, 电路有时序逻辑和组合逻辑组成, 时序逻辑在物理构成上就是一些寄存器,这些寄存器受时钟控制, 寄存器代表了电路中数据或控制信号, 这些信号受时钟的驱动流动. 组合逻辑是不受时钟控制的电路块, 组合逻辑顾名思义,通过一些信号的组合直接生成一些逻辑结果。 RTL设计中,一大问题是异步设计问题,异步数据的处理根据不同情况有很多方式, 最简单的,如果对异步的电平信号, 可以直接在新的时钟域中加2级寄存器来隔离,避免不定态的发生. 当如果对于总线的处理, 或者脉冲的处理, 则需要同步模块, 同步模快一般是指需要握手信号,就是前一级时钟告诉采样的时钟,信号ok了, 采样的第二个时钟再去采,采好后再告诉前一级时钟,我搞定了,那样前一级时钟就可以换数据或其他处理。 RTL设计中时钟本身的设计问题也要注意, 我们在一个芯片中, 尽量把时钟产生电路放在一块,主要是从综合, DFT的角度去考虑的, 让这些时钟统一管理和约束。 时钟的分频,切换也要专门处理,否则容易产生毛刺等事情。 RTL设计中还有很多需要注意的问题,比如可综合性, 还有要考虑到电路的面积, 以及响应速度等等, 这些问题是RTL coding的基础问题。 代码写完后,需要进行的是验证工作, 下面谈谈这方面的事情: 上次写完后,有人支持,也有个朋友说写这些东西意义不大吧,如果就某些细节方面感兴趣的朋友可以探讨和切磋,互相学习,也可以私下交流。 这只是我的角度去写这些东西,希望大家指正和补充。下面接前天的,继续验证部分。 芯片验证一般有这几个层面, 一个是RTL级或者Netlist( pre or post PR with SDF ), 这个也是一般意义上的芯片验证工作, 一个是FPGA级的,也是RTL, 只不过download到FPGA中, 借助硬件环境,也可以直接做应用实验。 芯片验证的工作量在芯片设计中占据了大部分的时间和精力,无论是那种验证,都需要搭建测试平台(testbench),验证平台从软件结构上模拟芯片的工作 环境。即有清晰的连线结构,也有完成这些测试所需要的非结构性的函数或任务包。测试平台中的被测试芯片是RTL级的,测试向量或者说施加的激励可以是 verilog/VHDL,HDL语言本身就具有比较完善的行为级描述功能,也可以满足绝大部分测试平台的搭建和测试激励的产生,当然我们面对更复杂设 计,或追求更高效率 也可以使用其它被编译器兼容的语言, 如C/C++, SC, SV,E等等。 很显然,测试激励是有时间概念的,是按顺序进入和流出芯片的,使用的这些非电路描述语言和功能和软件几乎是没有区别的,所以验证中也越来越多地使用软件的一 些技术, 如面向对象的编程技术,SystemVerilog, Specman E等,SV也支持断言语句(assertion),不同厂家提供的OVM, VMM,UVM等也包括了很多类库可供使用。 关于这些技术其实可以有更深入的探讨,也期待感兴趣的能深入展开。 还有post layout的后仿,这个后仿是指DFT和APR之后的网表,加入带有时序信息的SDF文件进行仿真。有些人说,我做过验证,代码和网表之间,PR前后网 表之间的一致性验证也做了,还需要后仿吗? 答案当然还是需要的,因为一致性也无法检测到很多时序的问题,比如毛刺,甚至DFT的错误, 功能性的问题等等。 现在比较常见数模混合芯片的验证,模拟的部分主要是采用了 verilogams建模,当然也有VHDLRN建模等等,这些东西就是引入了可控制和可检测的模拟量,进入数字仿真系统,也是数字验证流程的一环。 更专业的数模混合验证系统ADMS, 里面引入了数字和模拟多个引擎,如数字的nvverilog 模拟的Eldo等等,数字部分导入RTL代码,模拟部分直接导入GDS电路, 当然为了加快速度,模拟部分在使用中一般仍然导入数字模型。 SOC验证中, 植入了烧入ROM的软件, 在仿真验证系统中,使用的一般是存储器的模型加上文本格式的代码文件, 一般实现是直接通过系统读入指令把文件读入到存储器模型中。(有些仿真工具可以直接通过选项导入,类似SDF文件,如工具nscim),仿真器可以直接写 出指令执行的log以用于debug,不过现在有更先进的方式用于复杂SOC验证, 如Codelink工具,能够在原仿真器的基础上,建立起MCU和HDL电路已经软件的关系,通过展示波形和固件(firmware)源码的链接进行更方 便的debug。 (此处略去若干回帖。。。。。) 帖子的话题受到了大家关注, 也被加精 , 受到鼓舞, 一直想继续写完,但时间有限,更主要惰性使然, 一直没有接着写完, 今日得宽裕,继续谈谈数字 IC设计接下来的一些工作 。 |
|