FPGA礦機如何製作
『壹』 利用FPGA資源製作想要的位寬、深度和不同讀寫埠的RAM器件。 即完成FPGA中RAM的定製,請問怎麼做
這是我以前寫的一個標准雙埠ram,可以作為單埠或者雙埠用
library ieee;
use ieee.std_logic_1164.all;
use IEEE.STD_LOGIC_ARITH.all;
use IEEE.STD_LOGIC_UNSIGNED.all;
entity blk_mem is
generic(
data_width : integer := 8; -- used to change the memory data's width
addr_width : integer := 11); -- used to change the memery address' width
port (
clka : in std_logic;
dina : in std_logic_vector(data_width - 1 downto 0);
addra : in std_logic_vector(addr_width - 1 downto 0);
ena : in std_logic;
wea : in std_logic;
douta : out std_logic_vector(data_width - 1 downto 0);
clkb : in std_logic;
dinb : in std_logic_vector(data_width - 1 downto 0);
addrb : in std_logic_vector(addr_width - 1 downto 0);
enb : in std_logic;
web : in std_logic;
doutb : out std_logic_vector(data_width - 1 downto 0));
end blk_mem;
architecture blkmem of blk_mem is
type ram_template is array(2 ** addr_width - 1 downto 0) of std_logic_vector(data_width - 1 downto 0);
shared variable ram1 : ram_template;
begin -- blkmem
process (clka)
begin -- process
if clka'event and clka = '1' then -- rising clock edge
if ena = '1' then
douta <= ram1(conv_integer(addra));
if wea = '1' then
ram1(conv_integer(addra)) := dina;
end if;
else
douta <= (others => '0');
end if;
end if;
end process;
process (clkb)
begin -- process
if clkb'event and clkb = '1' then -- rising clock edge
if enb = '1' then
doutb <= ram1(conv_integer(addrb));
if web = '1' then
ram1(conv_integer(addrb)) := dinb;
end if;
else
doutb <= (others => '0');
end if;
end if;
end process;
end blkmem;
『貳』 FPGA做視頻處理 需要哪些資料
我常年擔任多個有關FPGA學習研討的QQ群管理員,長期以來很多新入群的菜鳥們總是在重復的問一些非常簡單但是又讓新手困惑不解的問題。作為管理員經常要給這些菜鳥們普及基礎知識,但是非常不幸的是很多菜鳥懷著一種浮躁的心態來學習FPGA,總是急於求成。再加上國內大量有關FPGA的垃圾教材的誤導,所以很多菜鳥始終無法入門。
為什麼大量的人會覺得FPGA難學?作為著名FPGA提供商Altera授權的金牌培訓師,本管理員決心開貼來詳細講一下菜鳥覺得FPGA難學的幾大原因。
1、不熟悉FPGA的內部結構,不了解可編程邏輯器件的基本原理。
FPGA為什麼是可以編程的?恐怕很多菜鳥不知道,他們也不想知道。因為他們覺得這是無關緊要的。他們潛意識的認為可編程嘛,肯定就是像寫軟體一樣啦。軟體編程的思想根深蒂固,看到Verilog或者VHDL就像看到C語言或者其它軟體編程語言一樣。一條條的讀,一條條的分析。如果這些菜鳥們始終拒絕去了解為什麼FPGA是可以編程的,不去了解FPGA的內部結構,要想學會FPGA恐怕是天方夜譚。雖然現在EDA軟體已經非常先進,像寫軟體那樣照貓畫虎也能綜合出點東西,但也許只有天知道EDA軟體最後綜合出來的到底是什麼。也許點個燈,跑個馬還行。這樣就是為什麼很多菜鳥學了N久以後依然是一個菜鳥的原因。
那麼FPGA為什麼是可以「編程」的呢?首先來了解一下什麼叫「程」。啟示「程」只不過是一堆具有一定含義的01編碼而已。編程,其實就是編寫這些01編碼。只不過我們現在有了很多開發工具,通常都不是直接編寫這些01編碼,而是以高級語言的形式來編寫,最後由開發工具轉換為這種01編碼而已。對於軟體編程而言,處理器會有一個專門的解碼電路逐條把這些01編碼翻譯為各種控制信號,然後控制其內部的電路完成一個個的運算或者是其它操作。所以軟體是一條一條的讀,因為軟體的操作是一步一步完成的。
而FPGA得可編程,本質也是依靠這些01編碼實現其功能的改變,但不同的是FPGA之所以可以完成不同的功能,不是依靠像軟體那樣將01編碼翻譯出來再去控制一個運算電路,FPGA裡面沒有這些東西。FPGA內部主要三塊:可編程的邏輯單元、可編程的連線和可編程的IO模塊。可編程的邏輯單元是什麼?其基本結構某種存儲器(SRAM、FLASH等)製成的4輸入或6輸入1輸出地「真值表」加上一個D觸發器構成。任何一個4輸入1輸出組合邏輯電路,都有一張對應的「真值表」,同樣的如果用這么一個存儲器製成的4輸入1輸出地「真值表」,只需要修改其「真值表」內部值就可以等效出任意4輸入1輸出的組合邏輯。這些「真值表」內部值是什麼?就是那些01編碼而已。如果要實現時序邏輯電路怎麼辦?這不又D觸發器嘛,任何的時序邏輯都可以轉換為組合邏輯 D觸發器來完成。但這畢竟只實現了4輸入1輸出的邏輯電路而已,通常邏輯電路的規模那是相當的大哦。那怎麼辦呢?這個時候就需要用到可編程連線了。在這些連線上有很多用存儲器控制的鏈接點,通過改寫對應存儲器的值就可以確定哪些線是連上的而哪些線是斷開的。者就可以把很多可編程邏輯單元組合起來形成大型的邏輯電路。最後就是可編程的IO,這其實是FPGA作為晶元級使用必須要注意的。任何晶元都必然有輸入引腳和輸出引腳。有可編程的IO可以任意的定義某個非專用引腳(FPGA中有專門的非用戶可使用的測試、下載用引腳)為輸入還是輸出,還可以對IO的電平標准進行設置。
總歸一句話,FPGA之所以可編程是因為可以通過特殊的01代碼製作成一張張「真值表」,並將這些「真值表」組合起來以實現大規模的邏輯功能。不了解FPGA內部結構,就不能明白最終代碼如何變到FPGA裡面去的。也就無法深入的了解如何能夠充分運用FPGA。現在的FPGA,不單單是有前面講的那三塊,還有很多專用的硬體功能單元,如何利用好這些單元實現復雜的邏輯電路設計,是從菜鳥邁向高手的路上必須要克服的障礙。而這一切,還是必須先從了解FPGA內部邏輯及其工作原理做起。
2、錯誤理解HDL語言,怎麼看都看不出硬體結構。
HDL語言的英語全稱是:Hardware Description Language,注意這個單詞Description,而不是Design。老外為什麼要用Description這個詞而不是Design呢?因為HDL確實不是用用來設計硬體的,而僅僅是用來描述硬體的。描述這個詞精確地反映了HDL語言的本質,HDL語言不過是已知硬體電路的文本表現形式而已,只是將以後的電路用文本的形式描述出來而已。而在編寫語言之前,硬體電路應該已經被設計出來了。語言只不過是將這種設計轉化為文字表達形式而已。但是很多人就不理解了,既然硬體都已經被設計出來了,直接拿去製作部就完了,為什麼還要轉化為文字表達形式再通過EDA工具這些麻煩的流程呢?其實這就是很多菜鳥沒有了解設計的抽象層次的問題,任何設計包括什麼服裝、機械、廣告設計都有一個抽象層次的問題。就拿廣告設計來說吧,最初的設計也許就是一個概念,設計出這個概念也是就是一個點子而已,離最終拍成廣告還差得很遠。
硬體設計也是有不同的抽象層次,沒一個層次都需要設計。最高的抽象層次為演算法級、然後依次是體系結構級、寄存器傳輸級、門級、物理版圖級。使用HDL的好處在於我們已經設計好了一個寄存器傳輸級的電路,那麼用HDL描述以後轉化為文本的形式,剩下的向更低層次的轉換就可以讓EDA工具去做了,者就大大的降低了工作量。這就是可綜合的概念,也就是說在對這一抽象層次上硬體單元進行描述可以被EDA工具理解並轉化為底層的門級電路或其他結構的電路。在FPGA設計中,就是在將這以抽象層級的意見描述成HDL語言,就可以通過FPGA開發軟體轉化為問題1中所述的FPGA內部邏輯功能實現形式。HDL也可以描述更高的抽象層級如演算法級或者是體系結構級,但目前受限於EDA軟體的發展,EDA軟體還無法理解這么高的抽象層次,所以HDL描述這樣抽象層級是無法被轉化為較低的抽象層級的,這也就是所謂的不可綜合。
所以在閱讀或編寫HDL語言,尤其是可綜合的HDL,不應該看到的是語言本身,而是要看到語言背後所對應的硬體電路結構。如果看到的HDL始終是一條條的代碼,那麼這種人永遠擺脫不了菜鳥的宿命。假如哪一天看到的代碼不再是一行行的代碼而是一塊一塊的硬體模塊,那麼恭喜脫離了菜鳥的級別,進入不那麼菜的鳥級別。
3、FPGA本身不算什麼,一切皆在FPGA之外
這一點恐怕也是很多學FPGA的菜鳥最難理解的地方。FPGA是給誰用的?很多學校解釋為給學微電子專業或者集成電路設計專業的學生用的,其實這不過是很多學校受資金限制,賣不起專業的集成電路設計工具而用FPGA工具替代而已。其實FPGA是給設計電子系統的工程師使用的。這些工程師通常是使用已有的晶元搭配在一起完成一個電子設備,如基站、機頂盒、視頻監控設備等。當現有晶元無法滿足系統的需求時,就需要用FPGA來快速的定義一個能用的晶元。前面說了,FPGA裡面無法就是一些「真值表」、觸發器、各種連線以及一些硬體資源,電子系統工程師使用FPGA進行設計時無非就是考慮如何將這些以後資源組合起來實現一定的邏輯功能而已,而不必像IC設計工程師那樣一直要關注到最後晶元是不是能夠被製造出來。本質上和利用現有晶元組合成不同的電子系統沒有區別,只是需要關注更底層的資源而已。
要想把FPGA用起來還是簡單的,因為無法就是那些資源,在理解了前面兩點再搞個實驗板,跑跑實驗,做點簡單的東西是可以的。而真正要把FPGA用好,那光懂點FPGA知識就遠遠不夠了。因為最終要讓FPGA裡面的資源如何組合,實現何種功能才能滿足系統的需要,那就需要懂得更多更廣泛的知識。
目前FPGA的應用主要是三個方向:第一個方向,也是傳統方向主要用於通信設備的高速介面電路設計,這一方向主要是用FPGA處理高速介面的協議,並完成高速的數據收發和交換。這類應用通常要求採用具備高速收發介面的FPGA,同時要求設計者懂得高速介面電路設計和高速數字電路板級設計,具備EMC/EMI設計知識,以及較好的模擬電路基礎,需要解決在高速收發過程中產生的信號完整性問題。FPGA最初以及到目前最廣的應用就是在通信領域,一方面通信領域需要高速的通信協議處理方式,另一方面通信協議隨時在修改,非常不適合做成專門的晶元。因此能夠靈活改變功能的FPGA就成為首選。到目前為止FPGA的一半以上的應用也是在通信行業。
第二個方向,可以稱為數字信號處理方向或者數學計算方向,因為很大程度上這一方向已經大大超出了信號處理的范疇。例如早就在2006年就聽說老美將FPGA用於金融數據分析,後來又見到有將FPGA用於醫學數據分析的案例。在這一方向要求FPGA設計者有一定的數學功底,能夠理解並改進較為復雜的數學演算法,並利用FPGA內部的各種資源使之能夠變為實際的運算電路。目前真正投入實用的還是在通信領域的無線信號處理、信道編解碼以及圖像信號處理等領域,其它領域的研究正在開展中,之所以沒有大量實用的主要原因還是因為學金融的、學醫學的不了解這玩意。不過最近發現歐美有很多電子工程、計算機類的博士轉入到金融行業,開展金融信號處理,相信隨著轉入的人增加,FPGA在其它領域的數學計算功能會更好的發揮出來,而我也有意做一些這些方面的研究。不過國內學金融的、學醫的恐怕連數學都很少用到,就不用說用FPGA來幫助他們完成數學運算了,這個問題只有再議了。
第三個方向就是所謂的SOPC方向,其實嚴格意義上來說這個已經在FPGA設計的范疇之內,只不過是利用FPGA這個平台搭建的一個嵌入式系統的底層硬體環境,然後設計者主要是在上面進行嵌入式軟體開發而已。設計對於FPGA本身的設計時相當少的。但如果涉及到需要在FPGA做專門的演算法加速,實際上需要用到第二個方向的知識,而如果需要設計專用的介面電路則需要用到第一個方向的知識。就目前SOPC方向發展其實遠不如第一和第二個方向,其主要原因是因為SOPC以FPGA為主,或者是在FPGA內部的資源實現一個「軟」的處理器,或者是在FPGA內部嵌入一個處理器核。但大多數的嵌入式設計卻是以軟體為核心,以現有的硬體發展情況來看,多數情況下的介面都已經標准化,並不需要那麼大的FPGA邏輯資源去設計太過復雜的介面。而且就目前看來SOPC相關的開發工具還非常的不完善,以ARM為代表的各類嵌入式處理器開發工具卻早已深入人心,大多數以ARM為核心的SOC晶元提供了大多數標準的介面,大量成系列的單片機/嵌入式處理器提供了相關行業所需要的硬體加速電路,需要專門定製硬體場合確實很少。通常是在一些特種行業才會在這方面有非常迫切的需求。即使目前Xilinx將ARM的硬核加入到FPGA裡面,相信目前的情況不會有太大改觀,不要忘了很多老掉牙的8位單片機還在嵌入式領域混呢,嵌入式主要不是靠硬體的差異而更多的是靠軟體的差異來體現價值的。我曾經看好的是cypress的Psoc這一想法。和SOPC系列不同,Psoc的思想史載SOC晶元裡面去嵌入那麼一小塊FPGA,那這樣其實可以滿足嵌入式的那些微小的硬體介面差異,比如某個運用需要4個USB,而通常的處理器不會提供那麼多,就可以用這么一塊FPGA來提供多的USB介面。而另一種運用需要6個UART,也可以用同樣的方法完成。對於嵌入式設計公司來說他們只需要備貨一種晶元,就可以滿足這些設計中各種微小的差異變化。其主要的差異化仍然是通過軟體來完成。但目前cypress過於封閉,如果其採用ARM作為處理器內核,藉助其完整的工具鏈。同時開放IP合作,讓大量的第三方為它提供IP設計,其實是很有希望的。但目前cypress的日子怕不太好過,Psoc的思想也不知道何時能夠發光。
4、數字邏輯知識是根本。
無論是FPGA的哪個方向,都離不開數字邏輯知識的支撐。FPGA說白了是一種實現數字邏輯的方式而已。如果連最基本的數字邏輯的知識都有問題,學習FPGA的願望只是空中樓閣而已。而這,恰恰是很多菜鳥最不願意去面對的問題。數字邏輯是任何電子電氣類專業的專業基礎知識,也是必須要學好的一門課。很多人無非是學習了,考個試,完了。如果不能將數字邏輯知識爛熟於心,養成良好的設計習慣,學FPGA到最後仍然是霧里看花水中望月,始終是一場空的。
以上四條只是我目前總結菜鳥們在學習FPGA時所最容易跑偏的地方,FPGA的學習其實就像學習圍棋一樣,學會如何在棋盤上落子很容易,成為一位高手卻是難上加難。要真成為李昌鎬那樣的神一般的選手,除了靠刻苦專研,恐怕還確實得要一點天賦。
『叄』 基於FPGA/GPLD的流水燈製作
整體思路就是計數分頻,計數,解碼輸出我們做數電課程設計的題目:如果你要參考的話留下郵箱,整個工程發給你好了。題目3 多功能流水燈一、任務 設計一個彩燈流水控制電路,其主要部分實現定時功能,即在預定的時間到來時,如何產生一個控制信號控制彩燈的流向、間歇等,可通過利用中規模集成電路中可逆計數器和解碼器來實現正、逆流水功能,利用組合電路實現自控、手控、流向控制等功能。二、設計要求1、基本要求(1)用 8 個發光二極體作為彩燈顯示,設計一個彩燈控制電路,能使彩燈的流向可以變化。具有彩燈亮點的右移、左移、全亮及全滅等功能。燈流動的方向可以手控也可以自控,自控往返變換時間為5秒。(2)彩燈可以間歇流動,10秒間歇1次,間歇時間1秒。2、發揮部分(1)彩燈流速可以改變。(2)設計顯示圖案循環的控制電路。 1.要求有手控和自控功能,即手控和自控都要實現。 2.手控按一個鍵,LED移動一位。也可再加其他鍵,按一下完成左移或右移等一個連續動作(如從第一位移到第八位)。 3.自控往返變換時間為5秒,是要求右移後左移,右移+左移共用5秒。 三、報告要求1、設計方案選取與論證 提出選擇所選方案的理由、指出方案的可行性、優缺點,畫出整機的原理框圖。 2、單元電路設計 畫出各單元電路的電路圖,簡述各單元電路的工作原理,重點是電路主要參數的計算和功能分析。3、*系統功能模擬驗證和印製版圖的設計(選做)簡述系統功能模擬驗證結果及模擬結果分析;印製版圖的設計和印製版圖。4、硬體的裝配和調試裝配和調試中的問題和解決辦法,簡述調試結果。5、結果分析和總結系統實現的實際功能指標,達標情況,特點和問題分析。作品的優缺點、特色和創新點的自我評價。
『肆』 做FPGA挖礦機,現在還能做什麼幣
FPGA免費,貌似挖礦很費電,淘寶上好像有賣資料程序的以前
『伍』 怎麼製作xilinxfpga開發板
材料清單:
1. FPGA(CPLD)晶元 Xilinx XC9536xl
單價不到10元
(選PLCC44封裝的,加一個插座1-2元)
2.Xilinx下載線(FPGA的並口下載線一般都是30-50元)
(一般是10頭輸出,要買一個相應的插座,雙排插針也可)
3.一塊單孔實驗板(10元以內)
4.三端穩壓塊(3.3V,1-2元)
5.9V的整流器(10元)
6.其他電源插座開關,濾波電容等(5元)以內
7.Xilinx
ISE WAB版開發軟體(免費下載)
8.可以買一些LED,
按鈕開關等等
以上成本合計不到100元,你就可以開始設計調試你自己的FPGA模塊了
具體做法
1.電源是必不可少的,用三端穩壓塊做電源極其簡單
(建議做成單獨的電源板,地線問題和濾波比較有講究,
初期可先忽略,但在產品開發時是第一要務)
2.把FPGA的插座焊接到單孔(焊盤互不相連)的實驗版上
3.把十針插座或5組雙排針焊接在實驗板上
4.根據產品手冊,把FPGA的電源和地線連接好
(養成一個遇到電源就加去耦合電容的好習慣,典型的0.1u)
5.根據產品手冊,把FPGA的TDI,
TDO, TMS,
TCK四條線與
下載線插座上的相應插針相連
同時把插座上註明的電源和地也連上(大概7條線)
6.把晶元放入插座中,把下載線連接好(計算機並口到插座)
電源上電
7.可以直接進入ISP對FPGA進行編程和下載
8.編程下載完成後,摘掉下載線,你的FPGA開發板
(同時也是工作板)就可以直接工作了
『陸』 在FPGA上製作一個9秒的計數器。
using counter directly.
clock freq = 50MHz,
output freq = 1/9 Hz
counter width = ceil(log2(9*450*10^6)) = 29
CONSTANT cnt_norm : UNSIGNED(28 DOWNTO 0) := TO_UNSIGNED(9*450*(10**6)-1, 29);
SIGNAL counter : UNSIGNED(28 DOWNTO 0) := (OTHERS=>'0');
SIGNAL pulse : STD_LOGIC := '0';
cnt_proc: PROCESS(clk)
BEGIN
IF RISING_EDGE(clk) THEN
IF counter = cnt_norm THEN
counter <= (OTHERS=>'0');
pulse <= '1';
ELSE
counter <= counter + 1;
pulse <= '0';
END IF;
END IF;
END PROCESS;
『柒』 怎麼用FPGA製作語音報時模塊
比較簡單辦法是採用語言晶元+FPGA。
如果只用FPGA,還需要數模轉換晶元,因此這個方案並不簡單。
『捌』 比特幣礦機的工作原理,是否是通過電腦發送難度給FPGA、ASIC,然後由礦機算出難度,傳到電腦
挖礦的目的就是為交易塊打包。打包成功了,你就開出一個新的包包,獲得25比特幣的獎勵,以及未來加進這個包的交易的手續費。
然後其他的礦工就開始為你這個新包產生的交易打包直到下一個包的出先。
以後的比特幣挖礦產能小,甚至變零了,你是還有交易費收的。 系統永遠需要」礦工「,礦機還是會存在的。
『玖』 FPGA能做出顯卡嗎如果可以,可以做到最高什麼程度的顯卡
首先是FPGA的級別。現在老外的挖礦卡什麼的用的都是低成本FPGA,如spartan系列。如果要性能就要用高性能的FPGA,如Vertex系列, Stratix系列,計算密度和速度都高幾十倍。
其次是定位。FPGA的優勢是定點和邏輯,不在復雜的浮點運算。
『拾』 用FPGA和51單片機製作DDS信號發生器的疑惑:
51跟FPGA的管腳電平不一樣,要一個做一個電平匹配板,在51那裡輸入想要的波形數據,確定之後發送到FPGA,至於你要怎麼傳送都行,可以將數據一次8位送也可以1位送或者其它,FPGA接收到數據之後整合恢復成原來的數據,存入你的RAM中想要怎麼用就怎麼用;調頻調幅的數據也是跟波形數據一樣的方式處理就行了