算法对电路设计的指导作用体现在3个阶段,分别是预研阶段、系统架构确定阶段和实际电路设计阶段。
复杂芯片在研发的起始阶段就有算法参与,甚至在项目规划立项之前的一两年,算法的工作就已经开展了,这就是预研。
预研的主要目的是厘清目标芯片的处理流程、性能指标、评价标准,再进一步细化到流程中每个步骤的处理细节和算法选择。比如,要研发一款WiFi通信芯片,首先要能画出发射机和接收机的基本架构,然后需要对其内部的算法细节逐一进行讨论、分析和仿真。其中,涉及的问题可分为5类:
1)数字电路问题 :如正交频分复用(Orthogonal Frequency Division Multiplexing,OFDM)通信机制、不同点数的快速傅里叶变换(Fast Fourier Transform,FFT)使用何种结构的电路处理、帧同步如何进行、多天线环境下信道估计应选择何种算法、信道均衡应选择何种算法、载波频偏和采样频偏如何估计与跟踪、信噪比如何估计、星座图如何映射和解映射、卷积码和低密度奇偶校验(Low Density Parity Check,LDPC)码等信道编码如何进行编解码、如何适应不同的码率对信道编码进行打孔等。
2)模拟电路问题 :包括模拟中频滤波器的建模、混频过程、天线功率放大电路的建模,在模拟建模时还要引入模拟电路的不良影响,比如IQ(同相分量和正交分量)失配、增益的非线性失真、载波泄露等。
3)数字模拟混合问题 :自动增益控制如何实施、IQ失配如何估计和消除、增益的非线性失真如何消除、载波泄露如何估计和消除等。
4)协议及软硬件配合问题 :一些算法和功能同时牵连到物理层和介质访问控制(Medium Access Control,MAC)层调度,例如波束成形的实施方案、上下行多用户数据流分配方案等。
5)芯片工作环境的建模 :瑞利、莱斯、特定的办公室和城市、高速运动和静止状态等信道特征,虽然在实际芯片设计之外,但芯片工作时以这些环境作为背景,因而它们也是算法需要考虑和建模的对象。
可见,不像芯片研发那样将工作明确地分为模拟电路、数字电路和软件,算法的工作是对目标芯片的应用场景进行统一建模,这体现了算法的系统性特征。
一个好的算法建模,不仅能解决芯片设计方案的选择问题,还能解释和解决芯片在实际应用中遇到的各种问题,比如使用WiFi上网过程中可能遇到视频卡顿或平均通信速率不高等问题,通过测试和算法分析,可以给出一个原理性的解释,并且可以给出建议,配置某些寄存器,打开或关闭某些功能、改变某些功能的参数,使得连接质量得到提升。这种总览全局的决策力和解释力,是只做单独领域的模拟工程师、数字工程师或软件工程师所无法获得的。因此,算法在芯片设计中担任非常重要的角色。
在预研完成后,已经厘清目标芯片架构和基本算法细节的前提下,就可以启动正式芯片项目,并开始实际的芯片研发工作。此时,需要从架构方面考虑如下问题:
1)芯片选择SoC方式还是非SoC的纯专用集成电路(Application Specific Integrated Circuit,ASIC)方式?
2)芯片是以软件处理为主还是以硬件处理为主?
3)哪些功能需要由硬件处理?
4)哪些功能需要由软件处理?
5)CPU运行在什么频率下?
6)CPU的每秒百万条指令(Million Instructions Per Second,MIPS)需要多高?
7)总线上的各种设备运行在什么频率下?
8)当芯片工作异常时,应当用何种手段来帮助定位和排查问题?
上述问题,就是芯片的架构问题。在架构的确定上,芯片的主要负责人——项目经理或架构师具有决定权,而算法人员的意见是架构决策的重要依据。比如,复杂信道编码的处理需要较高的时钟频率,MAC层的一部分格式是固定的,不需要由软件组包,由硬件实现即可,而另一部分是需要灵活计算的,变数很大,硬件无法代劳,只能由软件处理,软件处理时必须保证有一定的速度,因此对于CPU的MIPS指标有明确的要求。项目经理也需要决策芯片中哪些IP是可以自主研发的,哪些IP需要购买。对于需要购买的IP,如果是普通的非算法电路,算法人员无须参与,对于算法相关电路,就需要算法人员参与讨论,评估不同供应商的IP性能。
在芯片设计时,算法人员需要向数字开发工程师提供算法细节建模。在这一阶段,算法不是停留在理论上和纸面上,而是要变成具有实际功能的电路。为了使算法具体化,使得带有正负号的浮点复数也可以在电路中传输,需要对用于进行性能评估的浮点算法代码进行定点化。这一定点化的代码,一般使用MATLAB、Python或C语言表述。数字开发工程师负责将这些算法代码转化为寄存器传输级(Register Transfer Level,RTL)描述。