【缺氧】同步时分复用信号浅析

本文最后更新于:2023年2月4日 晚上

【缺氧】同步时分复用信号浅析

在oni中,我们可能会有用一条信号线(可视为一条物理信道),传递多个信号的需要。

由于oni中由都是逻辑电路,没有能量高低,也没有频谱的概念。因此要满足这个需要,我们可以考虑"时分复用"的方法。

时分复用最初是为电报中的应用开发的,用于在一条传输线上同时路由多个传输。[1]带入到游戏的场景中,对于单条信号线,使用时分复用技术,其传输数据的周期和速率,只与时间有关。而在oni中,通过时间变化来控制元器件的运作,还是比较容易做到的。

本文所分析的场景,都是较为简单的情况。更多复杂的场景和需要,可自行展开探讨和研究。

名词“oni”,指代的是游戏《oxygen not include》,即《缺氧》,后文再次出现的含义与此相同)

前言

时分复用概述

电报多路复用器 来自1922年的大英百科全书

时分多路复用( TDM ) 是一种通过公共信号路径发送和接收独立信号的方法。

该方法通过传输线每一端的同步开关,以便每个信号仅以交替模式出现在线路上的一小部分时间. 此方法通过公共通道传输两个或多个数字信号或模拟信号。[1]

名词定义

本名词定义,仅用于方便讲解游戏《缺氧》中的机制和概念,并不严谨,与现实中的《计算机网络》课本中的名词定义并不完全相同。其中带星号的名词,为自已定义的词,仅限于游戏讲解。注意与现实的区分。

  • 总线

    传送信息的公共通信干线,对应oni中的自动化线路。即"同步时分复用信号"方法中“复用”的对象。一条总线,可能包含多条单个的信号线(如信号线组)。若没有特殊说明,通常指由单个信号线组成的,用于传输数据的数据总线

  • 数据总线

    特定用于传送数据的公共通信干线。

  • 信号刷新周期 *

    一个信号从上一次开始传输,到下一次开始传输的间隔时间。每隔一段信号刷新周期,信号发送端才会发出其有效的信号变化。

    我们将一个完整的信号刷新周期,记为 T 。

  • 信号的序号 *

    我们将多个不同的信号,都进行编号,并且规定每个信号的传输顺序。我们暂且称之为信号的序号

  • 时间段

    将一个完整的信号传输周期进行分割,给每一个按照顺序排好的信号,都分配一段时间,我们称为时间段。并且规定每个信号仅能在其允许的时间段时,向总线发送和接收信号。

    我们将某个序号m的信号,其所在的时间段的长度,记为 tm

  • 信号时延

    信号每经过一个元器件进行处理,再发出,需要消耗一定的时间。在oni中,一个元器件的处理时间通常为0.1s。

  • 窗口期 *

    指发送信号和接收信号实际有效的时间。因信号时延,一个信号在它的时间段内,收发信号实际有效的时间,是小于等于它的时间段的。

  • 信号发送端

    总线输出信号的一端。

  • 信号接收端

    总线中接收信号的一端。

  • 对时信号线 *

    此模块设计中,一条专门用来进行对时操作的信号线。

  • 对时信号 *

    在一个信号刷新周期刚开始时,向对时信号线中输出的绿色信号。该绿色信号时长应该比较短暂,且小于每个信号的时间段。但最小值建议不低于0.1s。

基本模块蓝图

模块整体

缺氧自动化-同步时分复用-整体

对时控件

缺氧自动化-同步时分复用-对时控件

发送端

缺氧自动化-同步时分复用-发送端

接收端

缺氧自动化-同步时分复用-接收端

模块讲解

整体设计思路

假设我们在oni中,需要处理大量的信号,且要跨很远的距离传输。一般来说,每个信号都会有一个发送端和一个接收端。

如果一个信号,占用一个线路,那么我们就要建造大量的信号线。这既需要大量的空间,也耗费材料。于是,我们便自然而然地开始思考,如何利用一条信号线,来传输更多的信号。

如果我们接受每一个信号可以每隔一段时间才进行刷新,且每个信号的刷新周期,小于一个我们可以接受的时间T。

那么我们就可以将时间T按照一定的规则(如平均分),进行划分。再对每个信号的传输顺序进行排序,每个信号都将分得一个时间片t。

接着我们可以规定信号发送和接收双方,都只在划定的时间段内进行发送和接收的操作。这样我们就可以重复利用同一条信号线,传输更多的信号了。

发送端设计思路

发送端从对时信号线接收对时信号,并通过过滤门和缓冲门调整发送信号的窗口时间。当时间到达当前信号划分的时间段内,才允许向总线发送信号。

当重置时间传感器绿色信号的开始时间时。对于使用2型和3型蓝图的模块来说,各个信号的发送端会立刻按顺序,依次刷新信号,调整起来比较方便。而对于使用1型蓝图的模块来说,需要调整每个信号的发送端和接收端两端的时间传感器,调整就比较繁锁了。

接收端设计思路

发送端从对时信号线接收对时信号,并通过过滤门和缓冲门调整发送信号的窗口时间。当时间到达当前信号划分的时间段内,才允许从总线接收信号。

接收端需要考虑信号的延迟带来的问题。因此需要过滤门来过滤可能来自上一个时间段信号传输的数据,使用缓冲门来保证接收信号的窗口时间不会减少。

时延的主要来源

  1. 时间传感器 输出绿色信号,有0.1秒钟的延迟。从绿色信号,变为红色信号,也有0.1秒的延迟。
  2. 与门在检测到符合条件后,从红色信号,变为绿色信号,向外输出时,有0.1秒的延迟。
  3. 线组写入器将单个信号线的信号写入线组时,需要0.1s的时间。
  4. 线组读取器将单个信号线的信号写入线组时,需要0.1s的时间。

参数设定与计算

定义基本参数

  • 信号数量 n

    在一个信号刷新周期内,允许在总线上传输的信号的数量。

  • 每个信号的时间段 t

    为方便设置和计算,我们一般将每个信号的时间段,设置为相同的值。建议时间段最小值不能小于0.2s。

  • 对时信号时长 Tsync

    即用于对时的信号,保证时钟同步。其值小于任意一个信号的时间段t,常用时间传感器来进行设置。建议设置时间传感器绿色信号的时间,即对时信号的时长为0.1s。

  • 发送端数据发送的时延 Tdelay

    其值取决于将将要发送的信号,发送至总线的过程中,要经历多少个元器件。

对时控件

对时控件一般使用时间传感器

绿色信号时间

绿色信号时间一般设置为对时信号时长 Tsync 即:

t对时,绿色=Tsynct_{对时,绿色}=T_{sync}

红色信号时间

红色信号时间设置为所有信号时间段的总和,减去对时信号的时长,再加上发送端数据发送的时延 Tdelay 即:

t对时,红色=t1+t2+...+tnTsync+Tdelayt_{对时,红色}=t_{1}+t_{2}+...+t_{n}-T_{sync}+T_{delay}

如果总共有n个信号,每个信号的时间段都设置为相等,且都为常数k,则有

t对时,红色=nkTsync+Tdelayt_{对时,红色}=nk-T_{sync}+T_{delay}

信号刷新周期

显然,信号刷新周期,就是对时控件,红色信号时间和绿色信号时间的和,即:

T=t对时,绿色+t对时,红色=t1+t2+...+tn+Tdelay\begin{aligned} T &= t_{对时,绿色}+t_{对时,红色}\\ &= t_{1}+t_{2}+...+t_{n}+T_{delay} \end{aligned}

如果总共有n个信号,每个信号的时间段都设置为相等,且都为常数k,则有

T=nk+TdelayT=nk+T_{delay}

发送端

对时信号线,连接一个缓冲门后,再继续连接过滤门

发送端过滤门

发送端的过滤门在接收到对时信号后,进行延迟计算。直到时间到了属于该信号的时间段开始,才将对时信号传递给发送端的与门,允许发送端向总线发送信号。因此,序号为m的信号发送端的过滤门,其值等于前面m-1个信号时间段的和。由此可得:

t,过滤门=t1+t2+...+tm1t_{发,过滤门} = t_{1}+t_{2}+...+t_{m-1}

如果每个信号的时间段都设置为相等,且都为常数k,则有

t,过滤门=k(m1)t_{发,过滤门} = k(m-1)

发送端缓冲门

发送端的缓冲门对时信号结束后,继续为过滤门提供绿色信号。直到时间到了属于该信号的时间段结束,才禁止发送端向总线发送信号。因此,发送端的缓冲门,其值等于前面m个信号的时间段之和,再减去对时信号时长。由此可得:

t,缓冲门=t1+t2+...+tmTsynct_{发,缓冲门}=t_{1}+t_{2}+...+t_{m}-T_{sync}

如果每个信号的时间段都设置为相等,且都为常数k,则有

t,缓冲门=kmTsynct_{发,缓冲门} = km-T_{sync}

接收端

对时信号线,连接一个缓冲门后,再继续连接过滤门。接收端主要对传输过程中的时延进行处理。

接收端过滤门

当发送端满足发送信号的条件后,会经过与门(以及其他元器件)处理后,将信号发送到总线上。由于期间经过一些元器件的处理,信号到接收端时,会产生一定的时延。信号的变化,总是会相对于慢一点。

因此接收端的过滤门,主要用于过滤可能来自上一个时间段产生的信号。由此可得:

t,过滤门=t1+t2+...+tm1+Tdelay=t,过滤门+Tdelay\begin{aligned} t_{接,过滤门}&=t_{1}+t_{2}+...+t_{m-1}+T_{delay} \\ &=t_{发,过滤门}+T_{delay}\\ \end{aligned}

如果每个信号的时间段都设置为相等,且都为常数k,则有

t,过滤门=k(m1)+Tdelayt_{接,过滤门}=k(m-1)+T_{delay}

接收端缓冲门

由于发送端发送信号存在时延,因此接收端需要更多的时间来等待信号传输。因此接收端的缓冲门,主要用于保持信号时间段的时长不变。由此可得:

t,缓冲门=t1+t2+...+tmTsync+Tdelay=t,过滤门Tsync+Tdelay=t,缓冲门+Tdelay\begin{aligned} t_{接,缓冲门}&=t_{1}+t_{2}+...+t_{m}-T_{sync}+T_{delay} \\ &=t_{发,过滤门}-T_{sync}+T_{delay}\\ &=t_{发,缓冲门}+T_{delay}\\ \end{aligned}

如果每个信号的时间段都设置为相等,且都为常数k,则有

t,缓冲门=km+Tsync+Tdelayt_{接,缓冲门}=km+-T_{sync}+T_{delay}

参考


【缺氧】同步时分复用信号浅析
http://blog.cnctema.pub/post/zh-CN/ba5bed97ab39/
作者
cnctema
发布于
2022年11月6日
许可协议