留守在家,如何提升和精進FPGA設計能力?

本文作者:西南交通大學研究生導師邸志雄博士。


工欲善其事,必先利其器,代碼可綜合設計能力、電路設計方法學、領域特定架構和算法理論,是提升和精進FPGA技能的必要基礎。不需要FPGA開發板實物,也能夠在家學習和夯實這些基礎知識(ps:注意,如果長期學習FPGA,有一塊FPGA開發板是非常必要的。本文章重點針對短期留守在家的同學。)。


留守在家,如何提升和精進FPGA設計能力?

0、FPGA入門基礎

具備基本數字邏輯基礎、基本VerilogHDL編寫能力。

此處推薦東南大學湯勇明老師編寫的《搭建你的數字積木——數字電路與邏輯設計》。這本書將Xilinx Vivado集成設計開發環境在第1章中就呈現給讀者,讓讀者從一開始就能利用該開發工具學習具體邏輯設計。這本書的優點是採用了電路設計加VerilogHDL編寫的方法,重點突出模塊化編程思想並詳細介紹了IP設計、封裝和調用方法,並在書中給出了VGA控制器、數字圖像處理設計等實際案例。

留守在家,如何提升和精進FPGA設計能力?

如果已經具備了“數字電路+FPGA”基礎,可從如下內容開始學習。

1、VerilogHDL和電路設計能力提升

經常碰到學生問類似“VerilogHDL不會編,如何提升編程能力”等等的問題,其實這個問題一開始就是錯誤的。VerilogHDL是硬件編程語言,與C語言等軟件編程語言有著非常大的差異,如果使用C語言的書寫思維去學習Verilog,那就完全錯了。Verilog HDL語言是對已知硬件電路的文本描述,因此必須理解其可綜合特性。

編寫Verilog HDL前:

  • 應對所需實現的硬件電路“胸有成竹”;
  • 牢記可綜合Verilog HDL與電路結構一一對應的關係;
  • 確認電路指標是什麼:性能?面積?
  • 硬件思維方式,代碼不再是一行行的代碼而是一塊一塊的硬件模塊;

真正理解以上幾點,才可以理解電路設計的思想,寫出行雲流水般的高質量代碼。關於如何實現高質量的VerilogHDL代碼書寫的內容、如何理解數字電路的設計思想,可以在家學習我在“中國大學MOOC”網站的慕課《芯動力——硬件加速設計方法》第二章和第三章。目前該課程在線學習人數已經超過1200人。第四章和第五章重點講數字芯片的邏輯綜合和靜態時序分析方法,但是與FPGA的綜合和時序約束很接近,也可以學習。

在“中國大學MOOC”搜索課程名稱即可參與,或者訪問鏈接

https://www.icourse163.org/course/SWJTU-1207492806?tid=1207824209

免費收看。

留守在家,如何提升和精進FPGA設計能力?

參考書推薦:

  • 《輕鬆成為設計高手:Verilog HDL實用精解》。EDA先鋒工作室編寫,目前市面上的中文書籍裡,少有的幾本能夠從VerilogHDL硬件本質來闡述的書。(ps:該書的前一版書名為:設計與驗證。兩版內容基本上一樣,看哪個都可以)
留守在家,如何提升和精進FPGA設計能力?

  • 《Altera FPGA/CPLD設計(高級篇)》。EDA先鋒工作室編寫,人民郵電出版社. (ps:一定要注意是“高級篇”。該系列還有一本“基礎篇”,不建議閱讀)
  • 《SoC設計方法與實現(第3版)》,郭煒 等編寫. 電子工業出版社。
留守在家,如何提升和精進FPGA設計能力?


  • 《FPGA深度解析》,樊繼明,陸錦宏 著. 北京航空航天大學出版社. 2015年。(ps:以上兩本對電路設計的相關知識點做了詳細闡釋)
留守在家,如何提升和精進FPGA設計能力?

2、選擇好的FPGA案例,提升設計能力

FPAG的優勢是硬件加速,其“能效比”遠高於傳統的CPU和GPU。因此,FPGA在對算力有極致需求的領域有著非常廣泛的應用,如人工智能、圖像視頻處理、密碼安全、數據中心、航天航空、高頻量化交易等。

那麼,什麼案例適用於FPGA教學?這是一個很有意思,也值得思考的問題。是流水燈?I2C串口傳輸?我認為不是,這些案例完全沒有體現出FPGA應用的特點,反而因為FPGA上手和調試較難的原因,勸退了一部分本來有興趣學習FPGA的學生。這些案例的特點是系統更關注“控制”而不是“計算”,且I/O、存儲數量要求非常小。一方面,無法體現FPGA帶來的硬件加速效果;另一方面,用單片機、MCU來實現流水燈、串口等系統,上手簡單,又快又好,為什麼要用FPGA來做這些?

個人認為最適合學習FPGA的案例有以下幾種:

  • 處理器原型設計與實現。例如,在FPGA上完成一顆小型RISC CPU的設計,如果手上開發板,還可以進一步完成操作系統的移植和應用程序編寫。也可以在FPAG上完成AI處理器的設計,最終在開發板上實現諸如圖像檢測、人臉識別等系統功能。
  • 高性能算法加速。例如,在FPAG上完成數字信號處理算法、圖像視頻處理算法等單片機無法實現的系統。

同學們可以充分利用參考書、公眾號、B站、github等各種網絡資源,從應用領域的架構、算法等基礎學起。如果沒有開發板,可以完成電路設計、代碼編寫、FPGA的驗證和實現流程。


參考書與案例推薦:

  • 《搭建你的數字積木——數字電路與邏輯設計》。湯勇明等編著,清華大學出版社,2017年。(ps:書中最後幾章有很多FPGA案例)
  • 《手把手教你設計CPU——RISC-V處理器篇 》。胡振波編著,人民郵電出版社,2018年。(ps:github上面有該CPU的源碼)
留守在家,如何提升和精進FPGA設計能力?

  • pynq.io (http://www.pynq.io/),這是一個網站。Xilinx PYNQ開發板的開源的開發者社區,有很多使用PYNQ的開發案例,如AI處理器、視頻圖像處理等等。
  • Parallel Programming for FPGAs。本書有中文版和英文版,書和案例都可以在github下載。網址為https://xupsh.github.io/pp4fpgas-cn/。(ps:本書中所有案例都採用HLS C編寫完成,如果對使用C++/C語言開發FPGA感興趣,可以學習這本書)
  • 《VLSI數字信號處理系統設計與實現》(作者:Keshab K.Parhi)與《數字信號處理的FPGA實現》(作者:Uwe Meyer-Baese)。(ps:這兩本僅限有數字信號處理基礎的同學學習。不建議初學者學習)
  • 斯坦福開設的一門機器學習硬件加速器的課程,“Hardware Accelerators for Machine Learning (CS 217)”(ps:僅限有機器學習和FPGA開發能力的同學學習。不建議初學者學習)

另外,如果有同學對FPGA芯片本身感興趣,可以閱讀這本書:《FPGA原理和結構》,[日] 天野英晴 著,趙謙 譯,人民郵電出版社。儘管已經有很多書籍和課程來講授如何應用FPGA來搭建電子系統、實現硬件加速,但是幾乎沒有一本中文入門教材來講授FPGA內部的設計原理和結構。《FPGA原理和結構》一書集結了日本FPGA和可重構計算領域的多位權威和專家,譯者老師也長期從事FPGA和可重構計算研究,在FPL等FPGA頂級學術會議發表多篇論文。本書不僅對FPGA內部結構做了引人入勝的分析和講解,而且對FPGA CAD工具和算法也進行了詳細深入的闡述。更驚喜的是,本書還介紹了FPGA在超算、基因科學、金融、人工智能、高頻交易等方面的應用,可以讓讀者看到一個當下和未來更大的FPGA世界。本書寫作風格淺顯易懂,嚴謹求實,非常適合本科生和研究生作為FPGA結構與原理的入門教材,本書日文原作在日本可重構領域幾乎人手一本。

留守在家,如何提升和精進FPGA設計能力?

如果有同學在閱讀《FPGA原理和結構》一書後對FPGA開發工具的設計原理感興趣,可以研究下學術界經常用的FPGA開源工具VTR:

https://vtr.readthedocs.io/en/latest/。

3、開發工具推薦

Xilinx vivado 2018.3。注意版本號2018.3,版本號要正確,不建議下載比2018.3更早的版本。官網就可以完成下載,由於該工具體積很大(約18G),所以要耐心等待。

使用Xilinx vivado 或者Intel Qurtus Ⅱ都可以完成FPGA開發全流程。如果覺得其中內嵌的工具不好用,還可以使用如下工具代替:

  • VS code編輯器(要安裝Verilog插件),完成代碼編輯;編輯器還有notepad++、Ultraedit、Vim等,看個人編程習慣。Vim學習曲線比較陡峭,熟練之後效率非常高。
  • Modelsim,完成代碼仿真。

4、開發板推薦

目前情況看,網購基本上還不影響。如果有同學確實覺得需要一個實體開發板來落實系統設計,推薦以下幾款,都可以在淘寶購入:

  • Spartan Edge Accelerator(SEA)。Seeed出品,採用了Xilinx Spartan7器件,價格<300元,適合入門的初學者完成一些輕量級的系統加速。SEA可以支持外插arduino作為其擴展板,如果熟悉arduino,可以採用這款開發板入門。
留守在家,如何提升和精進FPGA設計能力?

  • Arty A7(Artix-7)。Digilent出品,硬件邏輯資源和接口相對豐富,開源的案例比較多,有利於入門的時候做一些較為複雜的案例。
留守在家,如何提升和精進FPGA設計能力?

  • Xilinx PYNQ Z2。依元素出品,該系列FPGA中嵌入了一顆雙核ARM,既能發揮FPGA的定製特性,也能發揮處理器的通用特性,而且兩個部分之間接口豐富、官方文檔齊全,可玩性極高。用戶可以使用Python語言編程開發ARM端,並且代碼可直接在PYNQ-Z2上進行開發和測試。當引入Python後,就可以使用一些Python中強大的第三方庫,例如Numpy、Matplotlib等。注意:PYNQ的FPGA端仍需使用VerilogHDL或者HLS進行編程實現。
留守在家,如何提升和精進FPGA設計能力?

5、擴展知識

以上是FPAG的必備知識。但是,隨著FPAG技術的快速發展,當下的FPGA已經與傳統的FPGA硬件開發有了天壤之別。尤其是集成SoC的FPGA推出之後,更加註重軟、硬結合的複合能力。從兩大廠商FPGA推陳出新的技術來看,軟件開發能力已經被提到前所未有的高度。如果同學們學有餘力,可以學習如下擴展知識和技能:

  • Python。PYNQ就是一個非常好的例子。從最近三年“全國大學生FPGA創新競賽”的獲獎作品可以看出,使用Python可以快速完成一個複雜FPGA系統的搭建。但是,請務必分清楚PL和PS。
  • HLS C。C++/C非常適用於將複雜算法放到FPGA上,開發效率遠勝VerilogHDL好幾倍,如果同學們感興趣的話,可以參考上述第2部分推薦的參考書《Parallel Programming for FPGAs》。

全文完。


分享到:


相關文章: