装载:一个文件,零编译
pip install klayout-klink 后 klink 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-Cell | get_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 发行的外部适配层。