FPGA查找表_fpga中的查找表用来做什么-程序员宅基地

技术标签: 算法  语言  linux  编程  存储  verilog与FPGA学习  数据结构  

一.查找表(Look-Up-Table)的原理与结构

采用这种结构的PLD芯片我们也可以称之为FPGA:如altera的ACEX,APEX系列,xilinx的Spartan,Virtex系列等。

查找表(Look-Up-Table)简称为LUT,LUT本质上就是一个RAM。 目前FPGA中多使用4输入的LUT,所以每一个LUT可以看成一个有4位地址线的16x1的RAM。 当用户通过原理图或HDL语言描述了一个逻辑电路以后,PLD/FPGA开发软件会自动计算逻辑电路的所有可能的结果,并把结果事先写入RAM,这样,每输入一个信号进行逻辑运算就等于输入一个地址进行查表,找出地址对应的内容,然后输出即可。

下面是一个4输入与门的例子,

实际逻辑电路 LUT的实现方式

a,b,c,d 输入

逻辑输出 地址 RAM中存储的内容

0000

0 0000 0 0001 0 0001 0 .... 0 ... 0 1111 1 1111 1

二.基于查找表(LUT)的FPGA的结构

我们看一看xilinx Spartan-II的内部结构,如下图:

xilinx Spartan-II 芯片内部结构 Slices结构

Spartan-II主要包括CLBs,I/O块,RAM块和可编程连线(未表示出)。在spartan-II中,一个CLB包括2个Slices,每个slices包括两个LUT,两个触发器和相关逻辑。 Slices可以看成是SpartanII实现逻辑的最基本结构 (xilinx其他系列,如SpartanXL,Virtex的结构与此稍有不同,具体请参阅数据手册)

altera的FLEX/ACEX等芯片的结构如下图:

altera FLEX/ACEX 芯片的内部结构

逻辑单元(LE)内部结构

FLEX/ACEX的结构主要包括LAB,I/O块,RAM块(未表示出)和可编程行/列连线。在FLEX/ACEX中,一个LAB包括8个逻辑单元(LE),每个LE包括一个LUT,一个触发器和相关的相关逻辑。LE是FLEX/ACEX芯片实现逻辑的最基本结构(altera其他系列,如APEX的结构与此基本相同,具体请参阅数据手册)

三.查找表结构的FPGA逻辑实现原理

我们还是以这个电路的为例:

A,B,C,D由FPGA芯片的管脚输入后进入可编程连线,然后作为地址线连到到LUT,LUT中已经事先写入了所有可能的逻辑结果,通过地址查找到相应的数据然后输出,这样组合逻辑就实现了。 该电路中D触发器是直接利用LUT后面D触发器来实现。时钟信号CLK由I/O脚输入后进入芯片内部的时钟专用通道,直接连接到触发器的时钟端。触发器的输出与I/O脚相连,把结果输出到芯片管脚。这样PLD就完成了图3所示电路的功能。(以上这些步骤都是由软件自动完成的,不需要人为干预)

这个电路是一个很简单的例子,只需要一个LUT加上一个触发器就可以完成。对于一个LUT无法完成的的电路,就需要通过进位逻辑将多个单元相连,这样FPGA就可以实现复杂的逻辑。

由于LUT主要适合SRAM工艺生产,所以目前大部分FPGA都是基于SRAM工艺的,而SRAM工艺的芯片在掉电后信息就会丢失,一定需要外加一片专用配置芯片,在上电的时候,由这个专用配置芯片把数据加载到FPGA中,然后FPGA就可以正常工作,由于配置时间很短,不会影响系统正常工作。 也有少数FPGA采用反熔丝或Flash工艺,对这种FPGA,就不需要外加专用的配置芯片。

在硬件描述语言中,查找表通常用来做存储器的,当大存储器系统建模的时候,可能会遇到仿真性能下降的问题,VERILOG本身对存储器并没有限制的,但是,当存储器的空间达到4G的时候,碰巧的是操作系统不能定位这么大的空间,因为WINDOWS操作系统的寻址空间为4G空间啊!解决的方法是利用查找表(相连存储器)!
第一种方法是:如果存储器的访问具有局部性,即在每个时间点上只有一小部分被使用,例如,假设在任何时候只有16个存储器被使用。我们可以提供两个队列,一个用与存储器的地址,一个用于存储器的容量。熟悉Linux的,可能知道在Linux内部有一个80字节的高速地址缓存区!也是利用这个原理的。在地址存储器中,当读取一个地址的时候,如果这个地址在积存器中,那么就对这个地址直接进行读写,如果没有,则,原来的地址被覆盖,这个叫做(LRU)算法。
第二种方法是:同第一种差不多的,只是在释放单元是不是用LRU算法,而是用一旋转计数器来选择下一个要释放的单元;

下面来看一个代码,是用的第二种方法的:其实相当于一个循环队列了,希望大家仔细回味,还有就是数据结构,也要看看啊,一会还有个代码要用到哈西表的;
//---------------------------------------------------------------------------------------
module memory(address,data,read,write);
inout [15:0]data; //要用到上次讲的mapping regester 不用也行,最好用!
input [31:0]address;

input read,write;

parameter SIZE =15;/寄存器大小
reg [31:0]address_reg[SIZE:0]; //address register
reg [15:0]data_reg[SIZE:0]; //data register
rey [15:0]data_map;
//----------------------------------------------------------------------------
integer lastwritten;//lastwritten 是上次被写后的下一个
// 单元
assign data=data_map;
always@(posedge write)
begin
integer i;
for(i=0;i<SIZE;i=i+1)
if(address_reg[i]=address)
lastwritten=i;
else
address_reg[i]=address;
data_reg[i]=data;
lastwritten=(lastwritten+1)%SIZE;
end
//---------------------------------------------------------------
always@(posedge read)//读取,如果地址不在则打印错误,
begin //如果想综合的话,可以加个flag通知CPU没有
int i,found; //再直接从输出地址,和数据。
for(i=0;i<SIZE;i=i+1)
begin
if(address_reg[i]==address)
begin
data_map=data_reg[i];
found=1;
end
else found=0;
end
if(found=0)
begin
$display("EEROR ADDRESS NOT FOUND !");
$stop;
end
@(negedge read)
data_map=4'hzzzz;
end

endmodule
//--------------------------------------------------------------------------------------
上面的例子只对非常局部化的存储器有效果,也可以用在高速缓存中!
下面再来看一段代码,这里用的是杂凑法,用在数据结构中就是
哈希表!!!!!!!!
这里同样有两个存储器,一个放地址,一个放数据,
不同的是,扫描不是全部扫描完的,而是把,输入的地址经过一种算法
转换成地址存储器中的index.
//-------------------------------------------------------------------

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/supreme42/article/details/7753541

智能推荐

国内计算机论文期刊,国内都有哪些计算机领域的投稿期刊-程序员宅基地

文章浏览阅读1.2k次。国内都有哪些计算机领域的投稿期刊发布时间:2019-01-14 15:11浏览: 次计算机在各行各业都得到了广泛的应用,而这一方向的从业人员也越来越多,他们也是可以评定计算机工程师职称的,但也需要发表计算机方向的论文,最近就有作者咨询我们的老师,关于国内计算机领域的投稿期刊,小编在此介绍:计算机专业领域的刊物有很多,也分计算机在各行各业都得到了广泛的应用,而这一方向的从业人员也越来越多,他们也是可..._计算机专业普刊

计算机设备管理使用实施细则,办公电脑及相关设备管理工作细则.doc-程序员宅基地

文章浏览阅读286次。乌蒙科技制度编号:E3055KY制度页数:共12页办公电脑及相关设备管理细则编 制 人:审 核 人:批 准 人:主办单位:总经理室公布日期:20XX年12月30日生效日期:20XX年 1 月 1日第一章 总 则目标为规范办公电脑及相关设备使用、维护、维修,依据集团[办公电脑及相关设备管理措施]之要求制订本细则。适用范围本细则适适用于矿业本部及所属子企业办公电脑及相关设备管理。办公电脑及相关设备分...

python数据结构与算法分析_Python数据结构与算法--算法分析-程序员宅基地

文章浏览阅读202次。在计算机科学中,算法分析(Analysis of algorithm)是分析执行一个给定算法需要消耗的计算资源数量(例如计算时间,存储器使用等)的过程。算法的效率或复杂度在理论上表示为一个函数。其定义域是输入数据的长度,值域通常是执行步骤数量(时间复杂度)或者存储器位置数量(空间复杂度)。算法分析是计算复杂度理论的重要组成部分。一个有趣的问题经常出现,那就是两个看似不同的程序,到底哪个更好呢?要回..._energy+=list1[a]*list1[a-1]*list1[(a+1)%(n-i)]

linux6.4发送日志,RHEL6.4 搭建 Rsyslog 日志服务 Rsyslog+MySQL+Loganalyzer-程序员宅基地

文章浏览阅读67次。rsyslog 建立:安装rsyslog服务包,rsyslog-mysql的rpm包需要装上去,是日志和数据库结合的包配置/etc/rsyslog.conf文件vi/etc/rsyslog.confSYSLOGD_OPTIONS="-c2-r-x-m180" ##添加,KLOGD_OPTIONS="-x" ##添加,$ModLoadimm...

android的drawrect透明图层,android – 在活动上创建一个黑色透明的图层-程序员宅基地

文章浏览阅读279次。以编程方式,您可以使用Canvas创建图层.用你的颜色填充整个东西并切出一个洞.public class DrawView extends View {Paint paint = new Paint();Paint transparentPaint = new Paint;public DrawView(Context context) {super(context);}@Overridepubl..._canvas drawrect 全透明

NLP练习之RNN,使用pytorch_pytorch nlp 例子“”-程序员宅基地

文章浏览阅读251次。import numpy as npimport torchimport torch.nn as nnimport torch.optim as optimfrom torch.autograd import Variabledtype = torch.FloatTensorsentences = [ "i like dog", "i love coffee", "i hate milk"]word_list = " ".join(sentences).split()word_list_pytorch nlp 例子“”

随便推点

linux smartctl 命令,Smartctl 命令查看硬盘详细信息-程序员宅基地

文章浏览阅读6.1k次。Smartctl命令查看硬盘详细信息(2011-08-30 14:21:41)标签:linux硬盘信息使用时间杂谈1.1什么是Smartmontools?Smartmontools是一种硬盘检测工具,通过控制和管理硬盘的SMART(Self Monitoring Analysis andReportingTechnology,自动检测分析及报告技术)技术来实现的,SMART技术可以对硬盘的磁头单..._smartctl查看硬盘信息

压力传感器实例编程与java,如何使用Arduino进行编程 通通过压力传感器控制电机转速...-程序员宅基地

文章浏览阅读804次。/** circuits4you.com* 2016 November 25* Load Cell HX711 Module Interface with Arduino to measure weight in KgsArduinopin2 -> HX711 CLK3 -> DOUT5V -> VCCGND -> GNDMost any pin on the Arduin...

python 数据恢复 编程_Python | 数据恢复实验室 Data Recovery Laboratory-程序员宅基地

文章浏览阅读1.1k次。最近使用Python为项目开发一款绘图工具(绘出 声场三维模型)。因为希望能把Python脚本发布为脱离Python平台运行的可执行程序,比如单个的exe文件。PyInstaller恰满足这个需求。本文PyInstaller的版本是2.0,支持Python2.7。下面讨论怎样安装,使用PyInstaller。PyInstaller本身并不属于Python包。在安装 pyinstaller 之前假设..._python恢复硬盘数据 csdn

windows服务器上无法运行bat文件,ad域用户bat脚本运行不了-程序员宅基地

文章浏览阅读1.8k次。发表于2017-2-22 10:20|来自51CTO网页引用:原帖由 wankily 于 2017-2-22 08:33 发表 域环境是server2008,做了一个bat脚本,内容很简单,echo %date%,%username%,%COMPUTERNAME% >>\\192.168.10.1\tools$\pc-imformation-collect.txt,就是收集一下域..._windows sever .bat文件无法运行

既然android service是运行在主线程中的,那service还有什么用?_每个线程都有一个messagequeue-程序员宅基地

文章浏览阅读4.9k次,点赞2次,收藏6次。既然android service是运行在主线程中的,那service还有什么用?对于Android,每一个进程都有一个主线程,四大组件的处理任务都是在这个线程中进行的。每个线程都有一个MessageQueue,里面用于存放Message,四大组件的处理工作是用Message来封装的。可以说Android应用层是消息驱动的。你的想法可能是,Service长期在后台工作,如果它是运行在主线程中的..._每个线程都有一个messagequeue

关于HTML5你需要了解的基础知识-程序员宅基地

文章浏览阅读75次。HTML5 是第五个且是当前的 HTML 版本,它是用于在万维网上构建和呈现内容的标记语言。本文将帮助读者了解它。HTML5 通过 W3C 和Web 超文本应用技术工作组Web Hypertext Application Technology Working Group之间的合作发展起来。它是一个更高版本的 HTML,它的许多新元素可以使你的页...