【缺氧】同步时分复用信号浅析
本文最后更新于:2023年2月4日 晚上
【缺氧】同步时分复用信号浅析
在oni中,我们可能会有用一条信号线(可视为一条物理信道),传递多个信号的需要。
由于oni中由都是逻辑电路,没有能量高低,也没有频谱的概念。因此要满足这个需要,我们可以考虑"时分复用"的方法。
时分复用最初是为电报中的应用开发的,用于在一条传输线上同时路由多个传输。[1]带入到游戏的场景中,对于单条信号线,使用时分复用技术,其传输数据的周期和速率,只与时间有关。而在oni中,通过时间变化来控制元器件的运作,还是比较容易做到的。
本文所分析的场景,都是较为简单的情况。更多复杂的场景和需要,可自行展开探讨和研究。
名词“oni”,指代的是游戏《oxygen not include》,即《缺氧》,后文再次出现的含义与此相同)
前言
时分复用概述
时分多路复用( TDM ) 是一种通过公共信号路径发送和接收独立信号的方法。
该方法通过传输线每一端的同步开关,以便每个信号仅以交替模式出现在线路上的一小部分时间. 此方法通过公共通道传输两个或多个数字信号或模拟信号。[1]
名词定义
本名词定义,仅用于方便讲解游戏《缺氧》中的机制和概念,并不严谨,与现实中的《计算机网络》课本中的名词定义并不完全相同。其中带星号的名词,为自已定义的词,仅限于游戏讲解。注意与现实的区分。
-
总线
传送信息的公共通信干线,对应oni中的自动化线路。即"同步时分复用信号"方法中“复用”的对象。一条总线,可能包含多条单个的信号线(如
信号线组
)。若没有特殊说明,通常指由单个信号线
组成的,用于传输数据的数据总线
。 -
数据总线
特定用于传送数据的公共通信干线。
-
信号刷新周期 *
一个信号从上一次开始传输,到下一次开始传输的间隔时间。每隔一段
信号刷新周期
,信号发送端才会发出其有效的信号变化。我们将一个完整的信号刷新周期,记为 T 。
-
信号的序号 *
我们将多个不同的信号,都进行编号,并且规定每个信号的传输顺序。我们暂且称之为
信号的序号
。 -
时间段
将一个完整的信号传输周期进行分割,给每一个按照顺序排好的信号,都分配一段时间,我们称为
时间段
。并且规定每个信号仅能在其允许的时间段时,向总线发送和接收信号。我们将某个序号m的信号,其所在的时间段的长度,记为 tm 。
-
信号时延
信号每经过一个元器件进行处理,再发出,需要消耗一定的时间。在oni中,一个元器件的处理时间通常为0.1s。
-
窗口期 *
指发送信号和接收信号实际有效的时间。因信号时延,一个信号在它的时间段内,收发信号实际有效的时间,是小于等于它的时间段的。
-
信号发送端
向
总线
输出信号的一端。 -
信号接收端
从
总线
中接收信号的一端。 -
对时信号线 *
此模块设计中,一条专门用来进行对时操作的信号线。
-
对时信号 *
在一个
信号刷新周期
刚开始时,向对时信号线中输出的绿色信号。该绿色信号时长应该比较短暂,且小于每个信号的时间段
。但最小值建议不低于0.1s。
基本模块蓝图
模块整体
对时控件
发送端
接收端
模块讲解
整体设计思路
假设我们在oni中,需要处理大量的信号,且要跨很远的距离传输。一般来说,每个信号都会有一个发送端和一个接收端。
如果一个信号,占用一个线路,那么我们就要建造大量的信号线。这既需要大量的空间,也耗费材料。于是,我们便自然而然地开始思考,如何利用一条信号线,来传输更多的信号。
如果我们接受每一个信号可以每隔一段时间才进行刷新,且每个信号的刷新周期,小于一个我们可以接受的时间T。
那么我们就可以将时间T按照一定的规则(如平均分),进行划分。再对每个信号的传输顺序进行排序,每个信号都将分得一个时间片t。
接着我们可以规定信号发送和接收双方,都只在划定的时间段内进行发送和接收的操作。这样我们就可以重复利用同一条信号线,传输更多的信号了。
发送端设计思路
发送端从对时信号线
接收对时信号
,并通过过滤门和缓冲门调整发送信号的窗口时间。当时间到达当前信号划分的时间段内,才允许向总线
发送信号。
当重置时间传感器
绿色信号的开始时间时。对于使用2型和3型蓝图的模块来说,各个信号的发送端会立刻按顺序,依次刷新信号,调整起来比较方便。而对于使用1型蓝图的模块来说,需要调整每个信号的发送端和接收端两端的时间传感器
,调整就比较繁锁了。
接收端设计思路
发送端从对时信号线
接收对时信号
,并通过过滤门和缓冲门调整发送信号的窗口时间。当时间到达当前信号划分的时间段内,才允许从总线
接收信号。
接收端需要考虑信号的延迟带来的问题。因此需要过滤门来过滤可能来自上一个时间段信号传输的数据,使用缓冲门来保证接收信号的窗口时间不会减少。
时延的主要来源
时间传感器
输出绿色信号,有0.1秒钟的延迟。从绿色信号,变为红色信号,也有0.1秒的延迟。与门
在检测到符合条件后,从红色信号,变为绿色信号,向外输出时,有0.1秒的延迟。线组写入器
将单个信号线
的信号写入线组时,需要0.1s的时间。线组读取器
将单个信号线
的信号写入线组时,需要0.1s的时间。
参数设定与计算
定义基本参数
-
信号数量 n
在一个
信号刷新周期内
,允许在总线上传输的信号的数量。 -
每个信号的时间段 t
为方便设置和计算,我们一般将每个信号的时间段,设置为相同的值。建议时间段最小值不能小于0.2s。
-
对时信号时长 Tsync
即用于对时的信号,保证时钟同步。其值小于任意一个信号的时间段t,常用
时间传感器
来进行设置。建议设置时间传感器
绿色信号的时间,即对时信号的时长为0.1s。 -
发送端数据发送的时延 Tdelay
其值取决于将将要发送的信号,发送至总线的过程中,要经历多少个元器件。
对时控件
对时控件一般使用时间传感器
。
绿色信号时间
绿色信号时间一般设置为对时信号时长
Tsync 即:
红色信号时间
红色信号时间设置为所有信号时间段
的总和,减去对时信号的时长,再加上发送端数据发送的时延 Tdelay 即:
如果总共有n个信号,每个信号的时间段都设置为相等,且都为常数k,则有
信号刷新周期
显然,信号刷新周期,就是对时控件,红色信号时间和绿色信号时间的和,即:
如果总共有n个信号,每个信号的时间段都设置为相等,且都为常数k,则有
发送端
对时信号线,连接一个缓冲门
后,再继续连接过滤门
。
发送端过滤门
发送端的过滤门
在接收到对时信号
后,进行延迟计算。直到时间到了属于该信号的时间段
的开始,才将对时信号
传递给发送端的与门
,允许发送端向总线
发送信号。因此,序号为m的信号发送端的过滤门
,其值等于前面m-1个信号时间段
的和。由此可得:
如果每个信号的时间段都设置为相等,且都为常数k,则有
发送端缓冲门
发送端的缓冲门
在对时信号
结束后,继续为过滤门
提供绿色信号。直到时间到了属于该信号的时间段
的结束,才禁止发送端向总线
发送信号。因此,发送端的缓冲门
,其值等于前面m个信号的时间段
之和,再减去对时信号时长
。由此可得:
如果每个信号的时间段都设置为相等,且都为常数k,则有
接收端
对时信号线,连接一个缓冲门
后,再继续连接过滤门
。接收端主要对传输过程中的时延进行处理。
接收端过滤门
当发送端满足发送信号的条件后,会经过与门
(以及其他元器件)处理后,将信号发送到总线上。由于期间经过一些元器件的处理,信号到接收端时,会产生一定的时延。信号的变化,总是会相对于慢一点。
因此接收端的过滤门,主要用于过滤可能来自上一个时间段产生的信号。由此可得:
如果每个信号的时间段都设置为相等,且都为常数k,则有
接收端缓冲门
由于发送端发送信号存在时延,因此接收端需要更多的时间来等待信号传输。因此接收端的缓冲门,主要用于保持信号时间段的时长不变。由此可得:
如果每个信号的时间段都设置为相等,且都为常数k,则有
参考
- Time-division_multiplexing https://en.wikipedia.org/wiki/Time-division_multiplexing ↩
- 参考资料2 ↩