您的位置:首页 > 其它

FPGA认识相关 来自jimfan博客

2014-06-09 23:22 190 查看
http://bbs.ednchina.com/BLOG_ARTICLE_3010377.HTM

— FPGA组合逻辑部件LUT的基本原理

数字逻辑电路一般都是时序部件(触发器)+组合逻辑(与门,或门,异或门等)来完成一系列的功能。既然完成一个特定的功能可以通过组合逻辑来实现,为什么要引入时序逻辑呢?

这是因为时序逻辑是基于时钟沿(上升沿或者下降沿)触发,只有在时钟边沿数据才会被锁存,具有良好的去毛刺,抑制干扰作用,保证了数字电路功能的正确性和稳定性。(这方面原理将会在下一篇博文中说明)。既然构成数字逻辑最重要的部件是组合逻辑和时序逻辑,那么作为实现数字逻辑功能的FPGA的最重要组成部分就是组合逻辑和时序逻辑了。

FPGA一般都是基于查找表(Look Up Table)结构,查找表基本上等同于SRAM。假设在FPGA中要实现一个2输入的与门,那么该与门的输入输出对应关系为:

输入
输出
0, 0
0
0, 1
0
1, 0
0
1, 1
1
既然有了此对应逻辑关系,那么在SRAM对应的地址中只需存储相应的输出数值,而输入数值作为地址来查表即可得到正确的输出值即可。当输入地址为0,0时,输出0地址里存储的值0,当输入地址为0,1时,输出1地址里存储的值0,当输入地址为1,0时,输出2地址里存储的值0,当输入地址为1,1时,输出3地址里存储的值1,因此为什么说FPGA是可编程的,主要是表现在逻辑功能可以根据需要被重新编写在SRAM里,实现不同的逻辑功能。这就是FPGA里实现组合逻辑功能里LUT的基本原理。下一篇博文将详细讲述CLB逻辑的基本原理和构成

— FPGA组成元件之CLB Slice L基本原理

笔者用Xilinx FPGA比较久,现在以Xilinx FPGA Virtex 6为例介绍一下FPGA中的重要组成部件CLB(Configurable Logic Block),ALTERA的FPGA组成结构跟此大同小异,只是命名不同而已。

如下图所示,Virtex 6 SXT475 1759 FPGA的整个芯片的布局如下:





如上图所示,红色的竖直条状物为Block RAM资源,有关Block RAM资源将会在以后的博文中有所讲述。绿色的竖直条状物为DSP48资源。有关DSP 48资源将会在以后博文有所讲述。最左边的条状物为IOB资源,直接相连到管脚,中间的条状物也为IOB,连接到FPGA管脚,另外中间分布着MMCM(时钟资源),最右边的管脚则为高速SerDes(串行/解串高速)管脚。在各条状物中间的黑色格状区域里则为最基本的逻辑资源: CLB。

一个CLB由两个SLICE组成。Slice又分为Slice M和Slice L。其中Slice M是指该Slice里面的LUT也可以作为分布式RAM来使用(Distribute RAM),而Slice L里的LUT则只能作为实现逻辑功能的查找表来使用。我们先看一下Slice L的结构:





粗略的看一下,这个逻辑框图还是相当的复杂的。不要紧,一步一步来。首先要抓住关键的东西。最左边的4个方框就是LUT,也就是说一个Slice L里面有4个LUT,而且该LUT还是6输入(A6:A1)(V6属于高端器件),2输出的查找表。该LUT有两种方式,一种是如果要实现6个输入的逻辑功能,那么只有O6输出能被用到,如果要实现5个输入的逻辑功能,那么一个LUT就可以实现任意5输入(其中一个输入被置高),一输出的组合逻辑两个,只要这两个组合逻辑共用输入。也就是说此时O5和O6都可以用上。再看右边的8个方框,这些都是FF(Flip-Flop器件,即触发器)。从触发器的框图里我们可以看到有INIT1,INIT0,SRHI,SRLO,SR,D,CE,CK这些管脚,这些是做什么用的呢?INITx其实是FPGA被配置后该寄存器的初始状态,该属性为INIT0则表示FPGA配置完后该寄存器初始状态为0,否则则为1。SRHI,SRLO则是复位的时候的状态,如果是SRHI属性的话,则进行RESET的时候,该寄存器输出为1,如果是SRLO的话,该寄存器在被复位时则输出为0。在V6器件中,RESET信号是高有效。SR就是复位信号,D则是D触发器的输入信号,CK则是时钟信号,CE则是CLOCK
ENABLE的意思,表示该寄存器在CE无效的情况下不会翻转,降低系统运行时的功耗。至于LUT和FF/Latch之间很多复杂的多路选择器(MUX)和连线,则相当于Slice内部和外部输入之间的连线路径,在FPGA代码被综合后,这些连线路径怎么走就是由多路选择器来决定。(注:里面有F7A,F7B,F8 MUX可作为设计中的MUX逻辑资源使用,以后会进一步的解释),另外MUX CY可作为进位链到相邻的Slice时的布线选择用(以后会作进一步的解释)。

— FPGA组成元件之CLB Slice L基本原理

FPGA内部的CLB分为SLICE L和SLICE M,SLICE M与SLICE L大同小异,只是SLICE M里的LUT可以作为RAM来存储而已。说起RAM,不得不提起FPGA内部的重要资源-SRAM。笔者使用的Xilinx Virtex 6系列的SRAM被称为M18K,即每个Block RAM的资源为18K bits,有时候也以两个M18K组成一个M36K来称呼FPGA内部的SRAM基本组成单元。

那么什么叫做SRAM呢?RAM大家都明白,那么这个“S”是什么意思?"S"事实上是Synchronous即同步的意思,意思就是对这种RAM的操作(读,写)都是以时钟为基准,而且对于内部的存储阵列来说,都是一个时钟周期就可以把数据写入,一个时钟周期就可以把数据读出。其时序图如下图所示:





如上图所示,跟clk时钟信号同步,wr_en有效两个周期,此时wr_en有效时的datain被写入到sram此时的addr对应的地址中。当rd_en有效时(有效两个周期),此时rd_en有效时对应的地址数据里的内容被读出(读出需要一个时钟周期的延时)。

在高速设计中,一般使用block ram而非基于LUT的分布式ram,其中一个重要原因就是block ram在一般情况下更容易跑高时钟频率。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: