2024-12-06 13:52:02 +08:00
|
|
|
|
# VCS分块编译:穿层引用对重用效果的影响
|
2024-12-02 21:32:42 +08:00
|
|
|
|
|
|
|
|
|
验证问题:有不同穿层信号时,模块的partition库能否reuse?
|
|
|
|
|
|
|
|
|
|
结论:**当穿层信号变化时,受影响的模块不能reuse**。
|
|
|
|
|
|
|
|
|
|
## 快速开始
|
|
|
|
|
|
2024-12-05 17:16:40 +08:00
|
|
|
|
`LAB` :实验序号,可选值[1,2,3,4]
|
|
|
|
|
|
2024-12-02 21:32:42 +08:00
|
|
|
|
### 第一次编译
|
|
|
|
|
|
|
|
|
|
```bash
|
2024-12-05 17:16:40 +08:00
|
|
|
|
make all LAB=1 GENLIB=1
|
2024-12-02 21:32:42 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 第二次编译
|
|
|
|
|
|
|
|
|
|
```bash
|
2024-12-05 17:16:40 +08:00
|
|
|
|
make all LAB=1 GENLIB=0
|
2024-12-02 21:32:42 +08:00
|
|
|
|
```
|
|
|
|
|
|
2024-12-23 09:42:14 +08:00
|
|
|
|
## 实验框架
|
|
|
|
|
|
|
|
|
|
### 实验一
|
|
|
|
|
|
|
|
|
|
```mermaid
|
|
|
|
|
flowchart LR
|
|
|
|
|
tb["testbench1"]
|
|
|
|
|
dut["top"]
|
|
|
|
|
tb --> dut
|
|
|
|
|
dut --> ca
|
|
|
|
|
dut ----> cb
|
|
|
|
|
dut ------> cc
|
|
|
|
|
tb -.第一次.-> namea
|
|
|
|
|
tb -.第二次.-> namea
|
|
|
|
|
tb -.第二次.-> nameb
|
|
|
|
|
tb -.第二次.-> namec
|
|
|
|
|
subgraph ca[counter_a]
|
|
|
|
|
direction LR
|
|
|
|
|
namea["name = counter_a"]
|
|
|
|
|
agea["age = 10"]
|
|
|
|
|
end
|
|
|
|
|
subgraph cb[counter_b]
|
|
|
|
|
direction LR
|
|
|
|
|
nameb["name = counter_b"]
|
|
|
|
|
ageb["age = 11"]
|
|
|
|
|
end
|
|
|
|
|
subgraph cc[counter_c]
|
|
|
|
|
direction LR
|
|
|
|
|
namec["name = counter_c"]
|
|
|
|
|
agec["age = 12"]
|
|
|
|
|
end
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 实验二
|
|
|
|
|
|
|
|
|
|
```mermaid
|
|
|
|
|
flowchart LR
|
|
|
|
|
tb["testbench2"]
|
|
|
|
|
dut["top"]
|
|
|
|
|
tb --> dut
|
|
|
|
|
dut --> ca
|
|
|
|
|
dut ----> cb
|
|
|
|
|
dut ------> cc
|
|
|
|
|
tb -.第一次.-> namea
|
|
|
|
|
tb -.第二次.-> agea
|
|
|
|
|
subgraph ca[counter_a]
|
|
|
|
|
direction LR
|
|
|
|
|
namea["name = counter_a"]
|
|
|
|
|
agea["age = 10"]
|
|
|
|
|
end
|
|
|
|
|
subgraph cb[counter_b]
|
|
|
|
|
direction LR
|
|
|
|
|
nameb["name = counter_b"]
|
|
|
|
|
ageb["age = 11"]
|
|
|
|
|
end
|
|
|
|
|
subgraph cc[counter_c]
|
|
|
|
|
direction LR
|
|
|
|
|
namec["name = counter_c"]
|
|
|
|
|
agec["age = 12"]
|
|
|
|
|
end
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 实验三
|
|
|
|
|
|
|
|
|
|
```mermaid
|
|
|
|
|
flowchart LR
|
|
|
|
|
tb["testbench3"]
|
|
|
|
|
dut["top"]
|
|
|
|
|
tb --> dut
|
|
|
|
|
dut --> ca
|
|
|
|
|
dut ----> cb
|
|
|
|
|
dut ------> cc
|
|
|
|
|
tb -.第一次.-> namea
|
|
|
|
|
tb -.第一次.-> agea
|
|
|
|
|
tb -.第二次.-> namea
|
|
|
|
|
subgraph ca[counter_a]
|
|
|
|
|
direction LR
|
|
|
|
|
namea["name = counter_a"]
|
|
|
|
|
agea["age = 10"]
|
|
|
|
|
end
|
|
|
|
|
subgraph cb[counter_b]
|
|
|
|
|
direction LR
|
|
|
|
|
nameb["name = counter_b"]
|
|
|
|
|
ageb["age = 11"]
|
|
|
|
|
end
|
|
|
|
|
subgraph cc[counter_c]
|
|
|
|
|
direction LR
|
|
|
|
|
namec["name = counter_c"]
|
|
|
|
|
agec["age = 12"]
|
|
|
|
|
end
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 实验四
|
|
|
|
|
|
|
|
|
|
```mermaid
|
|
|
|
|
flowchart LR
|
|
|
|
|
tb["testbench4"]
|
|
|
|
|
dut["top"]
|
|
|
|
|
tb --> dut
|
|
|
|
|
dut --> ca
|
|
|
|
|
dut ----> cb
|
|
|
|
|
dut ------> cc
|
|
|
|
|
tb -.第一次.-> namea
|
|
|
|
|
tb -.第二次.-> namea
|
|
|
|
|
tb -.第二次.-> agea
|
|
|
|
|
subgraph ca[counter_a]
|
|
|
|
|
direction LR
|
|
|
|
|
namea["name = counter_a"]
|
|
|
|
|
agea["age = 10"]
|
|
|
|
|
end
|
|
|
|
|
subgraph cb[counter_b]
|
|
|
|
|
direction LR
|
|
|
|
|
nameb["name = counter_b"]
|
|
|
|
|
ageb["age = 11"]
|
|
|
|
|
end
|
|
|
|
|
subgraph cc[counter_c]
|
|
|
|
|
direction LR
|
|
|
|
|
namec["name = counter_c"]
|
|
|
|
|
agec["age = 12"]
|
|
|
|
|
end
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-12-05 17:14:17 +08:00
|
|
|
|
## 结论
|
|
|
|
|
|
|
|
|
|
| 序号 | 条件 | 现象 | 结论 | 备注 |
|
|
|
|
|
| ---- | ----------------------------------------------------- | ------- | ---------------------------- | ---- |
|
|
|
|
|
| 1 | 第一次:引用a.name; 第二次引用a.name/b.name/c.name; | b/c重编 | 不同的模块,增加的引用会重编 | |
|
|
|
|
|
| 2 | 第一次:引用a.name;第二次引用a.age; | a重编 | 同一个模块,不同引用也会重编 | |
|
|
|
|
|
| 3 | 第一次:引用a.name/a.age;第二次引用a.name; | a重编 | 同一个模块,减少引用也会重编 | |
|
|
|
|
|
| 4 | 第一次:引用a.name;第二次引用a.name/a.age; | a重编 | 同一个模块,增加引用也会重编 | |
|
|
|
|
|
|
|
|
|
|
⚠:只要模块的穿层引用发生变化,就会导致该模块重编。
|
|
|
|
|
|
|
|
|
|
✍官方文档VCSLCAFeatures.pdf第408页,也有类似表述:Any change in XMRs, trigger recompilation of the referee partition.
|
|
|
|
|
|