6678与FPGA PCIe调试

姓名:刘保阔

学号:19021210887

【嵌牛导读】

        PCI-Express(peripheral component interconnect express)是一种高速串行计算机扩展总线标准,它原来的名称为“3GIO”,是由英特尔在2001年提出的,旨在替代旧的PCI,PCI-X和AGP总线标准。PCIe属于高速串行点对点双通道高带宽传输,所连接的设备分配独享通道带宽,不共享总线带宽,主要支持主动电源管理,错误报告,端对端的可靠性传输,热插拔以及服务质量(QOS)等功能。PCIe交由PCI-SIG(PCI特殊兴趣组织)认证发布后才改名为“PCI-Express”,简称“PCI-e”。它的主要优势就是数据传输速率高,而且还有相当大的发展潜力。

【嵌牛正文】

        将DSP作为RC端,FPGA作为EP端,且下文是对DSP代码的讲解。本文所指的PCIE手册为TI公司C6678的pcie技术手册,全名为 KeyStone Architecture Peripheral Component Interconnect Express (PCIe).pdf

(1)outbound和inbound的理解:

哪一端发起请求哪一端就是outbound。一端是outbound,另一端就是inbound。

对于outbound来说,可以发出写请求和读请求。当作为RC端的DSP对0X60000000发起写请求时,RC发出outbound的写请求,将数据传送给作为EP端的FPGA。当作为RC端的DSP对0X60000000发起读请求时,RC发出outbound的读请求,作为EP端的FPGA先收到读请求然后将数据发给RC端的DSP。

错误理解:简单地将数据出去理解为outbound,数据进去理解为inbound。

DSP存在PCIE_DATA 0x60000000~0x6FFFFFFF这段地址。在这段地址中写数据会触发outbound写机制,在这段地址中读数据会触发outbound读机制。0x60000000该地址在outbound转换机制中为DSP内部总线地址。

(2)对EP端(远程配置空间)BUS_MS和MEM_SP的配置

RC端对EP发出outbound写时,RC端的DSP必须把作为EP端FPGA的BUS_MS和MEM_SP置为1,否则EP端无法收到数据。BUS_MS为设置总线控制权,MEM_SP为设置存储器访问权限,具体可见pcie手册3-63页。

图1

(3)对EP端(远程配置空间)BAR的配置

本地配置空间地址 0x21801000,远程配置空间地址 0x21802000,见pcie手册45页。

图2

在PCIE手册中没有关于remote configuration space中具体的寄存器介绍。但是其和local configuration space中寄存器顺序是一样的,只是偏移量将0x1000改成了0x2000。

图3

从偏移地址上可以看出BAR0和BAR0_MASK地址是一样的。在DSP端,当DBI=1时,此时写入的值为bar的范围大小(bar_mask)。当DBI=0时,此时写入的值为bar的地址(bar)。(DBI在CMD_STSTUS中,DBI默认值为0)详细寄存器见pcie手册的3.2、3.3、3.4章节的寄存器,同时偏移量也可见FPGA的pcie gen3手册。

RC端无法配置EP端bar mask的大小,只能配置bar的地址。RC端配置的bar基地址会因为EP端配置的bar大小而改变。例如:bar_mask=8MB,那么配置的bar地址的0~22会置为0。

配置远程EP端bar0的具体代码如下图所示。在TLP过滤中,bar接收到的数据包头中存在type这一标志位。type=0对应于EP的configuration space,type=1对应于RC的configuration space。故选择对type0Bar32bitIdx进行配置。idx选择0表示配置bar0。DBI默认为0,直接将数值写入bar0,即为bar0的地址。

图4

(4)DSP作RC端,FPGA作EP端时inbound和outbound地址转换

详细的地址转换过程可见pcie手册2.7节。

首先需要说明的是inbound和outbound机制是DSP独有的,FPGA侧不存在inbound和outbound机制。实际上,在PCIE通信链路中的数据帧中不仅包含发送的数据,还包含PCIE地址,数据类型和数据长度等。由于DSP存在inbound和outbound机制,故不需要人为的依据PCIE通信的规范去组帧和解帧,只需配置好inbound和outbound机制所需的寄存器。

下面根据代码具体解释一下inbound和outbound的转换计算过程。


图5
图6
图7

(a) outbound配置如下所示:

由Pcie_getMemSpaceRange (handle, &pcieBase, NULL))函数可以得到pcieBase的地址为0x60000000,此地址即为内部总线地址。关于此地址的详细介绍可以见本位第一章节。

内部总线地址=0x60000000

OB_SIZE= pcie_OB_SIZE_8MB=3

OB_OFFSET_HI= PCIE_OB_HI_ADDR_M=0

PCIE_OB_REGION_M=0 对应于下面的index0,即使用outbound的region 0。

OB_OFFSET_INDEX0= PCIE_OB_LO_ADDR_M=0x70000000

注:第一个参数为PCIE手册中所用参数名,第二个参数为样例代码中所用参数名。

OB_SIZE=3,故取内部总线地址0x60000000的[27:23]位,即index=0

PCIe基地址=OB_OFFSETn_HI+OB_OFFSETn_INDEXn[31:23]

=0+0x70000000[32:23]

PCIe总地址=PCIe基地址+内部总线地址[22:0]

=0x70000000[32:23]+ 0x60000000[22:0]

=0X70000000

即传到PCIE链路中的地址为0x70000000,可以看到的是由于OB_SIZE为8M(因为8M=810241024=2^23 所以取0-22位 ) ,所以要是一次性传输的数据量超过8M的话,要么多次传输,要么再加个region传输。

而这个0x70000000又正好是本文第三章给远程FPGA配置bar0的地址,故FPGA可以收到DSP发送的数据。

(b) inbound配置如下所示:

指定bar1的地址为0x90000000,且为32位bar。


图8

将bar1绑定给inbound机制,且使用region 0


图9

pcieConvert_CoreLocal2GlobalAddr()作用是将本地地址转换为全局地址。在6678中一共有8个核,对于核0来说L2 SRAM本地起始地址为0x00800000,L2 SRAM全局起始地址为0x10800000,两者差值为0x10000000。

IB_START1_HI = PCIE_IB_HI_ADDR_M=0

IB_START1_LO = PCIE_IB_LO_ADDR_M=0x90000000

IB_OFFSET1 = dstBuf.buf的全局地址

注:第一个参数为PCIE手册中所用参数名,第二个参数为样例代码中所用参数名。

PCIe地址偏移量=PCIe地址 -(IB_STARTn_HI:IB_STARTn_LO)

= PCIe地址 – 0x90000000

内部总线地址=IB_OFFSETn+ PCIe地址偏移量

= dstBuf.buf的全局地址+ PCIe地址 – 0x90000000

我们将内部总线设为dstBuf.buf的全局地址,即将从FPGA侧收到的数据存放在dstBuf.buf中。由此我们可以计算出PCIE地址:

dstBuf.buf的全局地址= dstBuf.buf的全局地址+ PCIe地址 – 0x90000000

PCIe地址=0x90000000

FPGA侧将这里计算出来的PCIE地址用在发送数据时的组帧过程里,DSP侧就可以从dstBuf.buf这个变量地址里读到FPGA侧发过来的数据。

原文链接:https://blog.csdn.net/qq_22179919/article/details/81512010

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容

  • Xilinx 7 系列FPGA 简介 赛灵思公司于2015年11月宣布为成本敏感型应用推出灵活的 I/O 密集型器...
    finlu阅读 17,319评论 0 6
  • 学号:16010199021 姓名:李若宇 转载自 http://blog.csdn.net/data_backu...
    承瑜阅读 2,551评论 0 4
  • 包了好几天的粽子,今天终于可以上桌了…… 提前祝大家端午安康。
    薇雨青芜阅读 1,825评论 39 58
  • 今天带小朋友小便时,x小朋友说:今天我的裤子不好脱。我回答:不急,你一条一条脱,你可以做的很好,加油。 我看着她一...
    茜922阅读 200评论 0 1
  • b4638ea2cadf阅读 102评论 0 0