Xilinx 7系列FPGA中CLB结构和内部资源使用

Xilinx 7系列FPGA中CLB结构和内部资源使用

7系列FPGA内部资源更加的更富,性能更强悍,最吸引人的就是28nm工艺使得相同的逻辑资源功耗降低50%,这是一个很大的提升,在单板硬件上仅仅降低50%的功耗就能避免一大部分的问题。7系列逻辑资源和之前系列是一致的都是采用ASML架构,主要分为可编程逻辑资源、可编程I/O资源和布线资源这三大部分。
1、 CLB可配置逻辑资源
CLB可以说是FPGA最基本的一个模块,常用的查找表、选择器、触发器、进位链都是属于CLB的内部资源。一个CLB包含两个SLICE组成。每个Slice 包含查找表、寄存器、进位链和多个多数选择器构成。CLB分为CLBL和CLBM两类,每个SLICE都包含4个6输入LUT、3个数据选择器、一个进位链和8个触发器。SLICE内部资源如下图所示:
在这里插入图片描述
1、LUT
LUT功能如下图
在这里插入图片描述
LUT在用在函数发生器时就是实现布尔运算,本质上就是一个RAM。它把数据事先写入RAM后,每当输入一个信号就等于输入一个地址进行查表,找出地址对应的内容,然后输出。
因此LUT在用在函数发生器时可以等价位:输入的信号 ==> 输入的地址 ==> 输出结果
这样的一个映射过程。
LUT用作ROM时每个SLICEL的6输入LUT可配置成64×1的ROM。
在SLICEM中LUT可以配置成RAM,这个RAM写操作为同步,读操作为异步,与时钟信号无关,如果配置成同步读写的话需要提供额外的触发器。SLICEM里面的LUT跟SLICEL里面的LUT相比多了DI2,WA[6:1],CLK,WE这几个端口。做RAM用的时候,其中DI1,DI2是写数据输入端口,O5,O6同样是数据输出端口,支持一次性两bit或者单bit读写。A[6:1]为读地址,WA[6:1]为写地址,WE为写使用,CLK为时钟端口。

RAM32X1D_1 #(
      .INIT(32'h00000000),    // Initial contents of RAM
      .IS_WCLK_INVERTED(1'b0) // Specifies active high/low WCLK
   ) RAM32X1D_1_inst (
      .DPO(DPO),     // Read-only 1-bit data output
      .SPO(SPO),     // Rw/ 1-bit data output
      .A0(A0),       // Rw/ address[0] input bit
      .A1(A1),       // Rw/ address[1] input bit
      .A2(A2),       // Rw/ address[2] input bit
      .A3(A3),       // Rw/ address[3] input bit
      .A4(A4),       // Rw/ address[4] input bit
      .D(D),         // Write 1-bit data input
      .DPRA0(DPRA0), // Read-only address[0] input bit
      .DPRA1(DPRA1), // Read-only address[1] input bit
      .DPRA2(DPRA2), // Read-only address[2] input bit
      .DPRA3(DPRA3), // Read-only address[3] input bit
      .DPRA4(DPRA4), // Read-only address[4] input bit
      .WCLK(WCLK),   // Write clock input
      .WE(WE)        // Write enable input
   );

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

  1. 小于或等于64bit容量的的都用分布式实现
  2. 深度在64~128之间的,若无额外的block可用分布式RAM。 要求异步读取就使用分布式RAM。数据宽度大于16时用block ram.
  3. 分布式RAM有比block ram更好的时序性能。 分布式RAM在逻辑资源CLB中。而BLOCK RAM则在专门的存储器列中,会产生较大的布线延迟,布局也受制约

SLICEM中的LUT可以配置为32位移位寄存器,而无需使用slice中可用的触发器。以这种方式使用,每个LUT可以将串行数据延时1到32个时钟周期(A[4:0]为多少就是延时多少个时钟周期输出)。移入D(DI 1 LUT引脚)和移除Q31(MC31 LUT引脚)线路将LUT级联,以形成更大的移位寄存器。因此,SliceM中的四个LUT被级联可以产生高达128个时钟周期的延时。

 SRLC32E #(
      .INIT(32'h00000000),    // Initial contents of shift register
      .IS_CLK_INVERTED(1'b0)  // Optional inversion for CLK
   )
   SRLC32E_inst (
      .Q(Q),     // 1-bit output: SRL Data
      .Q31(Q31), // 1-bit output: SRL Cascade Data
      .A(A),     // 5-bit input: Selects SRL depth
      .CE(CE),   // 1-bit input: Clock enable
      .CLK(CLK), // 1-bit input: Clock
      .D(D)      // 1-bit input: SRL Data
   );

2、多路选择器
7系列FPGA LUT和F7AMUX、F7BMUX、F8MUX相配合可以实现以下类型的多路复选器:
使用1个LUT的4:1多路选择器(4输入,1输出)
使用2个LUT的8:1多路选择器(8输入,1输出),需要F7AMUX或者F7BMUX配合。
使用4个LUT的16:1多选择选器(16输入,1输出),需要F7AMUX、F7BMUX、F8MUX三个一起配合。这个多路选择是实现case语句用的的基础。

3、 进位链
进位链用于实现加法和减法运算的硬件电路,有固定的电路延时(在激光雷达测量TOF时间常用到)。
端口S[3:0]是(要求输入的两个数据a、b)数据的异或输入;端口DI[3:0]是数据的输入(a,b都可以),通过选择器判断是否是进位标志;MUXCY选择器作为向下一级输出标志的选择端口;

 CARRY4 CARRY4_inst (
      .CO(CO),         // 4-bit carry out
      .O(O),           // 4-bit carry chain XOR data out
      .CI(CI),         // 1-bit carry cascade input
      .CYINIT(CYINIT), // 1-bit carry initialization
      .DI(DI),         // 4-bit carry-MUX data in
      .S(S)            // 4-bit carry-MUX select input
   );

在这里插入图片描述
进位链是一个很重要的资源,这个在代码编译后可通过观察RTL图来进行查看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值