核心寄存器何其少耶
小弟在入门之初, 就知道 register 数量其少. 在 memory 层次结构章节, register 高处金字塔顶端, 一般书籍说法, 大致都以"价格, 容量, 存取时间, 访问频率", 来诠释:
register -> cache -> main momory -> 辅存
之结构. 其教学效果就是:
让在下误以为, registers 的物理构成, 定然何其艰困; 其size(空间物理体积) , 又定当何其庞大; 在 chip 的 implement 过程中, 又还是何其重要. 不知诸君在学习过程中, 是否如我当初困惑般, 徒然产生对 registers 的敬畏之感.
无论今日 uController 或 CPU 之 power 如何, 系统频率工作在1GHz 还是 10GHz. 而 32-bit 之下, registers 的数量聊聊无几(一般数十个而已). 今天伴随 A50 之类 64-bit 的架构下, registers 数量才似乎略略多点.
初学时, 我就想, 内存不够, 加上一根内存条又如何?
同理, reigster 在 instruction 的 fetch decode execute 环节如此重要, 为何不能物理上极大增加其数目呢?
转眼间, 当 Allen 略读 assembly instructions , 其疑惑也顿悟, 其理由也太易吧.
大约无非是, 16bit thumb or 32bit arm 指令集, 容不下太多的 reigster 表达吧. 让 Allen 颇觉当初想法(多多添加寄存器)之天真.
如果我们以高效率的 16-bit thumb 指令为例, 我们观察到, 大量用到的 core register 事实上只有 8个. R0 ~ R7.
在编码表 encoding scheme 上, 也只能用 3bits 来表示 R0 ~ R7.
让我们考虑一下, 一个简单的 instruction, 可能有 destination register Rt.
可能有 base register Rn
也可能包括 offset register Rm
(后两者往往表达为 [, ] ), 这就占据了 3*3 = 9bits.
考虑到常常 pc register 也被使用, R15 往往带来 decoding scheme 的一个 bit 的扩展.
而我们往往见到instruction 包含有 imm8 (8bit 立即数) 也不稀奇...
-- 这些都让 16bit 的 thumb 指令情何以堪, 或者更准确地说, 是局促不堪吧```
-- Allen 不禁又想到, Microchip 是如何使用仅仅 12bit 的指令集, 来表达 16bit 的运算?
当我们注意到 microchip 将一个 register 单独出来称为 work register(W register). 而在 instruction 中, 集中表述为对 W 执行各种运算时, 也可能部分猜到, 这个"变通"正式巧妙降低 core register 的数量(降低在 instruction 中的bit 占用数目), 来实现 12bit instructions 的表达能力吧?
-- 聊聊随笔, 表述所悟.
allen_zhan_752827529 2014-7-30 12:08
今年(2014)年, 中国大陆1~6月的粗钢产量, 首次超过世界总量的 50%, 把世界除中国之外的200个国家地区全部加一起, 粗钢产量都没中国大陆多. 100多年前那段民族低谷的日子, 正是用粗钢比较国力的日子. 那时的仁人志士, 也许就是为了今天这个粗钢梦幻数字, 九死而不悔吧. 建国后, 进入了一个从农业国向工业(特别是重工业)国迈进的阶段, 求强国的心态如此迫切, 导致了违反自然科技规律的大炼钢铁的笑话. 改革后, 从自我艰苦奋斗中抬头重新看世界的国人, 却惊讶发现, 新的国力竞争, 主要表现在以电子科技技术极速发展带来的信息化时代, 也包括管理与新的资本模式的创造的新领域竞争. 因此电子技术实际上, 我个人来看, 隐约代表着当年的粗钢的重要地位. 当然还有未来的生物医药或者有人说是下个时代的产业进步代表(题外话了)... 计算机与嵌入式系统, 是一个70年代初第一颗集成电路发明后的奇妙产物...是不是 Noyce 在 Ti 发明的, 我记不清啦... 它现实表现为预编程的代码驱动硬件, 几乎使工具从死物变成活物, 尽管和钱学森当年提倡的人工智能理念可能还相差很远, 但确实极大创造了人类劳动生产率的提高. 人类社会进入一个崭新的时代. 这种现状, 导致中国大陆在数十年工业(重工业化工产业)追赶几乎有一定基础时, 又惊讶发现于信息化时代再次落后. allen 正是在下, 与该领域内以小学生心态, 与诸君讨论共享技术进步. 这种进步其实往往不是阶跃的, 而是在每个具体的技术环节的积累后, 在理论与实践的诸多细微环节上的小小进步不断迭代, 从量变到质变, 或是从必然王国最终向自由王国进步的过程吧.
zhanglii2011_392530165 2014-7-29 21:31
allen_zhan_752827529 2014-7-3 11:33
我所好奇的就是, 为何把 SCS 系统控制 registers, 比如 cortex m0, mapped 到 PPB 空间中去. 有趣的是, SCS 也占据了 4k 的 common PPB 的 size. 这大致意味着, SCS 包括比如 system handler, nvic, vector, mpu 什么的, 也都在 arm 提供的 uCell 的视角中, 被视为外围bus 处理, 甚至这些 registers 也都可以挂载在 PPB bus 上的吗. 这很可能意味着, uController designer 在设计上拥有着更多弹性的选择, 看, 连 nvic (interrupt 控制相关)的模块, 甚至不必要由 uCell 提供, 不需要 couple kernel(uProcessor), 而可以被 designer 独立设计而挂载在 ppb 总线上!
allen_zhan_752827529 2014-7-1 14:07
Core Register 事实上, 是 instrunction 的组成部分. 在下在 blog 中感叹的, 正是指 instruction 的长度(比如在现今绝大部分的 cortex 系列中为 32bit), 限制了 core register 的多寡. 让人特别注意到的是, core register, 无论它是 R0~R15, 或者 APSR 等, 也都是只能用 instruction 操作而不是可寻址 accessable 的. 这多有趣呀, 因为 memory 都是不能被 instruction 直接操作的. 这隐含着这样一个定义, 只有用 LDR/STR 将 memory 的 context 在 core register 中导入导出, 才能借用 core registers 参与 instruction execute. 当然我们知道辅存又是不同的, 在 memeory 层次结构中, 辅存是不可寻址的, 因为它们根本就没有在 physical address 对应的地址, 这应该正如同我们存放在硬盘中的全部资料(无论它们是工作表格还是系统软件), 它们都是不可寻址的. 但是是否 registers 都是这种 core register 形式, 无法寻址(无 address mapped) 的呢? 其实也不是, 因为至少 processor registers 是可寻址的. 这就是 cortex 架构中, 定义 cortex 架构是memory mapped architecture 的真实原因吧. 你看, 无论是 vector register, 还是 handler register, 或者是 nvic register, 甚至是 processor ID 标识 register, 它们往往都被 map 到系统保留的位置, 比方说 cortex m0 中的 0xe000_0000 到 0xffff_ffff. 更不用说那些 PPB 常常对应的 registers 啦.
allen_zhan_752827529 2014-6-30 17:24
用户1610239 2014-6-30 16:39