FPGA學(xué)習(xí)入門(mén)例程
學(xué)習(xí)交流群?1126635164群文件。
一 工程項(xiàng)目:fpga_training
二 工程目標(biāo):
1 實(shí)驗(yàn)現(xiàn)象:
(1) 使用按鍵控制 led 燈的通斷。
(2) 使用按鍵控制 ram 和 fifo 的讀寫(xiě)并驗(yàn)證讀寫(xiě)是否正確。
2 實(shí)驗(yàn)內(nèi)容:
(1) 前仿環(huán)境下分別使用 Altera IP 核和純 rtl 代碼實(shí)現(xiàn)兩路頻率不同的時(shí)鐘并進(jìn)
行 ram 讀寫(xiě)測(cè)試、 fifo 讀寫(xiě)測(cè)試,其中需要驗(yàn)證 pll 失鎖時(shí)的情況和運(yùn)行中
強(qiáng)制修改 ram 的初始化內(nèi)容的情況。
(2) 在 fpga 平臺(tái)只需使用 ram 和 fifo 的 Altera IP 核進(jìn)行實(shí)驗(yàn),對(duì)工程進(jìn)行綜合
編譯, 下載并固化 fpga 程序, 觀察實(shí)驗(yàn)現(xiàn)象。
(3) 使用 Quartus II 和 ModelSim 進(jìn)行聯(lián)合后仿驗(yàn)證。
(4) 對(duì)比 fpga 綜合編譯時(shí)選擇不同編譯策略或 seed 的結(jié)果, 包括資源使用量、
時(shí)序結(jié)果(例如 Fmax)等。
3 具體要求:
(1) 按鍵控制 led 時(shí),要求使用三段式狀態(tài)機(jī)。
(2) 整個(gè)工程分為 5 個(gè)大模塊,分別為時(shí)鐘、按鍵、 led、 ram 讀寫(xiě)、 fifo 讀寫(xiě),
每個(gè)模塊要求使用增量編譯,且 ram 讀寫(xiě)和 fifo 讀寫(xiě)兩個(gè)模塊要求使用 lock
region 并在 chip planner 指定一塊足夠大的區(qū)域。
(3) 對(duì)所有出現(xiàn)的時(shí)鐘進(jìn)行約束,找出相互獨(dú)立的時(shí)鐘設(shè)置 group,對(duì)復(fù)位信號(hào)
設(shè)置 false path。
(4) 使用 stp 查看 ram 讀寫(xiě)和 fifo 讀寫(xiě)的內(nèi)部信號(hào)是否正確。
(5) 使用 SingalProbe 將時(shí)鐘信號(hào)和按鍵信號(hào)連接至 fpga 管腳上進(jìn)行測(cè)量。
(6) 在 chip planner 里面進(jìn)行 eco 操作,改變 pll 器件輸出的占空比并將其中的某
些信號(hào)(例如時(shí)鐘信號(hào))連接至 fpga 管腳上進(jìn)行測(cè)量。
三 學(xué)習(xí)目標(biāo)(下述內(nèi)容非先后順序):
1 學(xué)習(xí) verilog 編程規(guī)則:
(1) verilog 基本語(yǔ)法規(guī)則以及相關(guān)高級(jí)的用法,包括 genvar、generate、for、function、
define、 parameter、 localparam 等關(guān)鍵詞用法。
(2) 三段式狀態(tài)機(jī)的結(jié)構(gòu)與用法。
(3) 模塊化編程的思想。
2 學(xué)習(xí)常見(jiàn) ip 核與基本邏輯功能模塊的 rtl 實(shí)現(xiàn):
(1) Altera 的 pll IP 核的使用以及失鎖處理,以及時(shí)鐘分頻的簡(jiǎn)單 rtl 實(shí)現(xiàn)。
(2) Altera 的 fifo IP 核的使用,以及 fifo 的簡(jiǎn)單 rtl 實(shí)現(xiàn)。
(3) Altera 的 ram IP 核的使用以及初始化文件的使用,以及 ram 的簡(jiǎn)單 rtl 實(shí)現(xiàn)。
(4) 邊沿檢測(cè)的 rtl 實(shí)現(xiàn)。
(5) 信號(hào)同步的 rtl 實(shí)現(xiàn)。
(6) 二進(jìn)制碼和格雷碼轉(zhuǎn)換的 rtl 實(shí)現(xiàn)。
3 學(xué)習(xí) verilog 仿真方法:
(1) verilog 仿真語(yǔ)法規(guī)則以及相關(guān)高級(jí)的用法,包括 force、 release、 wait、
readmemh、 finish 等關(guān)鍵詞用法。
(2) Testbench 的編寫(xiě)。
(3) 激勵(lì)的編寫(xiě),包括仿真時(shí)鐘信號(hào)的產(chǎn)生、復(fù)位信號(hào)的產(chǎn)生、 mif 文件的產(chǎn)生。
(4) 異常情形仿真的處理思路,例如 pll 失鎖狀態(tài)仿真(使用 force)、中途修改存
儲(chǔ)器內(nèi)部初始化內(nèi)容(使用 readmemh) 等。
4 學(xué)習(xí) ModelSim 軟件使用方法:
(1) 單獨(dú)使用 ModelSim 對(duì)工程進(jìn)行編譯、前仿。
(2) 分別對(duì) Altera IP 核和 rtl 邏輯實(shí)現(xiàn)進(jìn)行仿真。
(3) 查看指定信號(hào)的波形。
(4) 根據(jù)波形追蹤信號(hào)。
5 學(xué)習(xí) Quartus II 軟件使用方法:
(1) 工程的建立與配置,引腳分配。
(2) 工程的編譯流程,包括分析綜合、布局布線、生成 sof 文件、時(shí)序分析等。
(3) 使用不同策略、 seed 進(jìn)行編譯綜合,對(duì)比不同編譯策略下的情況。
(4) 與 ModelSim 軟件進(jìn)行聯(lián)合后仿。
(5) 生成的 sof 文件轉(zhuǎn)化成 jic 文件進(jìn)行 fpga 程序固化。
(6) 增量編譯用法。
(7) lock region 用法。
(8) 使用 technology map 查看網(wǎng)表追蹤信號(hào)。
(9) 使用 chip planner 查看器件內(nèi)部使用情況, 了解 fpga 內(nèi)部器件結(jié)構(gòu)與排布,
并進(jìn)行 eco 操作將時(shí)鐘信號(hào)手動(dòng)拉線至管腳。
(10) 使用 STP 查看內(nèi)部信號(hào),設(shè)置相關(guān)觸發(fā)。
(11) 使用 SingalProbe 引出內(nèi)部信號(hào)進(jìn)行 eco 操作。
(12) 生成和使用 TCL 腳本。
6 學(xué)習(xí)靜態(tài)時(shí)序分析方法:
(1) 使用 TimeQuest 軟件進(jìn)行時(shí)序分析,并閱讀時(shí)序報(bào)告和查看最差路徑。
(2) 編寫(xiě) sdc 時(shí)序約束文件,使用 clock、 generate_clock、 flase_path、 group 等對(duì)
時(shí)序進(jìn)行約束。