天天看點

小插曲:我和Nios II的故事

想必學習Altera家FPGA的小碼農們都會有一個共同的困擾吧,那就是Nios II該不該學的問題。這個問題說白了,就是學Nios II到底有沒有用。觀點1、無用論,常常會聽FPGA群裡的某位前輩說道,目前市場上用Nios II做産品的幾乎沒有,學了壓根沒用;觀點2、Nios II屬于嵌入式軟核,使用C語言代碼程式設計,簡化了系統設計的複雜度。

關于Nios II的讨論雖然有以上兩種觀點,但是實際上,支援觀點1的人數絕對明顯多于觀點2的人數。在此,先暫時不表明我個人的觀點,我們先來分析一下FPGA系統的正常設計結構。

FPGA系統,顧名思義,其核心是一塊FPGA晶片。但是光有這麼一塊晶片是不可能滿足系統設計的要求的。我們還需要其他子子產品,他們與FPGA共同組成一個系統。常見的子子產品有:電源轉換子產品(供電子產品),下載下傳子產品,數位管,LED燈等等。我們不可能一一說全,但是我們可以大緻将這些子產品分為幾類,至于電源子產品,下載下傳子產品和其他不涉及到程式設計設計的子產品不算在這些分類裡面。

小插曲:我和Nios II的故事

從圖中,可以看到5個子產品類型。一休哥與FPGA接觸了1年多,所完成的FPGA項目中,也難逃出這些子產品。

  • 傳感器子產品:攝像頭,AD等;
  • 存儲子產品:SRAM、SDRAM和DDR等;
  • 顯示子產品:VGA接口、HDMI接口、數位管和LED等,DA和蜂鳴器也屬于這類;
  • 通信子產品:USB系列,以太網系列和序列槽等;
  • 算法子產品:信号處理類,圖像處理類等。

可以說,我們學習FPGA,就是學習用FPGA來控制上述5類子產品。這也是我們學習FPGA的目的,和難點所在。其中,關于存儲子產品的使用是非常重要的一點,因為FPGA晶片本身的記憶體資源十分有限,是以我們需要借助片外的存儲器來完成存儲操作。自然而然的,當FPGA系統的規模越大,FPGA需要實時處理和存儲的資料量也就越多,存儲子產品的使用就顯得格外重要了。

舉一個簡單的例子,使用VGA顯示一副圖檔(也就是我上一個文章中所講的),在那個例子中,我們沒有用到片外存儲晶片,使用的是FPGA片内的記憶體資源。由于可用的資源太少,我們隻顯示了一副174*179的8bit圖檔。自然的,那麼問題來了,我們想要顯示更大分辨率的,顔色更豐富的圖檔該怎麼辦呢?

①使用SDRAM呀,再接一個分辨率大顔色深度高的攝像頭,來一個實時傳輸圖檔資料給FPGA,由于攝像頭的資料輸入速率和VGA顯示的資料讀取速率有很大不同,需要讓FPGA用SDRAM來緩存攝像頭的資料,然後讓VGA來讀取SDRAM中緩存的資料。再給SDRAM來一個乒乓存儲的操作,結果是相對完美的,解決這一問題了。

可是,大家有沒有想過這一問題,上述過程的代碼量是較為龐大的,而且Altera沒有提供關于SDRAM的控制代碼,可以說,我們需要幾乎百分百的程式設計代碼,不容絲毫馬虎。是以這個工程量對于剛入門的小白來說是巨大的,目前網絡上也湧現了大批SDRAM的控制代碼,這些都是十分寶貴的資料,但是由于SDRAM的操作較為複雜,想完全了解SDRAM,實作SDRAM的控制,大家還需要花較長的時間刻苦學習。(題外話,一休哥以後也會講述SDRAM的控制原理和代碼哦,先提前預告下~)

②如果想暫時繞開SDRAM的控制該如何做呢。答案還是Altera。Altera雖然沒有提供SDRAM控制的Verilog代碼,但是在Nios II中有一個操作十分簡單的SDRAM控制器IP核。是以我們可以通過Nios II來間接控制SDRAM,我個人認為,這是Nios II最具有吸引力的一個優點。

講到這裡,我也要表明我對文章開始的那個問題的個人見解了。如果你是Altera家FPGA的學習者,但是你還沒有接觸過Nios II,那麼很遺憾,沒有調查就沒有發言權,你還不能發表觀點;如果你學過一點Nios II,會使用PIO IP核來完成一些簡單的操作,如點亮LED燈、數位管。那麼也很抱歉,你還沒有掌握Nios II真正的精髓所在——自定義IP核;講真,隻有當你學會了如何自定義IP核時,你才算真正了解Nios II,到了那個時候,你才算有資格,有能力說出你的有價值的觀點。

學Nios II到底有沒有用,這是一個個人的問題。什麼叫有用? 我認為應該指的是有沒有價值。這種價值不是貨币,沒有無法統一度量。有沒有價值取決于每個人的價值觀(需要通過更豐富的工作經驗來提升個人的價值觀)。是以…,你覺得沒用就沒用,我覺得有用就有用。

小插曲:我和Nios II的故事

歡迎大家掃描下方的二維碼添加關注,一休哥的個人公衆号:一休哥FPGAer,QQ:932903610

小插曲:我和Nios II的故事

繼續閱讀