Skip to content

Commit bf8d541

Browse files
committed
[feature] 发布lab3实验
* 移除docs/lab1下无用的学习资源
1 parent 32de56b commit bf8d541

File tree

6 files changed

+123
-9
lines changed

6 files changed

+123
-9
lines changed

docs/_sidebar.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
* 实验二
77
* [实验要求](/lab2/lab2_problem.md)
88
* 实验三
9+
* [实验要求](/lab3/lab3_problem.md)
910
* 大作业
1011
* [大作业说明](labFinal.md)
1112
* [划分](/advanced/partition_problem_advanced.md)

docs/lab1/learn_resource1.md

Lines changed: 0 additions & 4 deletions
This file was deleted.

docs/lab1/learn_resource2.md

Lines changed: 0 additions & 5 deletions
This file was deleted.

docs/lab3/img/arch.png

144 KB
Loading

docs/lab3/img/routing_tracks.png

62 KB
Loading

docs/lab3/lab3_problem.md

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
# 实验3
2+
3+
## 简介
4+
5+
在本次实验中,你将设计一个布线算法,探索每个数据集的最小布线通道宽度,并输出相应的routing segments数量。
6+
7+
* 实现你的算法,但**暂时不提交**代码。(大作业时统一收三次实验代码)。
8+
* **提交**实验报告说明你是如何做的,实验报告应该包含以下内容:
9+
* <mark>学号+姓名</mark>
10+
* 算法逻辑和实现思路
11+
* 你采用的算法是什么算法?
12+
* 你是如何设计算法的?
13+
* 你的算法有无特别之处、创新之处。
14+
* 等等。
15+
* 你的算法运行结果表格,报告每一个数据集的最小布线通道宽度和对应的routing segments数量。
16+
* 实验总结。说明你的方法存在的优缺点,下一步改进的方向是什么?
17+
* <mark>非必要,报告中不包含实验代码。实验代码和截图不计入总页数。</mark>
18+
19+
## FPGA架构说明
20+
21+
下图描述了FPGA架构。
22+
23+
每个`Logic block`共有4个引脚,其中,引脚1和2与左边相邻通道的所有轨道连接,引脚3和4与上边相邻通道的所有轨道连接,通道的轨道数即为通道的宽度W。
24+
25+
<img width=400 alt="switch-block" src="/VLSI-FPGA/lab3/img/arch.png" style="margin:auto; display:flex;">
26+
27+
开关块(switch block)是双向的,使用Wilton拓扑连接水平和垂直方向的导线,其中W为通道宽度。
28+
29+
从左到右和从右到左保持相同的轨道序号,具体线路编号和连接规则如下图所示:
30+
* 从左到上则是`i``W-i`
31+
* 从上到右则是`i``(i+1)%W`
32+
* 从右到下则是`i``(2W-2-i)%W`
33+
* 从下到左则是`i``(i+1)%W`
34+
35+
<img width=700 alt="route-track" src="/VLSI-FPGA/lab3/img/routing_tracks.png" style="margin:auto; display:flex;" />
36+
37+
## 代码说明
38+
39+
为了降低同学们非核心算法的代码量,助教为各位同学提供了一个初始代码,你只需要实现一个布线算法。
40+
41+
初始代码包括了`FPGA``FpgaTile``Design``Net``RRNode`等基本类,你需要在`Solution.cpp`中实现你的算法,然后在`main.cpp`中调用你的算法。
42+
43+
* `main.cpp`:主可执行文件,需要两个命令行参数——电路文件的路径和通道布线宽度。
44+
* `Design.cpp/.h`:包含设计中所有线网的类。
45+
* `FPGA.cpp/.h`:包含FPGA大小,通道宽度和一个包含所有FPGA块的列表,`getNumSegmentsUsed`函数可以获得routing segments的数量。
46+
* `FpgaTile.cpp/.h`:表示FPGA块的类,包含指向相邻FPGA块的指针,以及指向块中`RRNode`引脚和导线的指针,这里的FPGA块包括开关块,开关块右边的导线`hWire`,开关块下面的导线`vWire`,以及`logic block`(只有开关块的右边和下面都有开关块的时候才存在)的4个`cbWire`
47+
* `Net.cpp/.h`:表示线网的类,包含一个源`RRNode`和目标`RRNode`列表。
48+
* `RRNode.cpp/.h`:表示单个布线资源节点(导线或引脚)的类,带有指向所有连接的`RRNode`的指针。要使用`RRNode`分配一个线网进行布线,你可以调用`RRNode->setNet()`
49+
* `Solution.cpp/.h`:包含一个`Router`空类,你需要在此基础上实现一个`MyRouter`类,**并实现你的布线算法**,你需要为每个线网分配相应的`RRNode`
50+
51+
### 数据集
52+
53+
下载链接:[校内链接(circuits.zip)](http://172.18.233.211:5244/d/VLSI%E8%AF%BE%E4%BB%B6/dataset/routing/circuits.zip?sign=_PReUHaMMGRJNm3A7aqg-KvFcuOpxh4_QY-SNmCw25A=:0)[校外链接]()
54+
55+
数据集大小如下图所示:
56+
57+
| 数据集名称 | 网格大小 | 线网数量 |
58+
| ----------- | -------- | -------- |
59+
| huge | 40 | ~900 |
60+
| xl | 30 | ~490 |
61+
| large_dense | 20 | ~400 |
62+
| lg_sparse | 20 | ~140 |
63+
| med_dense | 12 | ~140 |
64+
| med_sparse | 12 | ~50 |
65+
| small_dense | 6 | ~20 |
66+
| tiny | 4 | ~10 |
67+
68+
### 程序运行方法
69+
70+
1. 手动编译运行
71+
72+
```bash
73+
g++ -std=c++17 -o main main.cpp Design.cpp FPGA.cpp FpgaTile.cpp Net.cpp RRNode.cpp Solution.cpp
74+
./main.exe ./circuits/tiny 12
75+
```
76+
77+
2. 使用`makefile`脚本编译运行
78+
79+
```bash
80+
make all
81+
```
82+
83+
3. 兼容Vscode的`F5运行并调试`功能:
84+
85+
操作方式类似于实验1,在`.vscode/launch.json`中配置`args`参数,使其适应lab3程序的参数需求即可。
86+
87+
## 输入文件格式
88+
89+
本节内容面向需要自行编写数据读取模块的同学。
90+
91+
* 第一行由一个整数n组成,其中n表示n×n的logic blocks网格,网格单元在每个维度中从0到n-1进行编号。
92+
93+
* 接下来的行的格式为:`XS YS PS XD1 YD1 PD1 XD2 YD2 PD2 ...`,其中XS,YS表示源点的坐标,PS表示源点的引脚,XD1,YD1表示目标点的坐标,PD1表示目标点的引脚。当读取到`-1 -1 -1 -1 -1 -1 `时停止。
94+
95+
示例输入文件:
96+
97+
```text
98+
10 表示(10 x 10)网格
99+
1 2 4 2 3 2 (1,2)处的块的引脚4连接(2,3)处的块的引脚2
100+
0 0 4 1 2 3 (0,0)处的块的引脚4连接(1,2)处的块的引脚3
101+
-1 -1 -1 -1 -1 -1 表示读取终止
102+
```
103+
104+
## 输出文件格式
105+
106+
要求布线算法的输出是一个文件,命名格式为`benchmark_name_routing.txt`,如`tiny_routing.txt`
107+
108+
输出文件为两行,第一行为布线通道宽度,第二行为routing segments的数量,例如:
109+
110+
```text
111+
12
112+
48
113+
```
114+
115+
## 如何提交
116+
117+
实验报告命名为**学号\_姓名\_第三次作业.pdf**
118+
119+
发送到助教邮箱(可在主页找到)<br>
120+
<mark>截止日期:2025年6月19日23时59分</mark><br>
121+
后期会统计已经收到作业的同学,并发在群里。如果上传作业后有更新,请命名为V2、V3……,并在助教统计作业上交情况时注意是否收到最新版本。
122+

0 commit comments

Comments
 (0)