基礎002_V7-CLB

1、綜述bash

參考ug474.pdfapp

7系列中,一個CLB包含兩個slice:
每一個CLB的資源:
CLB可配置的主要功能:

2、主要功能異步

LUT是基本單元,例如選擇器assign muxout =  (sel) ? din_0: din_1;
  A-shift register
每一個Slice對應4個LUT,而每一個LUT可配32bit的移位寄存器:
對應指令:
always @(posedge clk)
        srl <= {srl[31:0],din};
assign dout = srl[20];

   

當添加復位信號:分佈式

always@ (posedge clk)
  if(rst)
    srl <= 32'd0;
  else
    srl <= {srl[31:0],din]};
assign dout = srl[20]

  

  爲何結構不一致?由於LUT沒有同步復位控制輸入端,所以綜合器沒法將代碼綜合成有LUT實現的結構,所以寫代碼須要根據相應結構編寫。ide

每一個Slice可擴展爲128bit的移位寄存器:
  B-Distributed RAM
每一個LUT爲6選1,或2個5選1,其中SLICEM掛distributed RAM以及Shift Registers,關於Distributed RAM可實現的功能:

如下列舉了一些適用於分佈式RAM的狀況:測試

  1. 深度小於64-bit
  2. 在深度大於64-bit小於128-bit狀況下,有時延要求並須要異步輸出(其clock-to-out時間小,而且佈線比Block RAM自由)
  3. 數據寬度小於16-bit
(我的觀點:這裏配置RAM調用FPGA內部邏輯資源,而Block RAM blocks內部的RAM只能做爲RAM使用,所以在時序沒有要求,且固定RAM容量有剩餘的狀況下,不建議配置CLB中的RAM,固定RAM容量不夠,可用CLB配置做爲補充)。ui

  C-Multiplexerspa

  CLB還有一個重要功能:多路複用器(multiplexer)。code

在一個Slice中包含有三個多路複用器:F7MUXA、F7MUXB和F8MUX。其中F7MUXA組合LUT A和LUT B成爲7輸入LUT,F7MUXB組合LUT C和LUT D成爲7輸入LUT,而F8MUX組合1個Slice中的4個LUT成爲8輸入LUT。blog

所以經過F7MUXA、F7MUXB和F8MUX的搭配,1個Slice能夠實現4:一、8:1和16:1多路複用器,

  • 一個LUT實現4:1多路複用器
  • 2個LUT實現8:1多路複用器
  • 4個LUT實現16:1多路複用器

如圖一、二、3所示:

   D-Carry logic

 每一個slice有4bits,每一個bit包含一個多路複用和一個專用異或門XOR(用於加/減運算): 

每一個SLICE的Carry logic圖:

3、原語

具體可參考ug953.pdf,原語列表:

查看CLB相關的原語用法:

 便可按須要進行調用,例如每一個LUT對應32bit的shift register logic,查看原語:

移位計算方法:

接口說明:

模板調用:

測試:

module CLB_SRL(clk,rst,din,dout);
input clk,rst;
input din;
output dout;
// SRLC32E: 32-bit variable length cascadable shift register LUT (Mapped to a SliceM LUT6)
// with clock enable
// 7 Series
// Xilinx HDL Libraries Guide, version 2015.2
SRLC32E #(
.INIT(32'h00000000) // Initial Value of Shift Register
) SRLC32E_inst (
.Q(dout), // SRL data output
.Q31(1'b0), // SRL cascade output pin
.A(32'h00010100), // 5-bit shift depth select input
.CE(1'b1), // Clock enable input
.CLK(clk), // Clock input
.D(din) // SRL data input
);
// End of SRLC32E_inst instantiation

endmodule

  綜合以後的線路圖:

相關文章
相關標籤/搜索