外部程序如何与CC 通信或如何集成第三方工具

IC 设计中很多情况都需要多家工具协助来完成设计。不切换设计平台的情况下怎么来集成需要的tool。目前常见的工具厂商都有提供这类集成的脚本与环境配置方案。自己开发的UI如何能与tool进行通信。下面用个实例介绍如何与CC进行通信。

开始前介绍几个专业名称解释:

IPC: (进程间通信)是两个程序之间的数据交换。 交换可以在同一台机器上运行的程序之间完成,也可以在网络上不同机器上运行的程序之间完成。

RPC: (远程过程调用)是一种编程接口,允许一个程序通过IPC 向另一个程序请求服务。 调用程序向另一个程序发送消息和数据,执行请求,并将结果返回给调用者。

Tcl/tk: 是一种免费提供的解释性脚本语言, tk是 Tcl 的免费扩展,提供创建图形用户界面的命令。

Wish: 支持Tk 命令的命令行Tcl 解释器。 图形应用程序可以通过编写Tcl/Tk脚本并通过wish解释器执行来创建。之前的文章P2P功能就是使用wish来启动tcl/tk编写的GUI脚本功能。

Tcl-Dp:是Tcl/Tk 的免费扩展,允许Tcl 解释器之间基于socket的远程过程调用。 Tcl-Dp 网站是http://tcldp.sourceforge.net。

下图是使用synopsys.ai  得到的实现步骤

图片

下图是如何在环境和外部应用程序之间形成IPC 通道的示意视图

图片

下面拿实例来解释如何实现:

1.下面这块主要功能是查找进程文件寻找正在运行的cc,根据文件中的端口和主机信息创建链接。用global变量标识连接状态。

图片

2.这部分是把tcl-dp加载到解释器中,也是最重要的一部分,下面一段就是加载cc安装包下的tcl-dp.

图片

下面这段是一个从GUI抓取对应输入坐标值并发送到CC 用Nwell 这层创建rect的的子程序示意.其他操作功能相似。

图片

Demo 是使用tcl/tk开发的GUI,通过wish 从shell 中启动。通过GUI来下对应的command发送给custom compiler来实现具体对应的操作。来模拟从第三方工具或运行程序中来与cc做交互。

图片

图片

使用Tk 快速开发UI是比较方便的。

下面是主要TK的GUI部分代码:


frame .f1 -relief groove -bd 1

label .f1.l1 -text "Lib: " -width 15 -anchor e
entry .f1.e1 -bg white
label .f1.l2 -text "Cell: " -width 15 -anchor e
entry .f1.e2 -bg white
label .f1.l3 -text "View: " -width 15 -anchor e
entry .f1.e3 -bg white

button .f1.b -text "Open Design" -command openDesign
grid columnconfigure .f1 1 -weight 1
grid rowconfigure .f1 10 -weight
grid .f1.l1 .f1.e1 -sticky EW -padx 3 -pady 3
grid .f1.l2 .f1.e2 -sticky EW -padx 3 -pady 3
grid .f1.l3 .f1.e3 -sticky EW -padx 3 -pady 3
grid x .f1.b -sticky EW -padx 3 -pady 3
# Zoom
frame .f2 -relief groove -bd 2
label .f2.l1 -text "Top Left: " -width 15 -anchor e
entry .f2.e1 -bg white
label .f2.l2 -text "Bottom Right: " -width 15 -anchor e
entry .f2.e2 -bg white
button .f2.b -text "Zoom" -command zoom
grid columnconfigure .f2 1 -weight 1
grid rowconfigure .f2 10 -weight 1
grid .f2.l1 .f2.e1 -sticky EW -padx 3 -pady 3
grid .f2.l2 .f2.e2 -sticky EW -padx 3 -pady 3
grid x .f2.b -sticky EW -padx 3 -pady 3
# Probe a net
frame .f3 -relief groove -bd 2
label .f3.l -text "Net Name:" -width 15 -anchor e
entry .f3.e -bg white
button .f3.b -text "Probe" -command probeNet
grid columnconfigure .f3 1 -weight 1
grid rowconfigure .f3 10 -weight 1
grid .f3.l .f3.e -sticky EW -padx 3 -pady 3
grid x .f3.b -sticky EW -padx 3 -pady 3
# Probe an instance
frame .f4 -relief groove -bd 2
label .f4.l -text "Instance Name:" -width 15 -anchor e
entry .f4.e -bg white
button .f4.b -text "Probe" -command probeInst
grid columnconfigure .f4 1 -weight 1
grid rowconfigure .f4 10 -weight 1
grid .f4.l .f4.e -sticky EW -padx 3 -pady 3
grid x .f4.b -sticky EW -padx 3 -pady 3

# Highlight and clear violations
frame .f5 -relief groove -bd 2
label .f5.l1 -text "Point 1: " -width 15 -anchor e
entry .f5.e1 -bg white
label .f5.l2 -text "Point 2: " -width 15 -anchor e
entry .f5.e2 -bg white
label .f5.l3 -text "Point 3: " -width 15 -anchor e
entry .f5.e3 -bg white
label .f5.l4 -text "Point 4: " -width 15 -anchor e
entry .f5.e4 -bg white

button .f5.b1 -text "Highlight violation" -command highlightViolation
button .f5.b2 -text "Clear violations" -command clearViolations

grid columnconfigure .f5 1 -weight 1
grid rowconfigure .f5 10 -weight 1
grid .f5.l1 .f5.e1 -sticky EW -padx 3 -pady 3
grid .f5.l2 .f5.e2 -sticky EW -padx 3 -pady 3
grid .f5.l3 .f5.e3 -sticky EW -padx 3 -pady 3
grid .f5.l4 .f5.e4 -sticky EW -padx 3 -pady 3
grid x .f5.b1 -sticky EW -padx 3 -pady 3
grid x .f5.b2 -sticky EW -padx 3 -pady 3

# Create Rectangle

frame .f6 -relief groove -bd 2
label .f6.l1 -text "Top Left: " -width 15 -anchor e
entry .f6.e1 -bg white
label .f6.l2 -text "Bottom Right: " -width 15 -anchor e
entry .f6.e2 -bg white
button .f6.b -text "Create Rectangle" -command createRectangle

grid columnconfigure .f6 1 -weight 1
grid rowconfigure .f6 10 -weight 1
grid .f6.l1 .f6.e1 -sticky EW -padx 3 -pady 3
grid .f6.l2 .f6.e2 -sticky EW -padx 3 -pady 3
grid x .f6.b -sticky EW -padx 3 -pady 3

# Color label
label .l -text "Color"

frame .f7
label .f7.l1 -text "Status:"
pack .f7.l1 -side left -ipadx 3 -ipady 3 -padx 3 -pady 3
label .f7.l2 -text "Not connected" -relief sunken -bg pink
pack .f7.l2 -side left -expand yes -fill x -ipadx 3 -ipady 3 -padx 3 -pady 3
button .f7.b -text "Connect" -command walkupToCustomDesigner
pack .f7.b -side left -ipadx 3 -ipady 3 -padx 3 -pady 3
# Arrange the frames in the window
grid columnconfigure . 0 -weight 1
grid columnconfigure . 1 -weight 1
grid rowconfigure . 0 -weight 1
grid rowconfigure . 1 -weight 1
grid rowconfigure . 2 -weight 1
grid rowconfigure . 3 -weight 1
grid .f1 .f2 -sticky NEWS -ipadx 3 -ipady 3 -padx 3 -pady 3
grid .f3 .f4 -sticky NEWS -ipadx 3 -ipady 3 -padx 3 -pady 3
grid .f5 .f6 -sticky NEWS -ipadx 3 -ipady 3 -padx 3 -pady 3
grid .l -sticky NEWS -columnspan 2
grid .f7 -sticky NEWS -columnspan 2

# Set the minsize of the window
update
wm minsize . [winfo width .] [winfo height .]

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值