標籤:系統 display ons 代碼 sar 調用 軟核 引用 其他
Moselsim模擬:
EP為Endpoint部分實現代碼,即常式主代碼。其他的是搭建的模擬環境,主要目的是仿照驅動的行為,將PCIE軟核用起來,主要是做PC端的行為模擬,如DMA配置,DMA讀寫操作及主時鐘,複位等。加入testbench後結構如。
board:頂層檔案+系統複位
RP:Root complex的部分。其中rport就是PCIE連接埠部分;rx_usrapp是RX部分,負責發送資料;tx_usrapp是TX部分,負責接收資料;cfg_usrapp是配置部分,配置讀寫使能,錯誤控制等,還有一些常用的任務方便其他模組調用;com_usrapp是載入RX/TX檔案,把RX/TX的資料以dat檔案形式儲存,需要時載入/覆蓋。pl_usrapp物理層控制和狀態部分。
CLK_GEN_RP/EP:分別是兩個連接埠的時鐘產生訊號。
其實EP和RP的結構很像的,基本都是對應的關係,所以理解起來工作量不是很大。
文法筆記:
因為CLK_GEN_RP/EP很簡單,沒有什麼扒的必要,所以分分鐘掠過了。接下來是對RP(testbench)的一些平時沒見過的文法的筆記。
1.module xxx #(
parameter xxxx1 = xx,
parameter xxxx2 = xx,
......
)
(
input xxxxxx,
output xxxx,
.......
);
這個是正常的模組定義。其中前面一個括弧是為參數傳遞準備的定義,後面那個括弧就是常見的輸入輸出連接埠定義。
xxx #(
.xxxx1 ( xx),
.xxxx2 (xx),
......
)
module_usrname(
.xxxxxx(xxxxxxx),
.xxxx(xxxx),
.......
);
這個是調用模組xxx的語句,其中前面一個括弧用於參數傳遞,後面一個括弧用於輸入輸出連接埠的引用。
2.rport中,對RP的BAR0-BAR5有明確的定義需要記錄下:
BAR0 = 32‘hffffff00,
BAR1 = 32‘hffff0000,
BAR2 = 32‘hffff000c,
BAR3 = 32‘hffffffff,
BAR4 = 32‘h00000000,
BAR5 = 32‘h00000000,
3.rx_usrapp中的output分別是trn_rdst_rdy_n和trn_rnp_ok_n,這兩個訊號是由ramdom產生的。不過原來的代碼裡面trn_rdst_rdy_n是始終為0的,實際加入DMA操作的時候可以用trn_rdst_rdy_toggle_count來控制使其有效。其中的狀態機器通過調用usrapp_com中的任務來進行RX中資料的store。
4.調用TASK方法:
eg: board.RP.com_usrapp.TSK_READ_DATA(0, `RX_LOG, trn_rd, trn_rrem_n);——是指調用board-RP-com_usrapp裡面的 TSK_READ_DATA任務,其中括弧裡面的是傳遞變數,按照usrapp裡面TSK_READ_DATA定義裡面的input順序來傳遞變數。
5.$value$plusargs:將運行命令(run-options)中的參數值傳遞給指定的訊號或者字元
用法:
if ($value$plusargs("TESTNAME=%s", testname))
$display("Running test {%0s}......", testname);
則,當使用的運行命令為:<run-options>+TESTNAME=tst_name時,運行結果為:Running test {tst_name}......
6.如果想把DMA功能用起來,自行調用pci_exp_usrapp_tx.v中的函數,往DMA控制寄存器中寫入地址、長度等資料,然後啟動DMA讀或者寫。
PCIE_DMA:xapp1052學習筆記