怎樣用linux做網(wǎng)站微信廣告投放推廣平臺
在開始前剛好我有一些資料,是我根據(jù)網(wǎng)友給的問題精心整理了一份「C語言的資料從專業(yè)入門到高級教程」,
點個關(guān)注在評論區(qū)回復“888”之后私信回復“888”,全部無償共享給大家!!!
用老石的一句話其實很好說明本質(zhì),cpu運行時固定數(shù)據(jù)流,底層硬件在變化。而fpga運行是固定底層硬件,數(shù)據(jù)流在硬件上流動。我知道很多初學者看到這段并不能理解,不是說fpga是可以對硬件進行編程的器件嗎?為什么運行的時候底層硬件是固定的?
這其實跟他們處理數(shù)據(jù)的思路有關(guān),cpu是通過指令集去完成指定操作,而fpga實現(xiàn)功能的思路與數(shù)字硬件電路一樣,需要加法器,那我就用與非門搭建一個加法器,只不過fpga內(nèi)部就把與或非這些邏輯門用查找表這一個器件替代了,查找表本質(zhì)就是ram,這個ram只能通過綜合軟件進行初始化,每次寫完程序后,使用vivado,quartus綜合,然后燒錄,燒錄的是什么?其實就是給這些查找表賦值,確定這些查找表的功能,有的查找表根據(jù)寫的代碼,可能是加法器,減法器,數(shù)據(jù)選擇器,比較器等等。當工程燒錄進fpga之后,那fpga內(nèi)的每個查找表的功能和連接方式其實就已經(jīng)確定了,其實fpga內(nèi)部的電路就已經(jīng)確定了,后續(xù)需要處理的數(shù)據(jù)只需要從輸入端流出到輸出端,就完成了相關(guān)了運算,所以說fpga運行是數(shù)據(jù)流在底層硬件上流動,因此速度就很快。
從而也得知編寫fpga本質(zhì)就是搭建數(shù)字電路,只不過使用查找表替換了與,或,非這些基本邏輯。比如在學數(shù)字電路的時候想要實現(xiàn)兩個加法運算,怎么做?如果不考慮速度,那就按順序執(zhí)行。如果想電路簡單,速度快,那是不是直接搭兩套加法器電路,每個電路完成一個加法運算,最后把兩個電路計算結(jié)果使用一個數(shù)據(jù)選擇器選擇輸出就行了?這其實跟fpga的思路是一樣的,想速度快直接搭兩套完全相同的電路實現(xiàn)兩個運算即可。
而單核cpu想要完成兩組運算怎么辦?那就只有按順序一組一組的來了。cpu他需要取址,譯碼等操作,每次只能執(zhí)行一條指令,當他取到需要運算的數(shù)據(jù)后,如果要執(zhí)行加法運算,就需要調(diào)用底層加法器,如果要執(zhí)行除法,就要調(diào)用除法器去完成,本質(zhì)是數(shù)據(jù)固定,根據(jù)運算類型不同調(diào)用底層不同硬件去計算,所以速度相對較慢。
當然現(xiàn)在cpu和fpga都已經(jīng)不是當年那個簡單的器件了,fpga內(nèi)部也早就不只有查找表,cpu內(nèi)部運算也進步了,但本質(zhì)的東西還是沒變。