# OpenTPG
**Repository Path**: openeda/OpenTPG
## Basic Information
- **Project Name**: OpenTPG
- **Description**: OpenTPG:构建具有竞争力的、开源的 TPG 工具链和软件生态
- **Primary Language**: C++
- **License**: MulanPSL-2.0
- **Default Branch**: race-icisc-2021
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 20
- **Forks**: 15
- **Created**: 2020-06-14
- **Last Updated**: 2024-09-09
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 目录
[概述](#summary)
- [竞赛](#summary-race)
- [参与贡献](#summary-join)
[安装说明](#install)
- [基本要求](#install-required)
- [构建](#install-build)
[快速入门](#quickstart)
[系统接口](#system-interface)
- [约定](#convention)
- [命令行接口](#command-line-interface)
# 概述
OpenTPG 项目的目标是构建开源的 TPG 工具集。 opentpg 为本项目首个工具,其主要功能就是生成 cube,是完整 ATPG 流程的核心部分之一。
## 竞赛
关于 2021 年 ICISC 竞赛相关的信息,参见:[doc/race-icisc-2021.md](doc/race-icisc-2021.md)
## 参与贡献
我们非常欢迎,您通过下面的方式参与贡献:
- 通过 [提交 issue](https://gitee.com/openeda/OpenTPG/issues/new) 给项目提意见或者建议
- 通过 [发起 Pull Request](https://gitee.com/openeda/OpenTPG/pull/new) 直接给项目贡献代码,贡献代码请遵循[code-style](.convention/code-style.md)
- 参与 issue 或者 Pull Request 的评审或者评论
# 安装说明
## 基本要求
----------------------
* 外部依赖
| 需求项 | 版本 |
|--- |--- |
| boost | 1.76 |
| cmdline | 3.2.1 |
* 构建工具链
- gcc 7, C++11
- cmake 3.12 及以上
## 构建
----------------------
```shell
mkdir build
cd build
cmake ../
make
```
# 快速入门
整体计算流程为:
```text
+---------+ +-----------+ +--------+
| netlist |--->| faultlist |-+->| cube |
+---------+ +-----------+ | +--------+
| +--------+
+->| status |
+--------+
```
命令行为:
```shell
./opentpg -n bench/s17.bench -c bench/s17.cfg -f bench/s17.fault -u bench/s17.cube
```
启动之后,进程将自动从 `bench/s17.bench` 和 `bench/s17.cfg` 读取输入,并将生成的 fault 和 cube 写 入文件 `bench/s17.fault` 和 `bench/s17.cube`。
# 系统接口
## 约定
合适的约定将极大简化项目成员之间的沟通。根据不同的用途和场景,这里列出本项目涉及到的主要的约定:
* 文件名后缀约定
| 后缀名 | 用途 |
|--- |--- |
| `*.bench` | 网表输入文件 |
| `*.cfg` | 网表配置文件 |
| `*.fault` | 导出的 Fault 列表 |
| `*.cube` | 导出的 Cube 列表 |
* 命令行接口约定
一个命令行的参数,有两种两种组织形式 ` ` 和 ``。其中,`` 必须以符号 `-` 或者 `--` 开头。特殊情况下,使用 `--` 对下一个参数进行转义。
* 代码工程约定
* `约定1`:我们约定一个类的文件名总是和该文件中的主要类的类名或相同(包括大小写).
* `约定2`:如果一个文件不设计主要类,那么该文件名必须为全小写字母.
其他方面可以参考文档 [code-style](.convention/code-style.md)
## 命令行接口
可以通过 `opentpg --help` 来查看所有的命令行定义。
下面将列出主要的命令行接口:
| 参数定义 | 是否必选 | 参数含义 |
|--- |--- |--- |
| `-n\|--netlist ` | Yes | 指定网表文件 |
| `-c\|--config ` | Yes | 指定网表配置文件 |
| `-f\|--fault ` | Yes | 执行导出 Fault 列表功能, 为指定输出的 FaultList 文件 |
| `-u\|--cube ` | Yes | 执行导出 Cube 列表功能指定输出 Cube 信息文件 |
| `-s\|--simulate` | No | 是否自动对生成的 cube 进行仿真 |