其他分享
首页 > 其他分享> > RapidWright系列-3. 构建一个基础的Router

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 TypeRapidWright ClassCrosses Hierarchy?Pins Live on a…
Logical NetEDIFNetNoCell (EDIFCellInst)
Physical NetNetYesSite (SiteInst)

Physical Net的名字来自于Source Logical Net,即与source leaf cell连着的那根线,这与Vivado也保持一致。一个典型的Physical Net主要包含如下信息:

Class MemberDescriptionAPI Getter
nameFull hierarchical name of the netpublic String Net.getName()
pinsSource/Sink site pinspublic List<SitePinInst> Net.getPins()
pipsProgrammable interconnect Points usedpublic 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