2 个版本 (1 个不稳定版本)
3.0.0-pre.2 | 2023 年 1 月 11 日 |
---|---|
0.2.0 | 2021 年 10 月 12 日 |
在 Rust 模式 中排名 1143
在 3 个 仓库中使用
135KB
2.5K SLoC
Lef21
Lef21 库交换格式 (LEF) 解析器和编写器
库交换格式 (LEF) 是一种基于 ASCII 的集成电路 (IC) 布局和技术格式。
LEF 在整个 IC 行业内被广泛用于两个相关目的
- LEF 设计库,主要由 LEF 宏 组成,提供了电路设计的 物理抽象 视图。
- 这种抽象视图通常是布局综合程序 ("布局和布线") 的目标。
- 它们包括电路的引脚位置和物理阻塞 ("障碍") 的要求等元数据,通常不包括电路的内部实现。
- LEF 技术描述 ("tech-lef") 提供了组装此类单元的设计规则的简洁描述,这是布局综合软件通常执行的操作。
Lef21 包括对解析和写入 LEF 设计库 的全面支持,这些库主要存储为其 LefLibrary
和 LefMacro
类型。还支持 tech-lef 的一些选定功能,尤其是那些模糊技术和库数据之间界限的功能。
使用方法
仅通过调用 LefLibrary::open
方法即可从文件创建 LefLibrary
use lef21::LefLibrary;
let lib = LefLibrary::open("mylib.lef")?;
每个 LefLibrary
都是一棵宏定义的短树,而这些宏定义主要是由引脚定义和障碍物组成。这个 LefLibrary
树的形式是
LefLibrary
- 库元数据
- 宏定义,存储为 Vec<
LefMacro
>- 宏元数据
- 障碍物/障碍物,存储为 Vec<
LefLayerGeometries
> - 引脚定义,存储为 Vec<
LefPin
>- 引脚元数据
- 端口定义,存储为 Vec<
LefPort
>
LefLibrary
树中所有层的所有字段都是公开可访问和可修改的。
Lef21 库可以通过其 LefLibrary::save
方法保存到文件
lib.save("yourlib.lef")?;
或者通过 LefLibrary::to_string
方法转换为内存中的 LEF 格式 [String]
let s = lib.to_string()?;
println!({}, s);
序列化
LefLibrary
、所有底层数据结构和所有 Lef21 的其他主要数据存储都是 serde
可序列化的,并且可以简单地转换为任何 serde 兼容的格式。示例
let lib = lef21::LefLibrary::new();
let json = serde_json::to_string(&lib);
let yaml = serde_yaml::to_string(&lib);
let toml = toml::to_string(&lib);
Lef21 通过其 SerializationFormat
枚举支持一组 serde 格式,并通过其伴随的 SerdeFile
特性直接读取和写入每种格式的文件。使用 SerializationFormat::Yaml
的示例
use lef21::SerializationFormat::Yaml;
let lib = lef21::LefLibrary::new();
// Write to YAML-format file
Yaml.save(&lib, "mylib.lef.yaml")?;
// And read back from file
let lib2: lef21::LefLibrary = Yaml.open("mylib.lef.yaml")?;
背景
Lef21 是更大的 Layout21 库的一个子集,主要用于导入和导出层。Lef21 相应地使用了 LEF 格式的概念、惯用术语(例如,“宏”与“单元”),并且其 LEF 数据结构设计用于直接操作,例如在程序中修改现有的 LEF 内容。
LEF 通常与基于 ASCII 的 DEF 格式一起使用,以指定电路的内部物理实现。更常见的行业用法是将 LEF 与 GDSII 的二进制实现格式配对,这大大减少了大型电路的数据大小。Lef21 不支持 DEF。GDSII 由相关的 gds21 包支持。
许可证
Lef21 和 Layout21 在宽松的 BSD 许可证下发布。
LEF 格式最初由 Tangent Systems 设计,后来被 Cadence Design Systems 收购。Lef21 与这两家公司都没有任何关系,也不拥有该格式的任何权限或所有权。无数的 LEF 格式设计描述作为开源软件 免费提供。它们的示例是 Lef21 的基础。
依赖关系
~5MB
~95K SLoC