FPGA認識相關 來自jimfan博客

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的整個芯片的佈局如下:

1.jpg

    如上圖所示,紅色的豎直條狀物爲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的結構:

  

2.jpg

    粗略的看一下,這個邏輯框圖還是相當的複雜的。不要緊,一步一步來。首先要抓住關鍵的東西。最左邊的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的操作(讀,寫)都是以時鐘爲基準,而且對於內部的存儲陣列來說,都是一個時鐘週期就可以把數據寫入,一個時鐘週期就可以把數據讀出。其時序圖如下圖所示:

co100qf23434-2.jpg

 

    如上圖所示,跟clk時鐘信號同步,wr_en有效兩個週期,此時wr_en有效時的datain被寫入到sram此時的addr對應的地址中。當rd_en有效時(有效兩個週期),此時rd_en有效時對應的地址數據裏的內容被讀出(讀出需要一個時鐘週期的延時)。

    在高速設計中,一般使用block ram而非基於LUT的分佈式ram,其中一個重要原因就是block ram在一般情況下更容易跑高時鐘頻率。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章