展开菜单
首页 精品内容 本月促销 装机必备 Windows PDF教程 macOS软件 IOS软件 Android AI 专题
全部分类

当前位置:

首页 > 编程开发 > 体系编程、SOC编程那些事儿

体系编程、SOC编程那些事儿

体系编程基于CPU核架构,涵盖指令集、流水线、协处理器等;SOC编程针对片上集成模块进行寄存器级控制,包括时钟、引脚复用、GPIO、中断等。二者关联紧密,但体系编程侧重架构,SOC编程侧重模块控制。

本文目录

    从芯片系统设计角度看嵌入式编程:体系编程与SOC编程的边界

    大多数嵌入式开发者的学习路径,都是从最简单的51单片机编程起步的。随后,我们会慢慢接触到PIC、A VR、STM32等不同系列或型号的控制器,甚至进一步转向三星S5PV210、Exynos4412这样的高端处理器编程。

    这个过程中,一个典型的开发流程是:先读懂该型号控制器或处理器的指令集和datasheet,然后通过一些基础例程(最常见的莫过于GPIO、中断和定时器)开始动手编程。当接触过多种类型处理器之后,大家很容易产生一个归纳式的疑问:

    在include一个代表该型号IC寄存器映射的头文件之后,为什么某些系列芯片的控制编程几乎一模一样?而不同系列芯片的控制编程也非常相似,唯一的区别似乎仅仅是寄存器命名的不同?这背后的原因是什么?

    要回答这些问题,关键在于厘清“体系编程”的范畴与边界。要想深刻理解它,我们不妨从芯片的系统设计角度出发,看看一颗芯片究竟是怎么造出来的。关于这一点,可以参见《集成电路设计和分工》一文。

    CPU核心与SOC的关系,是一个至关重要的概念。

    全球有能力研发SOC(片上系统)的公司非常多,大到苹果、三星这样的行业巨头,小到深圳那些名不见经传但利润可观的芯片设计公司,都属于这个阵营。但说到CPU核,放眼全球,有能力设计CPU知识产权核的玩家就那么几家:Intel的X86、ARM公司的ARM核、MIPS公司的MIPS核,当然,51内核也算一个。这里需要特别指出的是,中国目前在这方面还处于追赶阶段——尽管国家在大力扶持集成电路产业,但高层也很清楚,这并非砸重金就能立刻见效的事,更务实的做法是先把封装、工艺这些基础环节做扎实。如今市面上的Android智能手机,清一色基于ARM核。如果好奇ARM之父是谁,不妨了解一下大师Steve Furber——他曾在广东工业大学做过专题演讲。

    SOC的研发,都是根据市场需求和功能定位,在某一类CPU核的基础上,集成各种通用的外围模块控制器(例如前面提到的GPIO、中断和定时器),以及一些专用模块控制器(比如TI公司的蓝牙单芯片CC2541,就集成了蓝牙基带和射频控制器)。SOC与CPU核之间的关系,可以用一个简单的结构图来概括。

    体系编程,顾名思义是针对体系结构的编程,而体系的核心载体就是CPU。从这个角度看:89C51、CC2541都属于51体系编程;PIC32、ATJ213X基于MIPS体系编程;而S5PV210和S3C2440则属于ARM体系编程。对一家CPU核设计公司来说,它没有理由把自己的CPU核设计成风格迥异的两套东西。同一家公司旗下的不同处理器系列,必然遵循同一个体系结构。那么,体系结构的范畴到底是什么?简单说,就是图中红色部分——包括CPU核的设计,以及总线的时序与控制标准。CPU核又可细分为CU(控制单元)和PU(运算单元),CU再往下分,包括取指、译码、访问寄存器、回写存储单元等流水线操作。更高端的CPU,一般还会集成协处理器。因此,体系架构编程通常涵盖以下内容:

    1. 指令集(寻址方式、运算指令)+ 汇编伪指令
    2. 流水线、指令预取与跳转规则:在流水线模式下,指令预取的是当前执行指令之后的N条指令,因此PC指针和执行时的地址并不一致。这就引出一个关键问题:当发生中断或异常时,返回地址应该如何确定?
    3. 协处理器(MMU虚拟内存管理、Cache缓存)
    4. 寄存器使用与参数传递规范(ABI):它要解决的是,在寄存器层面如何实现C语言中的参数传递。关于这一点,可以参考《C/汇编混合编程接口——MIPS ABI》一文。
    5. 异常与中断处理(硬件中断、一般异常、指令陷入等):图中的INT模块管理所有硬件中断(如串口、定时器、外部中断等),并将所有中断引脚通过逻辑“或”之后送入CPU的中断信号线。因此,对于CPU来说,当中断发生时,它并不知道是哪个模块触发了中断——只有INT模块才知道。
    6. 调试规范
    7. 总线规范:对编程人员而言,不一定要深入了解总线规范的细节。但它是SOC芯片设计的重要基石,规定了总线的时序、仲裁规范以及存储工作模式(冯·诺依曼结构还是哈佛结构)。

    对于一家CPU核设计公司来说,它通常会向SOC芯片设计公司提供两样东西:一是体系设计相关规范,例如ARMV7指令集,详细描述了每一条指令执行的伪代码过程(这里的伪代码是针对硬件语言如HDL的);二是特定系列CPU的设计规范,以及基于该规范实现的CPU IP核(寄存器级电路)。

    那么,同一个体系下不同系列之间的差异到底在哪里?

    以ARM公司为例,它现在的产品线布局非常清晰:Cortex A系列面向高端消费类电子(如手机、平板);Cortex R系列主打军工、航空航天等对实时性要求极高的场合;Cortex M系列则瞄准低端控制器市场(比如STM32、STM8等)。这三者的底层体系都是ARM架构,但工艺、功耗、性能差异巨大。更重要的是,CPU核内部集成的组件也不一样:例如M系列没有集成Cache,而与A系列相比,M系列的MMU也是一个简化版本。

    体系编程是嵌入式架构师和操作系统开发人员需要精通的领域,普通开发者接触相对较少。以上分析更多停留在理论层面。而SOC编程,则面向广大的普通开发者,接下来我们将从系统设计的角度,引导大家掌握如何进行SOC编程。

    二、SOC编程的范畴与定义

    所谓SOC编程,就是针对片上集成模块进行寄存器级的控制编程。在开发实践中,很多人习惯把SOC编程和体系编程统称为“体系编程”。这没关系,只要我们能清晰理解它们之间的关系即可。

    那么,SOC编程的具体范畴包括哪些?

    1. 通用控制模块:如CLOCK、GPIO、INT、TIMER、UART等。
    2. 专用控制模块:如LCD、蓝牙、编解码器等。

    有些模块不需要通过引脚连接外部设备就能独立完成功能,比如TIMER。但大多数模块需要借助引脚与外部设备对接才能工作。因此,芯片片上集成的其实是模块的控制部分。以LCD控制器为例:该控制电路负责生成LCD驱动器(外部设备)所需的数据传输时序、行信号、列信号以及设置接口。换个角度看,即便没有LCD控制器,我们也可以通过GPIO来模拟LCD驱动器的时序。但这样做,对普通开发者来说过于复杂,对CPU来说也是一个沉重的负担。所以,系统设计人员会针对LCD驱动器专门设计专用的控制电路。

    那么对于LCD控制器来说,我们进行SOC编程的目的是什么?至少,我们需要给LCD控制器一个标识信号,告诉它何时启动、何时关闭。如何给出这个信号呢?LCD控制电路本质上是时序电路和组合逻辑电路的组合,启动和关闭可以用一个输入信号来表示,而这个信号在CPU眼中,可以映射成一个寄存器中的某一个bit。从这个意义上说,SOC编程就是针对寄存器编程。当然,对于LCD控制编程而言,不可能只有一个寄存器这么简单——因为SOC厂商通常希望兼容市面上尽可能多的LCD驱动器,支持不同的分辨率和图像深度,所以必然需要配置不同的寄存器来进行相应设置。

    从教学角度总结,体系编程和SOC编程可以划分为五个层次:

    1. 体系指令集,例如ARM指令集
    2. 特定系列的CPU规范,例如基于ARM体系的Cortex A8核
    3. SOC级:在CPU核的总线基础上,集成clock、timer、interrupt、GPIO等控制器(例如三星的S5PV210和TI的OMAP3430都是基于Cortex A8核)
    4. 板级电路:例如开发板、手机主板电路,其电路图明确了SOC的引脚与外部设备的连接关系。如果GPIO A的第一个引脚接了LED0,那么要控制LED0,就需要对GPIOA0进行相应的控制编程。
    5. 外围设备规格:指板级电路图上所有外围设备的规格参数,例如具体LCD的规格(尺寸、分辨率、延时参数等)。

    我们可以给SOC编程的过程下一个定义:基于第1和第2层的指令集和CPU总线控制机制,根据第5层外围设备的特性参数和第4层具体的电路连接关系,对第3层SOC对应控制模块的寄存器进行编程,最终达成控制和使用目标。

    三、SOC设计与编程

    理解SOC系统设计,对编程有极大的帮助。每一款SOC的控制例程,最初都是由SOC系统设计人员给出的——因为他们自己也需要通过编程来对SOC芯片进行功能测试和验证。

    另外需要明确一个观点:对于不同的体系来说,同样的模块在设计思路上基本一致。换句话说,从编程的角度看,片上集成模块的设计控制过程与体系结构没有直接关系(两者有关联的地方主要在总线控制方面,而这与编程人员关系不大)。因此,基于ARM体系的LCD控制器和基于MIPS体系的LCD控制器,其设计思路是一致的;不同体系的GPIO控制逻辑也是一致的。尽管底层的寄存器电路可能存在差异,但对于上层编程人员来说,两者基本可以等同对待——不同的可能只是寄存器名称。比如,51单片机和ARM处理器的GPIO都包含输入寄存器、输出寄存器、方向寄存器、上下拉寄存器等。

    下面以CLOCK和GPIO为例,具体说明SOC编程,并尽量提取通用的设计和控制过程。

    1. 最小系统

    一个最小系统除了CPU和RAM之外,还有一个至关重要的组件就是晶振。SOC也好,CPU也罢,本质上都是一堆逻辑组合电路和时序电路。时序电路需要时钟才能正常工作,而晶振就是提供这个时钟的——它在系统上电后会持续不断地产生时钟信号。

    2. CLOCK(时钟模块)

    一般的低端单片机没有独立的时钟控制模块,直接依赖晶振(如12MHz或24MHz)工作,也就是说CPU的工作频率就是12MHz或24MHz。但对于高级处理器而言,支持的主频可以达到1GHz甚至更高,而市场上并没有1GHz的晶振。因此,SOC内部必须实现频率调整。PLL(锁相环)倍频技术被广泛应用于处理器的CLOCK模块中,其核心作用是将晶振的频率进行倍频提升。

    CLOCK模块除了实现倍频控制外,还需要考虑以下需求:

    • 不同模块的工作频率不同:SOC集成的模块很多,工作频率差异很大。例如,CPU、GPU和RAM的工作频率在GHz级别,LCD的工作频率在100MHz左右,视频编解码模块的工作频率在百MHz级别,而GPIO、串口这类模块的工作频率可能在10MHz级别。因此,CLOCK模块还需要进行分频处理。通常的做法是将模块分类,进行一级分频。例如,S5PV210的CLOCK将频率分为三个域:M域供给CPU、中断异常等,D域供给LCD、JPEG、HDMI等,P域供给GPIO、UART等外围设备。每个域都可以通过寄存器调节其工作频率。
    • 同域内模块频率的差异:处于同一个域内的不同模块,工作频率也可能不同。因此,允许模块内部进行二级分频。

    对于高级处理器集成的模块编程来说,设置好CLOCK源频率的相关寄存器是所有工作的第一步。一般情况下,一级分频由操作系统开发人员设定,而二级分频则由各模块的开发人员负责。

    3. 引脚复用

    芯片封装是芯片成本的重要组成部分,而封装涉及到一个关键技术——引脚复用。不仅如此,引脚复用还直接关系到最终产品的BOM成本。因此,在系统设计阶段如何高效地进行引脚复用,可以说是SOC集成电路公司的“绝密技术”。

    对于编程人员来说,我们需要做的是什么呢?记住一个要点:每一个引脚都可能是功能复用引脚。在使用某个引脚之前,必须先设置它的功能。引脚默认情况下是GPIO功能,如果我们要使用这个引脚实现串口或LCD控制线等功能,就必须对该引脚对应的功能寄存器进行设置——这是SOC编程的第二步。

    CLOCK设置和引脚功能设置,对所有模块而言都是通用的前置步骤。

    4. GPIO

    这里我们来谈谈最通用的模块——GPIO。对于GPIO编程,大家应该非常熟悉了:它一定包含输入数据寄存器、输出数据寄存器、输入输出高阻态设置寄存器、上下拉设置寄存器。一般编程流程如下:

    1. 设置上下拉寄存器
    2. 设置引脚的方向(输入还是输出)
    3. 通过输入数据寄存器读入数据,或者写数据到输出数据寄存器

    别忘了,功能引脚设置也是必需的。有些高级SOC可能还带有驱动能力等级设置寄存器,用于控制引脚的驱动强度。

    5. 中断(INT)

    关于中断控制,可以参阅《软件和硬件都是对生活的高度抽象——论中断控制(ARM体系编程)》一文进行更深入的了解。

    在以往的教学实践中,笔者常以基于Cortex A8的S5PV210为例进行讲解。后续如果时间允许,再对该SOC各模块的编程方法做系统梳理。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 操作系统
    下一篇: 编程和我
    相关文章 更多
    精品专题 更多
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    IOS软件

    正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

    AI

    正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

    Mac软件 更多
    AirBuddy 3 macOS版
    AirBuddy 3 macOS版

    AirBuddy 3 是面向 macOS 的蓝牙外设增强工具,可集中查看 AirPods、Beats 与苹果设备电量,提供快速连接、播放控制、电量提醒、桌面小组件和多台 Mac 外设接力等功能。

    AirServer macOS版
    AirServer macOS版

    AirServer macOS版可把 Mac 转换为无线投屏接收端,通过 AirPlay 或 Google Cast 接收手机、平板和电脑画面,并支持多设备同时连接、高清镜像及会话录制,适合家庭娱乐、课堂教学、会议演示和应用展示。

    AnyDesk macOS版
    AnyDesk macOS版

    AnyDesk macOS版是一款适用于远程办公、设备维护和客户支持的远程桌面工具,可连接并操作异地计算机,支持文件传输、无人值守访问、会话权限控制及跨平台协作。

    Beamer 4 macOS版
    Beamer 4 macOS版

    Beamer 4是面向macOS的本地视频投屏工具,可将Mac中的影片投放到Apple TV、Chromecast及兼容设备,支持常见格式、多类字幕、环绕声、播放列表和电视遥控操作。

    Boom 3D macOS版
    Boom 3D macOS版

    Boom 3D macOS版是一款系统级音效增强工具,可为音乐、电影、游戏和流媒体提供3D虚拟环绕声、31段均衡器、音量增强及应用独立音量控制,并支持本地播放器与多种音频输出设备。

    Boris FX macOS版
    Boris FX macOS版

    Boris FX macOS版是一套面向剪辑、合成、调色及动态图形工作的专业后期工具,涵盖视觉特效、平面与三维跟踪、转描、画面修复、粒子动画和音频清理,可配合多种主流宿主软件使用。

    Capto macOS版
    Capto macOS版

    Capto 是面向 macOS 的屏幕截图、高清录屏与媒体编辑工具,支持区域及整屏捕获、网页长截图、双音轨处理、图片和视频标注、素材分类与多渠道分享,适合教师、学生、内容创作者及需要制作演示教程的用户。

    ChemDraw macOS版
    ChemDraw macOS版

    ChemDraw macOS版是一款面向化学学习、科研和制药工作的专业结构绘图工具,可创建分子、反应及生物聚合物图形,并提供结构整理、格式转换和科研成果展示能力。

    Cursor Crane macOS版
    Cursor Crane macOS版

    Cursor Crane 是一款仅面向 macOS 的键盘操控效率工具,可通过提示标签、网格、文字查找和窗口模式完成点击、滚动、定位与切换,并支持屏幕内容提取、脚本及工作流扩展。

    Deep Freeze 冰点还原 macOS版
    Deep Freeze 冰点还原 macOS版

    Deep Freeze 冰点还原 macOS版通过冻结系统配置,让受保护的Mac在重新启动后回到预设状态,并提供解冻空间、维护计划、密码保护及Apple Remote Desktop管理能力。

    Focusky macOS版
    Focusky macOS版

    Focusky macOS版是一款面向教学课件、商务汇报、产品展示和动画宣传内容的演示制作工具。它通过无限画布、路径编排、缩放旋转转场及多媒体编辑,将传统逐页幻灯片转化为更具空间感的动态演示。

    Folder Colorizer 2 macOS版
    Folder Colorizer 2 macOS版

    Folder Colorizer 2 macOS版是一款直观的文件夹外观定制工具,可更换颜色,添加表情、贴纸及图片背景,并支持批量处理、智能推荐和恢复默认样式,帮助用户更快辨认工作、学习与生活资料。

    WINDOWS 更多
    讯飞绘文 网页版
    讯飞绘文 网页版

    讯飞绘文网页版是科大讯飞推出的AI图文创作与内容运营工具,覆盖热点选题、文章生成、稿件校对、智能配图、排版发布和数据复盘等环节,适合自媒体创作者及内容团队在线使用。

    AirServer Windows版
    AirServer Windows版

    AirServer Windows版可把电脑变成AirPlay、Google Cast和Miracast无线投屏接收端,适合会议演示、课堂教学及家庭大屏分享。发送设备通常无需另装客户端,并可同时接收和智能排列多个镜像会话。

    AlwaysUp Windows版
    AlwaysUp Windows版

    AlwaysUp是一款面向Windows的系统服务注册与程序托管工具,可让普通应用、脚本及批处理在无人登录时随系统启动,并通过状态检测、异常重启、资源监控和邮件通知保障关键任务持续运行。

    AnyDesk Windows版
    AnyDesk Windows版

    AnyDesk Windows版是一款轻量化远程桌面与技术支持工具,可用于控制异地电脑、传输文件、远程打印及无人值守访问。它兼顾连接响应、安全权限和部署灵活性,适合个人远程办公、企业设备维护与客服支持。

    Boom 3D Windows版
    Boom 3D Windows版

    Boom 3D Windows版是一款面向音乐、电影和游戏场景的系统级音效增强工具,支持虚拟3D环绕声、31段均衡器、预设音效、应用音量控制及本地音乐播放,可配合耳机、扬声器和蓝牙耳机使用。

    Boris FX Windows版
    Boris FX Windows版

    Boris FX Windows版是一套服务于影视剪辑、视觉特效、运动跟踪、转描、图像修饰及音频修复的专业创作工具集合,可作为插件接入多种主流后期宿主,也包含可独立运行的应用,适合剪辑师、特效师与内容创作者使用。

    ChemDraw Windows版
    ChemDraw Windows版

    ChemDraw Windows版是一款面向化学研究、药物研发、材料科学和教学工作的专业结构绘图工具,可快速绘制分子、反应式及生物聚合物,并提供结构整理、格式转换、性质计算和科研文档协作能力。

    CODESOFT Windows版
    CODESOFT Windows版

    CODESOFT Windows版是一套企业级条码与RFID标签设计打印工具,可连接Excel、Access、SQL及云端数据源,支持变量、表单、GS1条码、数据库记录和多种工业打印机,适合制造、仓储、物流及合规标识场景。

    Deep Freeze 冰点还原 Windows版
    Deep Freeze 冰点还原 Windows版

    Deep Freeze 冰点还原 Windows版通过重启恢复技术保护系统盘及指定分区,自动撤销恶意程序、误操作和配置漂移造成的改动,并支持密码保护、解冻空间与多硬盘管理,适合学校机房、公共电脑、办公终端及家庭电脑使用。

    EDIUS Windows版
    EDIUS Windows版

    EDIUS 11 Windows版是一款面向影视制作、广播电视、纪录片、短视频及教育机构的专业非线性编辑工具,支持4K/8K、多格式混编、HDR调色、字幕、音频处理和后台渲染,并提供素材管理及丰富的导出预设。

    FastStone Capture Windows版
    FastStone Capture Windows版

    FastStone Capture Windows版是一款轻量级屏幕捕捉、录屏与图像编辑工具,可截取窗口、区域、菜单和滚动页面,并提供标注、模糊、取色、OCR、录音录像及多格式导出能力,适合办公说明、教程制作和问题反馈。

    Focusky Windows版
    Focusky Windows版

    Focusky Windows版是一款动画演示与交互课件制作工具,通过无限画布、缩放旋转镜头、模板素材和对象动画组织内容,可导入PPTX,并输出视频、EXE、PDF、网页等格式,适用于课堂教学、微课、商务汇报及产品展示。