状态、时钟、CPU 与存储器怎样协作
为什么组合逻辑不能记住上一刻
按钮松开后,如果 LED 仍要保持原状态,系统必须保存历史。寄存器在指定时钟边沿采样输入 D,把结果保存为 Q,直到下一个有效边沿或复位。
text
边沿到来前:D 可以由组合逻辑计算
有效边沿: Q ← D
边沿之后:Q 保持,新的 D 不会立即改写 Q1
2
3
2
3
输入需要在边沿前后满足建立时间和保持时间。违反窗口可能让寄存器进入亚稳态,所以异步按钮通常需要同步与消抖。
CPU 是受控的状态转换器
最小处理器反复执行:
text
PC 给出指令地址 → 存储器返回指令 → 控制器译码
→ 寄存器提供操作数 → ALU 计算 → 写回寄存器/存储器/外设
→ PC 指向下一条指令1
2
3
2
3
关键对象:
| 对象 | 保存什么 |
|---|---|
| PC | 下一条指令地址 |
| 通用寄存器 | 当前操作数与中间结果 |
| 指令寄存器/译码器 | 当前指令及其控制信号 |
| ALU | 不保存历史,完成组合计算 |
| Flash | 断电仍保存程序和常量 |
| SRAM | 运行时栈、全局变量和缓冲区 |
地址把存储器和外设放到同一张地图
地址不是数据本身,而是“去哪里读写”的编号。MCU 常把 GPIO、定时器等外设寄存器映射到固定地址:CPU 对该地址执行 load/store,片上总线将事务路由到相应外设。
text
CPU --地址/读写/数据--> 总线译码 --> Flash / SRAM / GPIO / Timer1
因此 C 语句 GPIO_OUT |= 1 最终不是魔法函数:它读取或构造位模式,再向 GPIO 寄存器地址发起写事务。具体地址、位定义和访问限制来自芯片参考手册。
常见误解与边界
- 时钟越快程序一定越快。 存储等待、总线争用和外设时序都可能限制性能。
- 变量地址就是物理存储芯片编号。 编译器、链接器和体系结构共同决定映射,某些地址还指向外设。
- 寄存器只有 CPU 寄存器。 外设控制/状态寄存器与 CPU 通用寄存器职责不同。
- 写 1 总能保存 1。 寄存器可能是只读、写一清零、脉冲触发或有保留位,必须按手册访问。
自测
按下按钮使组合输出变成 1,但尚未出现有效时钟边沿。寄存器 Q 应变吗?为什么?
答案
不应。D 已变化,但 Q 只在规定边沿采样;这正是组合逻辑与时序状态的边界。下一步:数字状态机实验。