个人总结的数字电路IC设计流程介绍
时间:10-02
整理:3721RD
点击:
自己写了点东西,做了个提纲性的总结, 没写完, 希望高手能指正或更详细一点
芯片设计这个行当 ,从大的方面讲,主要分模拟和数字两大块, 而每大块又分前端和后端, 我想大部分同学对这个肯定是非常清楚的, 下面就数字电路聊聊芯片设计的一些事情,就是芯片设计有哪些活做, 这并不是全面完整的系统介绍,只是个人的了解和总结, 希望抛砖引玉,也许不全面, 不正确, 欢迎同学们指正和补充
说到数字芯片,不能不说FPGA, 这种是可编程的数字电路, 用法原理也不说了, 数字电路设计的目标,就是把这些功能,做成我们自己专用的ASIC/SOC, 这样无论面积, 成本或者安全性等等都能有保证
从流程上讲, 数字芯片设计的大致步骤就是系统与功能定义,RTL实现 验证, 综合及可测试性设计(synthesize , DFT ), ATPG仿真, 时序分析, 到自动布局布线(APR). 直至交付fab的GDS网表.
这个流程是可以反复迭代的, 当对于不同类型芯片, 如纯数ASIC或混合电路(mix-signal及系统级芯片(SOC), 每一步的方法和具体实施流程上可能又有所差异.下面就这些基本流程分步谈一些主要问题。
系统设计主要设计到功能定义及架构设计, 总线架构的配置,模块设计,数据流的分配, 时钟的设计等问题。总线包括模块之间,模块与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了, 采样的第二个时钟再去采,采好后再告诉前一级时钟,我搞定了,那样前一级时钟就可以换数据或其他处理.
有一种情况就是前一级时钟太快, 造成第二级来不及,则需要加入FIFO作为隔离, 就是让那些数据先放好, 我在慢慢来取. 这个FIFO的设计涉及到读写地址的判断,写满或读空都需要做相应处理, 读写地址之间的判断只能在其中一个时钟域中进行, 这本身又涉及异步信号的处理问题,这一般用格雷玛解决, 或者有些地方直接可以判断地址高位, 这些方法的目的就是不能让地址在比较的时候不稳定.
RTL设计中时钟本身的设计问题也要注意, 我们在一个芯片中, 尽量把时钟产生电路放在一块,主要是从综合, DFT的角度去考虑的, 让这些时钟统一管理和约束。 时钟的分频,切换也要专门处理,否则容易产生毛刺等事情。
RTL设计中还有很多需要注意的问题,比如可综合性, 还有要考虑到电路的面积, 以及响应速度等等, 这些问题是RTL coding的基础问题
芯片设计这个行当 ,从大的方面讲,主要分模拟和数字两大块, 而每大块又分前端和后端, 我想大部分同学对这个肯定是非常清楚的, 下面就数字电路聊聊芯片设计的一些事情,就是芯片设计有哪些活做, 这并不是全面完整的系统介绍,只是个人的了解和总结, 希望抛砖引玉,也许不全面, 不正确, 欢迎同学们指正和补充
说到数字芯片,不能不说FPGA, 这种是可编程的数字电路, 用法原理也不说了, 数字电路设计的目标,就是把这些功能,做成我们自己专用的ASIC/SOC, 这样无论面积, 成本或者安全性等等都能有保证
从流程上讲, 数字芯片设计的大致步骤就是系统与功能定义,RTL实现 验证, 综合及可测试性设计(synthesize , DFT ), ATPG仿真, 时序分析, 到自动布局布线(APR). 直至交付fab的GDS网表.
这个流程是可以反复迭代的, 当对于不同类型芯片, 如纯数ASIC或混合电路(mix-signal及系统级芯片(SOC), 每一步的方法和具体实施流程上可能又有所差异.下面就这些基本流程分步谈一些主要问题。
系统设计主要设计到功能定义及架构设计, 总线架构的配置,模块设计,数据流的分配, 时钟的设计等问题。总线包括模块之间,模块与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了, 采样的第二个时钟再去采,采好后再告诉前一级时钟,我搞定了,那样前一级时钟就可以换数据或其他处理.
有一种情况就是前一级时钟太快, 造成第二级来不及,则需要加入FIFO作为隔离, 就是让那些数据先放好, 我在慢慢来取. 这个FIFO的设计涉及到读写地址的判断,写满或读空都需要做相应处理, 读写地址之间的判断只能在其中一个时钟域中进行, 这本身又涉及异步信号的处理问题,这一般用格雷玛解决, 或者有些地方直接可以判断地址高位, 这些方法的目的就是不能让地址在比较的时候不稳定.
RTL设计中时钟本身的设计问题也要注意, 我们在一个芯片中, 尽量把时钟产生电路放在一块,主要是从综合, DFT的角度去考虑的, 让这些时钟统一管理和约束。 时钟的分频,切换也要专门处理,否则容易产生毛刺等事情。
RTL设计中还有很多需要注意的问题,比如可综合性, 还有要考虑到电路的面积, 以及响应速度等等, 这些问题是RTL coding的基础问题
看不懂....
讲得有点少,,,综合这块没讲呀!
只开了个头。