烽火戏诸侯的个人空间 https://blog.eetop.cn/1769267 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

BOX

已有 276 次阅读| 2025-4-1 22:26 |系统分类:芯片设计

procedure(autoFillLVSBox()
    let((lvsForm ruleCheckbox inputField)
        ; 获取当前LVS验证窗口
        lvsForm = hiGetCurrentForm()
        unless(lvsForm && lvsForm->name == "lvsForm" 
            error("请先打开LVS验证窗口")
        )

        ; 定位include规则复选框(可能需要根据实际控件名称调整)
        ruleCheckbox = hiFindWidget(lvsForm "includeRuleStatements")
        when(ruleCheckbox
            hiFormButtonSelect(ruleCheckbox t)  ; 勾选复选框
        )

        ; 定位输入框并填写内容(可能需要调整控件标识)
        inputField = hiFindWidget(lvsForm "ruleIncludeField")
        when(inputField
            hiSetTextEntryValue(inputField "LVS BOX 1")
        )

        printf("LVS选项设置完成\n")
    )
)



点赞

全部作者的其他最新日志

发表评论 评论 (3 个评论)

回复 烽火戏诸侯 2025-4-2 12:05
在 Virtuoso 617 中,SKILL API 的函数名称和使用方式可能与新版本有所不同。以下是调整后的脚本及分步说明:

```skill
procedure(autoFillLVSBox()
    let((lvsForm ruleCheckbox inputField)
        ; 获取当前窗口 - 可能需要根据窗口标题或类型获取
        lvsForm = car(axlWindowGetAllOpen('LVS)) ; 假设窗口标题包含"LVS"
        unless(lvsForm
            error("请先打开LVS验证窗口")
        )

        ; 定位include规则复选框 - 需要实际控件名称
        ruleCheckbox = axlFormGetField(lvsForm "Include Rules")
        when(ruleCheckbox
            axlFormSetField(ruleCheckbox t)  ; 勾选复选框
        )

        ; 定位输入框 - 需要实际控件名称
        inputField = axlFormGetField(lvsForm "Rule File")
        when(inputField
            axlFormSetFieldValue(inputField "LVS BOX 1")
        )

        printf("LVS选项设置完成\n")
    )
)
```

**分步说明:**

1. **获取LVS窗口对象:**
   - 使用 `axlWindowGetAllOpen` 获取所有打开的LVS窗口
   - 通过窗口标题过滤(可能需要调整匹配字符串)
   - 如果获取失败提示错误

2. **操作复选框:**
   - 使用 `axlFormGetField` 通过控件标签获取复选框对象
   - 使用 `axlFormSetField` 设置选中状态(t 表示选中)

3. **填写输入框:**
   - 使用 `axlFormGetField` 通过控件标签获取输入框对象
   - 使用 `axlFormSetFieldValue` 设置输入框的值

4. **调试提示:**
   ```skill
   ; 打印所有字段名称用于调试
   axlFormDumpFields(lvsForm)
   ```

**注意事项:**

1. 必须通过CIW窗口菜单启动LVS验证,确保窗口对象存在
2. 实际控件名称需要通过以下方式获取:
   - 在LVS窗口打开时执行 `axlFormDumpFields(lvsForm)`
   - 在CIW窗口查看所有字段名称
3. 可能需要根据实际控件类型调整设置方法:
   - 对于按钮使用 `axlFormButtonPress`
   - 对于单选按钮使用 `axlFormSetFieldRadio`

**扩展建议:**
```skill
; 通用表单操作函数示例
procedure(setFormField(form field value)
    let((widget)
        widget = axlFormGetField(form field)
        when(widget
            case(widget->type
                ("CheckBox" axlFormSetField(widget value))
                ("TextEdit" axlFormSetFieldValue(widget value))
                (t printf("Unsupported widget type: %s\n" widget->type))
            )
        )
    )
)

; 使用示例
setFormField(lvsForm "Include Rules" t)
setFormField(lvsForm "Rule File" "LVS BOX 1")
```

建议通过以下步骤验证:
1. 手动打开LVS窗口
2. 在CIW窗口逐步执行代码片段
3. 使用 `axlFormDumpFields` 查看实际字段结构
4. 根据实际输出调整控件名称和操作方式
回复 烽火戏诸侯 2025-4-2 12:56
以下是对调整后的 SKILL 脚本中 **每个关键函数** 的详细解释,适用于 Virtuoso 617 版本:

---

### **1. 获取 LVS 窗口对象**
```skill
lvsForm = car(axlWindowGetAllOpen('LVS))
```
- **函数作用**:
  - `axlWindowGetAllOpen()`:获取当前所有打开的窗口对象列表。
  - `'LVS`:过滤参数,匹配窗口标题中包含 "LVS" 的窗口(需根据实际窗口标题调整)。
  - `car()`:取列表中的第一个元素,假设用户只打开了一个 LVS 窗口。
- **返回值**:
  - 返回 LVS 验证窗口的表单对象 (`lvsForm`)。
- **注意事项**:
  - 如果打开多个 LVS 窗口,可能需要遍历列表选择正确的窗口。
  - 窗口标题匹配规则可能需要调整(如使用正则表达式)。

---

### **2. 勾选复选框**
```skill
ruleCheckbox = axlFormGetField(lvsForm "Include Rules")
axlFormSetField(ruleCheckbox t)
```
- **函数作用**:
  - `axlFormGetField(form fieldLabel)`:通过控件的显示名称(如 "Include Rules")获取表单内指定控件的对象。
  - `axlFormSetField(widget value)`:设置控件的值,`t` 表示勾选复选框。
- **关键点**:
  - 控件名称需与 LVS 窗口中显示的标签完全一致(区分大小写)。
  - 如果控件是复选框,`t` 表示选中,`nil` 表示取消选中。

---

### **3. 填写输入框**
```skill
inputField = axlFormGetField(lvsForm "Rule File")
axlFormSetFieldValue(inputField "LVS BOX 1")
```
- **函数作用**:
  - `axlFormGetField()`:同上,获取输入框控件对象。
  - `axlFormSetFieldValue(widget value)`:设置输入框的文本内容(如填写路径或规则名称)。
- **注意事项**:
  - 输入框类型可能是 `TextEdit` 或 `TextField`,需确保使用正确的设置函数。

---

### **4. 调试函数**
```skill
axlFormDumpFields(lvsForm)
```
- **函数作用**:
  - 打印表单 (`lvsForm`) 中所有控件的详细信息,包括:
    - 控件名称 (`fieldName`)
    - 显示标签 (`label`)
    - 控件类型 (`type`,如 `CheckBox`、`TextEdit`)
    - 当前值 (`value`)
- **使用场景**:
  - 当不确定控件名称时,在 CIW 窗口执行此函数,查看所有可用字段信息。
  - 示例输出:
    ```
    Field Name: ruleInclude  Label: "Include Rules"  Type: CheckBox  Value: nil
    Field Name: ruleFile    Label: "Rule File"      Type: TextEdit  Value: ""
    ```

---

### **5. 通用表单操作函数(扩展建议)**
```skill
procedure(setFormField(form field value)
  let((widget)
    widget = axlFormGetField(form field)
    when(widget
      case(widget->type
        ("CheckBox" axlFormSetField(widget value))
        ("TextEdit" axlFormSetFieldValue(widget value))
        (t printf("Unsupported type: %s\n" widget->type))
      )
    )
  )
)
```
- **函数作用**:
  - 封装对不同类型控件的统一操作。
  - 根据控件类型 (`widget->type`) 自动选择设置方法:
    - 复选框 (`CheckBox`) → `axlFormSetField`
    - 输入框 (`TextEdit`) → `axlFormSetFieldValue`
- **使用示例**:
  ```skill
  setFormField(lvsForm "Include Rules" t)      ; 勾选复选框
  setFormField(lvsForm "Rule File" "LVS BOX 1") ; 填写输入框
  ```

---

### **常见问题排查**
1. **控件无法找到**:
   - 使用 `axlFormDumpFields` 确认控件名称。
   - 检查窗口标题过滤条件是否准确。
2. **操作未生效**:
   - 确保控件类型匹配(如复选框用 `axlFormSetField`,输入框用 `axlFormSetFieldValue`)。
   - 部分控件可能需要先执行 `axlFormDisplay` 刷新表单状态。
3. **窗口对象获取失败**:
   - 确保 LVS 窗口是通过 CIW 菜单打开的,而非脚本创建的临时窗口。

通过以上函数组合,可以实现对 Virtuoso LVS 表单的自动化操作。实际使用时需根据 `axlFormDumpFields` 的输出调整控件名称和操作逻辑。
回复 烽火戏诸侯 2025-4-2 13:03
在 Cadence Virtuoso 的 SKILL 语言中,`mgc()` 函数的具体用途和参数通常需要结合上下文或文档确认,因为它可能是自定义函数或特定工艺设计工具包(PDK)的一部分。以下是查找其用法和参数的步骤:

---

### 1. **确认函数名称和来源**
   - **检查拼写**:确保函数名正确(如 `mgc()`、`mcg()` 或其他变体)。
   - **确认来源**:是否是 PDK 提供的函数、公司内部库,还是自定义脚本中的函数?

---

### 2. **使用内置帮助工具**
   - 在 Virtuoso 的 **CIW(Command Interpreter Window)** 输入:
     ```tcl
     help mgc
     ```
     或使用 SKILL 函数查看帮助(如果文档已集成)。

---

### 3. **通过 SKILL 函数自省**
   - **查看参数数量和名称**:
     ```tcl
     args(mgc)        ; 返回参数数量
     mgc~>parameters  ; 尝试获取参数名(需函数未加密)
     ```
   - **检查函数类型**:
     ```tcl
     mgc~>type        ; 返回函数类型(如“subr”表示内置函数)
     ```

---

### 4. **查找文档或示例**
   - **PDK 文档**:检查 PDK 的用户指南或函数手册。
   - **代码示例**:在现有脚本或库中搜索 `mgc(`,观察其调用方式。
   - **联系支持**:向 PDK 供应商或内部团队咨询。

---

### 5. **常见参数猜测(仅供参考)**
   - 如果是版图相关函数,参数可能类似:
     ```tcl
     mgc(layer width height)  ; 例如:层名、宽度、高度
     ```
   - 如果是仿真或模型函数,参数可能是模型名、变量、配置选项。

---

### 6. **调试与测试**
   - **打印返回值**:尝试调用函数并观察输出或生成的图形。
     ```tcl
     mgc(arg1 arg2 arg3)  ; 替换为实际参数测试
     ```
   - **逐步调试**:使用 `trace` 或 `printf` 跟踪函数行为。

---

### 总结
如果无法通过上述方法找到信息,建议:
1. 在调用 `mgc()` 的脚本中查找上下文。
2. 向 PDK 或 IT 部门提交支持请求。
3. 如果是加密函数,可能需要直接联系开发者获取文档。

希望这些方法能帮助您定位到 `mgc()` 的具体用法!

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 7

    周排名
  • 0

    月排名
  • 0

    总排名
  • 3

    关注
  • 0

    粉丝
  • 3

    好友
  • 0

    获赞
  • 4

    评论
  • 7

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-4-8 04:34 , Processed in 0.014608 second(s), 9 queries , Gzip On, MemCached On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部