bitloom-sim 0.1.2

Cycle-accurate tick and VCD from FrozenHir (Bitloom). Unrelated to samitbasu/rhdl.
Documentation
# Bitloom

Rust 嵌入式 RTL HDL:设计是**可执行生成器**。`cargo bitloom build` 在本机 elaborate 得到冻结电路图(`FrozenHir`),再降到 Yosys 友好的 Verilog,并可在 `cargo test` 里做周期精确 `tick`。

## 身份与发布(请先读)

**本仓库与 [samitbasu/rhdl](https://github.com/samitbasu/rhdl) 无关。** 那是另一个独立项目。

| | 本项目 |
|---|---|
| Git 仓库名 | 可以叫 `rhdl` |
| 公开产品名 | **Bitloom** |
| crates.io **发布名** | **`bitloom`**(CLI 二进制 `cargo-bitloom``cargo bitloom`|
| **禁止**发布 | `rhdl``rhdl-bits`(名称已被占用或保留) |

文档、徽章与发布说明不得暗示本工具链以 crates.io 包名 `rhdl` 发布。

## 快速开始(真独立;不必 clone)

```bash
rustup toolchain install 1.97.1
cargo install bitloom
cargo bitloom new blink
cargo bitloom build --package blink --manifest-dir blink --out-dir out
```

设计 crate 只依赖 **`bitloom-prelude`**(不要把 CLI 包 `bitloom` 加进 `[dependencies]`)。与 **bitbloom** 等无关拼写无关;与 [samitbasu/rhdl](https://github.com/samitbasu/rhdl) 无关。

- **工具链:** `rust-toolchain.toml` 钉死 **rustc 1.97.1** / edition 2024
- **测试(贡献者):** `just test`(或 `cargo test --workspace`
### 贡献者:在 monorepo 里跑示例

```bash
git clone https://github.com/TangCan/bitloom.git
cd bitloom
cargo run -p bitloom -- build --package counter_ports --out-dir /tmp/bitloom-out --manifest-dir .
```

多包发布与 Trusted Publishing:见 [`docs/crates-io-publish-bitloom.md`](docs/crates-io-publish-bitloom.md)。

### 可选:独立仿真(`bitloom-sim`

设计 crate 的 `[dependencies]` 仍只有 `bitloom-prelude`。需要 `tick` / VCD 时:

```bash
cargo add bitloom-sim --dev
```

在 `cargo test` 里 `use bitloom_sim::Sim;` 对 `FrozenHir` 做周期步进。勿把 sim 放进 `[dependencies]`。

## 文档在哪

| 文档 | 路径 |
|------|------|
| 阶段一产品合同 | `_agile-output/specs/spec-rhdl/SPEC.md` |
| 阶段二需求(FR21–FR40) | `_agile-output/planning-artifacts/prds/prd-rhdl-2026-08-19/prd.md` |
| 架构脊柱(AD-1…AD-26) | `_agile-output/planning-artifacts/architecture/architecture-rhdl-2026-08-18/ARCHITECTURE-SPINE.md` |
| Epic / Story | `_agile-output/planning-artifacts/epics.md` |
| Sprint 状态 | `_agile-output/implementation-artifacts/sprint-status.yaml` |
| HIR→源码再生(仅调试) | [`docs/hir-to-source-debug-only.md`]docs/hir-to-source-debug-only.md |
| 手写 bridge / abstraction / both | [`docs/fr29-bridge-abstraction-both.md`]docs/fr29-bridge-abstraction-both.md |
| 双视图等价检查 | [`docs/fr30-dual-view-equiv.md`]docs/fr30-dual-view-equiv.md |
| 可选 FST | [`docs/fr31-optional-fst.md`]docs/fr31-optional-fst.md |
| tick 引擎 | [`docs/fr32-tick-engines.md`]docs/fr32-tick-engines.md |
| C ABI cdylib | [`docs/fr33-c-abi.md`]docs/fr33-c-abi.md |
| 仿真覆盖率 | [`docs/fr34-sim-coverage.md`]docs/fr34-sim-coverage.md |
| Chisel 尽力生成 | [`docs/fr28-chisel-best-effort.md`]docs/fr28-chisel-best-effort.md |
| HLS(Bambu) | [`docs/fr35-hls.md`]docs/fr35-hls.md |
| Formal/SVA | [`docs/fr39-formal-sva.md`]docs/fr39-formal-sva.md |
| Analog/InOut | [`docs/fr27-analog-inout.md`]docs/fr27-analog-inout.md |
| rhdl-float | [`docs/fr36-rhdl-float.md`]docs/fr36-rhdl-float.md |
| IP / 黑盒 | [`docs/fr37-ip-box.md`]docs/fr37-ip-box.md |
| HIR HTML / LSP | [`docs/fr38-viz-lsp.md`]docs/fr38-viz-lsp.md |
| 额外 CLI | [`docs/fr40-cli-verbs.md`]docs/fr40-cli-verbs.md |
| 多平台 firtool | [`docs/nfr11-firtool-platforms.md`]docs/nfr11-firtool-platforms.md |
| MSRV 1.97.1 (NFR13) | [`docs/nfr13-msrv-1.97.1.md`]docs/nfr13-msrv-1.97.1.md |

## firtool(NFR3)

默认**不信任** `PATH` 上的 firtool。CLI 钉死 **firtool-1.155.0**(`firrtl-bin-linux-x64.tar.gz` + `.sha256`):

```bash
cargo run -p bitloom -- firtool info
cargo run -p bitloom -- firtool ensure   # 下载/校验/缓存并打印二进制路径
```

覆盖:`RHDL_FIRTOOL_PATH` 指向含 `firtool` 的目录;缓存根可用 `RHDL_FIRTOOL_CACHE`。

工具链 crate:MIT OR Apache-2.0(见各 crate 的 `Cargo.toml`)。

## 状态与 deferred(诚实声明)

当前为 **0.x**。已交付:生成器 elaborate → FrozenHir → `.v` / FIRRTL 互转 / `tick`、firtool 钉死、Mem/CDC 等阶段二能力(见 `epics.md`)。

**明确 deferred / 未承诺为产品完整面:**

- 完整 LSP hover/goto(FR38 部分)
- 部分 CLI 动词(`check` / `import` / `visualize` / `wave` / `doc` / `build-sim`- 自研 HLS 调度器(永不;仅外挂)
- crates.io 名 `rhdl` / `rhdl-bits`(禁止)

详见 [`docs/semver-0x-policy.md`](docs/semver-0x-policy.md) 与 [`docs/crates-io-publish-bitloom.md`](docs/crates-io-publish-bitloom.md)。