1.建立数字电路设计的概念:先电路,后代码,RTL是用来描述电路的,而不是用来设计电路的。
HDL的正确翻译是"硬件描述语言",不是"硬件设计语言"。刚刚走出大学的学 生,有可能还没有到达第一阶段。因为在学校做课题,一般是先分析功能,然后就开始代码设计,拼拼凑凑,通过仿真来调整代码,最终"凑合"成一个可以运行的 代码。如果采用这种方式设计电路,表示自己还没有入门。回想自己当初进入工作之前也是这样,喜欢倒腾代码,写程序,能够用仿真工具跑出自己心仪的波形,就 很开心。后来在公司工作,才慢慢意识到自己根本就没有入门,没有理解数字电路设计的根本。
2.掌握基本的电路设计方法和基础知识,可以独立设计和验证基本模块单元。
数字电路设计的基本流程如下:
1.先确定重点需求:需求不可能事先全部确定,大概70%左右重点需求确定下来就可以继续。
2.确定系统架构和基础算法。
3.划分子模块,确定重要界面,协议。
4.模块设计:界面定义,确定重要信号。
5.设计重要状态机,设计重要讯号的时序图,关键时序信号对于新手来说一定要画出来。
6.编写RTL代码。
7.验证模块,优化。
《注》:RTL代码编写在整个设计过程中占用的时间应该不是很多,反而是其他步骤需要花更多的时间。
数字设计基础知识分两大块:运算和控制。
运算包括基本的加减乘除等各种运算的设计,各种加法器,乘法器的结构和优缺点。对二进制码制(原码,补码)有深入理解。
控制包括状态机的设计优化,流水线(PipeLine), 时序重排(Retiming),折叠和反折叠(Folding/Unfolding)等等。掌握这些不同技术对电路速度、面积、功耗的影响。
控制部分还需要加上异步电路设计基础。如何做不同时钟域的信息交互。
3.精通至少一个复杂的协议,比如USB, PCIE, SATA, MIPI, DDR, NANDFLASH, MPEG, H264等,解决和此协议相关的模块设计调试问题。这个层级上主要掌握的是处理复杂性的问题。协议分层,不同的抽象级别对复杂问题的逐步简化。
熟悉一个协议,能够接触到相对复杂的系统,物理层,Link层,协议层,应用层等等。
掌握一些标准的Analog/Digital接口协议,比如UTMI、PIPE、DFI等。能够借鉴这些Interface定义的思想,引入到自己的设计界面中去。
4.熟悉SOC架构,总线,模拟数字接口,知识面由精逐步扩展,越来越广。能够独当一面的负责整体IC规划。
1.需要掌握计算机体系结构,总线外设的优化。
2.掌握信号处理知识。
3.掌握一些流行算法。
4.熟悉整个设计流程,扩展到后端。
这四个阶梯实际上也不是完全一步一步的,互相有可能有交叠。有的人第二阶段知识并不是很扎实,就可以跳入第三阶段,甚至第四阶段。不过没有第二阶段的扎实基础,后面阶段的发展有可能会遇到瓶颈。通常的情况是,在跨入第三、第四阶段的时候,同时也在巩固第二阶段的基础内容。
第三、四阶段和项目相关性很大,而前两个阶段和项目无关。公司社会招聘一般只会关注到后两个阶段的实力,而不会考虑前两个阶段,因为社会招 聘是要找有经验的工程师。 而校园招聘一般比较看重前两个阶段,因为到公司之后有时间培养。公司培训的重点应该放在第一和第二阶断,后面两个阶段的发展靠个人在前两个阶段的背景下充分发挥了。
模块划分基本原则:
(1)对每个同步时序设计的子模块的输出使用寄存器(用寄存器分割同步时序模块原则)。
(2)将相关逻辑和可以复用的逻辑划分在同一模块内(呼应系统原则)。
(3)将不同优化目标的逻辑分开。
(4)将送约束的逻辑归到同一模块。
(5)将存储逻辑独立划分成模块。
(6)合适的模块规模。
(7)顶层模块最好不进行逻辑设计。
四种常用FPGA/CPLD设计思想与技巧:乒乓操作、串并转换、流水线操作、数据接口同步化
SoC设计的关键技术主要包括总线架构技术、IP核可复用技术、软硬件协同设计技术、SoC验证技术、可测性设计技术、低功耗设计技术、超深亚微米电路实现技术等,此外还要做嵌入式软件移植、开发研究,是一门跨学科的新兴研究领域