原创 观察 uController 的视角

2014-7-14 16:48 3170 29 38 分类: 消费电子

观察 uController 的视角

 

我们几乎无法回到 ARMv4 之前的年代,  因为 Architecture Reference Manaul 已经不建议我们这样做. 这种回溯可能毫无意义. 因为今天我们探讨 26-bit 的 instruction 显然是过时的(尽管 ARM 声称这种奇怪长度的 instruction 编码仍然被"保留"给将来的拓展).

 

当我们注意观察 ARMv4 ~ v6 时, 我们检查一颗 uController 的视角是被我们熟知的, 看啦, 首先是指令集, 甚至某种角度上说, 任何 mcu 的设计初衷, 都是围绕指令集完成的. 它必须致力于设计好的运算与控制器, 在读取了助记符和操作码后, 一丝不苟在指定 cycles 中完成 instruction 的定义.

 

好的, 除了 instruction set, 我们当然要晓得 exception, 甚至连 reset 都是 exception 中的一种, 从 uController 启动之初, 就应当得到我们的关注. exception 细节有很多, 一般包括优先级, 抢占, chains of exception, tail chain, 出于了解 uController 的视角所在,  从 uController 主动执行 sequence entry 到 return, 从它 push 必要的 context, 到 return 时的 pop, 我们从必要文档比如架构参考手册中, 可以了解得通通透透.

另外要提及的必须是 register. 无论是参与 instruction 执行的 core register(它们是 RISC, 也几乎可以说是 load/store 结构的必然), 因为我们总是无法在 memory 中直接执行指令. 另外的 status register (有时也包括 control register 与其他) 也是需要学习的必然. (这里我们举例说明的都是 RICS 的 uController 比如说是 ARM).

其他要提到的 register 是 system register, 有趣的是, 与 core register/status register 不同的是, 他们都可以被 memory mapped 的, 它们具有 memory address. 比方说要控制上一个段落中提到的 exception 中的一种 interrupt 的控制器 (NVIC). 此外比方说 memory register 与 其他在 SCS 中存在的 debuger register 之类(比如说的 cortex -M0). 这里的 memory register 相关的可能包括 VMSA(based on MMU), 或者是 PMSA.

当然的, 建立一个合适的 memory architecture 也是如此的重要. 首先我们需要知道比如 code, sram, device 在整个 memory mapped 中所占的空间(对于 32-bit mcu, 这"整个"往往指 4G byte size). 其次, 我们需要知道 memory 属性. 值得大书特书的就是, ARMv6 开始, memory 属性, 由偏于物理physics 的概念(比方说 bufferable 与 cachable), 走向了偏于理论总结的概念, 比方说 normal, device, strongly-order momeory 的引入.

当我们讨论无论属于哪种 mcu architecture 的 instruction set 的时候, 我们都不可避免要引入对 (basic) data type 的定义, 当然她们是 byte halfword word, 比方说在 ARM 定义中.

 

让我们一起回顾刚刚说的一切.

啊, 木有错的, 在我们的学习手册中, 上述内容都有着一个专业的名称叫作"编程模型(programer's model)".

作为 embedded enigneer, 我们研究的对象, 不是 implement 与 integrate, 而是着重对于上述内容, 即所谓 program model 进行学习与 review. 最终的目的是在, assember 的帮助下, 学习 instruction set, 并转换成合适的二进制码, program 到 uController 中运行. 当然是在合理的 register 配置下, 以及 exception 的掌握下. 同时, 我们也暂时没有提到更高级的语言要使用的 compiler tool. 以及在调试过程中的 debuger tool.

 

好, 这就是观察(学习) uController 的视角(对于我们研习 embedded system 的工作者而言), 有什么问题吗?

 

-- 是的, 存在需要进一步讨论的议题. , 因为: 以上只是 ARMv4 ~ v6 的视角.

 

 

大约在 2000年前后, v5 得到了定义(v4得到更早定义), 我们回忆, 大致在 2000年代初, 由于海量 mobiles 在全球范围的发布, 给予 ARM 成长的勃勃生机(基于 v4, v5 的 device 甚至可能高达数十亿部).

大约在 2004年, v6 定义发布. 这是的 VMSA(基于 MMU), 以及 cache 的广泛使用, 以及 coprocessor 的定义使用得到了推广, 这意味除了 ARM7 之外, 我们可以利用上 ARM9, ARM11 等, 在 embedded system 中跑所谓通用的 operate system, 无论是当年的 winCE 或者 Linux 或其他.

可以当作 v6 是对 memory architecture 的重大总结(normal, device, strongly-order momery 概念的提出). 也可以假设 v6 是"传统" ARM 架构的最后一个版本.

 

新的 ARMv7 版本, 比方说 ARMv7-M 在2006年最初诞生时(ARMv7-M 的成熟版本一直改到 2000年), 我们有了一个观察 uController 的新视角:

这就是所谓: Application level architecture 与 System level architecture.

 

Application level architecture

毫无疑问的, instruction set 被放置到了 "应用级架构" 进行说明.(题外话, instruction set 往往是占据架构手册的最大章节).

instrcution set 往往具有不同 variants 的稳定性的特点, 也就是 instruction 往往不会变化太多, 而向下兼容, 它是汇编器, 编译器, 连接器, 反汇编器设计的基础(不包括调试器).

围绕着 instruction, exception 被简单的提及与说明. 并包括有一个 application 级别的 momery model. 尽管没有明确说明, 我们几乎可以假设为, application level architecture 已经有助于我们在 embedded system 中设计出诸如前后台系统的简单架构.  或者说, 为后面的 system level architecture 提供了基础的应用代码基础.

 

System level architecture

值得特别提及的, exception 被详细阐述. 毫无疑问的, system register 被逐条说明(意义, 以及read/write 的细节). 这甚至引入了新的概念, 一般指 memory architecture 的引入, 是虚拟空间体系架构(VMSA) -- 这往往引入了 cache 与 MMU. 还是仅仅只是保护空间体系架构(PMSA)呢?

这个疑问来得刚刚好, 因为以上区分(VSMA与PSMA), 几乎可以认为是 ARMv7-A 与 ARMv7-R 的最重要的区分点之一.

无论在系统级架构上, 要讨论的 MSA, 可能是 VMSA或者是 PMSA.还是说, 在 memory mapped 的 system register 将引入的 PENDSV 与 SYSTIMER, 都向我们解释了这样一个事实:

今天的 uController 的设计, 以及需要我们 embedded enigneer 观察的视角, 都必须上升到 sytem level. 哪怕甚至是对于预备与 8bit mcu 进行市场竞争的 ARMv7-M 与 v6-M.

它们在设计时, 已经注意了 memory architecture 与 priveleged 的拓展. 并通过 SVCall 与 PendSV 随时准备进入 system 调用(至少以 priveleged mode 访问 SCS与PPB). 并且通过 system timer (systick) interrput 的设计, 为任何一个 realtime operate system 作好准备.

 

更远意义上的, 我们观察 uController 的视角, 从过去单纯的统一的 programmer model. 到应用级架构与系统级架构的分离, 暗示我们, 随着 uController 工艺的发展, 资源的丰富, 在一个极低成本上的 uController 上, 过去往往仅限于 8bit mcu 世界的应用中, 将愈来愈多引入 realtime operate system, 并提供着比以往更丰富的互联互通 interface.

 

从观察 uController 的新视角出发, 我们得出了这样的结论, 我们怀疑可见的未来, uController 的愈小size, 愈大资源, realtime operate, 以及俞广泛的高速互连 interface, 将把我们未来世界带到一个更加互联(或者说更靠近"物联网"概念)的新世界.

 

从青年学生的学习角度推广一下:

80年代初第一台通用 computer 距离我们很遥远, 因为社会封闭的历史缘故, 导致了 uController 领域的专业人才涌现土壤的缺失.

而 ARM 在 2000年后, 从 v4 架构到今天的 v7, v8 架构, 从资源缺失的狭隘 microController 领域到MMU管理的多核 processors 应用下的高端服务器市场的冲击, 这个电子产业的进步, 发生正在进行时. 多份文档都暗示我们, 它们的编写历史甚至就在眼前, 举例基于 ARMv6-M 的 cortex m0+ 的初始 trm 文档甚至产生于 2012 年.

这意味着, 今天中国大陆的初中生, 高中生, 甚至大学在校生, 与 ARM 的历史大跃进发展没有任何时间滞后. 不存在当初"通用"CPU 发展的时代落后.

我觉得中国大陆的青年同学们, 比我们有更优越的时代基础, 更可能应抓住这一难得的历史机遇. 在与外界同步的工程土壤中, 未来或可诞生本土的 uController 设计, 应用, 创造的行业顶尖人才吧!

 

Allen Zhan

作于 EETC

2014.7.13

 

文章评论9条评论)

登录后参与讨论

allen_zhan_752827529 2014-7-16 17:07

另外还要补充一下, 关于2, 之所以说, 对于我们应用级别的开发(而不是芯片设计), 了解架构仍然是重要的一个原因是: 在普通的 uController 的手册中, 是没有对 system register 的具体说明的, 只是在各种例程中有对这些 system register 的操作, 比如 NVIC register 的操作. 而要寻找 system reigster 的具体 encoding diagram, 我们需要立即阅读来自于 ARM 的架构手册 Architecture Reference Manual, 或者至少是 TRM 手册等. 这些细节不会在 nxp, freescale 或者 ti 的芯片手册中说明, 它们仅仅在架构手册中被定义. 如果我阅读理解没有错误的话, 对ARM的架构手册任何全部或者部分的内容的引用, 都可能必须获得 ARM 的授权. 这个知识产权的说明一般都在手册的 preface 章节(我记得). 这可能意味着, 无论是 nxp, freescale, ti, 都不敢将上述 status register, system register(including memory register, NVIC register, as so on) 放在芯片手册中说明? 我记得看到一些国内的中文技术刊物, 在学习 ARM 的章节中, 经常毫无顾忌翻译 ARM 的架构手册的内容, 来讲解比方说 status register 的 encoding diagram, 以及若干 instruction 的 encoding diagram. 如果我没有理解错的话, 甚至对架构手册的除了E文之外的翻译, 都是被 ARM 宣称是禁止的, 或者必须收到授权的. 这可能也暗示我们任何一位工程师, 正式的, 不冒犯ARM产权的方式, 就是去阅读E文原文的 ARM 架构手册, TRM 手册, 通用使用手册等. -- 一个多余的补充.

allen_zhan_752827529 2014-7-16 16:52

1. 关于 cortex, 谨慎地说, 据我观察到的, 正是在 ARMv7 架构基础上引入的. 之前无论是 v4~v6, 都是 ARM7~ARM11 的架构基础. 所以 cortex 与通常意义上前些年声称的 ARM7, ARM9, ARM11 等确有基本差别. 这个基本差别源于基于的架构不同, 也就是来自于新架构 ARMv7. 但是, 当然技术总是继承的, 架构的指令也是不断向前兼容的. 故而这里的差别也似乎不能称其为"根本"的差别. 因为"根本"的差别的提法, 容易让人觉得这是一门新技术. 并且, ARMv6 与 ARMv4, v5 就有着非常重要的差别, 就是我在 blog 说得, 是 memory 属性的重要归纳. 也就是 strongly-order, device, normal memory 概念的提出, 并在 ARMv7 架构中得到继承. 我个人觉得, 这是构建任何运行通用os 的基础. 因为配合 AXI bus, 这是的 memory 可以乱序, 可以cachable, 可以 bufferalbe, 可以被 preload, 并配上 cache 与 mmu 引入运行"通用"os. 2. 关于架构确实是重要的, 因为指令集就是架构的核心之一, 并且包括有 exception 与 system mode(主要是 privileged 或 handler mode 的区分). 今天的 IDE 并加上高级语言, 以及嵌入的 debugger, 似乎让我们觉得了解架构不重要. 这算是很大的误区, 我个人觉得哈. 因为在往往完成一个项目后, 我们处于知其然而不知其所以然的状态, 对项目中间出现的一些时序上的, 任务抢占上的, 隐藏得很深而又偶尔出现的(可能是致命)的bug, 我们将会束手无策. 一个最简例子, 不是架构的, 而是基于系统级架构的 os 的例子, 当美国的火星登陆器发生故障, 停止信号向地球传递时, 如果没有对 os 的理解, 对任务优先级的理解, 那么怎么能够发觉"优先级反转"这个著名的 os bug 呢? 3. 关于 DSP, 我则了解不多呢, 您更专业.

用户1661764 2014-7-16 07:37

说的很好 顶

用户3809340 2014-7-15 17:34

首先感谢分析和分享。其次提几点建议或问题:(1)没有提及Cortex(A和M)以后的架构,而实际上它们是有根本性重要改进的、或者按照笔者视角,并没有与arm7或9有根本差别?须知,多核是在Cortex之后出现的。(2)这里指的内部架构,确实是嵌入式软件工程师们需要认真了解才能有效编程的么?还是只有芯片设计工程师需要知道?我感觉这里多是说的软件编程模式(思维)而非直接贴近芯片内核架构的硬件结构模块的。并且,ARM软件工程师极大多数是通过操作系统编程调试和运行,并没有办法触碰内部架构,所以了解内部结构几乎无用。甚至“指令集”也只有做汇编编程才用一些用处对么?(3)我有较深入的DSP编程经历。DSP多数没有好的对操作系统的支持,所以编程多为底层方式去挖掘优化。除了对于所用算法的深入了解它需要怎样的计算和操作,也要了解DSP内部的硬件架构提供了哪些高效单元,如特殊寻址方式、硬件循环、特殊的exception运作和管理方式、内部及外设上的DMA、甚至管线的最佳使用(通过修改程序流程做同样的事情)。这些是使用芯片的工程师可以做到的优化事情,而如果要增加或改善更多的内部架构,则是芯片设计工程师的事了,那个不会经常出现新架构。所以我的问题是:要让众多软件工程师能够做到优化编程开发,似乎仅仅从“指令集”上入手是不够的。指令集其实是芯片最核心部分的硬件结构所决定的:有那些好的运算和管理单元,才能有那样的好的指令,也才会有综合使用它们的上层“视角”或编程模式。。。。对不对?我感觉即使对于我所相对少有了解的RISC,也应当是这样才合乎逻辑吧!

allen_zhan_752827529 2014-7-15 10:20

我好希望有在校的同学们能读到,我写的这份blog,珍惜这一难得的历史机遇.不要像我们一样,用读圣经的心态, 在2000年去翻阅1985年的行业基础文档. ARM的进行时的成功, 说不定更可能说是 RISC 架构的成功. 通用型的 CPU 的发展, 从开始就背负着沉重的向前兼容的包袱, 甚至可以说从技术上, 至少不是唯一的, 或者说是更优异的选择. 这可能就带了一个行业发展上的犹豫, 停滞, 竞争的等待机会. 这个机会, 也是中国大陆在先进领域上, 迅速追赶, 尽力弥补10年甚至落差 20年的行业差异的重要时机....就在此时此刻.

allen_zhan_752827529 2014-7-15 10:09

啊, Mike,你过誉啦!

用户1678053 2014-7-15 10:03

看看

hdapple_2000_877363590 2014-7-15 08:07

这种架构上的差别只有经历过整个产业发展过程的人才清楚,90后已经不记得也不必要去翻这段历史了

用户1277994 2014-7-14 16:49

大师,你的文章我只能用一个字表达心意:顶!
相关推荐阅读
allen_zhan 2023-02-27 19:08
对"三极管"译名由来的探讨
想讨论一个有意思的话题:今天中国大陆的电子业界, 为何将 BJT 称呼为 "三极管"? 或因其象形, 前辈自行进行随意的不严谨定义么? 带着疑问我们做了一下延伸查阅, 或得出这样的结论, 即中译名"三...
allen_zhan 2023-02-19 18:15
对知乎提问"为何三极管的一个PN结工作在反偏"的回复
将这个回复, 也发表在博文中, 作为自己的一个学习笔记叭.知乎问题: "三极管里面的PN结相当于二极管,为什么里面PN结加反向电压也能导通?"我的回复:首先, 二极管的"反向"概念, 容易给初学者某种...
allen_zhan 2023-02-18 10:17
从肖特基二极管到PN结与三极管
最近数个工作日的兴趣是回顾电子基础器件的发明/发展历史, 期待夯实技术基础的底蕴. 在学习与搜索资料的过程中, 顺便对知乎的一个同学的基础问题, 进行了回复. 不小心回复一下就成了千字文, 觉得挺有趣...
allen_zhan 2023-01-28 11:53
微功率 ISM 频率探讨相关文档组总结
不知不觉, 自开启关于微功率频率的话题起, 即从第一份文章写就到今天总结之日, 已经接近 10 个工作日左右. 早先的想法是对工程界未来的微功率设备相关项目, 从项目规划开始, 对选择系统, 频率, ...
allen_zhan 2023-01-27 22:50
关于 LoRa 应用场景的讨论
说明: 本文中斜体部分表示来自公告文件的部分内容剪贴或合并整理.1. "第52号文" 对 470MHz 的约束引自 如下:(四)民用计量仪表限在建筑楼宇、住宅小区及村庄等小范围内组网应用,任意时刻限...
allen_zhan 2023-01-25 13:24
ISM 频段中 2.4G 与 5.8GHz 设备的使用与限制
说明: 本文中斜体部分表示来自公告文件的部分内容剪贴或合并整理.1. ISM 频段定义中的 2.4G 与 5.8GHz正如同 文中确定的, 2.4G, 5.8GHz 属于中国大陆 ISM 频段的定义...
我要评论
9
29
关闭 站长推荐上一条 /2 下一条