ADI Blackfin的Mem DMA高速通信

从零到一:Abaqus与Matlab联合仿真的自动化流程构建指南 本文详细介绍了如何构建Abaqus与Matlab联合仿真的自动化流程,涵盖基础架构设计、关键接口技术实现、结果提取与处理技术以及高级参数化优化流程。通过Python脚本作为桥梁,实现数据传递和任务控制,帮助工程师提升仿真效率。特别强调了版本兼容性、异常处理和性能监控等实用技巧。 阅读详情

如果你还没有看过《嵌入式内功.葵花宝典》,那么在阅读本这篇推荐的文章之前有必要先去看看吧,你会有新的体会的。

关键词: ADSP-21535, Blackfin Mem DMA

ADSP-21535Blackfin是美国AD公司和Intel公司于2001年底联合推出的一款定点DSP,RISC指令结构,运作高效,具有十分优异的性能。该DSP具有300MHz的主频,2个40bit的MAC(乘加器)和2个32bit的ALU(算术逻辑单元),4个8bit的视频处理单元,16个地址寻址单元。该DSP内部集成了308KB的RAM,并具有丰富的外部接口,如PCI、USB、SPI、同步和异步串口等。同时,芯片内部设计了看门狗和多种定时器,充分满足软件工程稳定性的设计要求。值得一提的是,21535可以动态地控制电压输入,调整运行频率,减少芯片功耗,十分适用于移动产品的设计。

    2002年底,AD公司在中国开始大规模推广Blackfin系列的DSP,21535成为该系列的旗舰产品。由于该DSP推出时间不长,相关文献几乎没有报道;而且,在许多接口性能方面,AD公司也没有对其给出准确的指标。根据通常的设计经验可知,新产品通常在某些方面没有达到设计要求。笔者所设计的高速通信板数据交换速度必须达20MWord/s以上,因此对该DSP的高速通信必须进行准确仔细的评估和设计。

ADSP-21535的内存访问支持I/O方式、内存映射和多种DMA方式,其中MemDMA(MemorytomemoryDMA)方式是最快的一种并行通信方式。因此,笔者在设计时选择了MemDMA作为高速通信方式。由于21535支持多种内存,因此在设计MemDMA时,必须对21535的内存管理有一个详细的了解。

1ADSP-21535的内存管理

21535的内存管理十分强大。它把存储器视为一个统一的4GB的地址空间,使用32位地址。所有的资源,包括内部存储器、外部存储器、PCI地址空间和I/O控制寄存器,都具有独立的地址空间。此地址空间的各部分存储器按照分级结构排列,以提供较高的性能价格比。一些快速、低延迟的存储器(如L1)的位置接近处理器核心,而低成本低性能的存储器远离核心。芯片内部的308KBRAM中,其中L1(一级缓存)52KB,L2(二级缓存)256KB;外部地址访问空间可以高达768MB,通过EBIU(ExternalBusInterfaceUnit,外部总线接口单元)进行管理。EBIU支持多种内存,如SDRAM、SRAM、ROM、EPROM、FLASH、FIFO等。内存地址的具体配置空间如图1所示。

    L1作为DSP的一级缓存,可以与DSP的内核一样,运行在300Mbps的高速上。它分为三部分:16KB的InstructionRam(指令存储器)、,两块16KB的DataRam(数据存储器)、4KB的ScratchpadRam(中间结果缓存)。指令存储器既可以作为SRAM,也可以配置为4路联合设置的Cache。数据存储器能够配置成双路联合设置的Cache或者SRAM;中间结果缓存只能作为SRAM使用。指令缓存和数据缓存都可以通过DMA方式灌入数据,但是对于中间结果缓存这种方式不能使用。

L2作为DSP的二级缓存,是一个统一的指令和数据存储器,能够根据系统设计要求同时存放代码和数据。L2具有DSP核心同样的带宽,但是延迟时间较长,访问L2单个独立的地址时系统需要经过7个周期的延时,这时它的访问速度在42.8Mbps左右。所以如果程序比较大,必须在L2中编写程序时,通常将L1配置为L2的Cache,这样,速度可以大大加快。

21535支持的片外存储器种类很多,值得一提的是它的SDRAM控制器。21535集成的SDRAM控制器能够以fSCLK(系统时钟,为核心时钟的若干分频)的速度,与多达4个Bank的工业标准SDRAM或者DIMM接口。每个Bank可以配置为16MB~128MB的存储器,符合PC133SDRAM的标准。

存储器的DMA控制器提供高带宽的数据传输能力,它能够在内部L1/L2存储器和外部存储器(包括PCI存储空间)之间执行代码或者数据的块传输。

2 DMA寄存器的配置

为了描述MemDMA序列,DMA控制器使用一套名为描述子块(Descriptor)的参数。当需要后继的DMA序列时,这些描述子块被链接起来。这样,一个DMA序列完成时能够自动初始化下一个序列,并将其启动。如果不需启动下一个序列,只要将其指向一个内容为0的地址空间即可。如果下一次链接指向原描述子块,则DMA完成后暂停。为访问整个ADSP-21535的地址空间,源地址和目的地址描述子块采用了全32位地址的基指针。两个描述子块均为5个字的连续空间,需要注意的是该连续空间必须定义在L2范围内。描述子块内包含的内容如图2所示。

MemDMA规定,描述子块所在的首地址必须传入相关的寄存器。描述子块首地址的高16位装入DMA_DBP寄存器(DMADescriptorBasePointerRegister,DMA描述子块基地址寄存器)内。由于该寄存器严格限定必须在0xF000~0xF003,这就限定了源和目的地址描述子块只能定义在L2存储器内,并且高16位地址相同。

描述子块首地址的低16位放在两个寄存器中,源地址描述子块低16位装入MDS_DND寄存器(SourceMemoryDMA Next DescriptorPointerRegister,DMA源地址下一个描述子块寄存器),而目的地址描述子块低16位装入MDD_DND寄存器(DestinationMemoryDMA Next DescriptorPointerRegister,DMA目的地址下一个描述子块寄存器)。其说明如图3所示。

在描述子块的地址传入相应寄存器后,后面的四项先配置,然后设置第一项。也就是对管理DMA启动参数的寄存器进行参数配置。两个配置寄存器的详细内容如图4所示。例如当目的地址寄存器为0x8003,源地址寄存器为0x8001时,传输的数据总长=DMA传输的长度×字。需要注意的是,虽然此时传输以16位(字长)传输,但DMA的带宽是32位,剩下的带宽资源将被浪费。8位传输时,带宽资源利用率更低。

下面,以一个具体的32位DMA例子说明上面的描述子块和多个寄存器的使用方法。

图4 DMA源地址和目的地址配置寄存器

3 32位DMA的例程

R0.H =0x8009//DMA源配置字,设置为32位传输

R0.L =0x800//DMA长度

R1.L =0x2000//DMA源地址低16位

R1.H =0xf000//DMA源地址高16位,这里指向L2

R2.L =RAM_READ//DMA源描述子块首地址

低十六位,DMA读

R2.H =0x800b//DMA目的配置字,设置为32位传输

R3.L=0x0000//DMA目的地址低16位

R3.H=0xff90//DMA目的地址高16位,这里指向

L1数据存储器-Bank B

R4.L =RAM_WRITE//DMA目的描述子块首地址低

十六位,DMA写

P0.L =RAM_READ//将32位的源描述子块的地址

载入P0

P0.H = RAM_READ

P1.L =RAM_WRITE//将32位的目的描述子块的地

址载入P1

P1.H = RAM_WRITE

WP0+0x2 =R0//将DMA长度写入源描述块第

二个字中

P0+0x4 =R1//将DMA的32位源起始地址

写入源描述块第三第四个字中

WP0+0x8 =R2.L//将下一个源描述子块的地址

写入源描述块第五个字中

WP1+0x2 =R0//将DMA长度写入目的描述块

第二个字中

P1+0x4 =R3//将DMA的32位目的起始地址

写入目的描述块第三第四个字中

WP1+0x8 =R4//将下一个目的描述子块的地

址写入目的描述块第五个字中

WP0 =R0.H//将DMA源配置字写入源描述

块第一个字中

WP1 =R2.H//将DMA目的配置字写入目的

描述块第一个字中

R6 =P0//将P0的值同时存在R6内

P2.L =0x390A//将DMA源描述子块配置寄存

器的地址传给P2

P2.H = 0xFFC0

WP2 =R6.L//将DMA源描述子块所在地址

的低16位传给P2指向的地方P3.L= 0x4880 //将描述子块基地址寄存器的

地址传给P3

P3.H = 0xFFC0

WP3 =R6.H//将DMA源描述子块所在地址

的高16位传给基地址寄存器

P4.L = 0x380A

P4.H =0xFFC0//将DMA目的描述子块配置寄

存器的地址传给P4

R6 =P1//将P1的值转存到R6

WP4 =R6.L//将目的描述子块所在地址的

低16位传给配置目的地址寄存器

P5.L = 0x3902

P5.H =0xFFC0//将DMA源地址配置寄存器所

在地址传给P5

R6 = WP5

BITSETR60//设置R6的最低位为1,表示

准备启动读DMA

I0.L = 0x3802

I0.H =0xFFC0//将DMA目的地址配置寄存器

的地址传给I0

R7.L = WI0

BITSETR70//设置R7的最低位为1,表示

准备启动写DMA

WP5 =R6//将R6和R7的低16位写入

两个配置寄存器中,真正启动DMA

WI0 = R7.L

DMA_WAIT//等待DMA结束

R6 =WP1//根据写描述子块第一个字的

最高位判断描述子块的所有权

cc=bittstR615

IF cc JUMPDMA_WAIT//如果为1,表示还在DMA

状态,继续判断,等待

RTS

.align4//在L2空间范围内定义两个

描述子块,要求4个字节对齐

.BYTE2RAM_READ5

.align 4

.BYTE2RAM_WRITE5

值得注意的是,在上述DMA例程中,笔者使用了查询等待方式,但中间完全可以插入其他指令,例如DSP还可以同时作双乘加和两次32位取数。只要不访问正在DMA读写的地址区域,没有任何影响。这意味着,在系统DMA的同时,DSP可以同时进行其他操作,这一点对于提高DSP的效率至关重要。

4各种内存空间的DMA访问指标测试及分析

根据以上配置,笔者对ADSP-21535的DMA性能进行了比较详尽的测试。测试数据如表1所示。

表1 21535的DMA实测数据

源地址目的地址DMA长度(双字)周期数(个)速度(双字/秒)
L2L140964361528.2M
L2SDRAM81925487844.8M
L2L281926673736.8M
L1L140966416419.1M
L1SDRAM40963989130.8M
L1L240965266123.3M
SDRAML140962862542.9M
SDRAMSDRAM40966566818.7M
SDRAML281925231446.9M

注:测试环境-DSP核心时钟300MHz,系统时钟120MHz,SDRAM为PC133标准。样本采样:各15次

从表1中的实测数据可以看出,DMA的速度均在18.7M双字/秒以上,最高速度达46.9M双字/秒,可以满足工程中高速采集的需要。从表中数据可以得出以下结论:

(1)DMA双向速度不对称,将源地址和目的地址交换后,速度会发生变化;

(2)低速向高速区域传输时,要比反向传输快;

(3)同类区域DMA一般比区域之间DMA要慢。如L1DMA到L1,比L1DMA到L2和SDRAM都要慢一些。其它区域也有类似现象。

(4)高速区域DMA速度并不一定快,如L1区域DMA速度总体表现反而最低。

 
AIGC游戏测试自动化:AI如何提升游戏QA效率 随着游戏产业的蓬勃发展,游戏的复杂度和规模不断增加,传统的游戏测试方式面临着巨大的挑战。本文章的目的在于深入探讨AIGC技术在游戏测试自动化中的应用,分析AI如何提升游戏QA的效率。范围涵盖了从核心概念到实际应用的各个方面,包括算法原理、数学模型、项目实战案例以及未来发展趋势等。本文将按照以下结构进行阐述:首先介绍核心概念与联系,明确AIGC和游戏测试自动化的相关概念和关系;接着讲解核心算法原理和具体操作步骤,通过Python代码进行详细说明;然后介绍数学模型和公式,并举例说明; 阅读详情

相关推荐

基于STM32的多参数水质检测仪系统 | 保姆式教程 开源可复刻

本项目基于STM32F103C8T6主控,搭配pH、TDS、浊度、水温四大核心水质检测模块,完整实现了多参数水质检测仪的全流程开发,从多通道ADC采集、数字滤波、温度补偿、专业校准、阈值报警到人机交互,全流程无跳步保姆式拆解,配套逐行注释可直接编译的开源代码,新手跟着步骤一步步操作,就能顺利完成项目复刻

ZhongWeiXiang9的博客 484

ADI的DSP开发资料有哪些?(一)开发软件合辑

ADI提供的DSP开发资料都有哪些,我做了一下总结,请看系列文章。本章讲所有的ADI DSP开发软件。

ADI_OP的博客 2219

AIGC大模型应用教学平台

该平台采用最新的AI推理加速芯片,提供30Tops算力和32GB存储,能够运行常见的大语言模型如ChatGLM2、Llama2、Baicuan、Mistral等,也可以运行文生图扩散模型Stable Diffusion,提供大模型微调、量化、转换和加速推理服务。在此基础上,平台还提供常见的生成式AI应用,包括AIGC知识抽取增强(RAG)、AIGC绘画、AIGC会话聊天、数字虚拟人等应用,以便学生能够掌握最新的生成式AI模型微调、提示工程和智能体应用技能。

中智讯的博客 1204

关于ADI DMA操作的学习1-关于标准DMA操作

关于ADI DMA操作的学习1-关于标准DMA操作 ADI 的DSP 操作有几种模式,这是模式1,标准操作,将数据从内存一搬到另外一个地方; #include<def21489.h> #include<cdef21489.h> #define Val 20 void initPLL_SDRAM(void); int Internal_buf[Val] = { 0 }; #pragma section ("seg_sdram1") int External_buf[Val] = { 0

weixin_43142590的博客 796

YOLO详解

本文参考知乎 https://zhuanlan.zhihu.com/p/25236464 1. YOLO的创新点 YOLO将物体检测作为回归问题求解。基于一个单独的end-to-end网络,完成从原始图像的输入到物体位置和类别的输出。 从网络设计上,YOLO与two steps的目标检测方法如RCNN、Fast RCNN和Faster RCNN的区别如下: YOLO训练和检测均是在一个单独网...

UnknownPlayer的博客 9945

智能织梦:基于Rokid AR眼镜的家庭情感记忆增强系统设计与实践

本文介绍了基于Rokid AR眼镜的'智能织梦'系统,通过增强现实技术捕捉和重现家庭情感记忆。系统利用多模态传感器和轻量级情感识别模型,自动记录家庭互动中的情感峰值时刻,并生成沉浸式记忆片段。测试数据显示,该系统显著提升了家庭情感互动的频率和质量,特别适用于多代同堂家庭和记忆唤醒场景。

sre5engineer的博客 536

2021-3-30 ADI 的DMA操作模式总结

2021-3-30 ADI 的DMA操作模式总结 问题:我阅读了ADSP-21489的数据表,并说明ADSP-21489具有八个SPORT,但它只能微调或接收16通道音频数据。据我了解,总共应该有32声道音频数据,因为每个SPORT都有两条数据线(A和b)。与ADSP-21371相同。 回答: ADSP-21489处理器具有八个独立且同步的串行端口(SPORT)。根据串行端口体系结构,它在配置为输入的双向串行数据信号之一上接收串行数据,或在配置为输出的双向串行数据信号上发送串行数据。它可以同时在两个通道上进

weixin_43142590的博客 1109

“傻瓜”stata入门——熟悉操作界面

小白开始学习stata和matlab,零基础上手

nnpersistent的博客 4454

训练数据示例

针对“规格书生成测试用例脚本”的任务,在 LLaMA-Factory 中使用即可。关键是把“规格书内容”放进input字段,把“期望的脚本输出”放进output字段。

liuxs2009的专栏 57

PVE启动卡在loading initial ramdisk

pve显卡直通导致的异常解决

学而时习之 6687

拆解全球18大“支付清算”体系:CLS、中国、美国、欧洲、日本、mBridge...

拆解全球18大“支付清算”体系:CLS、中国、美国、欧洲、日本、mBridge...

银行信息系统应用架构详解 883

从瀑布到流水线:DevOps 入门与 GitLab + Jenkins + Docker 落地实践

先看清软件开发生命周期(SDLC)的全貌,再对比瀑布模型与敏捷开发,随后进入持续集成与 CI/CD 的机制内核;最后落到实操——在 GitLab、Jenkins、Docker 组成的四机实验环境里,走完源码托管、自动化构建、镜像封装与远程部署,直到参数化构建与版本回滚。概念与命令并重,既是入门地图,也是操作手册。

年轻的时候很穷,经过我多年的努力,终于不再年轻。 239

Vue - 快速入门,这一套就够了!(Vue core + 案例 + 效果演示)

前置条件:掌握 HTML、CSS、JavaScript、AJAX.工具:VsCode.插件:Live Server(浏览器实时预览)Ps:建议都提前下载下来,没网的时候也能用.

CYK_byte的博客 4万+

DNS 不是把域名翻译成 IP:递归解析、TTL 缓存、CNAME 与报文排错实战

本文通过离线Python实验,拆解DNS递归解析、缓存机制与报文结构,揭示“DNS不是全局映射表”的本质。重点解析递归器角色、TTL衰减、CNAME链处理、负缓存隔离及修改记录延迟生效等核心问题,结合实战排错案例,阐明缓存层级、事务匹配、截断处理与安全边界,强调从应用到权威的逐层排查逻辑,实现可复现、可验证的DNS教学系统。

此人很懒,什么都没有写~~ 347

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

要努力去发光,而不是被照亮~ 117

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

【LTE L3 笔记 09】LTE物理信道-PRACH

课程来源:B站《【2022】华为HCIA-LTE无线工程师认证学习中级视频》笔记为个人整理,含课件截图,仅供学习交流。

lyouhuan的博客 187

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

密码存储不是 MD5 加盐:PBKDF2、scrypt、参数升级与安全验证实战

本文通过实战演示密码存储的正确做法:摒弃MD5加盐,采用PBKDF2与scrypt等高成本密钥派生函数,结合随机盐、版本化记录与严格解析,确保离线破解成本可控。模块实现安全验证、参数校验、透明升级与统一错误处理,强调算法选择需兼顾安全性与可维护性,提供教学级密码存储方案,助力构建可迁移、可审计的认证边界。

此人很懒,什么都没有写~~ 220

软件测试用例模板怎么写:从用例设计到执行记录的全套指南

测试用例是测试工作的核心产出,它决定测试覆盖了多少、漏掉了什么。但大多数人的测试用例写得像流水账——只有正常路径,没有异常场景;只有操作步骤,没有预期结果;只有功能测试,没有非功能测试。本文拆解测试用例的标准结构,说明每个字段的含义和写法,给出覆盖功能测试、性能测试、安全测试的完整用例范例,并列出测试用例设计的五个高频遗漏点。

wuwangzhiduoshao的博客 148

【鸿蒙专题与实战】测试体系:单元测试、组件测试与 UI 测试

本文系统讲解鸿蒙开发中的三层测试实践:底层单元测试(用Hypium框架,优先覆盖纯函数、边界与异常)、中层ViewModel逻辑、顶层仅测3-5条关键UI路径。强调测试应“越往下写得越多”,因单元测试快且成本低,而UI测试慢易出错。通过实例说明断言拆分提升定位效率,结合覆盖率报告(hvigorwtest --coverage)发现盲区,核心是“用覆盖率找漏测,而非追求数字”。附五步落地清单:建测试文件、按优先级补用例、精简UI测试、生成报告、定位未覆盖行。下一篇将开启实战项目:从需求到上架全流程。

信息安全领域优质创作者|操作系统领域专家 164

MCP实战06:传输实战、测试与部署

你的 MCP Server 写完了,怎么确认它真的能被宿主正确调用?这课给传输层实战三件套:MCP Inspector 可视化调试、协议级自动化测试(pytest 断言 JSON-RPC 报文结构)、stdio/HTTP 双传输部署。测试不是可选项——工具描述错一个字段宿主就调不对,你能给 Server 建起自己的回归测试。

Blockbuster-drug 718

【LTE L3 笔记 05】LTE同步信号

课程来源:B站《【2022】华为HCIA-LTE无线工程师认证学习中级视频》笔记为个人整理,含课件截图,仅供学习交流。

lyouhuan的博客 114

Go1.27升后Config.Rand怎么改测

Go1.27起tls.Config.Rand弃用;确定性测试改用testing/cryptotest.SetGlobalRandom,附仓库扫描与go test冒烟。

Amax3747的博客 397

电芯串并联与BMS保护

串联升压、并联扩容,规则一句话,但整包能用多少由最弱的那节电芯说了算。这篇先算最弱电芯的账,再讲清三层保护,最后给对应的BMS测试用例:欠压、压差、均衡怎么测。BMS项目里有个常见场面:两台同配置的样车,电芯是同一批的,跑出来续航和限功率点却对不上。拆包量单体,一台里有一节电芯的容量比其他低了8%。整包表现被一节拖住,就是串并联的规矩在起作用。这篇先把规则和算例讲清,再讲保护分层,最后落到测试用例。

qq_43241255的博客 228

《C++ 项目:手写大模型接入 SDK》ChatGPT接口设计(中):全量响应实现和测试

本文详细实现了ChatGPTProvider对接OpenAI ResponsesAPI的全量响应sendMessage接口,涵盖模型可用性校验、请求参数解析、JSON报文组装、HTTP客户端配置(含代理与超时)、网络请求发送及响应解析全流程。通过GTest编写测试用例,发现并修复了因Content-Type重复设置导致的400错误,揭示了不同厂商网关对请求头规范的宽容度差异,最终提出一套兼容多模型服务商的标准写法,提升了代码通用性与鲁棒性。

2501_91275995的博客 566

工作流 vs 自主 Agent:5 种设计模式与 3 种建模方式详解

本文基于 Anthropic《Building Effective Agents》指南,系统梳理了AI应用中的两类核心架构:Workflow(编排式)与Agent(自主智能体)。强调“能画流程图就不上Agent”,提出从简单提示链到复杂自主决策的5种可组合工作流模式,并给出选型口诀与工程实践建议。核心观点:优先用确定性、可审计的Workflow,仅在任务路径未知时启用Agent,避免盲目复杂化。

分享大数据、java相关的技术 154

AI提效测试实践论

11、测试结束后,必须将任务过程中所有走了弯路,多次尝试的才成功操作的最终解决办法,按1、2、3...列点追加写入到当前文件的“特别注意要点”下(必须只记一行摘要,完整内容另存 [当前AGENTS.md文件所在的目录]\details\[序号].md)(如果新纪录的要点和历史要点存在冲突,必须直接对历史要点进行修正。`测试用例` 章节下必须按用例分层组织为 `冒烟集`、`主流程集`、`边界集`、`回归集` 四个子集,并在 `用例结果汇总` 中统计各分层集的用例数量。3、是否存在BUG;没有则写“无”> |

weixin_44711513的博客 121
上一篇: 基于TMS320C64x/DM64x的视频编码优化
下一篇: 嵌入式系统中的CACHE问题
embeddedsoft
博客等级 码龄20年 51粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值