求职攻略| RTL与LUT的关系,一道题解释明白(大华FPGA岗解析)

首页-达尔闻    全部    求职攻略| RTL与LUT的关系,一道题解释明白(大华FPGA岗解析)

今天继续给大家分享大华FPGA岗的选择题(点这里:回看上期解析),本期的题目主要考察大家RTL代码与LUT。下面就让我们一起来看一下单选的题目和解析。

15)assign a = (b[15:0] == 16’hd5) ? 1’b0 : 1’b1;该语句需要几个4输入LUT实现

A 2        B 3       C 4       D 5

 

解析:本题主要考察了RTL代码与LUT实现逻辑电路的映射关系

在开发FPGA的时候,很多人不会关注LUT与逻辑电路映射的关系,也没有关注过Verilog代码与逻辑电路的映射关系,直接用Verilog硬件描述语言描述电路的功能。这样虽然可以实现我们所需要的功能,但很多时候都是软件的思想,这种不联系硬件的设计的后果是:在设计复杂、高性能的电路时往往会因为时序难收敛而导致整个设计的失败。所以我们有必要了解Verilog硬件描述语言和逻辑电路到底在FPGA中是一种怎样的映射关系显得尤为重要,我想这也是本题出题者的本意。

这道题目是用组合逻辑实现的代码,也就是不会使用到寄存器资源,而题目的问题是“需要几个4输入LUT实现”,也就是告诉大家用Verilog描述的组合逻辑在FPGA中最后会映射到LUT上来实现,所以先来看看这是一种怎样的映射关系。我们以一个最简单的组合逻辑与门为例来向大家说明。RTL代码如下所示:

01 module  and_logic(

02   input   wire  in1 ,

03   input   wire  in2 ,

04

05   output  wire  out   

06 );

07

08 //out:输出in1与in2相与的结果

09 assign  out = in1 & in2;

10

11 endmodule

 

下面我们用Quartus EDA工具来综合。代码编写完后点击“Start Analysis & Synthesis”图标进行分析和综合。

然后双击“Netlist Viewers”下的“RTL Viewer”查看RTL视图。可以看到两个输入信号经过一个与门后输出,和代码设计的结果是完全一致的。

点击“Start Compilation”图标进行全编译,此过程会进行布局布线。

点击“Chip Planner”图标打开器件的版图模型。

Chip Planner打开后可以看到在版图模型中有一个块蓝色区域的颜色变深,说明有该区域的资源被占用,我们知道这是一个逻辑阵列块LAB,我们将该区域放大。

放大后可以看到蓝色变深的区域中有16个小块,这16个小块就是LE,其中只有一个LE的颜色变是蓝色的,说明该处的资源被使用了,双击蓝色的LE即可观察其内部的结构。

打开LE后内部的结构如下图所示,其中蓝色显示的是真实使用到的结构,灰色的是未使用到的结构,我们可以看到有两个输入和一个输出,与RTL代码的描述是对应的,红色框就是查找表LUT。

大家可能还是不理解LUT是如何实现与逻辑的。我们先来看一下与逻辑的真值表,如下表所示:

根据真值表可以看出输入,两个输入对应的输出一共有4种情况,LUT需要做的工作就是能够根据输入的变化对应输出正确的值。我们可以LUT预先存储所有输出的4种情况,然后判断输入,对应输出就可以了。

 

LUT的内部结构在Chip Planner中并没有表达出来,但是可以推断出来,如下图所示,为与门所对应的LUT内部结构图,其中LUT中存储的是4种输出情况,输入信号in1和in2通过多路器选择哪一个存储在LUT中的值输出。图中展示的是当in1和in2输入的值都为1时,可以看出存储在LUT的“1”从标注的红色路径中输出到out,LUT中存储的值会在综合工具综合时进行映射。这里也不难看出LUT其实所充当的角色就是存储器RAM的功能,更直白一点说LUT就是个“小RAM”,所以也可以用LUT来构成小规模的RAM用于存储数据,LUT所构成的RAM就是我们常说的Distribute RAM,简称为DRAM。

再回到本题上来,本题目中组合逻辑的实现也是这样的原理,题目只问会用到几个4输入的LUT,所以只要查看Chip Planner视图即可知道答案。如下图所示我们可以很容易的看到用了5个LUT。

 虽然选出了该题的答案,但是还没有分析透,毕竟笔试的时候我们是不可能有机会使用EDA工具来查看结果的,所以必须弄清楚代码和FPGA之间的映射关系。题目中组合逻辑主要由比较部分“b[15:0] == 16’hd5”和三目运算符“?:”组成,具体和LUT之间的映射关系是怎样的呢?如果不弄清楚这个问题,不理解该问题的本质,那么遇到新的问题还会做错,所以为了进一步让大家知道原理我们还要再进行剖析。

在Chip Planner视图中通过点击“Generate Fan-Out Connections”图标把每个LUT的输出都连接线标注出来,就能看到每个LUT之间的关系了,可以发现前4个LUT的输出都作为第5个LUT的输入,也就是前4个LUT所实现的功能和第5个应该是不同的逻辑。

分别双击前5个LUT,进入到内部的结构映射图,然后查看红色框中的输入信号对应的名字。

5个LUT按顺序从上到下输入端口依次如下所示:

可以看到前4个LUT是b[0]~b[15],第5个LUT是Equal,结合Chip Planner视图可以初步推理出,16bit的b每连续的4个输入用一个LUT,输出的结果传到第5个LUT。再结合Technology Map Viewer(Post Mapping)视图可知,前4个LUT其实是存储了0000_0000_1101_0101,也就是16’hd5这个值,然后每连续的4个一组,与输入分别比较,如果LUT的值与输入的值相等则LUT的输出为1,如果不相等输出为0,所以第5个LUT的内部输入名为“Equal”我们也就不难理解了。而第5个LUT存储了1111,当前4个LUT与输入的比较结果与第5个LUT中存储的值比较,如果相等则输出0,如果不相等则输出1。通过以上分析,大家应该可以深刻理解Verilog代码与FPGA中的映射关系了。

所以,综上本题的答案是D。

2021年2月24日 14:36
收藏