FPGA+DSP SRIO通信(一)——DSP端参数设置(通道)

本文介绍了在TI的C6678 DSP上进行FPGA+DSP间的SRIO通信参数设置,包括port模式选择、链接速率配置和RX/TX配置。通过官方例程和详细步骤解析,帮助读者理解如何将DSP端设置为Normal模式,以及如何根据参考时钟和所需链路速率调整参数,确保正确通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

经过漫长的探索之后,博主发现关于TI的板子调试和开发要遵循的规律,称其为潜规则也不为过。

1、文档
文档是程序的基础,是思想和灵魂,所以文档的阅读必须认真,但由于所有的TI文档都是英文,非英语母语者读起来非常不通畅。我说说我的方法:使用谷歌翻译。不是硬着头皮逐句看,看不懂了再翻译,这非常耗费时间,往往看了后面忘了前面。我给出的方法是大段翻译,直接粘贴到谷歌翻译中,在遇到晦涩的部分时再去细看英文,这样效率就会高起来。

2、例程
以SRIO调试为例,我在调试SRIO时的初始目标就是使SRIO两端的设备能互相读写,初期看完SRIO文档后一头雾水,多亏北航学长给了SRIO_Read代码之后我渐渐明白,我们所要调试的大部分工作官方例程都帮我们做了,我们要做的只是明白官方例程做了什么,和我们需要增加哪些东西就够了。例程一般就在你的TI安装目录下的形如PDK6678的文件夹中。如果找不到可以去官方论坛搜索。

3、实践(调试)
程序最终是要在板子上跑起来的,所以在写好程序并不确定程序的功能能不能实现后,最好的办法是在板子上进行在线调试,不要因为怕麻烦而使用SIMLATOR进行仿真,这种软件仿真的意义在于调通算法,而不是调通硬件板卡,所以硬件调试必须上板,不然就是纸上谈兵。

以上就是我的一些学习经验,分享出来,也是对自己以后学习DSP的一个指导思想。

下面开始正题。

DSP端参数设置

我们所使用的FPGA+DSP是:K7325t+TI6678。FPGA端的情况我不太了解,是我师兄做的,所以我的这个系列的博客只说DSP的配置。

使用的官方例程路径:

ti\pdk_C6678_1_1_2_5\packages\ti\transport\ipc\examples\srioIpcBenchmark\device_srio.c

port mode(port模式)

SRIO通道有自回环(loopback)模式和普通模式(Normal),要使用SRIO实现FPGA和DSP的通信,必须将各port调至Normal模式,即:

    /* Configure SRIO to operate in loopback mode.(原始例程代码)*/
  //  CSL_SRIO_SetLoopbackMode(hSrio,0);
  //  CSL_SRIO_SetLoopbackMode(hSrio,1);
  //  CSL_SRIO_SetLoopbackMode(hSrio,2);
  //  CSL_SRIO_SetLoopbackMode(hSrio,3);

    /* Configure SRIO to operate in normal mode.(修改后例程代码) */
    CSL_SRIO_SetNormalMode(hSrio,0);
    CSL_SRIO_SetNormalMode(hSrio,1);
    CSL_SRIO_SetNo
### FPGA实现SRIO接口与DSP通信的关键设计 在FPGA实现与DSPSRIO接口通信,需要从硬件设计、协议实现、接口配置等多个方面进行综合考虑。以下为实现过程中的关键点: #### 1. SRIO协议的实现方式 FPGA实现SRIO协议通常依赖于厂商提供的IP核,例如Xilinx的SRIO IP核[^2]。该IP核支持点(Endpoint)模式,可作为从设备响应DSP通信请求。通过调用IP核,FPGA能够自动处理SRIO协议栈的底层逻辑,包括包格式化、事务类型识别、地址映射等。IP核通常提供标准的AXI或FIFO接口供用户逻辑访问,便于集成到FPGA系统中。 #### 2. 硬件接口设计 在硬件层面,FPGADSP之间通过高速串行链路进行连接,通常使用GTX或GTH收发器实现物理层传输[^2]。Xilinx Virtex-6系列FPGA的GTX收发器支持多种高速协议,包括SRIO。设计时需确保时钟同步、链路训练、电气兼容性等环节的正确性,以保证通信的稳定性和可靠性。 #### 3. DSP的主设备配置 作为主设备,DSP负责初始化SRIO链路并配置FPGA从设备的寄存器空间。在DSP,需设置SRIO口为Normal模式,以启用正常的通信流程[^3]。此外,DSP还需配置地址映射表,确保其能够访问FPGA的指定内存区域。例如,使用CSL(Chip Support Library)中的函数`CSL_SRIO_SetNormalMode()`来配置口模式,避免使用Loopback模式。 #### 4. 数据传输机制 FPGADSP之间的数据传输可以采用消息传递(Message Passing)或直接内存访问(DMA)两种方式。DMA方式效率更高,适用于大数据量的传输场景。FPGA需实现DMA控制器逻辑,与SRIO IP核协同工作,完成数据的封装与解封装。DSP则通过SRIO控制器发起DMA传输请求,并指定FPGA的目标地址。 #### 5. 链路状态监控与错误处理 在通信过程中,FPGA需具备链路状态监测能力,例如检测链路是否建立、是否有传输错误等。通过SRIO IP核提供的状态寄存器,可以获取链路的运行状态。同时,FPGA逻辑中应加入CRC校验、重传机制等错误处理逻辑,以提升系统的鲁棒性。 #### 6. 示例代码:FPGASRIO模块顶层接口 以下是个简化的FPGASRIO模块顶层接口定义,展示与DSP通信的基本结构: ```verilog module srio_top ( input clk_125m, input rst_n, // SRIO GTX接口 output [1:0] gt_txp, output [1:0] gt_txn, input [1:0] gt_rxp, input [1:0] gt_rxn, // 用户逻辑接口 input user_clk, input user_rst_n, input [63:0] user_data_in, input user_valid_in, output user_ready_out, output [63:0] user_data_out, output user_valid_out, input user_ready_in ); // SRIO IP核实例化 srio_core u_srio_core ( .clk_125m(clk_125m), .rst_n(rst_n), .gt_txp(gt_txp), .gt_txn(gt_txn), .gt_rxp(gt_rxp), .gt_rxn(gt_rxn), .user_clk(user_clk), .user_rst_n(user_rst_n), .user_data_in(user_data_in), .user_valid_in(user_valid_in), .user_ready_out(user_ready_out), .user_data_out(user_data_out), .user_valid_out(user_valid_out), .user_ready_in(user_ready_in) ); endmodule ``` 该模块通过实例化SRIO IP核,将物理层接口与用户逻辑分离,便于开发与调试。 --- ###
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值