现在我使用自己设计的板子,上面有一片6657和一片Cyclone V, 通过PCIe相连,使用6657的STK开发包里面的PCIe例程,6657作为RC端,FPGA作为EP端,现在OUTBOUND已配置好,BAR0为0x10000000,BAR1为0x10400000,BAR0映射到6657的地址0x60000000,6657可以写BAR0的寄存器,但6657通过BAR0设置FPGA发起DMA操作后,DMA端可以看到数据已发出,但DSP却进入PMRST中断,什么原因? 我配置了IB_BAR0 = 0x1; IB_START0_LO = 0x81000000; IB_START0_HI = 0x0; IB_OFFSET0 = 0x81000000; 还是会进入PMRST中断,哪位大神帮帮忙!
Frost Edge:
刚才又试了下,DSP可以向0x60000000,0x64000000地址写入数据,但从上述地址读数的话则会引发NMI中断,有没有人知道原因?
Thomas Yang1:
进入PMRST中断的原因是因为DSP收到了PME message, 你可以在FPGA侧禁止在state切换时,产生power message event 给DSP,如下是DSP的配置,FPGA中应该会有相应的配置
PME Support. Identifies the power states from which generates PME Messages. A value of 0 for any bit indicatesthat the device (or function) is not capable of generating PME Messages while in that power state. Writablefrom internal bus interface.Bit 31: If set, PME Messages can be generated from D3cold.Bit 30: If set, PME Messages can be generated from D3hot.Bit 29: If set, PME Messages can be generated from D2.Bit 28: If set, PME Messages can be generated from D1.Bit 27: If set, PME Messages can be generated from D0.
Frost Edge:
回复 Thomas Yang1:
谢谢你的回复,我觉得地址映射错误的可能性比较大,现在有两个问题,
1.我将EP端的Bus Mastership使能,然后通过写FPGA端BAR0寄存器的方式让FPGA发起DMA传输,DSP不再收到PMRST中断,FPGA端可以看到数据已经发出,但DSP端看不到数据,我的寄存器配置为IB_BAR0 = 0x00000001, IB_START0_LO = 0x70000000, IB_START0_HI = 0x0, IB_OFFSET0 = 0x0;RC端BAR1 = 0x70000000; FPGA发起DMA传输的目的地址为0xF1000000; 根据Inbound address translation,映射到存储器域的地址应该是 0xF1000000 – 0x700000 + 0x0 = 0x81000000, 在DSP的0x81000000并没有看到数据,是我哪里理解错了吗?
2.我的Outbound配置为OB_SIZE = 8M, OB_OFFSET_INDEX0 = 0x10000000, OB_OFFSET0_HI = 0x0,OB_OFFSET_INDEX1 = 0x10400000, OB_OFFSET1_HI = 0x0, 我向0x60000000和0x60400000写数据,FPGA都可以收到,对应的是FPGA的BAR0和BAR1,但从这两个地址读数据,DSP要么进入c_int00中断,要么进入NMI中断,这块是不是还与XMC配置有关? DSP读数据的时候,FPGA可以看到我读的是BAR0和BAR1的基地址,也返回完成包了。
Frost Edge:
回复 Frost Edge:
从地址0x60400000地址读数据时,引发MDMA bus error和DSP memory protection fault中断,从而进入NMI中断服务子程序。
Frost Edge:
回复 Frost Edge:
这是中断发生时打印出的信息: