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

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

(注:BMD_MEM_RD32_FMT_TYPE 和BMD_MEM_WR32_FMT_TYPE 兩種標(biāo)頭對應(yīng)的TLP是以PIO的模式傳輸,所以只會傳輸一個(gè)DW數(shù)據(jù),再加上3DW標(biāo)頭;所以在BMD64模式下,一共兩幀數(shù)據(jù),而在上一個(gè)狀態(tài)已經(jīng)傳輸了一幀,本狀態(tài)傳輸最后一幀數(shù)據(jù),所以需要判斷trn_reof_n 幀結(jié)束信號,同樣需要主、從設(shè)備都準(zhǔn)備好,即trn_rsrc_rdy_n 和trn_rdst_rdy_n 同時(shí)有效才能傳輸。而在BMD128模式下,只需一幀數(shù)據(jù)就足夠了。這可以從上面兩個(gè)時(shí)序圖中可以清晰看出來。)
下面比較下BMD64和BMD128的RX引擎中對幾個(gè)狀態(tài)機(jī)的定義。
先來看看BMD64:
//接收引擎關(guān)鍵狀態(tài)機(jī)的8個(gè)狀態(tài) `define BMD_64_RX_RST 8'b00000001//接收引擎復(fù)位狀態(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種標(biāo)頭 `define BMD_MEM_RD32_FMT_TYPE 7'b00_00000//存儲器讀請求:TLP頭大小為3個(gè)雙字,不帶數(shù)據(jù) `define BMD_MEM_WR32_FMT_TYPE 7'b10_00000//存儲器寫請求:TLP頭大小為3個(gè)雙字,帶數(shù)據(jù) `define BMD_CPL_FMT_TYPE 7'b00_01010//完成報(bào)文:TLP頭大小為3個(gè)雙字,不帶數(shù)據(jù);包括存儲器、配置和I/O寫完成 `define BMD_CPLD_FMT_TYPE 7'b10_01010//帶數(shù)據(jù)完成報(bào)文:TLP頭大小為3個(gè)雙字;包括存儲器讀、配置讀、I/O讀和原子讀操作完成先來看看BMD128:
//定義了8種關(guān)鍵狀態(tài)機(jī)狀態(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種標(biāo)頭 `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)注
1664文章
22528瀏覽量
639999 -
存儲器
+關(guān)注
關(guān)注
39文章
7762瀏覽量
172344
原文標(biāo)題:FPGA圖文筆記:BMD64與BMD128比較
文章出處:【微信號:gh_bee81f890fc1,微信公眾號:面包板社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
2.7寸單色128x64 OLED顯示模塊使用指南
探秘MCF51JM128 ColdFire微控制器:功能、特性與電氣參數(shù)詳解
深入解析MCF51JF128:功能特性與設(shè)計(jì)要點(diǎn)
深入剖析Freescale MC9S08JE128系列MCU:高效節(jié)能的理想之選
深入剖析ATxmega128A1U/ATxmega64A1U:特性、應(yīng)用與設(shè)計(jì)要點(diǎn)
Atmel ATxmega128B3/ATxmega64B3微控制器:高性能之選
AT90CAN32/64/128:高性能8位微控制器的深度剖析
AT90CAN32/64/128:高性能8位微控制器的技術(shù)剖析
深入剖析Atmel AT90USB64/128微控制器:特性、應(yīng)用與挑戰(zhàn)
Atmel AVR ATUC64/128/256L3/4U微控制器:高性能與低功耗的完美結(jié)合
深入解析Microchip 25AA128/25LC128 128K SPI總線串行EEPROM
NVIDIA Omniverse USD插件開發(fā)中的UI卡頓問題復(fù)現(xiàn)及分析
W25Q128JVSIM與GD25Q128ESIGR引腳兼容分析
BMD64與BMD128比較
評論