🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
` `谈到这个,就需要认识到FPGA的结构,FPGA由六部分组成,分别是可编程输入/输出单元(IOB),基本可编程逻辑单元(SLENCE),嵌入石块RAM(block ram),丰富的布线资源,底层嵌入功能和内嵌专用硬核等。 ![](https://img.kancloud.cn/d4/9a/d49ab13bf40c595c4e96a92b4b8440bf_436x638.png) ## IOB可编程输入输出单元 ` `大多数FPGA的I/O单元被设计为可编程模式,即通过软件的灵活配置,可适应不同的电器标准与I/O物理特性;可以调整匹配阻抗特性,上下拉电阻;可以调整输出驱动电流的大小等。 ## 基本可编程逻辑单元(CLB) ![](https://img.kancloud.cn/5c/b3/5cb3191bf973dc6c3ee4e602d176a5b3_1054x452.png) ` `如上图所示,左边SLICE为SLICEM右边为SLICEL CLB内部的两个Slice是相互独立的,各自分别连接开关阵列(Switch Matrix),以便与通用布线阵列(General routing Matrix)相连。 ` `在Xilinx FPGA设计工具中,Slice的位置用“XmYn”表示,其中m为Slice所在横坐标,一个CLB的两个Slice的横坐标分别是m和m+1;n为CLB的纵坐标,一个CLB的两个Slice有相同的n。Virtex-5左下角的Slice编号为X0Y0。 ` `实际上,查找表类似于一个ROM(印象中是SRAM),容量是64bit,6个输入作为地址输入,存储的内容作为布尔运算的结果。查找表中的内容由开发环境生成并在FPGA配置时加载进去。(每个SLICE有4个在SLICE的做左边) ` `Slice中的触发器可以配置成多种工作方式,例如是FF或Latch,同步复位或异步复位、复位高有效或低有效等。(每个SLICE有8个寄存器,在SLICE的最右端) ` `CLB内部包含多个选择器。CLB的选择器与一般的选择器不同,它们没有选择端。通路的选择在FPGA配置后固定下来。(上图中每个SLICE有3个二选一选择器) ` `CLB内部还包含了一个重要的资源——进位链,其作用是方便加法器的实现。(每个SLICE有一个四进位链CARRY4) ` `SLICEM的结构与SLICEL的结构类似,最大的区别是使用了一个新的单元代替SLICE中的查找表。这个新的单元可以配置为LUT、RAM、ROM或移位寄存器(SRL16/SRL32),从而可以实现LUT的逻辑功能,也能做存储单元(多个单元组合起来可以提供更大的容量)和移位寄存器(提供延迟等功能),其中SLICEM中LUT的输入端都地址和写地址为8位,高两位可能是将4个LUT并联一起作为一个大的RAM或ROM时用,同时SLICEL和SLICEM的LUT均可设为5位查找表或6位查找表。 ` `CLB内部查找表、触发器、多路器等基本单元的配置是由ISE自动完成,一般情况下不需要设计者干预。但是,如果认为有必要,设计者可以通过ISE中集成的FPGA底层编辑器——FPGA Editor直接编辑CLB内部触发器和多路器的配置。