This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
尊敬的团队:
我有一位客户使用 XINTF 接口与 FPGA 进行通信、但无法写入数据。 下面是详细说明:
XINTF 配置如下:
void InitXintf (void){ //这显示了如何写入 XINTF 寄存器。 这里使用的//值是复位后的默认状态。 //不同的硬件需要不同的配置。 //有关与 // F28335 eZdsp 一起使用的 XINTF 配置示例,请参阅 examples/run_fin_XINTF 项目。 //对 XINTF 时序的任何更改只能由 在 XINTF 之外运行的代码//进行。 //所有区域------------------------------------------------------- //基于 XTIMCLK = 1/2 SYSCLKOUT EALLOW 的所有区域的时序; SysCtrlRegs.PCLKCR3.bit.XINTFENCLK = 1; EDIS; EALLOW; XintfRegs.XINTCNF2.bit.XTIMCLK = 1; //没有写入缓冲 XintfRegs.XINTCNF2.bit.WRBUFF = 0; // XCLKOUT 被使能 XintfRegs.XINTCNF2.bit.CLKOFF = 0; // XCLKOUT = XTIMCLK/2 XintfRegs.XINTCNF2.bit.CLKDE=0;/--- //使用就绪时、有效的必须为1或更大 //引线必须始终为1或更大 //区域写入时序 XintfRegs.XTIMIG0.bit.XWRLEAD = 3; XintfRegs.XTIMIG0.bit.XTIWRARTIVRE=7; XintFREGS.XINGRMIRG.3 ;XTIMIG0=3;XTIMIRT.XINT.XTIMIRG0=7;XINT.XTIMIRG.XTIFREG=7;XINT.XINT.XTIMIRG.3;XTIFRTS=TID.XINT.XTIMIRG.3;TID.XING.3;TID.XINT.XINT.TIDRDIL.TID.T0 = 7;TIDRDIL.TID.T= //双倍所有区域读取/写入超前/主动/跟踪时序 XintfRegs.XTIMING0.bit.X2TIMING = 1; //区域将对 XREADY 信号 XintfRegs.XTIMING0.bit.USEREADY= 1;//修改值,忽略xready信号 XintfRegs.XTIMING0.0 = 1 ; //必须为异步大小= 1;//必须为0、XTIMIGN = 1;//必须为0 = 1;/ 0 = 1 / 0、XTIMIGN = 1
使用 ZONE0区域、通信代码如下:
void 通信 FPGA (void)
{
GpioDataRegs.GPACLEAR.bit.GPIO5=1; //D_G_A 使能A相数据总线收发器
GpioDataRegs.GPASET.bit.GPIO30 = 1; //D_G_B 禁止B相总线收发器导通
GpioDataRegs.GPBSET.BIO32 = 1; //D_G_C 禁止C相总线收发器导通
GpioDataRegs.GPACLEAR.bit.GPIO2 = 1; //a_G_A****地址线总线收发器使能,低电平使能
GpioDataRegs.GPASET.bit.GPIO1=1; B地址总线禁止_G_T Ü V
GpioDataRegs.GPBSET.BIO39 = 1; /A/A_G_C
GpioDataRegs.GPASET.bit.GPIO4=1; //D_DIR_A 总线收发器方向、DSP->FPGA
GpioDataRegs.GPASET.bit.GPIO3=1;
*(sendStart + 0)=值; //value = 9。
*(sendStart + 1)=值;
*(sendStart + 2)=值;
*(sendStart + 3)=值;
*(sendStart + 4)=值;
*(sendStart + 5)=值;
*(sendStart + 6)=值;
*(sendStart + 7)=值;
GpioDataRegs.GPACLEAR.bit.GPIO4=1; //D_DIR_A 总线收发器方向、FPAG->DSP
GpioDataRegs.GPASET.bit.GPIO3=1;
/* recfPGAmessage[0]=*(recStart + 0);//第一个子模块电压
recfPGAmessage[1]=*(recStart + 1);//第二个子模块电压
recfPGAmessage[2]=*(recStart + 2);//第三个子模块电压
recfPGAmessage[3]=*(recStart + 3);//第三个子模块电压
recfPGAmessage[4]=第四个子模块电压(recStart + 4);//μ s
recfPGAmessage[5]=*(recStart + 5);
recfPGAmessage[6]=*(recStart + 6);
recfPGAmessage[7]=*(recStart + 7);//第六个子模块电压
recfPGAmessage[8]=第七个子模块电压(recStart + 8);//μ s
recfPGAmessage[9]=*(recStart + 9);//第七个子模块电压
recfPGAmessage[10]=*(recStart + 10);//第八个子模块电压
recfPGAmessage[11]=第八个子模块电压(recStart + 11);//μ s
recfPGAmessage[12]=*(recStart + 12);//第八个子模块电压
recfPGAmessage[13]=*(recStart + 13);//第八个子模块电压
recfPGAmessage[14]=*(recStart + 14);//第八个子模块电压
recfPGAmessage[15]=*(recStart + 15);//第八个子模块电压*/
GpioDataRegs.GPASET.bit.GPIO5=1; //D_G_A 禁止A相数据总线收发器
GpioDataRegs.GPASET.bit.GPIO2 = 1; A禁止A相地址总线收发_G_T Ü V
返回;
}
在仿真过程中、通过查看"Expressions"窗口、可以发现数据异常、没有模式。
我已经测试过 FPGA 时序是否正确。
什么可能导致问题?
此致
F. F、
您是否实现 了 XINTF 上电权变措施?
调试 XINTF 的最直接方法是在写入数据时使用示波器观察其引脚活动。 这将使您能够验证控制信号的时序和逻辑电平。
Tommy
嗨、Tommy:
大家好、我们通过 ChipScope 观察一些使能引脚的时序、它们都是正常的。
当我们之前检查硬件问题时、我们发现如果发送数据1、则 XD0电平应为3.3V、但实际上示波器观察到的电压仅为1V。
但是、这似乎不会影响数据传输。 现在、当 FPGA 向 DSP 发送数据时、DSP 接收到的数据基本正常(有一些小错误)。
但是、当 DSP 通过仿真器观察结果将数据发送到 FPGA 时、与地址对应的数据不是我写入的数据、而是在上面的屏幕截图中观察到的存储器中的数据。
此致
[引用 user="F.F">当我们之前检查硬件问题时、发现如果发送数据1、则 XD0电平应为3.3V、但实际上示波器观察到的电压仅为1V。
但是、这似乎不会影响数据传输。 现在、当 FPGA 将数据发送到 DSP 时、DSP 接收到的数据基本上是正常的(有一些小错误)。
这听起来好像 XINTF 和 FPGA 之间有争用,需要解决--不应忽略它。
[引用 user="F.F"]但是、当 DSP 通过仿真器观察结果将数据发送到 FPGA 时、与地址对应的数据不是我写入的数据、而是在上述屏幕截图中的存储器中观察到的数据。
您说的仿真器是什么意思? 这真的是一个建模和仿真环境、还是类似于逻辑分析仪或 FPGA 记录工具? XINTF 和 FPGA 之间的竞争很容易导致数据损坏、因为两个端点都在尝试同时控制总线。
尊敬的被叫方:
很抱歉、可能我犯了个错误。 "仿真器"只是一个 JTAG。
我们在测试方面取得了新的进展:
当 DSP 将数据发送到 FPGA 时、FPGA 可以正确接收数据、但在接收数据期间会发生多次跳跃、如图所示:
发送的数据分别为1、1、255、地址分别为0x4000、0x4001和0x4002。 您可以看到接收第二个数据时出现问题。 当地址更改为4001时、接收到1、但随后跳转至0、1和0。 有几组数据与这种情况类似、这是一个非常奇怪的问题。 目前、怀疑这可能是由 FPGA 的转移问题或 xinf 的时序不匹配引起的。
你有什么建议吗?
此致
F. F、
我建议验证 FPGA 是否满足异步协议的控制信号和时序要求。
例如 、TRM 的这个波形图 显示、数据总线只能保证在写入操作的活动和跟踪阶段有效:
数据表 将提供有关设置和保持时序的更详细信息。
Tommy