指南 · L-Edit 桥

让 agent 双向驱动 Tanner L-Edit

一个源码即装载的 UPI 宏 + JSON 文件交换传输:无套接字、无防火墙弹窗、无需编译;按老版本 API 子集编写(理论兼容旧版,实测环境 v16.x)。agent 由此获得对 L-Edit 的白盒读写——直到 T-Cell 的生成器代码本身。

装载:一个文件,零编译

pip install klayout-klinkklink init 会在项目里铺出 example_template/ledit_bridge/

  • ledit_bridge.cpp —— 唯一的宏文件。在 L-Edit 里 Tools → Macro → Load Macro… 直接选它(L-Edit 自己现场编译;宏只用老版本 API 子集编写,理论兼容旧版、实测环境 v16.x;klink 不携带任何 Siemens/Tanner 文件,SDK 头文件来自你自己的 L-Edit 安装)。
  • driver.py —— 免依赖冒烟驱动:python driver.py ping 看到宏版本、当前设计与能力表即为连通。
  • tcell_workflows.py —— T-Cell 工作流 CLI(下文)。

传输是 %LOCALAPPDATA%\klink\ledit_bridge\ 下的 inbox/outbox JSON 文件对,宏在 UI 线程 200ms 轮询、原子写回;心跳文件 hello.json 提供活性判定。

能力面

类别命令
设计文件new_design(没开 tdb 也能自举建库)· open_design · save_design
图层ensure_layer(盖 GDS 号;新层自动配色:实心无边框)· set_layer_style · get_layers(含填充色与特殊层标记)
绘制create_cell · draw(box/polygon/wire/circle 批量)· place_instance(含 nx×ny 阵列)· clear_cell
全量读取get_selection · get_cell(图形+对象级属性树+实例+端口+标签;wire 带端帽/拐角,torus/pie 带精确参数)· list_cells
工艺知识get_drc_rules —— 整套设计规则表机读导出
T-Cellget_tcell_params · instance_tcell(程序化传参实例化)· set_tcell_code(把生成器代码写回成原生 T-Cell)

与 KLayout 互导(MCP 一调用)

配好 klink MCP 后,agent 直接获得 bridge_ledit 域的三个意图级工具:

  • ledit.status —— 发现与分诊:宏活性、设计是否打开、心跳年龄。任何异常先叫它,错误信息会直接写明下一步。
  • ledit.import_selection —— 你在 L-Edit 里选中,agent 导入 KLayout 新 cell:圆保持参数化(CIRCLE PCell)、层连名带号迁移(重名追加不覆盖)、不可转换对象如实列出。
  • ledit.push_cell —— KLayout 平坦 cell 推回 L-Edit(层同样带名建立)。

T-Cell:双向参数化

T-Cell 的生成器代码存在 cell 属性里,桥可以整段读出——参数名从代码的 DO-NOT-EDIT 段稳定解析。由此打通两个方向,验收标准只有一个:逐字节一致(整数纳米坐标逐箱相等,以 L-Edit 实际生成的几何为真值)。

python tcell_workflows.py read NFET_Generator      # 参数与默认值
python tcell_workflows.py variants NFET_Generator --paramsets "[...]" --out ex.json
python tcell_workflows.py writeback MyGen --code gen.cpp --params "[...]"
python tcell_workflows.py verify MyGen --reference ref.py:boxes --paramsets "[...]"
python tcell_workflows.py fit MyGen --paramsets "[...]" --check "[...]" --out fit.json --register MY_DEVICE
  • T-Cell → KLayout(纯几何路线)fit(v0.2.2)采样样本并拟合 v3 重复组模型——数量、间距、位置全部是精确整数律,在留出检查点上与 L-Edit 新鲜变体逐字节对决,然后注册为 KLayout PCell(放置同样逐字节验证)。模型表达不了或钉不死的结构一律 REFUSE 并点名箱族——交替/奇偶结构请走下面的代码移植路线。
  • T-Cell → KLayout:读代码 → agent 移植为 KLayout 侧生成器/PCell → verify 在跨越重复阈值的参数网格上逐字节对决。
  • KLayout → T-Cell:agent 生成 UPI 代码 → writeback 写入(同时定义参数表)→ L-Edit 现场编译 → 得到和手写无异的原生参数化 T-Cell。

已知边界与排障

症状 / 边界含义 / 修法
心跳停了(hello.json 变旧)L-Edit 弹了模态对话框(常见于 T-Cell 编译错误)——关掉即恢复
改了 T-Cell 代码但几何没变L-Edit 缓存变体:换一组参数值,或 Tools → Regenerate T-Cells
画进已有 cell 内容翻倍draw 是追加式——重新生成请用 clear_cell 或新 cell
两个 L-Edit 同时开桥当前单命名空间,只保留一个装宏的实例
层的 GDS 号是 -1导出 GDS 会错——桥建层会盖号;写回代码请沿用模板的 need_layer 范式

范围说明:参数化的智能(拟合、移植、验证)在 klink/KLayout 侧完成,L-Edit 收到的是原生结果(静态 cell 或真 T-Cell)。桥不是 L-Edit 插件,是随 klink 发行的外部适配层。