1. 程式人生 > >怎樣新建Quartusproject—FPGA新手教程

怎樣新建Quartusproject—FPGA新手教程

ron 時鐘 ive port 最簡 五步 表示 img strong

這一章我們來實現第一個FPGAproject—LED流水燈。我們將通過流水燈例程向大家介紹一次完整的FPGA開發流程,從新建project,代碼設計,綜合實現。管腳約束,下載FPGA程序。

掌握本章內容,大家就算正式的開始入門FPGA開發了。

1.1.2.新建project

第一步:從開始菜單啟動Quartus II 13.1(64 bit) ,例如以下圖。

技術分享

第二步:菜單條選擇File—>New Project Wizard,新建project。

技術分享

第三步:彈出新建project對話框,點擊Next。下一步。

技術分享

第三步:例如以下圖。依次設置project的存放路徑,project名稱。頂層文件名,如圖依次設置好,這裏我們將全部project相關的文件放在prj目錄內,便於project文件與源代碼文件的管理,同一時候要保持project名稱與頂層實體名稱一致,繼續Next。

技術分享

第四步:加入設計文件。這一步我們不須要加入,興許我們會新建對應的代碼文件。這裏繼續Next。

技術分享

第五步:選擇FPGA器件,如圖所看到的,這裏我們選擇器件家族是CycloneIV系列的,封裝是FBGA,管腳數為256。速度等級為8。

這裏速度等級越小。速度越快。這裏我們FPGA的具體型號為EP4CE6F17C8。大家通過這個對話框了解這個器件的基本資源。

這裏我簡介一下這些資源的名稱,在後面的章節裏我們還會具體解說FPGA內部資源與結構。

1、CoreVoltage是內核電壓,Cyclone IV的內核電壓是1.2V。

2、LE是Altera最主要的邏輯單元,LEs表示FPGA的全部的邏輯資源。 我們這款芯片的邏輯資源數為6272。

3、User I/Os表示用戶IO數,這裏共同擁有180個IO能夠供用戶使用。

4、Memory Bits與embedded multiplier 9-bit elements實際是一回事,後者簡稱M9K。M9K就是指位寬為9bit,深度為1K的RAM。這裏一共同擁有30個M9K。大家計算一下9*1024*30=276480就是Memory Bits。

5、PLL鎖相環,內部一共同擁有兩個鎖相環。

6、Global clocks全局時鐘網絡數。這裏一共同擁有10個。

技術分享

第六步:設置EDA工具,這裏我們就設置一下仿真工具。使用默認Modelsim

-Altera,語言選擇Verilog。

實際後面我們不建議大家使用Modelsim-Altera。

我們會推薦大家在直接使用Modelsim-SE,後者的通用性更強。繼續Next。

第七步:總結新建project的基本信息。到這裏就完畢project的建立。

技術分享

1.1.3.代碼設計

大家閱讀本節前,首先應該對Verilog語法有一定了解,其次閱讀我們提供的編碼規範文件。了解主要的命名規則和project架構,從一開始就培養良好的編碼習慣。

第一步:新建verilog源文件,例如以下圖,點擊新建文件圖標,或者通過菜單條File—>New打開新建文件向導。

技術分享

第二步:在新建文件向導中,選擇Verilog HDL File,點擊OK。

技術分享

第三步:由於我們已經配置過UltraEdit為默認編輯器,此時會打開UltraEdit(註意:UltraEdit編輯Verilog代碼前。要加入語法高亮文件。詳見3.3.3節內容)。彈出新建源文件,將源文件另存至src目錄下,命名為led_test.v與頂層實體名稱一致。我們將源代碼文件和project文件放在不同目錄下,方便日後的project維護。

技術分享

第四步:編寫代碼邏輯,這裏我們實現了一個流水燈。這裏我們用了一個27位的計數器,時鐘頻率為50MHz,周期為20ns,當計數到第25位置位時,計數器值為25’d16777216。此時時間為16777216*20ns=335ms。這樣每大約經過335ms,計數器的[26:24]位就會加1。

我們第一個always實現計數器,第二個always實現控制不同一時候間時LED的輸出。即每隔335ms改變一次LED的輸出狀態。

1. module led_test

2. (

3. input i_clk, //input clk ,50mhz

4. input i_rst_n, //reset, active low

5. outputreg [3:0]o_led //led out

6. );

7. reg [26:0] led_count;

8. always @ (posedge i_clk or negedge i_rst_n)

9. begin

10. if(!i_rst_n)

11. led_count <=27‘d0;

12. else

13. led_count <=led_count + 27‘d1;

14. end

15. always @ (posedge clk or negedge i_rst_n)

16. begin

17. if(!i_rst_n)

18. o_led <=4‘b1111;

19. else begin

20. case(led_count[26:24]) //when 25th bit set= 335ms

21. 3‘b000: o_led<= 4‘b1110;

22. 3‘b001: o_led<= 4‘b1101;

23. 3‘b010: o_led<= 4‘b1011;

24. 3‘b011: o_led<= 4‘b0111;

25. 3‘b100: o_led<= 4‘b1100;

26. 3‘b101: o_led<= 4‘b1001;

27. 3‘b110: o_led<= 4‘b0011;

28. 3‘b111: o_led<= 4‘b0000;

29. endcase

30. end

31. end

32.endmodule

1.1.4.綜合實現

對於剛接觸FPGA的同學可能不太了解綜合實現的意思,事實上簡單裏說。綜合實現就相當於單片機的編譯過程。而FPGA的編譯過程不像其它高級語言的編譯過程,FPGA編譯過程實際是對應硬件電路的實現過程。

第三小節。我們完畢了代碼設計。我們就能夠綜合實現了。

步驟就是雙擊task窗體下的“Compile Design”,就會開始綜合實現了。

技術分享

Altera的FPGA編譯過程大致分為下面幾個過程:分析綜合,布局布線。生成燒寫文件,時序分析,EDA網表生成。例如以下圖所看到的。

技術分享

分析綜合:這個過程首先是完畢對源代碼文件的語法編譯。其次是將我們設計的語言綜合成對應的網表文件,而這個網表文件實際是與FPGA上資源是相互映射的。

首先什麽是網表文件?網表文件描寫敘述了對應project的FPGA設計中包括了FPGA資源。相同描寫敘述了這些資源又是怎樣連接的。其次,FPGA有哪些資源?我們會在興許章節具體介紹,這裏就說一個最簡單的資源——觸發器。這個是我們數電裏面學習過的,在FPGA裏一般叫做寄存器。

比如我們這個project中。終於led_count和o_led都會映射到對應的寄存器。

布局布線:這個過程是依據分析綜合中得到的網表文件進行的,假設大家有PCB設計經驗可能會更好理解。

所謂布局,就像PCB布局,將設計中用到的資源布局到FPGA器件內部不同的位置。所謂布線,相同類似PCB布線,將FPGA內部用到的資源依據網表文件裏描寫敘述的鏈接關系連在一起。

生成燒寫文件:這個過程比較好理解。基於上述過程產生的文件,再生成用燒寫FPGA的文件。

EDA網表生成:這個過程則是用來生成仿真所需網表文件。仿真時會用到。

1.1.5.管腳分配

這一節我們將介紹管腳分配。管腳分配過程中我們會同一時候解說關於Altera FPGA管腳主要特點及分類。

第一步:管腳分配前應該先將源代碼文件進行綜合,讓Quartus獲取對應的IO信息。這一步第四小節已經講了。我就不做具體介紹了。

第二步:打開管腳分配工具Pin Planner,例如以下圖。

或者能夠通過菜單條Assignments—>Pin Planner打開,也能夠下圖所看到的快捷圖標打開。

技術分享

第三步:分配管腳之前,我們先介紹一下FPGA的IO分布情況、管腳的特點及種類,以及Pin Planner工具的使用。例如以下圖為Pin Planner界面。

技術分享

Pin Planner工具界面大致可分為下面幾個部分:

整體管腳布局區域:如圖所看到的,中間器件圖描寫敘述了每一個管腳的位置。

Report區域:通過這個區域,將對應信息打上√。就能夠高亮我們所關心的IO信息。

這裏我們高亮IO的bank信息。

FPGA的管腳是分bank的,並且每一個bank的IO的電平都能夠獨立配置的。

Tasks區域:這個區域包括了非常多IO信息,我們能夠雙擊須要的IO信息,對應的信息就會加入到Repoat區域中。

Pin Legend區域:這裏詳細說明IO的全部種類,並用不同的顏色和形狀表示出來。而FPGA的IO管腳大致分為 用戶IO,配置管腳。電源管腳這幾類。

管腳分配區域:我們在這個區域內對我們設計中的IO進行分配。

第四步:分配管腳。在Location欄中輸入對應管腳的位置,完畢管腳分配。技術分享

怎樣新建Quartusproject—FPGA新手教程