0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Xilinx FPGA中的基礎(chǔ)邏輯單元

FPGA設(shè)計論壇 ? 2022-12-27 15:54 ? 次閱讀

Xilinx FPGA的組成部分

本文是以Xilinx Kintex UltraScale+ 系列為參考所寫,其他系列有所不同,可以參考相應(yīng)的user guide文檔。

Xilinx家的FPGA有這么些基本組成部分:

Configurable Logic Block (CLB)可編程邏輯塊

Block Memory存儲器

DSP數(shù)字信號處理器

Transceivers收發(fā)器

I/O pins輸入輸出端口

從Implemented Design中可以看到FPGA中資源大致分布如下。中間藍(lán)色是CLB可編程邏輯塊、DSP或BRAM,兩側(cè)的彩色矩形塊是I/O接口和收發(fā)器,劃分的方塊是不同的時鐘
7ed04b56-85a4-11ed-bfe3-dac502259ad0.jpg

Configurable Logic Block (CLB)可編程邏輯塊

CLB是FPGA內(nèi)部實現(xiàn)可編程性的主要成分,其中可以包括:

LUT查找表

高速算術(shù)邏輯

分布式存儲distributed memory或移位寄存器shift register logic (SRL) ability

Look-Up Table (LUT)查找表

每個CLB中包含一個slice,每個slice提供8個6輸入查找表LUT和16個寄存器(slice就是CLB中一個小的分割,有的CLB中有兩個,不知道怎么翻譯這個詞)。每個6輸入LUT可以被設(shè)置成1個6輸入查找表或者2個5輸入查找表??梢赃@么配置的原因跟LUT結(jié)構(gòu)有關(guān)。
7ee4e624-85a4-11ed-bfe3-dac502259ad0.jpg
上圖是一個4輸入查找表的結(jié)構(gòu),[ABCD]作為4位二進制輸入,總共有24=16種輸入,每種輸入對應(yīng)的1位輸出就存在左側(cè)的寄存器中,因此查找表可以完成每一種二進制邏輯。在右側(cè)可以看到一個4輸入LUT其實是兩個3輸入LUT再加上一個2路復(fù)用器MUX,最后的MUX由新加入的一位控制,如果要拆開就把兩個3輸入LUT的結(jié)果繞開最后的MUX輸出即可。同樣就可以理解6輸入LUT拆分成兩個5輸入LUT的原因。

之前介紹Altera的ALM時說過,LUT太深或太淺都不好,太深需要很多寄存器,而且MUX層數(shù)太多,延遲嚴(yán)重;太淺不方便配置邏輯,浪費過多空間。A家和X家根據(jù)客戶實際使用情況調(diào)查過之后得到的結(jié)論相同,6輸入LUT目前來說是最平衡的,如果需要的話就拆成小的LUT,一般以6輸入為主。

LUT的輸出如下,O6是作為6輸入LUT的結(jié)果,O5是作為兩個5輸入LUT的結(jié)果,有2位。它的結(jié)果可以直接作為slice的輸出,也可以傳遞到寄存器中儲存。而存入寄存器的數(shù)據(jù)也可以不經(jīng)過LUT,直接從外界讀取。
7f017a46-85a4-11ed-bfe3-dac502259ad0.jpg
Xilinx的Toolchain會自動配置這部分內(nèi)容,但是了解細(xì)節(jié)可以更好的利用FPGA中的資源,比如下面三段代碼,第一段只用上了LUT查找表輸出,第二段繞過了LUT輸入到寄存器中,而第三段同時用上了LUT查找表和寄存器,可以說是對slice利用率最高的。


// Code 1

wire [1:0] output;

wire [5:0] input;

assign output[0] = input[0]&input[1]|input[2];

assign output[1] = input[3]|input[4]^input[5];


// Code 2

wire clk, rst;

reg [1:0] output;

reg [1:0] input; // Coming from previous registers

always @(posedge clk or posedge rst) begin

if(rst)

output <= 2'b00;

else

output <= input;

end


// Code 3

wire clk, rst;

reg [1:0] output;

wire [5:0] input;

always @(posedge clk or posedge rst) begin

if(rst)

output <= 2'b00;

else begin

output[0] <= input[0]&input[1]|input[2];

output[1] <= input[3]|input[4]^input[5];

end

end

在project比較小的時候自然不用注意這么多,project大大時候toolchain有一定的能力幫你平衡這些資源利用,這種摳牙縫的手段在FPGA特別小,或者代碼太大,或者時鐘很高時就有用了。在時鐘高時,為了盡可能縮短信號之間的布線距離,能用寄存器緩沖的就要盡量用,但只是用pipeline的形式加入相當(dāng)于浪費了一些slice中的LUT部分,最好的辦法就是把寄存器加在邏輯中間,這樣利用率就提高了。比如在不優(yōu)化的情況下,第二段比第一段代碼更高效,時鐘環(huán)境更好(自己做總比不知道toolchain做了什么要好):


// Code 1

wire clk, rst;

wire [5:0] input;

reg [1:0] pipeline;

reg output;

always @(posedge clk or posedge rst) begin

if(rst) begin

pipeline <= 2'b00;

output <= 1'b0;

end

else begin

pipeline[0] <= &input; // And every bits from input

pipeline[1] <= pipeline[0]; // Pipeline it

output <= pipeline[1];

end

end


// Code 2

wire clk, rst;

wire [5:0] input;

reg [1:0] pipeline;

reg output;

always @(posedge clk or posedge rst) begin

if(rst) begin

pipeline <= 2'b00;

output <= 1'b0;

end

else begin

pipeline[0] <= &input[2:0]; // And first 3 bits from input

pipeline[1] <= &input[5:3]; // And last 3 bits from input

output <= pipeline[0] & pipeline[1];

end

end

高速算術(shù)邏輯

和Altera中的ALM相似,Xilinx的slice中也有小的加法器,使得小位數(shù)的加法、乘法、計數(shù)器可以在其中實現(xiàn)。但是高位數(shù)的算術(shù)運算就不適合在其中實現(xiàn)了,容易出現(xiàn)各種時鐘問題,而且浪費大量邏輯資源,這種運算最好交給之后的DSP資源來實現(xiàn)。

分布式存儲distributedmemory或移位寄存器shift register logic (SRL) ability

Slice也分兩種,前面介紹的是普通的SLICEL (logic),也就是邏輯slice,還有一種是強化了存儲功能的SLICEM (memory),也就是存儲slice。SLICEM也可以當(dāng)作SLICEL用,擁有SLICEL的一切功能,但SLICEM添加了地址線write address端口和寫使能write enable端口,使得6輸入LUT中的26=64個寄存器可以被配置成64-bits RAM,8個6輸入LUT合起來就可以是一個512-bit RAM。

7f135aae-85a4-11ed-bfe3-dac502259ad0.jpg

Xilinx還有一個特殊的設(shè)計,可以讓這64 bits互相連接變成一個移位寄存器,比起使用后面的register寄存器利用率高很多。舉個栗子的話:


// Shift registers

genvar i;

wire [3:0] addr_1 = 4'd15;

wire [41:0] D_1;

wire [41:0] Q_1;

assign D_1 = input;

assign output = Q_1;

// 42bit X 16

generate

for(i=0; i<42; i=i+1) begin : Shift

SRL16E #(

.INIT(16'h0000), // Initial contents of shift register

.IS_CLK_INVERTED(1'b0) // Optional inversion for CLK

)

Shift_UP2_1 (

.Q(Q_1[i]), // 1-bit output: SRL Data

.CE(1'b1), // 1-bit input: Clock enable

.CLK(clk), // 1-bit input: Clock

.D(D_1[i]), // 1-bit input: SRL Data

// Depth Selection inputs: A0-A3 select SRL depth

.A0(addr_1[0]),

.A1(addr_1[1]),

.A2(addr_1[2]),

.A3(addr_1[3])

);

end

endgenerate

也許有人會想,為什么要考慮那么多小技巧把代碼變復(fù)雜,硬件編程跟軟件編程的不同就在這里,用實際電路的思維來考慮,它的實現(xiàn)情況和用指令集數(shù)據(jù)庫的軟件編程有很多不同點。寫簡單的代碼有時候被編譯后就變成低效的結(jié)構(gòu)。新手寫RTL代碼會出現(xiàn)a=b*c;這種,每次看到都會頭皮發(fā)麻。

因此設(shè)計RTL時,推薦這種優(yōu)化步驟:

盡量少用reset,并且不要同時用同步reset和異步reset

寄存器很多,能用盡量用,對時鐘環(huán)境好(不要用always *,同樣看到頭皮發(fā)麻)

寫寄存器的控制信號簡單點,盡量也用寄存器pipeline一下

移位寄存器比較特殊,不要用復(fù)位信號,盡量用上LUT中的SRL,reset信號會讓tool避免用SRL

少于64bits的存儲用SLICEM來做,Xilinx tool中一般叫LUTRAM

位數(shù)較高的加法、計數(shù)器,以及盡可能所有常常調(diào)用的乘法用DSP來實現(xiàn)

Block Memory存儲器

在CLB中的LUTRAM之外,Xilinx芯片中的內(nèi)置存儲器就是BRAM存儲器了。每個BRAM可以被配置成兩個獨立的18kb RAM或者一個36kb RAM,每個BRAM有兩個獨立的讀寫端口

7f274960-85a4-11ed-bfe3-dac502259ad0.jpg 如果一個36kb的BRAM不夠用,還可以把多個BRAM連接在一起:

7f3a7b16-85a4-11ed-bfe3-dac502259ad0.jpg

DSP數(shù)字信號處理器

Xilinx的FPGA中高位加法和乘法主要是由DSP數(shù)字信號處理器承擔(dān)的,其結(jié)構(gòu)如下

7f5b9bb6-85a4-11ed-bfe3-dac502259ad0.jpg 根據(jù)不同的配置,可以構(gòu)成一系列公式,比如下面幾種 P = ( A ± D ) ? B + C P = B 2 + P P = A ± D ± C P=(Apm D)*B+C P=B^2+P P=Apm Dpm CP=(A±D)?B+CP=B2+PP=A±D±C

和Altera FPGA中的DSP相比,兩個乘法器變成一個,多了平方選項和XOR邏輯,以及比較邏輯。相比起來Xilinx FPGA中的DSP雖然集成度沒有那么高,但靈活性更高,更方便配置成各種需要的形式,設(shè)計FIR這類結(jié)構(gòu)時,可以很明顯感受到Xilinx中的DSP設(shè)計出的結(jié)構(gòu)復(fù)雜度低很多,不需要考慮兩個乘法器帶來的協(xié)同性問題。

調(diào)用Xilinx的DSP有比較多的注意事項,代碼也相對較長,之后可以單獨寫一篇。

Transceivers收發(fā)器

在Kintex UltraScale+系列中的收發(fā)器有Gigabit Transceivers H/Y (GTH/GTY)兩種,后面的H和Y代表不同的傳輸速率,具體是哪個單詞沒有找到。這些高速收發(fā)器可以承擔(dān)不同的接口任務(wù),常見的有PCIe、SFP、10G網(wǎng)、SATA等。

讓傳輸速率更高一直是通信行業(yè)的核心問題,這個毋庸置疑,無論哪種接口,要在FPGA上實現(xiàn),不可避免的要用到這些收發(fā)器。

這里的細(xì)節(jié)太多,全寫一遍可以出一本書,我也只懂些皮毛,這里放一張大概的結(jié)構(gòu)圖,挖個坑等我邊寫邊填。 7f6df1b2-85a4-11ed-bfe3-dac502259ad0.jpg

I/O pins輸入輸出端口

在Xilinx UltraScale系列中有三種I/O bank,一種是High-performance (HP)高性能、High-density (HD)高密度、High-range(HR)大范圍。HP可以滿足1.8V以下信號的性能需求,HD可以在支持低速接口的情況下盡可能減小面積,HR可以支持更多的3.3V以下標(biāo)準(zhǔn)。

7f816756-85a4-11ed-bfe3-dac502259ad0.jpg7f95de02-85a4-11ed-bfe3-dac502259ad0.jpg

總結(jié)

在我看來,和Altera的FPGA相比,Xilinx的FPGA與之最大區(qū)別就是DSP的不同。雖說兩個公司對一些資源的名稱不同,分割方式不同,但其邏輯的主體LUT沒有太大區(qū)別,BRAM的區(qū)別也不大,只有DSP有結(jié)構(gòu)上的不同。至于對外的接口,個人認(rèn)為對內(nèi)部邏輯影響不大。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • dsp
    dsp
    +關(guān)注

    關(guān)注

    551

    文章

    7823

    瀏覽量

    346813
  • FPGA
    +關(guān)注

    關(guān)注

    1620

    文章

    21509

    瀏覽量

    598860
  • Xilinx
    +關(guān)注

    關(guān)注

    70

    文章

    2136

    瀏覽量

    120373
  • Altera
    +關(guān)注

    關(guān)注

    37

    文章

    772

    瀏覽量

    153668
  • 可編程邏輯
    +關(guān)注

    關(guān)注

    7

    文章

    514

    瀏覽量

    44009

原文標(biāo)題:Xilinx FPGA中的基礎(chǔ)邏輯單元

文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設(shè)計論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    基于BIST利用ORCA結(jié)構(gòu)測試FPGA邏輯單元的方法

    Reconfigurable Cell Array)結(jié)構(gòu)測試FPGA邏輯單元PLB(Programmable Logic Block)的方法,該方法對邏輯
    的頭像 發(fā)表于 11-28 09:02 ?4312次閱讀
    基于BIST利用ORCA結(jié)構(gòu)測試<b class='flag-5'>FPGA</b><b class='flag-5'>邏輯</b><b class='flag-5'>單元</b>的方法

    FPGA學(xué)習(xí)筆記:邏輯單元的基本結(jié)構(gòu)

    邏輯單元FPGA器件內(nèi)部,用于完成用戶邏輯的最小單元。
    的頭像 發(fā)表于 10-31 11:12 ?1405次閱讀
    <b class='flag-5'>FPGA</b>學(xué)習(xí)筆記:<b class='flag-5'>邏輯</b><b class='flag-5'>單元</b>的基本結(jié)構(gòu)

    如何在LUT和邏輯元件之間以及邏輯元件和邏輯單元之間進行交換

    的話,請您為這些家庭提供一個很好的估計?如果可能的話,可以使用從Xilinx邏輯單元轉(zhuǎn)換為altera的邏輯
    發(fā)表于 01-08 10:18

    如何解決通用Xilinx FPGA DSP片和邏輯單元上的問題?

    喜據(jù)我所知,有些xilinx FPGA具有DSP Slice(DSP48E)。在fpga設(shè)計摘要,我看到切片寄存器,切片LUT,占用切片等以及DSP48E的單獨行。我的問題是 - 1
    發(fā)表于 04-04 06:36

    【源碼】FPGA硬件基礎(chǔ)篇--FPGA邏輯單元_CLB

    `FPGA邏輯單元_CLB_項目代碼文件`
    發(fā)表于 03-31 11:18

    低功耗時鐘門控算術(shù)邏輯單元在不同FPGA的時鐘能量分析

    低功耗時鐘門控算術(shù)邏輯單元在不同FPGA的時鐘能量分析
    發(fā)表于 11-19 14:50 ?0次下載

    數(shù)字設(shè)計FPGA應(yīng)用:FPGA的基本邏輯結(jié)構(gòu)

    本課程以目前流行的Xilinx 7系列FPGA的開發(fā)為主線,全面講解FPGA的原理及電路設(shè)計、Verilog HDL語言及VIVADO的應(yīng)用,并循序漸進地從組合邏輯、時序
    的頭像 發(fā)表于 12-03 07:04 ?2376次閱讀
    數(shù)字設(shè)計<b class='flag-5'>FPGA</b>應(yīng)用:<b class='flag-5'>FPGA</b>的基本<b class='flag-5'>邏輯</b>結(jié)構(gòu)

    xilinx7系列FPGA的7種邏輯代碼配置模式

    今天咱們聊聊xilinx7系列FPGA配置的相關(guān)內(nèi)容??偹苤?b class='flag-5'>FPGA上電后,其工作的邏輯代碼需要從外部寫入FPGA,
    發(fā)表于 10-20 09:02 ?2933次閱讀
    <b class='flag-5'>xilinx</b>7系列<b class='flag-5'>FPGA</b>的7種<b class='flag-5'>邏輯</b>代碼配置模式

    英特爾對FPGA產(chǎn)品發(fā)展仍有高度重視 已搶先Xilinx一步率先量產(chǎn)

    FPGA大廠Xilinx于今年8月發(fā)表全球最多邏輯單元FPGA產(chǎn)品VU19P后,英特爾(Intel)也于10月底發(fā)表Stratix 10
    的頭像 發(fā)表于 11-21 16:15 ?3182次閱讀

    FPGA硬件基礎(chǔ)知識FPGA邏輯單元工程文件免費下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是FPGA硬件基礎(chǔ)知識FPGA邏輯單元工程文件免費下載。
    發(fā)表于 12-10 15:00 ?16次下載

    FPGA硬件基礎(chǔ)之FPGA邏輯單元的工程文件免費下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是FPGA硬件基礎(chǔ)之FPGA邏輯單元的工程文件免費下載。
    發(fā)表于 12-10 15:00 ?19次下載

    基于SRAM技術(shù)的Xilinx FPGA具有較高的邏輯密度

    基于SRAM技術(shù)的Xilinx FPGA具有較高的邏輯密度,消耗較高功率; 基于閃存技術(shù)的Xilinx CPLD具有較低的邏輯密度,功耗也比
    的頭像 發(fā)表于 06-01 10:55 ?2302次閱讀

    一文詳解xilinx CLB基本邏輯單元

    CLB是xilinx基本邏輯單元,每個CLB包含兩個slices,每個slices由4個(A,B,C,D)6輸入LUT和8個寄存器組成。
    的頭像 發(fā)表于 04-24 14:48 ?4161次閱讀

    XILINX可編程邏輯?7系列FPGA

      XILINX是可編程邏輯芯片,由多個系列的性能可以滿足一般的邏輯設(shè)計要求,如賽靈思7系列,Xilinx?7系列FPGA由四個
    的頭像 發(fā)表于 11-03 14:39 ?1798次閱讀

    一款售價約280美元的Xilinx Artix-7100T FPGA開發(fā)板

    FPGA采用的是ArtyA7,一款售價約 280 美元的 Xilinx Artix-7100T FPGA 開發(fā)板,采用 28 納米工藝,具有 101,440 個邏輯
    的頭像 發(fā)表于 11-17 11:19 ?1440次閱讀