从Technology Map Viewer看4输入LUT
0赞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的资源而修改我们的设计),只是纯粹的讨论这个有趣的话题。