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

文摘   其他   2023-12-13 15:43   江苏  

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 eentry .f1.e1 -bg whitelabel .f1.l2 -text "Cell: " -width 15 -anchor eentry .f1.e2 -bg whitelabel .f1.l3 -text "View: " -width 15 -anchor eentry .f1.e3 -bg white
button .f1.b -text "Open Design" -command openDesigngrid columnconfigure .f1 1 -weight 1grid rowconfigure .f1 10 -weightgrid .f1.l1 .f1.e1 -sticky EW -padx 3 -pady 3grid .f1.l2 .f1.e2 -sticky EW -padx 3 -pady 3grid .f1.l3 .f1.e3 -sticky EW -padx 3 -pady 3grid x .f1.b -sticky EW -padx 3 -pady 3# Zoomframe .f2 -relief groove -bd 2label .f2.l1 -text "Top Left: " -width 15 -anchor eentry .f2.e1 -bg whitelabel .f2.l2 -text "Bottom Right: " -width 15 -anchor eentry .f2.e2 -bg whitebutton .f2.b -text "Zoom" -command zoomgrid columnconfigure .f2 1 -weight 1grid rowconfigure .f2 10 -weight 1grid .f2.l1 .f2.e1 -sticky EW -padx 3 -pady 3grid .f2.l2 .f2.e2 -sticky EW -padx 3 -pady 3grid x .f2.b -sticky EW -padx 3 -pady 3# Probe a netframe .f3 -relief groove -bd 2label .f3.l -text "Net Name:" -width 15 -anchor eentry .f3.e -bg whitebutton .f3.b -text "Probe" -command probeNetgrid columnconfigure .f3 1 -weight 1grid rowconfigure .f3 10 -weight 1grid .f3.l .f3.e -sticky EW -padx 3 -pady 3grid x .f3.b -sticky EW -padx 3 -pady 3# Probe an instanceframe .f4 -relief groove -bd 2label .f4.l -text "Instance Name:" -width 15 -anchor eentry .f4.e -bg whitebutton .f4.b -text "Probe" -command probeInstgrid columnconfigure .f4 1 -weight 1grid rowconfigure .f4 10 -weight 1grid .f4.l .f4.e -sticky EW -padx 3 -pady 3grid x .f4.b -sticky EW -padx 3 -pady 3
# Highlight and clear violationsframe .f5 -relief groove -bd 2label .f5.l1 -text "Point 1: " -width 15 -anchor eentry .f5.e1 -bg whitelabel .f5.l2 -text "Point 2: " -width 15 -anchor eentry .f5.e2 -bg whitelabel .f5.l3 -text "Point 3: " -width 15 -anchor eentry .f5.e3 -bg whitelabel .f5.l4 -text "Point 4: " -width 15 -anchor eentry .f5.e4 -bg white
button .f5.b1 -text "Highlight violation" -command highlightViolationbutton .f5.b2 -text "Clear violations" -command clearViolations
grid columnconfigure .f5 1 -weight 1grid rowconfigure .f5 10 -weight 1grid .f5.l1 .f5.e1 -sticky EW -padx 3 -pady 3grid .f5.l2 .f5.e2 -sticky EW -padx 3 -pady 3grid .f5.l3 .f5.e3 -sticky EW -padx 3 -pady 3grid .f5.l4 .f5.e4 -sticky EW -padx 3 -pady 3grid x .f5.b1 -sticky EW -padx 3 -pady 3grid x .f5.b2 -sticky EW -padx 3 -pady 3
# Create Rectangle
frame .f6 -relief groove -bd 2label .f6.l1 -text "Top Left: " -width 15 -anchor eentry .f6.e1 -bg whitelabel .f6.l2 -text "Bottom Right: " -width 15 -anchor eentry .f6.e2 -bg whitebutton .f6.b -text "Create Rectangle" -command createRectangle
grid columnconfigure .f6 1 -weight 1grid rowconfigure .f6 10 -weight 1grid .f6.l1 .f6.e1 -sticky EW -padx 3 -pady 3grid .f6.l2 .f6.e2 -sticky EW -padx 3 -pady 3grid x .f6.b -sticky EW -padx 3 -pady 3
# Color labellabel .l -text "Color"
frame .f7label .f7.l1 -text "Status:"pack .f7.l1 -side left -ipadx 3 -ipady 3 -padx 3 -pady 3label .f7.l2 -text "Not connected" -relief sunken -bg pinkpack .f7.l2 -side left -expand yes -fill x -ipadx 3 -ipady 3 -padx 3 -pady 3button .f7.b -text "Connect" -command walkupToCustomDesignerpack .f7.b -side left -ipadx 3 -ipady 3 -padx 3 -pady 3# Arrange the frames in the windowgrid columnconfigure . 0 -weight 1grid columnconfigure . 1 -weight 1grid rowconfigure . 0 -weight 1grid rowconfigure . 1 -weight 1grid rowconfigure . 2 -weight 1grid rowconfigure . 3 -weight 1grid .f1 .f2 -sticky NEWS -ipadx 3 -ipady 3 -padx 3 -pady 3grid .f3 .f4 -sticky NEWS -ipadx 3 -ipady 3 -padx 3 -pady 3grid .f5 .f6 -sticky NEWS -ipadx 3 -ipady 3 -padx 3 -pady 3grid .l -sticky NEWS -columnspan 2grid .f7 -sticky NEWS -columnspan 2
# Set the minsize of the windowupdatewm minsize . [winfo width .] [winfo height .]


IC模拟版图设计
IC 设计后端知识分享 EDA使用心得 Linux 环境 脚本分享 Perc开发 Custom compiler