注 : 文中讲述的原理是推理和探讨 , 和现实中的实现不一定完全相同 。
开始之前, 可以先参考看看我之前写的两篇文章 :
《设计一个 硬件 实现的 Dictionary(字典)》
《漫谈 计算机硬件 的 设计 和 实现》
串行信号 是 脉冲信号 ,
我们要 引入一个 “双稳态开关”, 或者说 “双稳态门” 来 处理 串行信号 。
双稳态开关, 技术上 是一个 双稳态电路, 不过 我们 先不关心 具体的技术实现, 我们先从 逻辑层面 来看待 。
所以, 我们提出一个 “双稳态开关”, 又称 “双稳态门” 的 概念 。
双稳态门 如下图 :
双稳态门 有一个 输入端 和 一个 输出端, 为了容易区分, 我们用 箭头 来表示 输入端 输出端 。
输入端 输入 1 时, 输出端 输出 1, 输入端 的 输入 是一个 脉冲信号, 即 脉冲 结束后, 无输入的状态下, 输出端 可以 保持 输出 1 的 状态 。
输入端 输入 0 时, 输出端 输出 0, 输入端 的 输入 是一个 脉冲信号, 即 脉冲 结束后, 无输入的状态下, 输出端 可以 保持 输出 1 的 状态 。
为了 区别 0 和 “无输入” 的 状态, 技术上, 采用 高电平(高电压) 表示 1, 低电平(低电压) 表示 0, 无电压 表示 无输入 。
我们 可以 看一下 脉冲信号 的 波形图 :
如果要发送 一个内容是 “1001” 的 串行信号, 则 波形图 如下 :
好的, 接下来, 我们就可以看看将 串行信号 转为 并行信号 的 逻辑电路图 :
如图, 为了便于讲解,我们在 图上 一些位置 标上了 序号 。
简单起见, 我们 只 设计 了 2 位 的 并行信号 输出 。 有就是说, 串行信号 会 转换成 2 位(bit) 的 并行信号 。
1 2 是 入口双稳态门, 控制着 串行信号 可以 写入 哪一位(bit) 。 初始状态 时, 第 1 位(bit) 的 入口稳态门 处于 “1” 状态, 输出端 输出 1 , 输出端 连接 的 开关 接通, 可以向 第 1 位(bit) 写入数据 。 而 其它位,比如 第 2 位(bit) 的 入口双稳态门 处于 “0” 状态, 输出端 输出 0 , 输出端 连接 的 开关 断开, 不能向 第 2 位(bit) 写入数据 。
也就是说, 同一时间, 只能 有一个 位 的 入口双稳态门 处于 “1” 状态, 其它位 的 入口双稳态门 都应该是 “0” 状态, 这样 同一时间 只有 一个 位 可以 写入数据 。
这就是 串行信号 转为 并行信号 的 基础 。
在 初始状态 下, 当 串行信号 的 第一个 脉冲 达到时, 第 1 位 的 入口稳态门 处于 “1” 状态, 开关接通, 所以 第一个 脉冲 就 通过开关 写入了 第 1 位 的 存储位(图中 下方 7 处) 。 存储位 也是一个 双稳态门, 利用 稳态开关 的 “稳态” 特性, 可以起到 “记忆”(存储器) 的 功能 。 比如, 脉冲 是 1, 则 双稳态门 就会 保持在 “1” 状态, 脉冲 是 “0”, 则 双稳态门 会 保持在 “0” 状态 。
与此同时, 脉冲 还会 通过 图中 3 处 的 电路, 转换为 “1” , 输出到 图中 5 处 的 延时开关 。 图中 3 处 电路 的 意义 是 不管 脉冲 是 “1” 还是 “0”, 都 转为 “1” 。 也就是说, 只要有 串行信号 输入, 不管是 1 还是 0 , 都会 触发 这个 延时开关 。
延时开关 的 意思 就是 , 当 输入端 有 1 输入时, 延迟一段时间, 才在 输出端 输出 1 。
延时开关 输出的 1 会 触发 图中 2 处 的 双稳态门, 也就是 第 2 位 的 入口双稳态门, 这可以让 第 2 位 的 开关 接通, 使 第 2 位 进入 可以 写入数据 的 状态 。
同时, 延时开关 输出的 1 还会 通过另一条线路 经过 图中 9 处 的 “非”门, 再 到达 图中 1 处 的 双稳态门, 也就是 第 1 位 的 入口双稳态门 。
延时开关 输出的 1 经过 非门 后, 会变成 0, 这个 0 会 触发 第 1 位 的 入口双稳态门 变成 “0” 状态, 即 输出 0, 对应的 开关 会 断开, 第 1 位 会变成 不能 写入数据 的 状态 。
这样 就 完成了 写入 第 1 个 脉冲 的 过程 。
接下来 就可以 写入 第 2 个 脉冲 。 第 2 个 脉冲 将会写入 第 2 位(bit)存储位。
有一个 问题 是, 这里 为什么 要使用 “延时开关” 呢 ?
因为, 如果 不经过 延时, 图中 3 处 产生的 “1” 直接 输出到 图中 2 处 的 入口双稳态门 的 话, 会 立即 接通 第 2 位 的 开关, 使 第 2 位 立即 进入 可写入数据 的 状态 。 此时很有可能 第一个 脉冲 还没有结束, 也是 第一个脉冲 会 写入到 第 2 位, 这就产生了 错误 。
甚至, 如果 这个电路 有 多位(bit), 比如 3 位(bit)、 4 位(bit) …… , 则 有可能 会 触发 第 3 位 、 第 4 位 …… 也 进入 可写入 的 状态, 这样连续触发下去 。
这样 就 不对 了 。
可以 连续 触发 几位(几级), 视 电路 的 传输速度 而 定 。 ^^
同时, 如果 不经过 延时, 图中 3 处 产生的 “1” 还会 经过 图中 9 处 的 非门 变成 “0” 触发 第 1 位 的 入口双稳态门 变为 “0”, 使得 第 1 位 的 开关 断开, 第 1 位 变成 不可写入 的 状态 。 但这时 第 1 位 的 写入 操作 还可能 没有完成 。会导致 写入 第 1 位 的 操作 也 发生错误 。
我们可以通过 串行信号(脉冲信号) 的 波形图 来 形象 的 说明 上面 这个过程 :
上述过程 依次 向 下一位 递推, 直到 最后一位 。 如: 第 1 位 写入, 触发 第 2 位 接通, 第 1 位 断开; 第 2 位 写入, 触发 第 3 位 接通, 第 2 位 断开; 第 3 位 写入, 触发 第 4 位 接通, 第 3 位 断开; …… 。
当 到 最后一位 时, 会 反过来 触发 第 1 位 接通, 自己 断开, 同时 把 所有位 的 数据 写入 缓冲区 。 这样就完成了 一轮 接收 。 可以开始 下一轮 接收 。
当然, 最后一位 的 这个 执行过程 我们 略去了, 没有画出来 。
有关 延时开关, 可以参考 《RC 延时电路简要分析》
当然 延时开关 的 实现技术 是 多样的, 也有一些 新技术 。
延时开关 技术 可能 是 硬件技术 的 一个 关键技术 之一 。
因为 延时开关 的 反应速度 和 精度 关系到 串行转并行 电路 的 稳定性 和 传输速度 。
延时开关 反应速度 越快, 精度 越高, 就能支持 更高频率 的 串行信号, 串行信号 的 频率 越高, 传输速度 也 越快 。
大量数据 的 串行转并行 传输 需要 发送方 和 接收方 之间 发信号 通信协作, 也可以说是 发指令 。
可以把 发送方 称为 “串行设备”, 把 接收方 称为 “并行接口” 。
串行设备 会 发信号 通知 并行接口 准备发送数据, 并行接口 设置好 初始状态 后 发信号 通知 串行设备 可以发送数据,
感觉 好像 三次握手 ……
串行设备 发送数据, 双方 可以 约定 一次 发送多少 数据(Byte), 比如 1 KB , 则 接收完 1KB 后 并行接口 通知 操作系统,
操作系统 从 并行接口 的 缓冲区 中 读取 这 1KB 数据 到 内存, 完成后 通知 并行接口,
并行接口 发信号 通知 串行设备 继续 发送数据 。
如果 发送信号(指令) 的 线路 也是 串行线路(串行信号), 那么 上文讨论的 串行转并行 的 原理 也适用于 发送接收 信号(指令)。
理论上, 本文原理 也 适用于 Modem(调制解调器) 和 USB 的 基础电路 和 基本原理 。
我们可能会碰到这样的情况, Modem 或者 路由器 使用的时间长了, 可能会出现 上不了网 的 情况 。 这时, 就 关掉一下, 放一下电, 等一会儿再打开 就可以上网了 。
这可能跟 上文 中 延时开关 的 原理 有关 。
延时开关 通常 会 用 电容 和 三极管 组成, 利用 电容 充电放电 的 特性 延时, 所以 电容 的 质量 和 延时开关 的 稳定性 和 精度 有 直接关系 。
这也是 关掉 Modem 或者 路由器 , 放一下电, 等一会儿再开 就 又可以上网了 的 原因 吧 ! ^^ ^^ ^^