浅谈 串行信号 转换成 并行信号 原理

注 :  文中讲述的原理是推理和探讨 , 和现实中的实现不一定完全相同 。

 

开始之前, 可以先参考看看我之前写的两篇文章 :

《设计一个 硬件 实现的 Dictionary(字典)》  https://www.cnblogs.com/KSongKing/p/10193128.html

《漫谈 计算机硬件 的 设计 和 实现》  https://www.cnblogs.com/KSongKing/p/9866334.html

 

串行信号 是 脉冲信号 ,

我们要 引入一个 “双稳态开关”, 或者说 “双稳态门”  来 处理 串行信号 。

 

双稳态开关, 技术上 是一个 双稳态电路, 不过 我们 先不关心 具体的技术实现, 我们先从 逻辑层面 来看待 。

所以, 我们提出一个 “双稳态开关”, 又称 “双稳态门” 的 概念 。

 

双稳态门 如下图 :

 

双稳态门 有一个 输入端 和 一个 输出端, 为了容易区分, 我们用 箭头 来表示 输入端  输出端  。

输入端 输入 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 延时电路简要分析》  https://wenku.baidu.com/view/0f4d8024960590c69ec376fc.html

当然 延时开关 的 实现技术 是 多样的, 也有一些 新技术 。

延时开关 技术 可能 是 硬件技术 的 一个 关键技术 之一 。

因为 延时开关 的 反应速度 和 精度 关系到 串行转并行 电路 的 稳定性 和 传输速度 。

延时开关 反应速度 越快, 精度 越高, 就能支持 更高频率 的 串行信号, 串行信号 的 频率 越高, 传输速度 也 越快 。

 

大量数据 的 串行转并行 传输 需要 发送方 和 接收方 之间 发信号 通信协作,  也可以说是 发指令 。

可以把 发送方 称为 “串行设备”, 把 接收方 称为 “并行接口” 。

串行设备 会 发信号 通知 并行接口 准备发送数据, 并行接口 设置好 初始状态 后 发信号 通知 串行设备 可以发送数据,

感觉 好像 三次握手 ……

串行设备 发送数据, 双方 可以 约定 一次 发送多少 数据(Byte), 比如 1 KB ,  则 接收完 1KB 后 并行接口 通知 操作系统,

操作系统 从 并行接口 的 缓冲区 中 读取 这 1KB 数据 到 内存,  完成后 通知 并行接口,

并行接口 发信号 通知 串行设备 继续 发送数据 。

如果 发送信号(指令) 的 线路 也是 串行线路(串行信号),  那么 上文讨论的 串行转并行 的 原理 也适用于 发送接收 信号(指令)。

理论上,  本文原理 也 适用于 Modem(调制解调器) 和 USB 的 基础电路 和 基本原理 。

 

我们可能会碰到这样的情况, Modem 或者 路由器 使用的时间长了,  可能会出现 上不了网 的 情况 。 这时, 就 关掉一下,  放一下电,  等一会儿再打开  就可以上网了 。

这可能跟 上文 中 延时开关 的 原理 有关 。

延时开关 通常 会 用 电容 和 三极管 组成,  利用 电容 充电放电 的 特性 延时,  所以 电容 的 质量 和 延时开关 的 稳定性 和 精度 有 直接关系 。

这也是 关掉 Modem 或者 路由器 , 放一下电,  等一会儿再开 就 又可以上网了 的 原因 吧 !    ^^ ^^ ^^

 

原文地址:https://www.cnblogs.com/KSongKing/p/10203347.html