agentee

原理图与 PCB 布局

自动布局

agentee place:连接器放在边缘,大芯片放在中心,去耦电容放在其引脚处,然后进行合法化和细化。

agentee place NAME [--parts 'U*,C1?'] [--keep-placed] [--side F|B|both] [--seed N] [--dry-run](MCP place)将 PCB 布局原理图中的元件放置在板框内,并将每个元件的 at、rotation 和 side 写入其 [[footprints]] 条目(为新元件添加条目,移除已移动标签的 at),移动现在未通过丝印检查的参考标签,然后刷新存储的铺铜。这是整块电路板的快速启动:放置、查看,然后手动移动并锁定重要元件。--parts 仅放置匹配的元件,其余保持原位;--keep-placed 保留已有放置位置的元件;[[footprints]] 条目中的 locked = true 永不移动。--side both 允许 BGA 的去耦电容放在其背面,并在顶层空间不足时将无源器件溢出到背面;默认将所有元件放在顶层。结果仅取决于文件和 --seed,因此不同的种子意味着不同的起始布局。报告信号网络和所有网络的半周长线长(HPWL)、飞线交叉、占位区重叠以及平均和最差去耦距离,针对放置前的布局(当所有元件都有位置时)和放置后的布局,以及构建的集群和每个连接器所在的板边。文件中已有的走线和过孔保持原位;放置未布线的电路板,或之后使用 route --reroute。标签使用与 agentee silk 相同的搜索移动(元件旁的清晰位置,最多 8 次迭代,每个标签 3 次尝试),在内存中的已放置布局上运行,因此项目仅加载一次,而非每次迭代加载一次;labels_moved 统计移动数量,labels_failing 列出未找到清晰位置的标签,供 agentee silk NAME --hide 或手动移动使用。

什么放在哪里,按强度排序,以及原因:

  • 连接器(具有 edge = true 焊盘、overhang = true 或 J/P 参考的元件)放置在电路板边缘,每个边缘均匀分布,配合侧朝外:边缘线是封装 Dwgs.User 层上标有 edge 文本的线(KiCad 的 PCB Edge 标记),否则是 edge 焊盘的外侧,否则是悬空元件的焊盘加 min_part_to_edge,否则是占位区加 min_body_to_edge。射频连接器(SMA、SMB、BNC、U.FL、MMCX、同轴)和 USB 连接器除非没有其他分割方式,否则永不共享同一边缘,因为 USB 3 噪声落在 2.4 GHz 频段(Intel,“USB 3.0 Radio Frequency Interference Impact on 2.4 GHz Wireless Devices”,2012)。[place] edges 将连接器固定到特定边缘。安装孔位于角落(优先对角),基准点位于空闲角落,其焊盘距边缘 3 mm 或更远,避开传送导轨和夹具(SMEMA Fiducial Mark Standard 3.1)。
  • 射频路径沿直线布置。从每个具有射频网络焊盘的连接器开始(具有 impedance 且无 diff_gap 的网络类),放置器通过承载两个或更多射频网络且引脚数不超过 16 的元件(直流阻断、衰减器、开关、低噪声放大器、巴伦)跟踪射频网络,并选择以另一个连接器或具有射频引脚的较大芯片结尾的最长路径;具有旁路的开关通过放大器而非旁路。当两端都是连接器时,它们位于电路板长轴的相对边缘,并沿边缘滑动至同一直线,穿过电路板中心(若两者都适合)。路径上的每个元件旋转,使其输入和输出焊盘按顺序位于该直线上,向输入端紧密排列,每个元件最多增加 1.5 mm 间隙,剩余空间留给最后一段。具有两个或三个引脚且一个焊盘位于路径节点上的元件(ESD 钳位、偏置扼流圈、并联电容)位于该节点旁的直线边,旋转使其其他焊盘指向远离方向,足够近使其射频焊盘接触走线,足够远使其其他焊盘保持网络类间距;同一节点的两个并联元件位于相对两侧。路径在其余元件围绕其放置之前固定,若元件会移出电路板或落在其他元件上,则留给通用放置器处理。
  • 大型芯片(BGA、超过 25 mm2 的 16 引脚及以上封装,否则为引脚数最多的元件)会被拉向电路板中心,并保持在距中心 off_centre 的范围内,以便引脚能在四周有足够的空间引出(Xilinx UG1099,BGA 器件推荐设计规则与策略),同时远离边缘和安装孔,因为处理与分板时的弯曲会导致电路板变形并开裂 BGA 焊点(IPC/JEDEC-9704A 应变指南)。
  • 集群来自网络表:每个集成电路独占其信号网络所连接的无源元件、其使用的电源与地之间的电容(若多个集成电路共用同一电源,则分配给原理图中最近的集成电路,并分布在其电源引脚上),以及其晶振。集群的去耦电容位于其所服务的电源引脚旁(Analog Devices MT-101,去耦技术;TI SCAA082,高速布局指南),或使用 --side both 时位于背面下方(Xilinx UG483,7 系列 PCB 设计指南将小电容置于 BGA 下方);晶振位于其时钟引脚旁(ST AN2867,振荡器设计指南)。集群的布局旨在最小化加权 HPWL:阻抗或差分对类的网络、[[pairs]] 和 [[interfaces]] 计三倍权重,电源和地网络不计权重(它们是平面)。
  • 开关稳压器(引脚上连接电感且电感另一端接电源的集成电路)会将其电感和输入电容紧密地放置在其周围,并且开关稳压器与敏感元件(晶振和位于单端阻抗(RF)网络上的元件)保持 8 mm(中心到中心)的距离(TI SNVA021,AN-1149 开关电源布局指南;Linear Technology AN139,电源布局与 EMI)。
  • 发热元件(在此布局的热仿真中功率源为 0.25 W 及以上,以及超过 49 mm2 的大型封装)会被推开 10 mm,以防止热量叠加(TI SNVA419,AN-2020 通过洞察而非事后分析进行热设计;IPC-2221B,热管理)。当发热元件(各自扩展 hot_distance 后)最多占据电路板一侧的四分之一时,其占位区也必须保持 hot_distance 的间距,如 placement-hot-parts-close 所测量(若某元件无处可放,则忽略此规则);在更紧凑的电路板上,走线长度优先。输出中的 hot_spread 给出该占比以及规则是否应用。
  • 0805 或更大的陶瓷电容避开 flex_zone,较小的电容若位于该区域内,则沿其最近的边缘、角落或安装孔排列(Murata 和 TDK 关于电路板弯曲的 MLCC 安装指南;Knowles)。该区域按 mlcc-flex-zone 检查的方式测量,从两个焊盘到轮廓、电路板开孔和安装孔钻孔;最后一步会旋转或移动(最多 12 mm)任何仍位于错误位置的电容。每个元件本体与轮廓以及电路板文件中每个 [[outline.cutouts]] 孔保持 min_body_to_edge 的距离,这些孔位于电路板之外,占位区在同一侧永不重叠(通孔元件阻挡两侧),且任何元件不进入 [place] keepouts 多边形(IPC-7351B 占位区:占位区是元件及其焊盘图案所需的最小面积)。
  • 旋转遵循主要网络:每个元件选择使其焊盘最接近其网络其他端点的四分之一圈旋转,集群中的无源元件共享同一轴线。

方法:每个集群(集成电路及其成员)和每个独立元件变为一个具有其元件面积的块。对块的加权团图进行谱布局(按秩取两个最低的非平凡特征向量),在电路板上对它们进行排序。然后进行 24 轮交替的二次走线长度求解和扩散步骤:求解针对芯片拉引脚而非中心,并在每轮选择每个芯片的四分之一圈旋转(按走线长度,后期轮次还按其二引脚网络的交叉数);连接器被拉向其最近的边缘,大型芯片被拉向中心;扩散步骤依次沿其较长边二分空闲电路板区域(在轮廓内,避开开孔、禁布区和已放置元件),为每个块分配与其面积相等的区域,每轮将块更强烈地拉向其区域。随后将连接器分配到边缘(最多七个连接器尝试所有分配,超过则贪心),并沿边缘滑动,在该点轮廓处与轮廓齐平(凹口或台阶计为边缘),若分配边缘无空闲位置则优先尝试最近的另一边缘,然后固定它们再次运行求解。合法化将整个集群作为整体放置:其锚点在每个四分之一圈(针对芯片)和五分之三集群宽度的微调,其成员围绕锚点,保留走线长度和交叉数成本最低的方案;每个元件放置在 0.05 mm 网格上最近的空闲位置,其占位区避开所有其他元件并遵守边缘规则。然后再次旋转或微调放置整个集群,并交换大小相似的芯片集群对,若这能降低成本。随后进行模拟退火优化(平移、四分之一圈旋转、相同大小元件交换、整个集群移动、使用 --side both 时的侧面翻转;每个元件 1500 次移动,然后在低温下再移动 500 次),评分基于加权 HPWL、二引脚网络交叉数(每次交叉计 4)以及上述规则作为惩罚。八个起始点(谱布局的八个反射)在并行线程上合法化,成本最低的三个进入集群移动和退火,因此结果仅取决于文件和 --seed,而不取决于线程数。

元件避开电路板自身的丝印:[[graphics]] 中丝印层的线条、locked = true 的丝印文本和丝印 [[artwork]] 阻挡其所在侧的占位区(若某元件无处可放,仍可能覆盖它们)。未锁定的丝印文本不阻挡元件:放置后,每个被元件(或其保留标签)覆盖的此类文本移动到电路板上 10 mm 范围内最近的空闲位置,避开元件、标签、锁定丝印和其他文本;texts_moved 列出写回 [[graphics]] 的移动,texts_stuck 列出无空闲位置的文本。连接器、安装孔和基准点也保留一个标签,位于元件外侧或转向内侧,若元件所在位置两者均无法容纳则不保留标签。每个元件的参考标签也需要空间:若标签最多占据空闲电路板面积的四分之一,则保留一个与参考文本大小相等的框(文本周围 0.2 mm,位于封装的参考点,避开其自身焊盘和丝印),像占位区一样保持空闲,place 将该位置写为 label.at;在更满的电路板上若有剩余空间,这些框与其他元件和标签的重叠在退火中计为小成本,在满的电路板上标签留给标签处理步骤(无位置的标签使用 agentee silk --hide)。

在一份移除了走线和过孔的 examples/sdr 副本上(251 个元件,65 x 45 mm),仅顶层,种子 1 到 4 给出 3276 到 3436 mm 的信号 HPWL 和 261 到 293 个交叉点,在 4 核上求解耗时约 2 秒(约 6 秒 CPU 时间),外加加载和标签处理。使用 --side both 时,它们给出约 1955 到 2025 mm 和 150 到 165 个交叉点。

docs/format.md · 面向智能体的 Markdown