結(jié)合排查之前pio_writeReadBack_test0測試出現(xiàn)的問題,需要參考前人寫的相關(guān)博客,大部分都是基于BMD64,而我的示例是基于BMD128。
pio_writeReadBack_test0測試HOST發(fā)起一個MEM32寫,然后再啟動MEM32讀回,所以先要探究MEM32寫,分析BMD RX 引擎(用于接收、解析TLP)。下圖是https://blog.csdn.net/ningjinghai11/article/details/80924209博文中給出的BMD64模式下的MEM32寫時序仿真圖,可以看到存儲器寫請求TLP有2個,所以相應(yīng)的bmd_64_rx_state分別有MEM_WR32_QW1和MEM_WR32_WT兩個狀態(tài)對應(yīng)。

而我在仿真BMD128模式時,由于數(shù)據(jù)位寬為128bit,所以存儲器寫只有一個128bit的TLP就足夠,而bmd_rx_state只一個MEM_WR32_WT就結(jié)束并進入RST狀態(tài),具體時序圖如下:

(注:BMD_MEM_RD32_FMT_TYPE 和BMD_MEM_WR32_FMT_TYPE 兩種標頭對應(yīng)的TLP是以PIO的模式傳輸,所以只會傳輸一個DW數(shù)據(jù),再加上3DW標頭;所以在BMD64模式下,一共兩幀數(shù)據(jù),而在上一個狀態(tài)已經(jīng)傳輸了一幀,本狀態(tài)傳輸最后一幀數(shù)據(jù),所以需要判斷trn_reof_n 幀結(jié)束信號,同樣需要主、從設(shè)備都準備好,即trn_rsrc_rdy_n 和trn_rdst_rdy_n 同時有效才能傳輸。而在BMD128模式下,只需一幀數(shù)據(jù)就足夠了。這可以從上面兩個時序圖中可以清晰看出來。)
下面比較下BMD64和BMD128的RX引擎中對幾個狀態(tài)機的定義。
先來看看BMD64:
//接收引擎關(guān)鍵狀態(tài)機的8個狀態(tài) `define BMD_64_RX_RST 8'b00000001//接收引擎復位狀態(tài) `define BMD_64_RX_MEM_RD32_QW1 8'b00000010//存儲器讀狀態(tài) `define BMD_64_RX_MEM_RD32_WT 8'b00000100//等待存儲器讀結(jié)束 `define BMD_64_RX_MEM_WR32_QW1 8'b00001000//存儲器寫狀態(tài) `define BMD_64_RX_MEM_WR32_WT 8'b00010000//等待存儲器寫結(jié)束 `define BMD_64_RX_CPL_QW1 8'b00100000//不帶數(shù)據(jù)的完成 `define BMD_64_RX_CPLD_QW1 8'b01000000//帶數(shù)據(jù)完成 `define BMD_64_RX_CPLD_QWN 8'b10000000//帶數(shù)據(jù)完成 //接收引擎4種標頭 `define BMD_MEM_RD32_FMT_TYPE 7'b00_00000//存儲器讀請求:TLP頭大小為3個雙字,不帶數(shù)據(jù) `define BMD_MEM_WR32_FMT_TYPE 7'b10_00000//存儲器寫請求:TLP頭大小為3個雙字,帶數(shù)據(jù) `define BMD_CPL_FMT_TYPE 7'b00_01010//完成報文:TLP頭大小為3個雙字,不帶數(shù)據(jù);包括存儲器、配置和I/O寫完成 `define BMD_CPLD_FMT_TYPE 7'b10_01010//帶數(shù)據(jù)完成報文:TLP頭大小為3個雙字;包括存儲器讀、配置讀、I/O讀和原子讀操作完成先來看看BMD128:
//定義了8種關(guān)鍵狀態(tài)機狀態(tài) `define BMD_128_RX_RST 8'b00000001 `define BMD_128_RX_MEM_RD32_STRAD 8'b00000010 `define BMD_128_RX_MEM_RD32_WT 8'b00000100 `define BMD_128_RX_MEM_WR32_STRAD 8'b00001000 `define BMD_128_RX_MEM_WR32_WT 8'b00010000 `define BMD_128_RX_CPL_STRAD 8'b00100000 `define BMD_128_RX_CPLD_STRAD 8'b01000000 `define BMD_128_RX_CPLD_QWN 8'b10000000 //定義了4種標頭 `define BMD_MEM_RD32_FMT_TYPE 7'b00_00000 `define BMD_MEM_WR32_FMT_TYPE 7'b10_00000 `define BMD_CPL_FMT_TYPE 7'b00_01010 `define BMD_CPLD_FMT_TYPE 7'b10_01010
-
FPGA
+關(guān)注
關(guān)注
1656文章
22299瀏覽量
630535 -
存儲器
+關(guān)注
關(guān)注
39文章
7715瀏覽量
170892
原文標題:FPGA圖文筆記:BMD64與BMD128比較
文章出處:【微信號:gh_bee81f890fc1,微信公眾號:面包板社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
?CAT24C64 64Kb I2C CMOS串行EEPROM技術(shù)深度解析
NVIDIA Omniverse USD插件開發(fā)中的UI卡頓問題復現(xiàn)及分析
?STMicroelectronics M24C64-U 64-Kbit串行I2C總線EEPROM技術(shù)解析
W25Q128JVSIM與GD25Q128ESIGR引腳兼容分析
PIC64GX1000 RISC-V MPU:一款面向嵌入式計算的高性能64位多核處理器
基于dsPIC33AK128MC106電機控制模塊的技術(shù)解析與應(yīng)用設(shè)計
FLASHDB中KVDB 的FDB_WRITE_GRAN可以改為64bit或者128bit而TSDB為什么不行?
中微CMS32F402DK64FB LQFP64 STAR-MC1內(nèi)核32位微控制器MCU
24CW16X/24CW32X/24CW64X/24CW128X系列數(shù)據(jù)手冊

BMD64與BMD128比較
評論