FPGA為什麼能實現邏輯運算

2021-10-07 18:35:45 字數 2223 閱讀 2224

首先回答題目問題:fpga的邏輯結果不是算出來的,是查出來的。也就是說fpga的邏輯功能實現是基於查詢表的。

cpld,複雜可程式設計邏輯器件。邏輯陣列的每乙個交叉點都可以通過程式設計實現導通從而實現與邏輯,乘積項選擇矩陣可實現或邏輯。也就是cpld的組合邏輯都是直接通過內部的與非門實現的

fpga,現場可程式設計門陣列,前面說是基於查詢表,那什麼是查詢表?

查詢表可以理解為儲存了邏輯表示式真值表的ram,我們將設計好的邏輯電路的真值表存在查詢表裡面。每次根據輸入訊號查詢對應的結果,然後輸出就可以了。所以說fpga的工作像乙個ram,根據不同的輸入訊號(位址)輸出相應的資料。

乙個4輸入查詢表如下所示

現在實現乙個y=a&b+c+d的組合邏輯功能,verilog語句為:

reg y;

reg [3:

0] i ;

always@(

*)begin

y=(i[0]

& i[1]

)| i[2]

| i[3]

;end

邏輯表示式的真值表如下圖

將這一張表存到fpga中,4個輸入訊號組成4位位址線,根據不同的位址取出對應的資料,這就實現了「」邏輯運算「」功能。

如果實現時序邏輯功能,在查詢表輸出前加一級觸發器即可,例如實現如下功能的結構為

典型的fpga開發流程為:

設計定義=>設計輸入=>前**=>綜合=>實現和布局佈線=>後**

引用xilinx大學計畫中的一段描述:

首先須要明確的是,hdl 語言並不是針對硬體設計而開發的語言,只不過目前被設計人員用來設計硬體。這是因為 hdl 語言只是硬體描述語言,並不是「硬體設計語言(hardware design language)」,換句話說任何符合 hdl 語法標準的**都是對硬體行為的一種描述,但不一定是可直接對應成電路的設計資訊。

行為描述可以基於不同的層次,如系統級,演算法級,暫存器傳輸級(rtl)、門級等等。以目前大部分 eda 軟體的綜合能力來說,只有 rtl 或更低層次的行為描述才能保證是可綜合的。

例如要實現兩個變數相除的運算時,在**中寫下 c=a/b 這樣的語句,可以發現在功能中,該句話可以正確執行,但任何 eda 軟體都不能將其綜合成硬體電路。讀者可以思考其中的原因,在計算除法時,需要從高位到低位逐次試除、求餘、移位,需要經過多次運算才能得到最終結果;此外試除和求餘需要減法器,商數和餘數的中間結果必須有暫存器儲存;顯然這麼多的計算不可能在乙個時鐘週期裡完成,需要經過多次反覆操作才能完成。因此,c=a/b 這樣的語句相對於 eda 軟體的能力,顯得太抽象,因而無法將其轉化為硬體邏輯。

對於一段**,如果設計者本身都不能想象出乙個較直觀的硬體實現方法,那eda 軟體肯定也不行。例如加法器、多路選擇器是大家都很熟悉的電路,所以類似 a+b-c,(a>b)?c:d 這樣的運算一定可以綜合。而除法、求平方根、對數以及三角函式等較複雜的運算,必須通過一定的演算法實現,並沒有直觀簡單的實現電路,因而可以判斷那些計算式是不能綜合的,必須按其相應的演算法寫出更具體的**才能實現。此外,硬體無法支援的行為描述,當然也不能被綜合(例如在 fpga 內部實現 ddr sdram 儲存器那樣的雙延觸發邏輯就是不可綜合的)。

c 實現命題邏輯運算

離散數學的乙個簡單實驗 實現析取,合取,蘊含,等值等 如下 include include include using namespace std 實現否定 int neg int p else return flag 實現合取 int conj int p,int q else return fl...

編輯實現邏輯運算和迴圈計數

原題如下 程式設計實現 設n為 1 1500 間的所有整數,按照如下要求計算和輸出。1 判斷並輸出n中能被3和 5和7同時整除的數的個數 2 判斷並輸出n中能被3或 5或7整除的數的個數 3 判斷並輸出 n中能被3或 5或7整除的所有數的累加和 4 判斷並輸出 n中能被3或 5或7整除的前 20個數...

邏輯運算子有什麼用?

邏輯運算子有什麼用?用於連線 兩個boolean型別的表示式。與 或 符號的運算特點 true true true true false false false true false false false false 運算規律 運算的兩邊只有有乙個是false,結果肯定是false。只有兩邊都為t...