特权同学

从Technology Map Viewer看4输入LUT

0
阅读(2269)

EX1:

///////////////////////////////////////////////////////////

input clk; //时钟

input a,b,c,d; //四输入

output reg dout; //输出

always @ (posedge clk)

dout <= a & b & c & d; //四输入与

///////////////////////////////////////////////////////////

上面的代码只是实现一个很简单的四输入与的功能。每个时钟锁存 一次与操作的结果作为输出。从Quartus II的Technology Map Viewer里可以看出这个设计使用 了一个四输入的LUT和一个触发器。如下图:


EX2:

///////////////////////////////////////////////////////////

input clk; //时钟

input a,b,c,d,e; //五输入

output reg dout; //输出

always @ (posedge clk)

dout <= a & b & c & d & e; //五输入与

///////////////////////////////////////////////////////////

那么由现在这个五输入与的代码,我们综合后会是怎样一个资源消 耗呢?看看Technology Map Viewer就知道了:


两个4输入LUT和一个触发器,我想看 到这,大家就应该明白FPGA的4输入查找表结构了。那么大家可能会疑惑,输入b和c共用的那个4输入LUT好像还没有用完,还有 两个输入闲置着呢,是否还可以再利用起来呢?我们再用一个例程看看这个问题的答案:

EX3:

///////////////////////////////////////////////////////////

input clk; //时钟

input a,b,c,d,e; //五输入

input f,g;

output reg dout; //五输入与输出

output reg fout; //二输入或输出

always @ (posedge clk) begin

dout <= a & b & c & d & e; //五输入与

fout <= f | g;//二输入或

end

///////////////////////////////////////////////////////////

EX3和EX2相比增加了一个二输入或的逻辑,那么系统会不会把这个二输入所需要的LUT和前面没有用完的LUT复用呢?看Technology Map Viewer:


很显然,除了多一个LUT外,还多了一个触发器。在一个组合逻辑(例如:dout <= a & b & c & d & e;)里没有用完的LUT是无法被其它逻辑复用的。

这又让人想起了那个老话题:如何最大限度的发挥FPGA的可用资源。在这里绝对没有误导大家的意思(大多时候没有必要也不可能为了 完全用尽4输入LUT的资源而修改我们的设计),只是纯粹的讨论这个有趣的话题。

Baidu
map