news 2026/4/18 10:07:16

EDA 中的 DRC检测——并查集优化mincut规则检测

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
EDA 中的 DRC检测——并查集优化mincut规则检测

背景

随着集成电路工艺的提升,电路导线尺寸越来越小,但是在电路中存在一类导线的线宽相比普通导线会更宽。这类较宽的导线对于上下层连接的通孔数也有更高的要求,甚至对于与这类宽导线连接的细导线,在细导线上连接上下层的通孔数也有更高的要求,这就是芯片制作过程中要求检查的最小通孔数设计规则。

为了实现对于这一规则的快速检测,可以通过使用并查集预处理的方式,提前标记通孔数量,快速判断这一类 drc。

步骤分析

使用并查集处理的步骤包括:

获取电路设计中的通孔数据,并为每个通孔创建独立的并查集标识符;

加载至少一条最小通孔数设计规则,在所述设计规则定义有通孔分组条件及最小通孔数量(即规则中要求的不同通孔之间的距离约束和数量约束);

针对每一条设计规则,基于所述通孔分组条件对所有通孔进行并查集合并,得到与所述设计规则对应的并查集集合,并记录所述并查集集合内的实际通孔数量;

遍历金属层导线,根据当前设计规则下的宽度要求判断待检测导线的类型;

根据待检测导线的类型获取与所述待检测导线连接的目标通孔,并查询所述目标通孔针对所述当前设计规则所归属的并查集集合以及该并查集集合内的实际通孔数量;

比较所述实际通孔数量与所述当前设计规则要求的最小通孔数量,若所述实际通孔数量小于所述最小通孔数量,则为所述目标通孔创建违规标志。

整个过程中主要步骤就是第3步,基于检测规则,将不同通孔用并查集进行合并和记录集合内通孔数量。在需要检查规则时,可以直接查找数量,不用再做其他操作。

同时也需要注意一些细节,比如如果存在多条规则,每个通孔对于每条规则都应该存在一个并查集 id 用于记录不同规则的合并情况;再比如,其实通孔的并查集 id 也可以被简化掉,直接记录规则和对应的集合内通孔数量;甚至并查集处理后完全可以判断出是否可能违反规则,那么使用这些通孔的导线也不需要对于此规则进行是否需要检测规则的判断。

另外,其实并查集处理完全可以放在读入数据后,作为通孔的基本属性处理,基本把检查过程简化为了最基础的数值比较,对内存和时间的开销都很小。

代码分析

预处理

UtilzDisjointSet<UInt> dSet;

// 使用并查集初始化

for (citer1.first(cut_list); !citer1.last(cut); citer1++) {

for (citer2.first(cut_list); !citer2.last(rd_cut); citer2++) {

i++;

dSet.makeSet(i);

if (cut->box()->equal(rd_cut->box())) {

cut_idx = i;

}

}

}

并查集合并和统计

// 合并通孔

i = 0;

for (citer.first(cut_list); !citer.last(rd_cut); citer++) {

i++;

ibox.set(rd_cut->box());

ibox.oversize(cut_spc, cut_spc);

j = 0;

for (citer2.first(cut_list); !citer2.last(rd_cut2); citer2++) {

j++;

if (rd_cut2->box()->equal(rd_cut->box())) { continue; }

if (!ibox.isNonTouch(rd_cut2->box())) { // touch

int fi = dSet.find(i);

int fj = dSet.find(j);

if (fi != fj) dSet.unionFunc(i, j);

}

}

}

// count cuts number

int find_cut_id = 0;

if (cut_list->getObjCount()) {

find_cut_id = dSet.find(cut_idx);

}

cuts_number = 0;

i = 0;

for (citer.first(cut_list); !citer.last(rd_cut); citer++) {

i++;

int fi = dSet.find(i);

if (find_cut_id == fi) cuts_number++;

}

并查集实现

template <typename T>

class UtilzDisjointSet {

public:

typedef int Id;

void makeSet(const T& item) {

Id id = sets_.getNumElements();

Set s(id);

sets_.append(s);

map_.insert(item, id);

}

Id find(const T& item) {

Id id = map_.getValue(item);

return find_1(id);

}

void unionFunc(const T& a, const T& b) {

union_1(find(a), find(b));

}

private:

void union_1(Id a, Id b);

Id find_1(Id id) {

Set& s = sets_[id];

if (s.parent_ == id) {

return id;

}

s.parent_ = find_1(s.parent_);

return s.parent_;

}

struct Set {

int parent_;

int rank_;

Set(Id id) {

parent_ = id;

rank_ = 0;

}

};

UtilzArray<Set> sets_;

UtilzMap<T, Id> map_;

};

template <typename T>

void UtilzDisjointSet<T>::union_1(Id x, Id y) {

Id xId = find_1(x);

Id yId = find_1(y);

if (xId == yId) {

return; // 已合并

}

Set& xSet = sets_[xId];

Set& ySet = sets_[yId];

if (xSet.rank_ < ySet.rank_) {

xSet.parent_ = yId;

} else if (xSet.rank_ > ySet.rank_) {

ySet.parent_ = xId;

} else { // 秩相等,加一

ySet.parent_ = xId;

xSet.rank_++;

}

}

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 10:05:34

LinearDesign实战指南:3步掌握mRNA序列优化核心技术

LinearDesign实战指南&#xff1a;3步掌握mRNA序列优化核心技术 【免费下载链接】LinearDesign The LinearDesign mRNA design software. 项目地址: https://gitcode.com/gh_mirrors/li/LinearDesign LinearDesign作为百度研究院开发的创新mRNA设计软件&#xff0c;专为…

作者头像 李华
网站建设 2026/4/15 9:49:54

大语言模型内存优化实战:从瓶颈到突破

大语言模型内存优化实战&#xff1a;从瓶颈到突破 【免费下载链接】lmdeploy LMDeploy is a toolkit for compressing, deploying, and serving LLMs. 项目地址: https://gitcode.com/gh_mirrors/lm/lmdeploy 你是否曾在部署大语言模型时遭遇内存瓶颈&#xff1f;当并发…

作者头像 李华
网站建设 2026/4/18 9:45:11

Windows Server 2025 virtio-win驱动兼容性终极指南

Windows Server 2025 virtio-win驱动兼容性终极指南 【免费下载链接】kvm-guest-drivers-windows Windows paravirtualized drivers for QEMU\KVM 项目地址: https://gitcode.com/gh_mirrors/kv/kvm-guest-drivers-windows 随着微软发布Windows Server 2025预览版&#…

作者头像 李华
网站建设 2026/4/18 8:20:56

cube-studio可视化pipeline编排:让AI工作流开发变得如此简单

cube-studio可视化pipeline编排&#xff1a;让AI工作流开发变得如此简单 【免费下载链接】cube-studio cube studio开源云原生一站式机器学习/深度学习AI平台&#xff0c;支持sso登录&#xff0c;多租户/多项目组&#xff0c;数据资产对接&#xff0c;notebook在线开发&#xf…

作者头像 李华
网站建设 2026/4/16 13:38:42

基于VUE的企业人力资源平台[VUE]-计算机毕业设计源码+LW文档

摘要&#xff1a;随着企业规模的不断扩大和市场竞争的日益激烈&#xff0c;高效的人力资源管理成为企业发展的关键因素。本文提出并实现了一个基于VUE框架的企业人力资源平台&#xff0c;详细阐述了平台的需求分析、技术选型、架构设计、功能模块设计以及具体实现过程。该平台涵…

作者头像 李华
网站建设 2026/4/18 6:44:45

瓷砖行业资讯网入口:一键获取行业动态、市场数据与趋势分析

瓷砖行业资讯网入口&#xff1a;一键获取行业动态、市场数据与趋势分析引言在当今快速发展的建筑和装饰行业中&#xff0c;瓷砖作为重要的材料之一&#xff0c;其市场动态和趋势分析显得尤为重要。为了帮助业内人士更好地把握市场脉搏&#xff0c;瓷联网作为一个专业的瓷砖行业…

作者头像 李华