【电路笔记 TMS320C6***DSP】外部存储器接口 A EMIFA向FPGA(作为异步存储器)写入数据的示例

目录

  • EMIFA(External Memory Interface A)的"异步存储器"(Asynchronous Memory)指的是那些不与系统时钟同步进行读写操作的外部存储设备。这类存储器使用特定的控制信号(如芯片选择、输出使能、写使能等)来管理数据传输,而不是依赖于一个全局时钟信号。这意味着数据传输的时机是由控制信号的变化触发的,而非由时钟边沿决定。

  • 以下是一个EMIFA向FPGA(作为异步存储器)写入数据的示例:

DSP和FPGA的连接

复制代码
        _____________________________________                                   __________________________
       |                                     |                                 |                          |
       |                                     |                                 |                          |
       |                                     |                                 |                          |
       |                                     |>=======EMIFA片选信号============>|                          |
       |                                     |>=======其他控制信号=============>|                          |
       |                   DSP               |                                 |           FPGA           |
       |                                     |                                 |                          |
       |                                     |>=========EMA_DATA[15:0]========>|                          |
       |                                     |>=========EMA_ADDR[15:0]========>|                          |
       |                                     |                                 |                          |
       |_____________________________________|                                 |__________________________|

DSP端:传输数据给FPGA

  • DSP向FPGA传输数据的过程涉及到EMIF(External Memory Interface)的初始化、通过特定地址写入数据到FPGA。
  1. EMIF初始化:

    • EMIF_init(); 这个函数调用用于初始化外部存储器接口(EMIF),确保它可以正确地与外部设备(在此例中为FPGA)通信。这通常包括设置时序参数、配置总线宽度等。
  2. 定义宏:

    c 复制代码
    #define CS4_DATA_ADD (*((volatile unsigned short*)(0x64000000)))

    定义一个地址,使用volatile关键字是为了告诉编译器不要优化对该地址的访问,因为它的值可能会在程序之外被改变(例如由硬件中断引起的变化)。

  3. 通过EMIF写入数据到FPGA:

    c 复制代码
    *CS4_DATA_ADD = 0xFFFF; // 16位宽的数据
  • 注:代码中可能存在同一个代码块对CS4_DATA_ADD连续多次赋值,这是可行的,因为已经在初始化时配置了数据交互的时序,以确保FPGA能读取到所有的数据。

FPGA端:接收数据

verilog 复制代码
inout wire [15:0] EMA_D,    // 数据总线
inout wire [15:0] EMA_A,    // 地址总线
output reg [15:0] OUT_DATA, // 输出数据

always @(posedge clk) begin
    if(EMA_A[3:0] == 4'b0001) begin // https://blog.csdn.net/qq_24402247/article/details/125487700 & https://blog.csdn.net/ResumeProject/article/details/145931716
        OUT_DATA <= EMA_D[15:0]; // 当地址匹配时,更新OUT_DATA
    end
end
相关推荐
狂奔蜗牛(bradley)9 小时前
拒绝SOEM黑盒!死磕EtherCAT主站:ARM+FPGA架构、DC同步与状态机修复等,50+篇实战开发文档全公开
arm开发·fpga开发·架构
L@ncor10 小时前
第五章 基于低代码平台的智能体搭建 · 学习笔记(Coze / Dify / FastGPT / n8n)
笔记·学习·低代码·agent·prompt工程
知潮网10 小时前
被嫌弃的五仁月饼,一吨千元在养猪场翻了身
笔记
2601_9606312310 小时前
中药前处理及提取的工艺环节与技术要点
笔记
2601_9653842610 小时前
口腔黏膜清洁中的几何约束与流体动力学边界层问题分析
经验分享·笔记
一米阳光866111 小时前
软考高级【信息系统项目管理师】高项重要考点(9)组织 助你顺利上岸!
笔记·职场发展·软考·高项·信息系统项目管理师·高级职称
XMAIPC_Robot11 小时前
CODESYS 实时控制 + RK182X 大模型算力扩展|RK3576 工业边缘控制器设计
人工智能·fpga开发·机器人·rk3588+fpga
白杨尚青12 小时前
C++入门篇(十):string(上)——认识string:构造与三大遍历(一条龙讲透operator[]、迭代器、auto、范围for)
java·开发语言·c++·笔记·stl
Chen—LSN12 小时前
C语言——⽂件操作(1)
c语言·开发语言·c++·经验分享·笔记·算法·链表
Chen—LSN12 小时前
C语言——文件操作(2)
c语言·开发语言·c++·经验分享·笔记·算法·c#