结合排查之前pio_writeReadBack_test0测试出现的问题,需要参考前人写的相关博客,大部分都是基于BMD64,而我的示例是基于BMD128。
pio_writeReadBack_test0测试HOST发起一个MEM32写,然后再启动MEM32读回,所以先要探究MEM32写,分析BMD RX 引擎(用于接收、解析TLP)。下图是https://blog.csdn.net/ningjinghai11/article/details/80924209博文中给出的BMD64模式下的MEM32写时序仿真图,可以看到存储器写请求TLP有2个,所以相应的bmd_64_rx_state分别有MEM_WR32_QW1和MEM_WR32_WT两个状态对应。
而我在仿真BMD128模式时,由于数据位宽为128bit,所以存储器写只有一个128bit的TLP就足够,而bmd_rx_state只一个MEM_WR32_WT就结束并进入RST状态,具体时序图如下:
(注:BMD_MEM_RD32_FMT_TYPE 和BMD_MEM_WR32_FMT_TYPE 两种标头对应的TLP是以PIO的模式传输,所以只会传输一个DW数据,再加上3DW标头;所以在BMD64模式下,一共两帧数据,而在上一个状态已经传输了一帧,本状态传输最后一帧数据,所以需要判断trn_reof_n 帧结束信号,同样需要主、从设备都准备好,即trn_rsrc_rdy_n 和trn_rdst_rdy_n 同时有效才能传输。而在BMD128模式下,只需一帧数据就足够了。这可以从上面两个时序图中可以清晰看出来。)
下面比较下BMD64和BMD128的RX引擎中对几个状态机的定义。
先来看看BMD64:
//接收引擎关键状态机的8个状态 `define BMD_64_RX_RST 8'b00000001//接收引擎复位状态 `define BMD_64_RX_MEM_RD32_QW1 8'b00000010//存储器读状态 `define BMD_64_RX_MEM_RD32_WT 8'b00000100//等待存储器读结束 `define BMD_64_RX_MEM_WR32_QW1 8'b00001000//存储器写状态 `define BMD_64_RX_MEM_WR32_WT 8'b00010000//等待存储器写结束 `define BMD_64_RX_CPL_QW1 8'b00100000//不带数据的完成 `define BMD_64_RX_CPLD_QW1 8'b01000000//带数据完成 `define BMD_64_RX_CPLD_QWN 8'b10000000//带数据完成 //接收引擎4种标头 `define BMD_MEM_RD32_FMT_TYPE 7'b00_00000//存储器读请求:TLP头大小为3个双字,不带数据 `define BMD_MEM_WR32_FMT_TYPE 7'b10_00000//存储器写请求:TLP头大小为3个双字,带数据 `define BMD_CPL_FMT_TYPE 7'b00_01010//完成报文:TLP头大小为3个双字,不带数据;包括存储器、配置和I/O写完成 `define BMD_CPLD_FMT_TYPE 7'b10_01010//带数据完成报文:TLP头大小为3个双字;包括存储器读、配置读、I/O读和原子读操作完成先来看看BMD128:
//定义了8种关键状态机状态 `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
+关注
关注
1631文章
21806浏览量
606717 -
存储器
+关注
关注
38文章
7534浏览量
164489
原文标题:FPGA图文笔记:BMD64与BMD128比较
文章出处:【微信号:gh_bee81f890fc1,微信公众号:面包板社区】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
24CW16X/24CW32X/24CW64X/24CW128X系列数据手册
![24CW16X/24CW32X/24CW<b class='flag-5'>64</b>X/24CW<b class='flag-5'>128</b>X系列数据手册](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
ADS1232增益无法达到64或者128怎么解决?
base64在前端开发中的应用
请问PCM5121是否支持BCK为128FS的输入?如果支持怎样设置初始化CODE?
RV64之64位地址指令
ADC128S052、ADC128S052-Q1模数转换器数据表
![ADC<b class='flag-5'>128</b>S052、ADC<b class='flag-5'>128</b>S052-Q1模数转换器数据表](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
Traveo T2G SRAM不是32位的吗?如何得到一个64位的?
什么是Base64,如何编解码?
32位基于ARM核心的带64或128K字节闪存的微控制器数据手册
128 x 64点阵式OLED/PLED段/带控制器的通用驱动器SSD1306数据手册
使用MTFC128GAJAEDN-AIT和cyusb3035时,不能枚举出存储盘,请问MTFC128GAJAEDN-AIT是否被支持?
哪吒汽车与禾赛合作升级,年内新车搭载 128 线激光雷达 AT128
![哪吒汽车与禾赛合作升级,年内新车搭载 <b class='flag-5'>128</b> 线激光雷达 AT<b class='flag-5'>128</b>](https://file1.elecfans.com/web2/M00/C1/78/wKgaomXWsVKAAANfAABXZohjTMc289.png)
评论