【從零開(kāi)始走進(jìn)FPGA】美好開(kāi)始——我流啊流啊流

發(fā)布時(shí)間:2016-2-24 09:57    發(fā)布者:designapp
關(guān)鍵詞: FPGA , Quartus , II
  按照基于Windows的語(yǔ)言(C、C++、C#)等編程語(yǔ)言的初學(xué)入門(mén)教程,第一個(gè)歷程應該是“Hello World!”的例程。但由于硬件上的驅動(dòng)難易程度,此例程將在在后續章程中推出。硬件工程師學(xué)習開(kāi)發(fā)板的第一個(gè)例程:流水燈,一切美好的開(kāi)始。
  本章將會(huì )在設計代碼的同時(shí),講解Quartus II 軟件的使用,后續章節中只講軟件的思想,以及解決方案,不再做過(guò)多的累贅描述。
  一、Step By Step 建立第一個(gè)工程
  (1)建立第一個(gè)工程,File-New-New Quartus II Project,如下圖所示,OK。
  


  (2)Next,如下圖所示,選擇工程目錄(不能有空格,中文路徑),同時(shí)輸入工程名與頂層文件名。
  


  (3)若有現成的代碼,可以直接選擇添加入工程;否則,直接next,進(jìn)入下一步,如下圖所示:
  


  (4)根據自己的硬件設施,選擇相應的設備目標器件。
  


  (5)Next,Finish。
  二、工程代碼設計
  1. water_led_design工程文件結構:
  


  如上圖所示,工程分為三個(gè)模塊,分別為:
  (1)頂層模塊 : 例化各個(gè)模塊,工程的最高級別文件。
  (2)分頻模塊 : 通過(guò)分頻得到固定的頻率(10Hz)。
  (3)LED顯示模塊: 隨固定頻率,來(lái)操作LED燈。
  2. 代碼設計
  (1)warter_led.v模塊設計
  a) New-File,新建verilog文件,保存于新建在工程目錄下的src文件夾中(只是為了工程文件結構組織的清晰,更善于管理)。如下圖所示:
  


  b) 輸入代碼,定義輸入輸出接口,如下所示:
  
[color=]module water_led

[color=]  (

[color=]  input clk, //global clock 50MHz

[color=]  input rst_n, //global clock reset

[color=]  output [5:0] led_data //user led interface

[color=]  );

[color=]  endmodule
                               
                  (2)clk_design.v模塊設計
  由于系統輸入時(shí)鐘是50Mhz,若以50MHz的速度變換LED等,人眼壓根分辨不出來(lái)。因此利用分頻原理,來(lái)對50MHz進(jìn)行分頻,而適應人眼。本模塊將50MHz分頻至10Hz,人眼分辨的極限是25Hz,因此10Hz能感覺(jué)得到(可以隨機修改)。Led_en的頻率計算公式:clk_led_en = 50_000000/(49_000000+1) = 10Hz,具體代碼如下:
  
[color=]module clk_design

[color=]  (

[color=]  input clk,

[color=]  input rst_n,

[color=]  output led_en

[color=]  );

[color=]  reg [22:0] cnt; //49_99999,100ms

[color=]  parameter LED_CNT = 49_999999;

[color=]  always@(posedge clk or negedge rst_n)

[color=]  begin

[color=]  if(!rst_n)
  cnt
  else if(cnt
  cnt
[color=]  else
  cnt
[color=]  end

[color=]  assign led_en = (cnt == 23'd49_99999) ? 1'b1 : 1'b0;

[color=]  endmodule
  模塊沒(méi)有分頻產(chǎn)生10Hz的頻率,而是生成了10Hz的使能時(shí)鐘,目的是防止時(shí)鐘滿(mǎn)天飛,使得FPGA 內部布局布線(xiàn)紊亂,影響全局功能。雖然如此簡(jiǎn)單的工程可以不用考慮,但是“習慣了嚴謹便成為了一種風(fēng)范”,因此使用使能時(shí)鐘,來(lái)對具體的時(shí)序進(jìn)行操作。具體使能時(shí)鐘、門(mén)控時(shí)鐘的異同、優(yōu)劣將會(huì )在后續章節中解說(shuō)。
  (3)led_display.v模塊設計
  根據輸入的led_en使能信號,來(lái)操作led燈的效果,此處采用最簡(jiǎn)單的算法——遞增進(jìn)位。代碼如下所示:
  
[color=]module led_display

[color=]  (

[color=]  input clk,

[color=]  input rst_n,

[color=]  input led_en,

[color=]  output reg [5:0] led_data

[color=]  );

[color=]  always@(posedge clk or negedge rst_n)

[color=]  begin

[color=]  if(!rst_n)
  led_data
[color=]  else if(led_en)
  led_data
[color=]  else
  led_data
[color=]  end

[color=]  endmodule

[color=]  (4)從新修改water_led_design頂層文件,添加相關(guān)例化模塊。最后結果如下:

[color=]  module water_led_design

[color=]  (

[color=]  input clk, //global clock 50MHz

[color=]  input rst_n, //global clock reset

[color=]  output [5:0] led_data //user led interface

[color=]  );

[color=]  //-------------------------

[color=]  //generater clock 10Hz

[color=]  wire led_en;

[color=]  clk_design clk_design_inst

[color=]  (

[color=]  .clk (clk),

[color=]  .rst_n (rst_n),

[color=]  .led_en (led_en)

[color=]  );

[color=]  //-------------------------

[color=]  //set the display of led

[color=]  led_display led_display_inst

[color=]  (

[color=]  .clk (clk),

[color=]  .rst_n (rst_n),

[color=]  .led_en (led_en),

[color=]  .led_data (led_data)

[color=]  );

[color=]  endmodule
                               
                  3. 代碼編譯
  (1)通過(guò)Processing-Start Compilation,或者工具欄的圖標如下:
  


  (2)編譯結果如下,可見(jiàn)相關(guān)信息:
  


  (3)警告的分析及解決:
  


  a) Warming(4)如上圖所示,具體解釋如下:
  i. 沒(méi)有電容配置
  ii. 沒(méi)有把unused的pin設置為三態(tài)。在A(yíng)ssignment-Device-Device and Pin Opitions-Unused Pins,設置如下圖所示:
  


  iii. 沒(méi)有電容配置
  iv. 可以忽略
  


  b) Critical Warming(5)如上圖所示,具體解釋如下:
  i. 引腳沒(méi)有分配IO
  ii. 沒(méi)有sdc時(shí)序約束文件
  iii. 沒(méi)有sdc約束文件
  iv. 時(shí)序沒(méi)有達到要求
  v. 時(shí)序沒(méi)有達到要求
  出現這些警告的原因是因為Quartus II 10.1以后的版本軟件,不再自帶TimeQuest Timing Analyzer,只有Classic Timing Analyzer,雖然不加sdc時(shí)序約束對于一般情況也不一定會(huì )有錯,但軟件設計的必然會(huì )出現這樣的警告。關(guān)于TimingQuest sdc,會(huì )在后續章節中闡述,此處不做具體說(shuō)明。
  關(guān)于Quartus II 警告信息分析以及零警告的處理,可以右擊警告查看help,altera會(huì )告訴您相應的解決方案;此外,Bingo已上傳Chinaaet“Quartus II 警告分析.pdf”,下載地址為:http://www.chinaaet.com/lib/detail.aspx?id=86271
  初學(xué)折有不到之處可以查閱該pdf,記住,永遠不要輕易忽略警告。
  三、Modelsim-Altera仿真
  1. 為什么要仿真
  首先討論兩個(gè)問(wèn)題:
  (1)仿真?是真的嗎?
  仿真,只是為了模擬真實(shí)現象,測試代碼的行為以及時(shí)序的正確性;當然,仿真永遠是模仿的,不可能是絕對準確的,只能在一定程度上模擬真實(shí)時(shí)序,讓我們的設計變得更可靠。仿真對于電路設計者,只是一個(gè)軟件測試的平臺,而不是實(shí)際硬件設施的測試結果。
  (2)一定要仿真嗎?
  未必!如果你有足夠的把握時(shí)序的準確性,腦子里能夠完成整個(gè)電路的時(shí)序邏輯工作流程,仿真就不是那個(gè)必須的了;對于已經(jīng)成型的模塊,保證時(shí)序準確的情況下,何必在徒勞的仿真呢?按常理,是現有Quartus II軟件,再有仿真軟件的吧,Testbench只是測試程序,鏈接兩者之間的橋梁。
  回想,在n年前的老工程師,用block中用與非門(mén)與74系列芯片設計的原理圖,要仿真似乎變得很難?那些老前輩們是通過(guò)實(shí)物的測試,不斷的修正、改善,最后才得到可靠的電路。
  因此,仿真 不是必須的。Bingo就經(jīng)常不仿真!不是說(shuō)懶,是因為腦子中的電路時(shí)序邏輯,本能性的能夠保證電路的準確性,或者說(shuō)出了問(wèn)題能夠自行改正,不會(huì )失去了方向。所謂代碼在電腦上,電路在腦子中,每一句行為級語(yǔ)言,都加增添一個(gè)電路。
  當然,并非每一個(gè)人都可以這樣子的。對于初學(xué)者而言,仿真是非常重要的一個(gè)過(guò)程。原因是因為在初學(xué)者腦子中,還未呈現固定邏輯實(shí)現的時(shí)序工作流程,換句話(huà)說(shuō),經(jīng)驗不夠豐富吧。
  當然在時(shí)序很復雜而且龐大時(shí),時(shí)序仿真是必須的,因為在這種情況下,大腦的模擬也許無(wú)法跟計算機的計算速度比擬了。
  前文安裝Quartus II 軟件章節有提到過(guò),Quartus II 9.1以前版本,軟件自帶仿真器,而9.1以后的版本,需要第三方軟件的支持。第三放仿真軟件有很多,而用的最多的,固然是Modelsim-Altera。本章節中Quartuus II 11.0與Modelsim-Altera協(xié)同工作,仿真測試本例程的代碼的時(shí)序。希望通過(guò)節的分析,對時(shí)序邏輯上有一個(gè)更深刻的認識。
                               
                  2. 仿真必備的知識
  Altera_Modelsim仿真資料:http://www.chinaaet.com/lib/detail.aspx?id=86257
  四、配置FPGA
  1. 配置綜合
  配置引腳簡(jiǎn)單的說(shuō)就是通過(guò)軟件的設置,將FPGA內部邏輯信號映射到IO上,具體有下面幾種方法:
  (1)在A(yíng)ssignments-Pin Planner中對應IO手動(dòng)輸入IO引腳
  (2)Quartus II Tcl Console 手動(dòng)輸入,輸入的格式為:“set_location_assignment PIN_28 -to clk”
  (3)Tcl Scripts,通過(guò)調入tcl 文件來(lái)進(jìn)行映射
  (4)在A(yíng)ssignments-Import Assignments,通過(guò)調入(2)格式的文件來(lái)進(jìn)行映射。
  后面兩種方法具體步驟可見(jiàn)網(wǎng)友“小時(shí)不識月”的網(wǎng)頁(yè)教程:http://www.cnblogs.com/yuphone/archive/2010/01/18/1650612.html
  配置好查看Quartus II Pin Planner,如下圖所示:
  


  配置完引腳在進(jìn)行綜合,就少了上述提醒沒(méi)有進(jìn)行引腳配置的2個(gè)警告。
  注意1:對于Quartus II 中引腳配置的方法,若用最原始的第一種GUI手動(dòng)輸入配置,需要第一次編譯后讓軟件在Pin Planner生成IO,然后再GUI下手動(dòng)配置;若用其他三種方法,可以在第一次編譯以前,用命令輸入配置信息,在Quartus II 編譯后,自動(dòng)識別映射信息,達到同樣的效果。
  注意2:對于系統及的FPGA設計,由于工程之大,引腳之多,一般編譯綜合需要耗費很大的時(shí)間,因此一般采用不采用第一種方法,而且在第一次編譯以前事先導入映射信息。
  2. 目標板下載模式
  總而言之,Quartus II 軟件只是個(gè)GUI的 用戶(hù)終端,用來(lái)設計代碼,綜合FPGA邏輯電路,最終的目的,是通過(guò)USB Bluster、并口或者其他途徑下載到目標板。具體有以下幾種:
  (1)配置FPGA——JTAG Mode
  所謂配置FPGA就是將sof文件電路配置FPGA的SRAM(FPGA是基于SRAM格式的),在不掉電的情況下進(jìn)行現場(chǎng)配置,驗證。此方式是通過(guò)JTAG接口下載的。
  (2)燒錄EPCS——Active Serial Programming
  所謂燒錄EPCS是生成的代碼信息燒錄到存儲芯片EPCS中,通過(guò)配置信號或者重新上電,配置FPGA SRAM;由于EPCS flash結構,因此EPCS中的掉電不丟失(類(lèi)似于CPLD)。燒錄EPCS有兩種方法,如下
  a) 通過(guò)ASP接口下載pof文件
  b) 通過(guò)JTAG接口下載jic/jam文件,jic/jam文件由Quartus II 軟件對sof文件進(jìn)行轉換后得到。
  (3)Passive Serial并口下載
  (4)In Socket Programming下載
  以上兩種模式,由于應用不是很廣泛,在此不做過(guò)多闡述。
  綜上說(shuō)明,在成本敏感,或者電路板空間苛刻的情況下,完全可以舍去ASP接口,而用JTAG來(lái)替換?紤]到Altera設計了兩種接口的原因,是給用戶(hù)更大的選擇性,特殊場(chǎng)合下,可以只存在A(yíng)SP接口,只進(jìn)行一次燒錄,而不用JTAG接口進(jìn)行測試。
  3. JTAG的下載
  (1)在工具欄打開(kāi)或者菜單欄Tool打開(kāi)Programming
  


  (2)若沒(méi)找到Hardware,在Hardware Setting中找到USB Bluster。
  (3)選擇JTAG Mode
  (4)若沒(méi)有自動(dòng)加載sof文件,點(diǎn)擊Add File導入該工程的sof文件
  (5)最后點(diǎn)擊Start,等待下載完畢,如下圖所示:
  

                               
                  4. EPCS的下載
  (1)在A(yíng)SP模式下
  a) Mode切換為Active Serial Programming模式
  b) Change File為pof文件
  c) 點(diǎn)擊Start,等待下載完畢。因為Flash速度比SRAM慢,因此下載相對于Flash會(huì )較慢。
  至此,可見(jiàn)目標板上的流水燈已遞增的形式循環(huán)點(diǎn)亮。
  (2)在JTAG模式下
  a) 用Quartus II 自動(dòng)生成的sof文件,通過(guò)軟件轉換為jic文件,步驟如下:
  i. 打開(kāi)File-Convert Programming File。
  ii. 在Programming File Type選擇jic文件。
  iii. Configuration device中選擇目標板對應的EPCS型號
  iv. File name可默認或任意修改
  v. 在File/Data area選中Flash Loader,然后右側點(diǎn)擊Add Device,找到自己型號的FPGA,確認。
  vi. 在File/Data area選中SOF Data,然后在右側點(diǎn)擊Add File,加載本工程目錄下的sof文件。
  vii. 在File/Data area選中加載的sof文件,然后再右側點(diǎn)擊Properties,選中Compression(壓縮),確認。(若EPCS容量允許下,可以省略此步驟,來(lái)提高下載速度)
  viii. 點(diǎn)擊Generate,生成jic文件,最終如下圖所示,然后Close。
  


  b) 打開(kāi)Programming,選擇JTAG Mode。
  c) 選擇前面生成的jic文件,選中jic文件后面的Program/Configure
  d) 點(diǎn)擊Start,等待下載完成,如下圖所示:
  


  至此,可見(jiàn)目標板上的流水燈已遞增的形式循環(huán)點(diǎn)亮。
  5. 編程/配置失敗原因
  (1)USB下載器沒(méi)有連接好或USB線(xiàn)太長(cháng)(沒(méi)插上,或者接口插錯)
  (2)設備沒(méi)上電。
  (3)FPGA Device型號選擇錯誤
  (4)EPCS型號選擇錯誤
  (5)布局布線(xiàn)不佳,導致下載時(shí)序錯誤
  (6)FPGA芯片已損壞
  (7)EPCS芯片已損壞
  (8)USB Bluster已損壞
                               
               
本文地址:http://selenalain.com/thread-161123-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页