泰拉瑞亚电路:状态串行原理讲解

发布时间:2023-11-22 11:01
最后更新:2023-11-22 11:01

贡献人员:熵增  


Tips:本文最近1个月没有更新,如果内容错误、缺失的话,你可以在评论区留言 (๑•̀ㅂ•́)و✧

来自@熵增
发表于:泰拉技术协会
原帖地址:电路:状态串行原理讲解

一、什么是串行

当想从一个地方传输很多位的数据到另一个地方时,可以选择用并行或串行传输。

并行就是每根线传输一位数据,有多少位就有多少根线。

而串行则是使用一根线传输多位数据,无论多少位都使用一根线传输。


这么看似乎串行比并行节省了很多电线,让数据通路更加简单,应该所有数据都使用串行来传输?

在现实中逻辑门和电线是有延迟的,一根线传输多位数据不能同时传输,如果那样数据就混在一起了,所以不同的位应该在不同的时间分时传输,这样才能确保数据正常的编码和解码。这就导致了串行会比并行慢很多,位数越多越慢。并且让数据从并行转换到串行需要额外的编码与解码逻辑,这会让电路更加复杂。

不过在泰拉瑞亚中,逻辑门和电线没有延迟,这就意味着串行与并行的传输时间相同。串行的缺点就只剩下了逻辑门较多,结构较为复杂。不过相比于它简化排线的优点,这个缺点可以忽略。

串行是泰拉瑞亚的多部件电路或大型电路中最常用的部件,几乎所有多部件电路或大型电路都会使用它用于不同部件间的数据传输。但由于它在单部件电路或小型电路中没有用武之地,所以可以说串行是由中阶电路进阶到高阶电路首先要学会的东西。理解并运用串行可以让电路水平极大的提高。

串行除了用于数据传输外,也可以用于数据计算,它可以在传输的同时完成异或、非等运算,其与加法器的延迟一致,非常容易与之结合,同时也可以作为多路复用器、移位器使用,甚至也可以作为寄存器、内存或显存来使用。因其极多的功能以及较为简单的结构,可以说是泰拉瑞亚电路中最重要且最常用的部件。

学习串行时,推荐使用模组MechScope查看逻辑帧,否则会很难理解。这个模组没有1.4以后的版本,所以需要对tModLoader降级。建议在学习时跟着做一遍,自己尝试更容易理解。

二、什么是状态串行

串行经过长时间的发展,逐渐产生了很多种类,比如激活串行、状态串行、独热串行等。其中状态串行是比较新的串行,其解决了激活串行的复位问题,代替激活串行成为了最泛用的串行。其与激活串行的区别是其传输的是状态信号,而不是激活信号。


各种激活串行


各种状态串行

注意到状态串行与激活串行的最大区别就是状态串行的串行线(绿线)连接的是故障门的普通(有亮和灭两个状态),激活串行的串行线(绿线)连接的是故障门的故障灯(只有一个状态,也就是激活)。

三、状态串行的原理

状态串行传输信号的过程本质上是一个连续赋值的过程。

1.复位

最常用的赋值就是复位,也就是赋0。

复位
红线可以切换火把的状态,从0变1或从1变零。但无论火把是0还是1,绿线激活时,火把都会变为0。


可以发现火把的状态和逻辑灯的状态是一致的,火把灭的时候(0),逻辑灯也灭(0);火把亮的时候(1),逻辑灯也亮(1)。

如果让火把的状态和逻辑灯的状态不一致,那么我们就得到了赋1。


赋1

无论火把是0还是1,绿线激活时,火把都会变为1。


如果将赋0和赋1结合起来,我们就可以给火把赋任意值。


黄线赋1,绿线赋0


无论火把是0还是1,绿线激活时,火把都会变为0;黄线激活时,火把都会变为1。

回顾上面的内容,我们将赋0变为赋1时,仅仅是将中间的逻辑灯由灭的换成亮的,也就是切换它的状态。如果我们在中间逻辑灯上连接一根电线,就可以用这根电线来控制中间逻辑灯的亮灭(状态)。


我们来分析一下这个电路:

当黄线不激活时(为0),这是一个赋0,激活绿线可以将火把变为0;

当黄线激活时(为1),这是一个赋1,激活绿线可以将火把变为1。

于是可以这样理解:激活绿线时,将黄线的状态赋给红线(火把)。无论红线的状态是什么,激活绿线时,红线的状态都变为黄线的状态。


接下来,我们将两个赋值连接到一起:


激活左侧的绿线时,会将左侧黄线的状态赋值给红线,激活右侧的绿线时,会将红线的状态赋值给右侧的黄线。


这样就完成了将左边黄线的状态(值)传递给右边的黄线。

我们将左边的赋值称为输入,将右边的赋值称为输出,红线称为串行线。

当有多个输入时,我们可以根据激活的绿线来选择将哪个输入赋值给串行线。

同理,当有多个输出时,我们可以根据激活的绿线来选择让哪个输出被串行线赋值。


当有多个输入和输出时,我们可以根据激活的绿线自由的选择输入与输出的对应关系。


在左边选择将哪个输入赋值给串行线,在右边选择哪个输出会被串行线赋值。

这是一种映射关系,使用绿线来将输入映射到输出,类似于在输入和输出间连接了一条电线。比如先激活了输入的第四条绿线,再激活输出的第二条绿线,就相当于在输入的第四位和输出的第二位间接了一条电线。


但是串行传输不需要这么复杂的映射,只需要让输入的位与输出的位一致即可,既输入第一位对应输出第一位,输入第二位对应输出第二位……以此类推。

所以我们现在要做的,就是先激活输入第一位,再激活输出第一位;之后激活输入第二位,再激活输出第二位……以此类推。

使用单灯与门可以对信号延迟,这样就能实现信号先后的区分。


显然这样的电路满足了需求,但是有一个非常大的问题:那就是太大了!注意到我们使用了四根电线将延迟后的信号传到输出端,这与并行使用的电线数量一样,串行的优势完全消失了!

于是我们可以使用两排延迟来分别对输入输出的信号来延迟:

虽然增加了逻辑门数量,但是减少了电线,这也是串行的目的。

最左边的开关激活时,串行将输入的状态同步到输出的状态,而这个信号完全可以使用串行线来传输,因为起始信号发送时,不会有输出接收串行线的状态,当第一个输出接收串行线的状态时,串行线的状态已经被赋值为第一个输入的状态,与串行线的初始状态无关,也与起始信号的状态无关。


注意到输出端少了一个延迟逻辑门

注意到起始信号将串行线从0变为1,而输入端第一位将串行线赋值为0,将起始信号造成的串行线变化抹消
我们发现,在输出端将串行线赋值给本位输出的同时,输入端可以将下一位输入赋值给串行。因为当前逻辑帧的串行线还是本位的状态,输出端不会改变串行线的状态,故下一位输入赋值时串行线还是本位的状态,所以这两件事情并不冲突。这样可以省去一半的延迟门:

整理电线得:

这样就得到了状态串行的基本形式。

状态串行可以进行各种修改以适应各种实际情况,这里不做展开。

下载app分享☆收藏8+

相关评论

  1. 头像
    5JLlf0LT说道: Lv.1

    太专业了给我干成二比了

  2. 头像
    Syair Hk说道:

    泰拉瑞亚电路:状态串行原理讲解

要参与讨论咩?请先登陆吧!(๑•̀ㅂ•́)و✧

要参与讨论咩?请先登录吧!

黄金广告位招租…(°ー°〃)联系QQ80549921


黄金广告位招租…(°ー°〃)联系QQ80549921


更多文章


首页

视频

社区

福利

我的