集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 455|回复: 0

Xilinx-7系列FPGA架构学习 --- 深入理解LUT

[复制链接]
dameihuaxia 发表于 2022-6-17 10:59:28 | 显示全部楼层 |阅读模式
Achievement provides the only real pleasure in life.

有所成就是人生唯一的真正的樂趣。

LUT的一个重要功能是逻辑函数发生器。本质上,逻辑函数发生器存储的是真值表(Truth Table)的内容,而真值表则是通过布尔表达式获得。在vivado中,打开网表文件,选择相应的LUT,在property窗口中可以看到真值表。

从逻辑电路角度看,LUT是构成组合逻辑电路的重要单元,正因为如此,也成为了时序电路中,影响逻辑级数的重要因素。了解常规电路的逻辑级数对于设计初期时序评估是很有必要的。

以加法器为例:相应的RTL代码如下(因为verilog不支持二维输入输出,采用systemverilog语法)

module adder # (
                      parameter W = 16  // Width of the Adders
                    )
                    (
                     // Clock
                     input clk,
                     // First input
                     input logic signed [W-1:0] a,
                     // Second input
                     input logic signed [W-1:0] b,
                     // Output
                     output logic signed [W-1:0] out
                    );
logic signed [W-1:0] a_r;     
logic signed [W-1:0] b_r;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
always @ (posedge clk)
begin
a_r <= a;
b_r <= b;
out <= a_r + b_r;
end
endmodule

逻辑级数如下所示:



可以看出逻辑级数3(LUT+carry+carry)。同理得到,对于32bit为6,48bit逻辑级数为8。【其实逻辑级数有点高了,对于跑300M+有点困难,后面的文章会有解决方案】。

1个LUT6可以实现4选1的数据选择器(MUX),同时LUT6可以与SLICE中的F7MUX、F8MUX、F9MUX等一起构成更大MUX。对于8选1的MUX,其逻辑级数为2(1个LUT+1个F7MUX)。

对于16选1的MUX,其逻辑级数为3(1个LUT+1个F7MUX+1个F8MUX);

而32选1的MUX可在一个SLICE(针对UltraScale和UltraScale Plus芯片)中实现,消耗8个LUT6,4个F7MUX,2个F8MUX和1个F9MUX,因此,逻辑级数为4(1个LUT+1个F7MUX+1个F8MUX+1个F9MUX)。

module mux
1
2
(
// Clock
input logic clk,
// First input
input logic i0,i1,i2,i3,i4,i5,i6,i7,
// Second input
input logic [2:0] sel,
// Output
output logic signed q
);

always_ff@(posedge clk) begin
case(sel)
3’d0: q <= i0;
3’d1: q <= i1;
3’d2: q <= i2;
3’d3: q <= i3;
3’d4: q <= i4;
3’d5: q <= i5;
3’d6: q <= i6;
3’d7: q <= i7;
default: q <= 'd0;
endcase
end
endmodule



从上图可以看出,8选1,2级逻辑级数(LUT + F7MUX)。同样,16选1是3级,32选1是4级。

还有一种常见的运算:比较运算关系。

module comparator
1
2
#(
parameter DW = 4
)
(
// Clock
input logic clk,
// First input
input logic signed [DW - 1 : 0]opa,
// Second input
input logic signed [DW - 1 : 0]opb,
// Output
output logic res
);
logic signed [DW - 1 : 0] opa_r = '0;
logic signed [DW - 1 : 0] opb_r = '0;
logic res_i;
assign res_i = (opa_r < opb_r);
always_ff@(posedge clk) begin
opa_r <= opa;
opb_r <= opb;
res <= res_i;
end

endmodule

report logic levels显示为3级逻辑级数。

总结表格如下:

常用操作逻辑级数
        8bit        16bit        32bit
有符号加法        3        6        8
数据选择        3        3        4
比较        3        3        4
通过以上总结可以看出,一些平常的操作,加法/数据选择/比较,逻辑级数都在5级左右。其实在高频(250M以上),其时序问题就会出现了。
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2025-6-10 13:09 , Processed in 0.060039 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表