LUT及综合使用

基本概念

LUT显示查找表(Look-Up-Table)
本质上就是一个SRAM。它把数据事先写入RAM后,每当输入一个信号就等于输入一个地址进行查表,找出地址对应的内容,然后输出。

目前主流FPGA都采用了基于SRAM工艺的查找表结构,也有一些军品和宇航级FPGA采用Flash或者熔丝与反熔丝工艺的查找表结 构。通过烧写文件预存(这一步在我们用bit文件配置FPGA时实现)改变查找表内容的方法来实现对FPGA的重复配置。

组成层次

每个CLB包含两个slices,每个slices由4个(A,B,C,D)6输入LUT和8个寄存器组成(中间应该还有一些选择器、与非门、或非门之类的东西)

同一CLB中的两片slices没有直接的线路连接,分属于两个不同的列。每列拥有独立的快速进位链资源。

放一个slices的内部图在这里插入图片描述
在这里插入图片描述在这里插入图片描述
slice分为两种类型 SLICEL, SLICEM

(1)SLICEL可用于产生逻辑,算术,ROM。

(2)SLICEM除以上作用外还可配置成分布式RAM或32位的移位寄存器。每个CLB可包含两个SLICEL或者一个SLICEL与一个SLICEM.

分布式RAM
SLICEM可以配置成分布式RAM,一个SLICEM可以配置成以下容量的RAM

应用

(1)组合逻辑函数

N个输入的查找表可以实现任意N个输入变量的组合逻辑函数
在这里插入图片描述
实际上,LUT具有更快的执行速度和更大的规模。

  • 不同输入数量选择

7系列的FPGA的LUT有6个输入端口(A1-6),然后有两个输出端口(O5,O6)。下图是SLICE里面的LUT。
在这里插入图片描述

4输入查找表可以看成是具有4位地址1位数据的存储器,能够存储16bit数据,这也是LUT能被用于组建分布式RAM的原因。

如果要构成一个6输入1输出MUX,可以通过两片4输入查找表级联,也可直接用一片完整的6输入查找表,两片4输入的查找表的存储容量是32,而一片完整的6输入查找表的存储容量是64;若使用6输入查找表(存储容量为64)实现4输入(存储容量为16)的逻辑功能,则浪费了75%的存储容量。也就是说,采用较少输入的查找表实现较多输入查找表的功能,在面积上有更高的利用率。

但是呢如果LUT采用的是2输入的呢,那样岂不是更好吗,不是的,因为对于多输入的信号处理的时候,就需要有多个LUT的级联来实现,而级联有不可避免的会导致延时过分,导致时序不满足。因此在实际的FPGA产品中多采用的是4输入或者6输入的LUT。

(2)构成RAM

SLICEM可以配置成分布式RAM,一个SLICEM可以配置成以下容量的RAM

在这里插入图片描述
多bit的情况需要增加相应倍数的LUT进行并联。

分布式RAM和 BLOCK RAM的选择遵循以下方法:

  1. 小于或等于64bit容量的的都用分布式实现

  2. 深度在64~128之间的,若无额外的block可用分布式RAM。 要求异步读取就使用分布式RAM。数据宽度大于16时用block ram.

  3. 分布式RAM有比block ram更好的时序性能。 分布式RAM在逻辑资源CLB中。而BLOCK RAM则在专门的存储器列中,会产生较大的布线延迟,布局也受制约。

(3)Shift Register

SLICEM中的LUT能在不使用触发器的情况下设置成32bit的移位寄存器, 4个LUT可级联成128bit的移位寄存器。并且能够进行SLICEM间的级联形成更大规模的移位寄存器。

在这里插入图片描述

(4)Multiplexers

一个LUT可配置成4:1MUX.

   两个LUT可配置成最多8:1 MUX

   四个LUT可配置成16个MUX

在这里插入图片描述

通过代码进行综合

eg1

module testlatch
(
	input a,
	input b,
	output reg q
);

	always @(a or b)
		if(a == 1'b1)
			q = b;
	
endmodule

在这里插入图片描述
在always (*)的情况下,如果if 或者cace 不完整的话,会综合出latch,导致不稳定。’

eg2

module testlatch
(
	input a,
	input b,
	output reg q
);

	always @(a or b)
		if(a == 1'b1)
			q = b;
		else 
			q = a;
	
endmodule

在这里插入图片描述
梯形的选择器” ,其实就是由LUT构成的!
在这里插入图片描述在这里插入图片描述在这里插入图片描述

eg3

module testlatch
(
	input CLK,
	input a,
	input b,
	output reg q
);

	always @(posedge CLK)
		if(a == 1'b1)
			q = b;

endmodule

在这里插入图片描述
在always (posedge CLK)的情况下,综合出的是reg,即使if,或者case不完整,也不会综合出latch。

ref
通过vivido查看LUT
https://blog.csdn.net/qijitao/article/details/51371434
https://blog.csdn.net/wordwarwordwar/article/details/79998130
https://www.cnblogs.com/Dinging006/p/9512506.html

  • 2
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值