简单休息一会,进入了第三议题,如何设计上万只晶体管?
夏先生亲自主持这个议题。
他展示了一张104计算机的布线图,那是一张巨大的图纸,上面密密麻麻画着逻辑门和连线,像一幅复杂的迷宫地图。
“手工画版图,我们最多能处理几十个晶体管。”夏培肃说,“当规模达到几百、几千、甚至上万时,必须靠数学方法和自动化工具。”
他在黑板上写下三个方向。
逻辑设计自动化,用布尔代数和卡诺图进行逻辑化简,但需要算法处理多变量问题。
布局问题,将逻辑门放置到芯片上,属于组合优化,可能要用到线性规划或启发式搜索。
布线问题,在避免短路和寄生效应的前提下连接所有门,是图论中的斯坦纳树问题。
“这些都是组合爆炸问题。”夏先生说,“没有多项式时间的最优解算法。我们必须寻找启发式方法,在合理时间内得到可接受的解。”
北大的程教授发言:“逻辑化简,我们可以借鉴Quine-McCluskey算法,但需要改进以处理多输出函数。布局问题,或许可以借鉴力导向布局的思想——把逻辑门看作带电粒子,连线看作弹簧,通过模拟物理系统的平衡来寻找较优布局。”
清华的徐教授补充:“布线问题,可以转化为网络流问题。把布线区域网格化,每个网格边有容量限制,源点和汇点是需要连接的引脚,求最小代价的最大流。”
“但还要考虑时序。”高先生插话,“连线长度会影响信号延迟。我们的布线算法不仅要保证连通性,还要满足时序约束,关键路径的延迟不能超过时钟周期的70%。”
“这又变成一个带约束的优化问题。”陈教授再次轻声说道,“我们可以建立数学模型:目标函数是最小化总线长,约束条件包括连通性、无短路、布线层容量、时序要求等。然后设计分支定界或割平面算法来求解。”
这时,徐教授点名吕辰:“我听说,吕辰同志在哈工大调研时,针对DJS-2计算机,设计了用二维打孔卡片作为计算机输入介质。”
他从公文包里翻出一张卡片的草图:“接到康教授的电话后,我这些天一直在想,这种二维编码的思想,能不能用在芯片设计上?我们把芯片划分成网格,每个网格可以放置一个逻辑门或一段连线。然后用类似的方法编码,不是用孔,而是用金属层、多晶硅层、扩散层的图案组合。”
夏先生眼睛一亮:“你是说,把芯片设计问题转化为二维图案的编码和优化问题?”
“对!”徐教授走到黑板前,快速画出一个网格示意图,“我们可以把芯片看作一个二维平面,划分成N×M的网格。每个网格的状态可以用几位二进制编码表示:比如001表示放置一个与非门,010表示放置一个或非门,100表示放置一个触发器......,连线也用类似的编码,表示水平金属线、垂直金属线、通孔等。”
高先生激动地站起来:“这个思路好!把复杂的几何布局问题,转化为离散的编码优化问题。数学上更容易处理!”
夏先生点头:“这个思路完全没问题,而且我建议分层设计。不同的工艺层,扩散层、多晶硅层、金属层,可以看作不同的二维平面。这些平面上的图案需要满足设计规则:比如最小间距、最小宽度、通孔对齐等。这些规则可以转化为编码的约束条件。”
陈先生迅速在稿纸上推演:“如果每个网格用k位二进制编码,那么整个芯片的状态就是一个N×M×k的三维二进制矩阵。设计规则转化为对这个矩阵的约束条件。优化目标是最小化面积、延迟、功耗等。这本质上是一个大规模组合优化问题......”
夏先生点名吕辰:“小吕,这个二维卡是你第一个提出来的,你来说说看。”
吕辰起身致谢道:“各位老师,其实关于这个二维卡,我觉得最大的借鉴思路是模块化。”
吕辰详细描述了在哈工大用硬纸卡打孔矩阵实现快速输入的过程,以及那张“迭代函数卡片”如何调用“余弦函数卡”完成复杂计算。
“妙啊!”程教授拍案叫绝,“这不只是输入方式的创新,更是一种‘可组合计算’的思想!一张卡片代表一个函数或一个数据集,多张卡片组合就能完成复杂任务。这种思想如果用在芯片设计上......”
“模块化设计!”高先生也赞叹道,“我们可以把常用的功能模块,比如加法器、乘法器、寄存器堆设计成标准的单元。设计芯片时,就像拼图一样组合这些单元。每个单元的内部版图是预先设计好的、经过验证的,我们只需要处理卡片之间的连线问题。”
夏先生点头:“小吕同志这个思路有价值!它不仅仅是一种设计方法,更是一种设计哲学,把复杂问题分解、标准化、再组合。”
这章没有结束,请点击下一页继续阅读!