自己写了点东西,做了个提纲性的总结, 没写完, 希望高手能指正或更详细一点
芯片设计这个行当 ,从大的方面讲,主要分模拟和数字两大块, 而每大块又分前端和后端, 我想大部分同学对这个肯定是非常清楚的, 下面就数字
威廉希尔官方网站
聊聊芯片设计的一些事情,就是芯片设计有哪些活做, 这并不是全面完整的系统介绍,只是个人的了解和总结, 希望抛砖引玉,也许不全面, 不正确, 欢迎同学们指正和补充
说到数字芯片,不能不说
FPGA, 这种是可编程的数字威廉希尔官方网站
, 用法原理也不说了, 数字威廉希尔官方网站
设计的目标,就是把这些功能,做成我们自己专用的ASIC/SOC, 这样无论面积, 成本或者安全性等等都能有保证
从流程上讲, 数字芯片设计的大致步骤就是系统与功能定义,RTL实现 验证, 综合及可测试性设计(synthesize , DFT ), ATPG
仿真, 时序分析, 到自动布局布线(APR). 直至交付fab的GDS网表.
这个流程是可以反复迭代的, 当对于不同类型芯片, 如纯数ASIC或混合威廉希尔官方网站
(mix-signal及系统级芯片(SOC), 每一步的方法和具体实施流程上可能又有所差异.下面就这些基本流程分步谈一些主要问题。
系统设计主要设计到功能定义及架构设计, 总线架构的配置,模块设计,数据流的分配, 时钟的设计等问题。总线包括模块之间,模块与MCU核之间,或者外部主机和芯片之间
通信,或者测试需要等等一系列因素。 时钟涉及到数据流的规划, 通信接口或内部MCU的时钟约定,工艺条件,功耗等因素。模块需要明确接口和定义。
在系统级设计上, 特别是很多数模混合威廉希尔官方网站
中或对功耗有特别要求的威廉希尔官方网站
中,还要有电压域的设计,不同模块之间,功能模块和接口之间可能都需要根据工艺条件,功耗要求设置不同的电压。
无论是时钟,还是电压,都可以通过控制开关来实现功耗的要求,时钟实现比较简单,在大部分威廉希尔官方网站
中都可以实现这种时钟控制,电压控制一般是实现在集成有
电源管理芯片的较大规模芯片上。但未来趋势是即使没有电源管理芯片,电压的ga
ting也需要纳入考虑范围。
在SOC系统设计上,一个重要的环节是MCU 内核的选型,现在常用的内核一般是ARM, 较老的ARM7, Arm9等系列,较新的是三大系列cortex A , R, M, 具体的用途不做详细诉述,选定好后核需要根据需要进行设置,一般做硬件的人不需要对它的指令集了解太多,但是需要了解它的总线接口,数据总线,指令总线,以及存储系统的设计,一般需要安排ROM, RAM分别作为指令和数据存储器,由于ROM是不可更改的,一般也需要加入flash作为补丁程序写入地。也可能需要外部存储器或者DMA控制器来增加外部存储空间。地址的分配是按照功能需要来进行的,现在有很多工具如synopsys的DesignKits可以产生外部总线代码及进行地址分配。
第一步完成系统和功能定义后, 就要实施的就是RTL实现, RTL是专门描述硬件威廉希尔官方网站
的工具语言, 有verilog和VHDL, RTL的特点就是硬件上的同时触发性,不同于软件的按顺序执行, 威廉希尔官方网站
有时序逻辑和组合逻辑组成, 时序逻辑在物理构成上就是一些寄存器,这些寄存器受时钟控制, 寄存器代表了威廉希尔官方网站
中数据或控制信号, 这些信号受时钟的驱动流动.组合逻辑是不受时钟控制的威廉希尔官方网站
块, 组合逻辑顾名思义,通过一些信号的组合直接生成一些逻辑结果。
RTL设计中,一大问题是异步设计问题,异步数据的处理根据不同情况有很多方式, 最简单的,如果对异步的电平信号, 可以直接在新的时钟域中加2级寄存器来隔离,避免不定态的发生. 当如果对于总线的处理, 或者脉冲的处理, 则需要同步模块, 同步模快一般是指需要握手信号,就是前一级时钟告诉采样的时钟,信号ok了, 采样的第二个时钟再去采,采好后再告诉前一级时钟,我搞定了,那样前一级时钟就可以换数据或其他处理.
有一种情况就是前一级时钟太快, 造成第二级来不及,则需要加入FIFO作为隔离, 就是让那些数据先放好, 我在慢慢来取. 这个FIFO的设计涉及到读写地址的判断,写满或读空都需要做相应处理, 读写地址之间的判断只能在其中一个时钟域中进行, 这本身又涉及异步信号的处理问题,这一般用格雷玛解决, 或者有些地方直接可以判断地址高位, 这些方法的目的就是不能让地址在比较的时候不稳定.
RTL设计中时钟本身的设计问题也要注意, 我们在一个芯片中, 尽量把时钟产生威廉希尔官方网站
放在一块,主要是从综合, DFT的角度去考虑的, 让这些时钟统一管理和约束。 时钟的分频,切换也要专门处理,否则容易产生毛刺等事情。
RTL设计中还有很多需要注意的问题,比如可综合性, 还有要考虑到威廉希尔官方网站
的面积, 以及响应速度等等, 这些问题是RTL coding的基础问题