3 个版本
0.0.5 | 2024 年 6 月 7 日 |
---|---|
0.0.4 | 2024 年 6 月 4 日 |
0.0.3 | 2021 年 12 月 10 日 |
#1172 在 解析器实现 中
118 每月下载次数
在 libreda-sta 中使用
70KB
1K SLoC
为 LibrEDA 提供的 Verilog 网表 I/O
此 crate 实现了 LibrEDA 框架用于 Yosys 所使用的 Verilog 网表格式的 NetlistReader
和 NetlistWriter
。
仅支持 Verilog 的一部分,即 '结构化' 或 '网表' Verilog。它仅由模块、模块实例化和端口连接组成。
lib.rs
:
此 crate 为网表到 Yosys 所使用的 Verilog 格式的序列化和反序列化提供支持。读者和编写者实现了 LibrEDA 数据库的 NetlistReader
和 NetlistWriter
特性。
示例
读取网表
典型的网表使用来自库的标准单元,因此标准单元的定义不包含在网表本身中,而是在另一个文件中。
在此示例中,首先读取库网表,以便加载所有标准单元定义。然后加载包含实际电路的网表。
use std::fs::File;
use libreda_db::prelude::*;
use libreda_structural_verilog::StructuralVerilogReader;
// Locations of the library and the netlist.
let library_path = "./tests/test_data/standard_cells.v";
let file_path = "./tests/test_data/my_chip_45_nl.v";
let mut f_library = File::open(library_path).unwrap();
let mut f_netlist = File::open(file_path).unwrap();
// Create an empty netlist that will be populated from files.
let mut netlist = Chip::new();
// Create a reader that reads only cell definitions but does not care about
// the internals of the cell.
let library_reader = StructuralVerilogReader::new()
.load_blackboxes(true);
// Read the library.
library_reader.read_into_netlist(&mut f_library, &mut netlist).expect("Error while reading library.");
// Read the netlist with a default reader (does not load black-boxes but populates the cells with content).
let reader = StructuralVerilogReader::new();
reader.read_into_netlist(&mut f_netlist, &mut netlist).expect("Error while reading netlist.");
依赖关系
~8–12MB
~202K SLoC