Verilog—頂層模塊中調(diào)用子模塊,及參數(shù)化設(shè)計(jì)

? 今天學(xué)習(xí)小梅哥的FPGA視頻,現(xiàn)對(duì)知識(shí)點(diǎn)進(jìn)行總結(jié)。
使用quartus ii的PLL(鎖相環(huán))進(jìn)行時(shí)鐘的分頻和倍頻。PLL的作用主要是為設(shè)計(jì)提供分頻時(shí)鐘和倍頻時(shí)鐘,以及相移。例如:系統(tǒng)時(shí)鐘sclk=50MHZ,在系統(tǒng)時(shí)鐘不滿足我們的設(shè)計(jì)需求時(shí),我們可以通過調(diào)用PLL的ip core產(chǎn)生clk1=20MHZ、clk2=75MHZ、clk3=100MHZ的時(shí)鐘以滿足設(shè)計(jì)需要。
在進(jìn)行quartu和modelsim聯(lián)合仿真時(shí),需要在quartus中菜單欄正確選擇使用的仿真軟件的名字,并添加testbench。如下圖所示。本人使用的是modelsim仿真。

其次,如果是直接使用modelsim進(jìn)行仿真的話,需要在modelsim中把所調(diào)用的ip core文件加入編譯,否則無法仿真。一般quartus 的ip core文件位置在安裝目錄下\quartus\eda\sim_lib文件夾內(nèi)。例如,本次仿真中調(diào)用了PLL ip核,其ip core文件為altera_mf,v。位置如下圖所示。

最后在進(jìn)行板級(jí)驗(yàn)證,分配管腳后進(jìn)行綜合時(shí)遇到問題。軟件報(bào)錯(cuò)如下。

查詢結(jié)果如下:(看不太懂),不過給出了解決方法。
?大意是說,每顆FPGA都有nCE與nCEO兩根pin,在多顆FPGA的系統(tǒng)中,第一顆FPGA的nCE接GND,而第一顆FPGA的nCEO將接到下一顆FPGA的nCE,如此這樣繼續(xù)接下去,而在最後一顆FPGA時(shí),可以將nCEO floating或者當(dāng)成普通I/O pin使用。而在單顆FPGA時(shí),nCE直接接GND,nCEO可直接floating或者當(dāng)普通I/O pin使用。
解決方案如下。
assignments>device>device and pin options>dual-purpose pins里面把nCEO設(shè)置成use as regular i/o就可以了

2.在頂層模塊中調(diào)用底層模塊。
?底層模塊如下:

底層模塊調(diào)用格式如下:
<底層文件名>? ?<底層模塊名n> (
.<信號(hào)1>(<連接的pin1>),
.<信號(hào)2>(<連接的pin2>),
)

3.參數(shù)化設(shè)計(jì)
?方法一:在子模塊中定義了參數(shù)變量,然后頂層文件中可以直接在例化每個(gè)底層模塊時(shí),直接將所需修改的參數(shù)值通過例化的方法修改。

例化方式如下:

代碼解讀:23行是底層文件名,24-26行是對(duì)參數(shù)進(jìn)行修改。格式為:
#(
.<參數(shù)名> (修改值),
)
方法二:使用關(guān)鍵字defparam來聲明對(duì)某個(gè)參數(shù)的從新定義。例如下圖。

格式如下:defparam? ?<底層文件名> . <底層模塊名> . <參數(shù)名> = <修改值>