RapidWright系列-3. 构建一个基础的Router
作者:互联网
〇、前言
本篇博文将复现FCCM 2019 Workshop上的RapidWright Tutorial——Build a Basic Router。官方的tutorial已经比较详细,但是要求读者有一些对RapidWright的基础知识,有一些基础概念并没有讲。本文给出tutorial的讲解原文,并在此基础上增添了tutorial缺失的基础知识。
一、背景
甚么是Routing?
将一根逻辑net映射到FPGA的interconnect(互联)资源上,包含两部分:intra-site布线和inter-site布线。inter-site布线主要由Vivado route_design
执行,intra-site在site内部布线,即将site wires连接到net上,主要发生在布局过程中place_design
。本tutorial的内容主要针对inter-site。
补充,甚么是Site?
描述Xilinx FPGA分成了六个抽象层次,最基础的是LUT和FF,也叫做BEL(Basic Element of Logic),若干BEL组合成一个Slice(Site),若干Slice组成一个Tile,若干Tile组成FSR,若干FSR组成SLR,若干SLR组成一个器件。FPGA做布局时,首先将一个LUT或FF找到一个Site放进去,然后把它们的输入输出连接到Site的Pin上。比如说上图是7系列FPGA SLICEL的原理图,共有4个LUT6和4个FF。假设我们想实现一个或门,在诸多Slice里我们选择X0Y0,在诸多LUT和FF里我们选择ALUT和BFF来实现我们想要的功能,这就是布局。布完局还有两件事情,一件事情是把ALUT的输出和BFF的输入连接到一起,另一件事情是把ALUT的输入和BFF的输出都接到Site的Pin上,在这里ALUT的输入连接到Slice的A6:1上,BFF的输出连接到BQ上。这就是前面所说的intra-site,在site内部布线。假设我们想把X0Y0/BFF跟X0Y1/ALUT相连,我们不能直接把ALUT和BFF连在一起,而是先把X0Y1跟X0Y0连在一起,然后再通过Site内部的线把他们连在一起。这就是前文所说的inter-site布线,即Site之间布线。
FPGA的布线资源
甚么是Net?
In RapidWright, we have two kinds of nets, logical and physical. A logical net is a network of connected cell pins (both hierarchical and leaf) of a netlist. A physical net is a list of PIPs that describe connections between physical site pins and crosses hierarchical boundaries of the netlist.
在RapidWright中有两种类型的Net,Logical Net和Physical Net。Logical Net记录了这根Net上都有哪些Cell Pin(在同一根线上的Pin就相当于连在一起了),Physical Net除了记录它都包含了哪些Site Pin之外,还要记录了这些Site Pin之间都经过了哪些PIP。(Cross Hierarchy我暂时还不知道是什么意思,先挖个坑后边再填)
Net Type | RapidWright Class | Crosses Hierarchy? | Pins Live on a… |
---|---|---|---|
Logical Net | EDIFNet | No | Cell (EDIFCellInst ) |
Physical Net | Net | Yes | Site (SiteInst ) |
Physical Net的名字来自于Source Logical Net,即与source leaf cell连着的那根线,这与Vivado也保持一致。一个典型的Physical Net主要包含如下信息:
Class Member | Description | API Getter |
---|---|---|
name | Full hierarchical name of the net | public String Net.getName() |
pins | Source/Sink site pins | public List<SitePinInst> Net.getPins() |
pips | Programmable interconnect Points used | public List<PIP> Net.getPIPs() |
而布线的目的就是给每一根Net选出一组合适的PIPs。
在这里给出一个具体的例子,左图是Logical Net,上边有3个端口,他的source名字叫ffWrapperInst/out0
,所以右边对应的Physical Net也叫ffWrapperInst/out0
。
标签:RapidWright,布线,Site,site,构建,ALUT,Router,Net,BFF 来源: https://blog.csdn.net/lulugay/article/details/110384216