概述菜鳥(niǎo)們學(xué)習(xí)FPGA的一些常見(jiàn)誤區(qū)

2013-10-14 11:59 來(lái)源:電子信息網(wǎng) 作者:和靜

1、不熟悉FPGA的內(nèi)部結(jié)構(gòu),不了解可編程邏輯器件的基本原理。

FPGA為什么是可以編程的?恐怕很多菜鳥(niǎo)不知道,他們也不想知道。因?yàn)樗麄冇X(jué)得這是無(wú)關(guān)緊要的。他們潛意識(shí)的認(rèn)為可編程嘛,肯定就是像寫(xiě)軟件一樣啦。軟件編程的思想根深蒂固,看到Verilog或者VHDL就像看到C語(yǔ)言或者其它軟件編程語(yǔ)言一樣。一條條的讀,一條條的分析。如果這些菜鳥(niǎo)們始終拒絕去了解為什么 FPGA是可以編程的,不去了解FPGA的內(nèi)部結(jié)構(gòu),要想學(xué)會(huì)FPGA恐怕是天方夜譚。雖然現(xiàn)在EDA軟件已經(jīng)非常先進(jìn),像寫(xiě)軟件那樣照貓畫(huà)虎 也能綜合出點(diǎn)東西,但也許只有天知道EDA軟件最后綜合出來(lái)的到底是什么。也許點(diǎn)個(gè)燈,跑個(gè)馬還行。這樣就是為什么很多菜鳥(niǎo)學(xué)了N久以后依然是一個(gè)菜鳥(niǎo)的原因。

那么FPGA為什么是可以“編程”的呢?

首先來(lái)了解一下什么叫 “程”。其實(shí)“程”只不過(guò)是一堆具有一定含義的01編碼而已。編程,其實(shí)就是編寫(xiě)這些01編碼。只不過(guò)我們現(xiàn)在有了很多開(kāi)發(fā)工具,通常都不是直接編寫(xiě)這些 01編碼,而是以高級(jí)語(yǔ)言的形式來(lái)編寫(xiě),最后由開(kāi)發(fā)工具轉(zhuǎn)換為這種01編碼而已。對(duì)于軟件編程而言,處理器會(huì)有一個(gè)專門(mén)的譯碼電路逐條把這些01編碼翻譯為各種控制信號(hào),然后控制其內(nèi)部的電路完成一個(gè)個(gè)的運(yùn)算或者是其它操作。所以軟件是一條一條的讀,因?yàn)檐浖牟僮魇且徊揭徊酵瓿傻摹6鳩PGA的可編程,本質(zhì)也是依靠這些01編碼實(shí)現(xiàn)其功能的改變,但不同的是FPGA之所以可以完成不同的功能,不是依靠像軟件那樣將01編碼翻譯出來(lái)再去控制一個(gè)運(yùn)算電路,F(xiàn)PGA里面沒(méi)有這些東西。

FPGA內(nèi)部主要三塊:可編程的邏輯單元、可編程的連線和可編程的IO模塊。

1

可編程的邏輯單元是什么?其基本結(jié)構(gòu)某種存儲(chǔ)器(SRAM、FLASH等)制成的4輸入或6輸入1輸出地“真值表”加上一個(gè)D觸發(fā)器構(gòu)成。任何一個(gè)4輸入1輸出組合邏輯電路,都有一張對(duì)應(yīng)的“真值表”,同樣的如果用這么一個(gè)存儲(chǔ)器制成的4輸入1輸出地“真值表”,只需要修改其“真值表” 內(nèi)部值就可以等效出任意4輸入1輸出的組合邏輯。這些“真值表”內(nèi)部值是什么?就是那些01編碼而已。如果要實(shí)現(xiàn)時(shí)序邏輯電路怎么辦?這不又D觸發(fā)器嘛, 任何的時(shí)序邏輯都可以轉(zhuǎn)換為組合邏輯+D觸發(fā)器來(lái)完成。但這畢竟只實(shí)現(xiàn)了4輸入1輸出的邏輯電路而已,通常邏輯電路的規(guī)模那是相當(dāng)?shù)拇笈?。那怎么辦呢?這個(gè)時(shí)候就需要用到可編程連線了。在這些連線上有很多用存儲(chǔ)器控制的鏈接點(diǎn),通過(guò)改寫(xiě)對(duì)應(yīng)存儲(chǔ)器的值就可以確定哪些線是連上的而哪些線是斷開(kāi)的。這就可以把很多可編程邏輯單元組合起來(lái)形成大型的邏輯電路。最后就是可編程的IO,這其實(shí)是FPGA作為芯片級(jí)使用必須要注意的。任何芯片都必然有輸入引腳和輸出引腳。有可編程的IO可以任意的定義某個(gè)非專用引腳(FPGA中有專門(mén)的非用戶可使用的測(cè)試、下載用引腳)為輸入還是輸出,還可以對(duì)IO的電平標(biāo)準(zhǔn)進(jìn)行設(shè)置。
1 2 3 4 > 
FPGA

一周熱門(mén)