|
例說FPGA連載44:DDR控制器集成與讀寫測(cè)試之Verilog代碼解析 特權(quán)同學(xué),版權(quán)所有 配套例程和更多資料下載鏈接: http://pan.baidu.com/s/1c0nf6Qc
本實(shí)例有8個(gè)模塊,3個(gè)層級(jí)。其層次結(jié)構(gòu)如圖4.22所示。
圖4.22 代碼層次圖 ● vip.v是頂層模塊,其下例化了5個(gè)子模塊,即sld_hub.vhd模塊、ddr2_controller.v模塊、data_source.v模塊、onchipram_for_ddr.v模塊、led_controller.v模塊和sys_ctrl.v模塊。該模塊僅僅用于子模塊間的接口連接,以及和FPGA外部的接口定義,該模塊中未作任何的邏輯處理。 ● sld_hub.vhd二級(jí)子模塊是一個(gè)軟核IP,編譯時(shí)自動(dòng)產(chǎn)生,不是我們?cè)陧攲哟avip.v中例化的。它用于我們FPGA的片內(nèi)RAM和Quartus II之間通過JTAG進(jìn)行數(shù)據(jù)交互。換句話說,這個(gè)模塊其實(shí)是一個(gè)JTAG協(xié)議的接口實(shí)現(xiàn)模塊。該模塊是VHDL編寫,并且內(nèi)部代碼對(duì)用戶是一個(gè)“黑盒”,我們只要會(huì)使用它就可以,無需關(guān)心它的代碼內(nèi)容。 ● ddr2_controller.v二級(jí)子模塊也是一個(gè)軟核IP,實(shí)現(xiàn)DDR2的時(shí)序控制功能,并且通過一個(gè)簡單的Avalon接口實(shí)現(xiàn)DDR2和FPGA邏輯之間的讀寫數(shù)據(jù)傳輸。其實(shí)該模塊下還有多個(gè)子模塊,但由于只是一個(gè)IP核,內(nèi)部代碼不直接開放,所以我們姑且認(rèn)為它是我們工程中的一個(gè)模塊。 ● data_source.v二級(jí)子模塊是用戶邏輯,我們用它定時(shí)產(chǎn)生一組寫入DDR2地址0-1023的連續(xù)的有規(guī)律的數(shù)據(jù);并且我們也會(huì)定時(shí)的讀出DDR2地址0-1023地址的數(shù)據(jù),將這些數(shù)據(jù)再寫入到FPGA例化的片內(nèi)RAM里。 ● onchipram_for_ddr.v三級(jí)子模塊是硬核IP,它例化實(shí)現(xiàn)了FPGA的一塊片內(nèi)RAM空間。 ● sys_ctrl.v二級(jí)子模塊中例化了PLL模塊,并且對(duì)輸入PLL的復(fù)位信號(hào)以及PLL鎖定后的復(fù)位信號(hào)進(jìn)行“異步復(fù)位,同步釋放”的處理,確保系統(tǒng)的復(fù)位信號(hào)穩(wěn)定可靠。 ● pll_controller.v三級(jí)子模塊為FPGA器件特有的IP硬核模塊,其主要功能是產(chǎn)生多個(gè)特定輸入時(shí)鐘的分頻、倍頻、相位調(diào)整后的輸出時(shí)鐘信號(hào)。 ● led_controller.v二級(jí)子模塊進(jìn)行24位計(jì)數(shù)器的循環(huán)計(jì)數(shù),產(chǎn)生分頻信號(hào)用于實(shí)現(xiàn)LED指示燈的閃爍。 |