利用FPGA可以設計出哪些有趣的東西?

利用fpga可以設計出一些獨特、單片機難以實現的有趣東西嗎?

重新修改下問題:

我個人喜歡嵌入式和FPGA這方面的東西的,嵌入式這邊從低端的51到高端的cortex-a系soc都有接觸、學習,FPGA也是從cyclone2開始學習,到現在主要使用Zynq。

之前做過的某項目(圖像處理、生物識別相關)原本預定採用Zynq進行設計,但設計途中是發現項目需求採用一些價格非常便宜的ARM SOC一樣可以勝任,且具有非常巨大的成本優勢,但Zynq的性能優勢在項目中幾乎完全無法體現。因此提出此問題想尋找一個項目有一定趣味性(自己做著玩)且arm或單片機較難實現的。

註:目前自己正在嘗試在FPGA中設計實現一個簡單的cpu內核。


Past Projects

多倫多大學ece 532 Digital System Design,開了10幾年的課了,整節課就是基於FPGA板做項目,要求microblaze做軟核,FPGA來做演算法的硬體加速,項目可以拿來做本科畢設用。

上面的鏈接只有到2011年的項目,很多基於圖像識別的遊戲。

在youtube上搜ece532也能搜到最新的項目演示。

大部分項目都是基於FPGA加速圖像處理演算法或者音頻處理演算法。


題主自問自答一發,從17年寒假開始,佔用業餘時間,斷斷續續終於完成了一個自己娛樂自己的小項目,是一個採用MIPS32v2指令集的流水線CPU內核,並且設計一些外設組成系統。

使用DE0-NANO開發板,整個系統具有20KB RAM和40KB ROM,設計有GPIO外設和外部中斷引腳。初期可以達到60MHz主頻,目前經過優化,主頻可以達到85MHz。

CPU內核為順序執行單發射的5級流水線架構,除了乘法指令需要4周期、除法指令需要32周期以外,其餘大部分指令都可單周期執行。(有些指令涉及相關的,可能需要2周期完成,不過設計有前推結構,盡量避免出現數據相關)

另外編寫了一個簡單的.s啟動文件,利用linux系統下mips交叉編譯器,實現了c語言編程。

最後作為實驗項目,實驗了呼吸燈和流水燈,自己對這個項目的完成情況相對滿意。

後期準備增加定時器和串口模塊,這樣可以更加具有實用性。


本人從事通信方面,好像FPGA一開始也只是應用在通信吧。

1.數字濾波器,NCO。這兩個對實時性也就是時鐘敏感度較高吧。

最簡單的,可以去看下分散式的FIR濾波器設計,這就是僅屬於FPGA的演算法吧。

2.先說結論:

assign data_in={data[7:0],data[15:8],data[23:16],data[31:24]};

可能是一個很簡單的賦值語句,但是卻幫我解決了一個本來很複雜的問題。

原先問題是這樣的,做一個數據轉換8位到32位,為了解決時鐘等問題,採用FIFO轉換,但是轉換後發現數據存儲的順序和我設計的不一樣,順序反了。就是高位數據到了低位去,我第一反應就是寫一個數據倒位模塊,比如在前面緩存下調換位置後輸出等,或者改輸出等等…但是之後時鐘問題又好麻煩,想了一會兒,靜下來。突然想到這可是FPGA,無非就是把這幾根線接到換下位置接而已,瞬間豁然開朗,讓我對FPGA產生一種佩服之情,真正的用軟體語言去實現硬體結構啊!

3.FPGA對管腳幾乎沒有任何限制,任何一個管腳都可以作為IO口。而我們熟知的單片機限制死了這塊單片機的這幾個IO只能用作採樣,這幾個用作SPI協議等等。因為對這幾個引腳單片機集成了相關的庫函數,看似很實用,但是我們實際操作的時候經常用錯了引腳,明明程序是對的,但是確實沒有輸出,最後發現這個引腳不能用作IO等(用STM32做一個音頻編碼的時候真正遇到的)。那為什麼FPGA不給你寫好這些庫函數呢。這裡排除一些調用IP核的。個人感覺這是因為任何的介面協議(如UART,SPI等)對FPGA來說實在是太簡單了,這也得益於FPGA的並行處理思想把。

4.並行處理思想,這個我當初想一直做下去的原因把,這個其實打破了我們之前按部就班一步一步來的思想,按部就班的來的話其實方法不多,但是當一件事可以分開來做,然後匯總在一起,這就是無窮種方法,每個人都會有自己的風格,想法真的是被釋放,各種腦洞,想想就激動啊,非常喜歡之前數電老師的一句話,數電就是一堆積木讓你玩,你可以隨便設計。FPGA的話就是把這些積木變的更小了,我們可以用各種風格去實現同一個目標,私人訂製,這樣發展下去,做FPGA好像永遠不怕沒工作干啊(自己腦補陰笑表情)

5.........想到了再補充

先寫一點,看看有多少人看吧。多的話我就展開講,僅僅代表個人想法。


用FPGA設計一個單片機啊,單片機是一堆門電路和觸發器搭成的,FPGA可以看成一堆沒連線的門電路和觸發器……可以試試用FPGA設計一個支持ARM和thumb2指令集的單片機出來……


人臉識別


短學期做的一個小遊戲用來頂替課程作業。

演示地址:

http://v.youku.com/v_show/id_XNTg0MDIwODc2.html?refer=eco-h5-zpdtuid=UNDQ0NDM3ODMyx=1


模擬單片機本身(笑)


實現高吞吐量5G物理層協議的信號基站,骨幹網核心交換機,廣譜軍事雷達信號處理分析,車間流水線機器手臂精密控制器,多功能多埠高速數字示波器,電視台實時編導廣播系統,ATE晶圓自動測試機控制器,混合動力汽車動力系統總控


康奈爾大學EE5760課程的作業,裡面很多有意思的項目:http://people.ece.cornell.edu/land/courses/ece5760/


通信協議,很值錢的那種..比如gige,ethercat,這兩個協議分別用在工業相機和工業控制實時乙太網,這樣的協議有一定的先進性,然後呢,老外開發出來就賣ip授權或者自己賣晶元了。工業上還有一個好玩的,叫做3 d profiler,就是高速相機拍線激光圖直接處理給出深度圖的,提取激光中心線部分是用的fpga。還有一個,用線陣相機加上激光做測距,需要幾個鏡片,fpga用來實時計算出光斑中心位置,然後求出距離。


本科做了個極其簡單的自動開門裝置。場景是夏天晚上空調定時,到了後半夜門窗緊閉熱得慌,人又懶得起來去開。於是整了個帶小馬達的開發板,外接了個傳動裝置在門把手上。FPGA上就是一個計數器,PWM發生器和LED顯示程序吧,用按鈕定時,時間到了就啟動馬達,把門把手帶開。其實拿個單片機寫幾句話就可以搞定了,只是當時接到了FPGA板子就用了。。。


這種問題,一般去技術論壇上問比較好。這裡祭出我最愛的Crazybingo大神的博文:第十八章 一路向北——幻想FPGA人工智慧的未來世界


可以用來做一個flappy bird的遊戲!

話不多說,先上圖(手機截圖,有點模糊)

圖一 遊戲開始畫面

圖二 遊戲進行畫面

圖三 遊戲結束畫面

上學期選了王伶俐老師的FPGA結構原理與應用,最後的PJ是用DE2的板子,用quartus的qsys自由設計。

最後我們小組做了這個flappy bird的遊戲,雖然不如有些大神做的用神經網路訓練的聲控俄羅斯方塊那麼高大上,但也還不錯了,具有重力加速度與橫向速度調節等增強遊戲體驗的功能。

大致設計思路是這樣的,細節我就不展開了。先用qsys搭硬體平台,選擇各種要用的IP並進行互聯,形成一個以nios ii為CPU的soc(沒有自己需要的小模塊還要自己寫)

再在nios ii嵌入式平台上寫嵌入式c code。

最後將編譯後的機器碼燒進指令RAM里,VGA介面連上顯示器,PS2鍵盤接上,整個遊戲就可以遊玩了!


單位同事做的。

4VSX55上實現了一個Microblaze軟核,然後用軟核系統搭了個Linux,然後在Linux上搞了個俄羅斯方塊。

現在老闆每次帶客人參觀都要拿這個吹nb


資料庫啊 商業應用

寫了個原型 水平菜 沒空折騰


挖礦


高速adc只能用fpga來做時序,其他的高端應用沒用過…目前用zynq


FPGA加速卡的加速演算法可以根據用戶實際需要修改,在數據中心、演算法加速、大數據分析、高性能計算、伺服器硬體加速等常見的一些加速應用場景如下:

  • 大數據分析
  • 文本搜索/分析
  • 機器學習
  • 認知計算
  • 演算法驗證
  • 卷積神經網路
  • 深度神經網路
  • 網路安全
  • 語音識別
  • 視頻編碼
  • 圖像識別和處理
  • 壓縮/解壓縮
  • 加密/解密
  • 分散式存儲
  • … …


可以試著實現一個協議層什麼的


多通道信號並行輸入輸出 一片普通stm32也就幾個uart FPGA拋去必用io,其他都可以當uart 。 天生有fifo(ram配置),處理速度上優勢明顯,等等。不過 要說非得只能FPGA做普通mcu做不了的自己還沒發現,期待其他解答。畢竟現在zynq開始內嵌硬核arm,altera也有nios


推薦閱讀:

如何系統地入門學習stm32?
電子設計初學者如何入門?
數模美賽O,F獎 ,美一美二的含金量怎麼樣?

TAG:嵌入式系統 | 現場可編輯邏輯門陣列FPGA | 晶元集成電路 | 電子設計 |