第305章 奠定理论基础(1/2)

简单休息一会,进入了第三议题,如何设计上万只晶体管?

夏先生亲自主持这个议题。

他展示了一张104计算机的布线图,那是一张巨大的图纸,上面密密麻麻画着逻辑门和连线,像一幅复杂的迷宫地图。

“手工画版图,我们最多能处理几十个晶体管。”夏培肃说,“当规模达到几百、几千、甚至上万时,必须靠数学方法和自动化工具。”

他在黑板上写下三个方向。

逻辑设计自动化,用布尔代数和卡诺图进行逻辑化简,但需要算法处理多变量问题。

布局问题,将逻辑门放置到芯片上,属于组合优化,可能要用到线性规划或启发式搜索。

布线问题,在避免短路和寄生效应的前提下连接所有门,是图论中的斯坦纳树问题。

“这些都是组合爆炸问题。”夏先生说,“没有多项式时间的最优解算法。我们必须寻找启发式方法,在合理时间内得到可接受的解。”

北大的程教授发言:“逻辑化简,我们可以借鉴quine-luskey算法,但需要改进以处理多输出函数。布局问题,或许可以借鉴力导向布局的思想——把逻辑门看作带电粒子,连线看作弹簧,通过模拟物理系统的平衡来寻找较优布局。”

清华的徐教授补充:“布线问题,可以转化为网络流问题。把布线区域网格化,每个网格边有容量限制,源点和汇点是需要连接的引脚,求最小代价的最大流。”

“但还要考虑时序。”高先生插话,“连线长度会影响信号延迟。我们的布线算法不仅要保证连通性,还要满足时序约束,关键路径的延迟不能超过时钟周期的70%。”

“这又变成一个带约束的优化问题。”陈教授再次轻声说道,“我们可以建立数学模型:目标函数是最小化总线长,约束条件包括连通性、无短路、布线层容量、时序要求等。然后设计分支定界或割平面算法来求解。”

这时,徐教授点名吕辰:“我听说,吕辰同志在哈工大调研时,针对djs-2计算机,设计了用二维打孔卡片作为计算机输入介质。”

他从公文包里翻出一张卡片的草图:“接到康教授的电话后,我这些天一直在想,这种二维编码的思想,能不能用在芯片设计上?我们把芯片划分成网格,每个网格可以放置一个逻辑门或一段连线。然后用类似的方法编码,不是用孔,而是用金属层、多晶硅层、扩散层的图案组合。”

夏先生眼睛一亮:“你是说,把芯片设计问题转化为二维图案的编码和优化问题?”

“对!”徐教授走到黑板前,快速画出一个网格示意图,“我们可以把芯片看作一个二维平面,划分成nxm的网格。每个网格的状态可以用几位二进制编码表示:比如001表示放置一个与非门,010表示放置一个或非门,100表示放置一个触发器......,连线也用类似的编码,表示水平金属线、垂直金属线、通孔等。”

高先生激动地站起来:“这个思路好!把复杂的几何布局问题,转化为离散的编码优化问题。数学上更容易处理!”

夏先生点头:“这个思路完全没问题,而且我建议分层设计。不同的工艺层,扩散层、多晶硅层、金属层,可以看作不同的二维平面。这些平面上的图案需要满足设计规则:比如最小间距、最小宽度、通孔对齐等。这些规则可以转化为编码的约束条件。”

陈先生迅速在稿纸上推演:“如果每个网格用k位二进制编码,那么整个芯片的状态就是一个nxmxk的三维二进制矩阵。设计规则转化为对这个矩阵的约束条件。优化目标是最小化面积、延迟、功耗等。这本质上是一个大规模组合优化问题......”

夏先生点名吕辰:“小吕,这个二维卡是你第一个提出来的,你来说说看。”

吕辰起身致谢道:“各位老师,其实关于这个二维卡,我觉得最大的借鉴思路是模块化。”

吕辰详细描述了在哈工大用硬纸卡打孔矩阵实现快速输入的过程,以及那张“迭代函数卡片”如何调用“余弦函数卡”完成复杂计算。

“妙啊!”程教授拍案叫绝,“这不只是输入方式的创新,更是一种‘可组合计算’的思想!一张卡片代表一个函数或一个数据集,多张卡片组合就能完成复杂任务。这种思想如果用在芯片设计上......”

“模块化设计!”高先生也赞叹道,“我们可以把常用的功能模块,比如加法器、乘法器、寄存器堆设计成标准的单元。设计芯片时,就像拼图一样组合这些单元。每个单元的内部版图是预先设计好的、经过验证的,我们只需要处理卡片之间的连线问题。”

夏先生点头:“小吕同志这个思路有价值!它不仅仅是一种设计方法,更是一种设计哲学,把复杂问题分解、标准化、再组合。”

“我建议,”夏先生说,“我们立即把这个思路纳入设计研究。第一阶段,先定义一套标准的‘逻辑门单元’库;第二阶段,开发能自动组合这些单元的布局算法;第三阶段,扩展到更复杂的功能模块。”

这个提议获得一致通过。

随后,决定成立“集成电路设计自动化研究小组”,由数学系、计算所和红星所共同组成。

第一阶段目标就是基于二维网格编码和标准单元库的思想,开发能处理百晶体管级布局布线的算法原型。

到了第四个议题,高先生走到右边的黑板前。

他在黑板上画出两个对比表格,复杂指令集(cisc)和简化指令集,细数了国际上先进研究优缺点。

“我们该走哪条路?”高先生问,“是追随西方的主流,还是探索简化指令集这条新路?”

会议室里再次陷入激烈辩论。

支持cisc的一方认为,科学计算程序需要复杂的浮点运算、向量操作,cisc指令集能提供更直接的支持;而且现有的编译器、程序设计经验都基于cisc。

支持简化指令集的一方反驳,复杂指令在编译器中很少被直接使用,编译器更倾向于用简单指令的组合;简化指令集的规整性让流水线设计变得简单,能极大提高主频;而且简化指令集对编译器的优化更友好。

程教授再次展示那份算题统计,“我们分析了104计算机上运行的科学计算程序,发现80%的时间都在执行20%的指令,主要是取数、存数、加法和乘法。”

吕辰提出了一个“常用功能固化”的思路,说道:“高先生,如果统计是对的,80%时间执行20%的指令,那我们为什么不优化这20%的指令,让它们极快,其余指令用软件子程序实现?常用函数做成专用模块,不常用的临时组合。”

高先生眼睛一亮,他兴奋地在黑板上写下一系列原则。

指令长度固定(如16位或32位),格式规整;只有加载\/存储指令可以访问内存,运算指令只操作寄存器;硬连线控制,不用微码;注重流水线设计,目标是一条指令一个周期。

本章未完,点击下一页继续阅读。