Altifigence Academy

37 / 63 · 概念

串行输入与帧边界

定义输入顺序与有效边沿,计算串并转换中的位排列。

将时间顺序转换为向量位置

串行输入在每个有效边沿传递一个比特。对三位寄存器寄存器 存储多位状态的电路。本课程中的同步寄存器在时钟边沿存储指定输入。了解更多使用 q<={q[1:0],din},从初始 q=000 接收 1、0、1、1,结果如下。

已接受比特数din更新后 q
11001
20010
31101
41011

新比特从右侧进入,已有比特移向更高索引。寄存器是最近三个比特的滑动窗口,收到第四个比特时,最早的比特丢失。

每列记录一个上升沿上升沿 时钟从 0 变为 1 的瞬间。它不同于表示整个 CLK=1 区间的电平。了解更多的观察结果。输入取自边沿前,名称带 after 的状态取自更新后。列的排列表示采样顺序,并非描绘物理传播延迟传播延迟 从输入变化到输出稳定为正确值所需的时间。逻辑表达式等价与时间特性是两回事。了解更多。第一列为 reset。之后接受的 1、0、1、1 中,只有最近三位保留在 q 中。观察最后一列最早比特是否被移出。

串行输入变成并行状态的过程
查看波形数据
波形数据:每个字符表示一个区间,点表示保持前一状态,p 表示一个时钟周期。
信号波形总线值
edge23452E0 → E1 → E2 → E3 → E4
reset10...
din0101.
q after23452000 → 001 → 010 → 101 → 011

MSB-first 与 LSB-first 是通信约定

若从 MSBMSB 权重最高的比特。其索引取决于向量声明方向,不能总认为它是编号最大的位。了解更多 开始发送八位数值,并按上述方式接收八次,就能重建原向量。若从 LSBLSB 权重最低的比特。应同时检查表示方向与索引规则。了解更多 开始发送,位置顺序会相反,必须改变连接方向或在末尾重排。这不只是显示选项,而是收发双方必须一致的协议。

只看数据值无法判断帧边界

需要状态来指出哪个边沿是第一位、总共接收了几位,以及何时可以消费结果。通常同时使用已接受比特数的计数器与 valid 或 done。若输入存在空闲周期,应计数已接受的数据数,而非时钟数。

acceptk=validk∧readykaccept_k=valid_k\land ready_k

使用 ready/valid握手 发送端 valid 与接收端 ready 在同一边沿均为 1 时,确认传输的约定,也包括等待期间的数据保持规则。了解更多 接口时,只在上述条件成立的边沿同时更新移位寄存器与计数。若只给其中一方加 enable,数据与长度信息就会错位。提供的连续输入实验是接受每个数据边沿的简单情形。

自己试试

一个八位帧在第四位之后,valid 连续两个周期为 0。若 ready=1,接收计数器和移位寄存器应如何工作?

阅读解释

两个周期的 accept 都为 0,因此计数器与数据寄存器必须一起保持。下一个有效比特才是第五位。若只数时钟,数据还不足时就可能错误报告完成。

你的选择适用于此浏览器,可随时在页脚更改。