芯片上音频相关的验证

news2024/11/29 12:46:50

通常芯片设计公司(比如QUALCOMM)把芯片设计好后交由芯片制造商(比如台积电)去生产,俗称流片。芯片设计公司由ASIC部门负责设计芯片。ASIC设计的芯片只有经过充分的验证(这里说的验证是FPGA(现场可编程门阵列)原型验证, 通过将RTL移植到FPGA来验证)才能去流片。因为流片费用昂贵,如果不经过充分的验证去流片,芯片回来后发现有问题,经济损失巨大。一般ASIC内部会有专门的验证工程师做一轮验证,也会让软件工程时做一轮验证(做芯片验证是芯片公司里软件工程师的主要工作之一,出一款新芯片就要做一次芯片验证),均OK后才会去流片。本文以智能手机(或智能手表)上的SoC芯片为例讲讲ADSP(audio DSP, ADSP是SoC的一部分)上音频相关的硬件验证有哪些以及怎么验。

一,验哪些

1,  IPC

现在的智能手机(或智能手表)都是多核系统(主要有AP、CP、ADSP、BT、WIFI、GNSS等)。核间需要通信,因此就有了IPC(inter-processor communication,核间通信)。示意如下图:

 

IPC的本质是中断和ring buffer。一个核给另一个核发一个IPC,就是先向共享ring buffer里写数据,然后给对方发一个中断。对方收到中断后就到共享ring buffer里读数据,这样就完成了一次核间通信。 验证时主要看中断有没有来以及中断服务程序有没有进。没达到预期就排查,包括IPC基地址和中断号等是否正确等。

2,  audio DMA & bus

audio DMA & bus(I2S 、PCM等)是连接ADSP和外设(codec芯片等)的纽带,即ADSP和外设通过它们来采集和播放音频数据。示意如下图中的蓝圈处:

对于audio DMA,主要是配置descriptor(buffer长度(它决定audio DMA中断间隔)、源地址、目的地址)等。对于audio bus,主要是配置bus的属性,包括左对齐还是右对齐以及一次采样多少比特等。验证时主要看audio DMA中断有没有等间隔(比如10ms)来以及中断服务程序有没有进。一些场景下(比如用扬声器播放音乐)整个音频系统就是靠这个中断来驱动的。

3,  memory & cache

音频中会用到各种memory,包括片内的(ITCM, DTCM)以及片外的(DDR, SRAM, ROM等)。验证memory主要是看在地址范围内是否可读写等,ROM是可读,其他是可读可写。片外的memory可以分成不同的功能块。 有的是用于存放code和data,因此要配成cacheable,在程序执行时能加快运行。有的是作为share memory用于交互音频数据(比如播放音乐时AP给ADSP发音频数据就放在share memory里),则要配成uncacheable,让收方能立刻拿到正确的数据。需要注意的是片内的memory不需要配置cache属性。

4,  低功耗模式

低功耗模式(low power mode, LPM)就是让ADSP睡下去来节省功耗。有三种低功耗模式,按睡的程度从浅到深分别是CLOCK _GATING,PLL_OFF,POWER_OFF。CLOCK _GATING就是关掉clock,睡的程度最浅,功耗相对大些。PLL_OFF就是关掉PLL(锁相环),睡的程度次之,功耗也居中。POWER_OFF就是给ADSP下电,基本没功耗了。在POWER_OFF模式下,如果把memory配成retention(保持,即ADSP下电了,memory里的内容没丢)模式,其他核把ADSP唤醒还可以继续工作。如果把memory配成shutdown模式,即ADSP下电了,memory里的内容也丢了,其他核把ADSP唤醒就相当于重新boot ADSP了。 ADSP进LPM后,其他核通过IPC或者内部TIMER等可以唤醒ADSP。要验的是ADSP能够被唤醒且进入相应的中断服务程序。

还有一些跟平台相关的,比如TIMER,这里就不细述了。

二,怎么验

芯片验证有专门的平台(基于FPGA )。我们主要在两种平台上做验证,分别是Synopsys的HAPS以及Cadence的PZ1。这两个平台上的运行都很慢,在HAPS上跑一次要十几分钟,在PZ1上跑一次则需要半个多小时。所以在平台上跑之前要做好各种充分的准备,跑一次像一次,得到想要的结果,不然会很浪费时间的。PZ1相对HAPS优势是可以抓波形。一般的(比如IPC等)为了节省时间可以在HAPS上验,有特殊要求的(比如LPM)则要在PZ1上验。需要在PZ1上验的ASIC会指出来。 在HAPS上验遇到疑难问题时,就需要在PZ1上复现,并抓波形给ASIC分析,帮助找到root cause。

通常验时需要不同核之间配合的。下面就以验AP和ADSP之间的IPC为例来看看是怎么验的。

1,  AP把ADSP boot起来。ADSP起来后给ADSP发一个IPC,告诉AP ADSP已经起来了。

2,  在AP上去看有没有收到IPC中断(读相关的寄存器)。如果没有收到,相应的bit为0, 这种情况下大概率是发送端有问题。如果收到,相应的bit为1,这时再去检查有没有进中断服务程序,如果进了,说明ADSP给AP的IPC是好的。如果没进中断服务程序, 很大可能是中断号不对,需要进一步调查。

3,  ADSP给AP的IPC验好后,再来验AP给ADSP的IPC。类似的AP给ADSP发个IPC,在ADSP上看有没有收到中断以及有没有进中断服务程序等。

两个方向上的IPC都验好后,AP和ADSP的中断就算验好了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2227222.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【VSCode】配置

安装插件 C vscode-icons gdb调试 https://www.bilibili.com/video/BV15U4y1x7b2/?spm_id_from333.999.0.0&vd_sourcedf0ce73d9b9b61e6d4771898f1441f7f https://www.bilibili.com/video/BV1pU4y1W74Z?spm_id_from333.788.recommend_more_video.-1&vd_sourcedf0…

springboot使用枚举作为接口的参数

1.定义枚举类 2.定义接口 3.具体实现方法 4.apifox传入参数 枚举的具体’名称’就可以了 5.调试 6.进入断点,这样我们发现在接口的参数就映射到应的枚举类上了

数据结构(8.4_3)——堆的插入删除

在堆中插入新元素 在堆中删除元素 总结:

《计算机网络网络层:连接虚拟世界的关键桥梁》

一、网络层概述 网络层在计算机网络中占据着至关重要的地位,它作为连接不同网络的关键层次,起着承上启下的作用。网络层的主要任务是实现网络互连,将数据设法从源端经过若干个中间节点传送到目的端,为分组交换网上的不同主机提供通…

【linux】fdisk磁盘分区管理

介绍 fdisk是一个磁盘分区管理工具,可以用来创建、删除、修改和查看磁盘分区。 fdisk一般都是交互式使用,基础语法: fdisk /dev/sdd。进入交互窗口后,有一些选项,需要了解下: 选项含义n创建新分区p查看磁盘的分区情…

项目成本管理系统有哪些功能?9款工具详解

本文推荐的9大主流项目成本管理工具有: 1. PingCode;2. Worktile;3. 用友U8项目管理;4. 金蝶K3 Cloud;5. 泛微e-Project;6. 亿方云项目管理; 7. SAP Project System; 8. Trello; 9. …

基于opencv的眼镜试戴系统

对于正在准备毕业设计或者想在技术项目上加点“创新”的同学们,推荐一款基于OpenCV的眼镜试戴系统!这不仅是一个实现个人创意的项目,更是一个结合AI技术和实用应用的完美范例。 🌟 系统核心功能: 图片试戴&#xff1a…

解决cuda环境使用dgl

Dgl 是实现图结构数据构造的工具包,想在gpu环境下使用它,如果安装的是pip install dgl 会有下面错误 dgl._ffi.base.DGLError: [09:10:13] /opt/dgl/src/runtime/c_runtime_api.cc:82: Check failed: allow_missing: Device API cuda is not enabled. P…

软考高级备考记录

一 报考条件和报名流程 报考条件 该考试具有水平考试性质,报考任何级别不需要学历、资历条件,只要达到相应的专业技术水平就可以报考相应的级别 报名流程 软考报名官网:中国计算机技术职业资格网 官网上有 报名时间,考试…

springboot077基于SpringBoot的汽车票网上预订系统--论文pf(论文+源码)_kaic

汽车票网上预订系统 摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了汽车票网上预订系统的开发全过程。通过分析汽车票网上预订系统管理的不足,创建了一个计算机管理汽车票网上预订系统的方案。文章…

vue使用xlsx以及file-saver进行下载xlsx文件以及Unit8Array、ArrayBuffer、charCodeAt的使用

先说Unit8Array、ArrayBuffer、charCodeAt的使用下面会用到这三个 Unit8Array:数组类型表示一个 8 位无符号整型数组,创建时内容被初始化为 0。创建完后,可以以对象的方式或使用数组下标索引的方式引用数组中的元素。 new Uint8Array(); //…

Python中的数据可视化:Matplotlib基础与高级技巧

Python中的数据可视化:Matplotlib基础与高级技巧 数据可视化是数据分析和数据科学中不可或缺的一部分。通过图表,我们可以更直观地观察数据的分布和趋势。Matplotlib作为Python最基础、也是最广泛使用的绘图库之一,不仅支持多种常用图表&…

Android Studio中Gradle一直在加载怎么解决(首次安装过程中)

目录 前言:遇到问题:已解决: 前言: Android Studio中Gradle一直在加载怎么解决(首次安装过程中),在安装Android Studio的过程中,我因为环境的问题,被困扰了一天&#xf…

合合信息发布智能文档处理“百宝箱”,助力文档应用开发

文档是知识传递的载体,无论是大模型应用发展,还是与产业数字化息息相关的高质量数据库的建立,都离不开对于文档数据的处理和分析。目前,越来越多的开发者开始关注文档数据处理背后的“文档解析”技术,用以实现自动化数…

python常见内置函数

介绍Python常见的内置函数。 1、abs 取一个数的绝对值 int_value -2 print(abs(int_value))2、all 若一个可迭代对象(可循环遍历的对象)中所有元素为真,结果为真 list_value1 [1,2,3,4,0] list_value2 [1,2,3,4] print(all(list_value1)) print(all(list_va…

【cmake实战六】如何使用编译的库(动态库dll)——windows系统

【cmake实战六】如何使用编译的库(动态库dll)——windows系统_make windows下生成库-CSDN博客 基于以上文章,遇到的一些问题: 一、首先我用vs code 新建了一个项目:TEST 新增文件:CMakeList.txt #…

Kafka 与传统 MQ 消息系统之间有三个关键区别?

大家好,我是锋哥。今天分享关于【Kafka 与传统 MQ 消息系统之间有三个关键区别?】面试题?希望对大家有帮助; Kafka 与传统 MQ 消息系统之间有三个关键区别? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 …

微信小程序的日期区间选择组件的封装和使用

组件化开发是一种将大型软件系统分解为更小、更易于管理和复用的独立模块或组件的方法。这种方法在现代软件开发中越来越受到重视&#xff0c;尤其是在前端开发领域。微信小程序的日期区间选择组件的使用 wxml 代码 <view><view bind:tap"chooseData">…

flask自学教程(二)

文章目录 前言一、中型flask目录二、大型flask目录1.启动文件run.py定义2.实例创建文件定义&#xff08;app/__init__.py&#xff09;3.配置项config.py4. app/routes下的__init__.py5. 定义一个路由并写一个静态页面6. 模型文件7.static目录8.requirements.txt依赖 3.flask&am…

威胁 Windows 和 Linux 系统的新型跨平台勒索软件:Cicada3301

近年来&#xff0c;网络犯罪世界出现了新的、日益复杂的威胁&#xff0c;能够影响广泛的目标。 这一领域最令人担忧的新功能之一是Cicada3301勒索软件&#xff0c;最近由几位网络安全专家进行了分析。他们有机会采访了这一危险威胁背后的勒索软件团伙的成员。 Cicada3301的崛…