minecraft吧 关注:2,542,574贴子:31,795,068
  • 13回复贴,共1

半夜闲着没事搞点红石小玩意

只看楼主收藏回复

目前准备实现一个流水灯,开个贴记录一下,或许以后还会搞别的东西,估计也会一并放进来


IP属地:俄罗斯1楼2021-08-11 22:03回复

    目前的全景图


    IP属地:俄罗斯2楼2021-08-11 22:06
    回复

      这边是一个四路输入的紧凑与门、非门结构的转码器,姑且用的是8421码


      IP属地:俄罗斯3楼2021-08-11 22:08
      回复

        这边是寄存器部分,用的是JK触发器+时钟控制
        第二张图是单独的JK触发器,表达式大体上是Q=非(非(q+A)+B)
        其中A是图中右边的输入,q是寄存器上一期的输出,B是图中左侧的输入,Q是寄存器当期输出

        上述JK触发器等价于第三张图这样的结构,可见第三张图的结构更简单,但我并没有采用,因为不够浪漫:)

        下面是控制部分,是一种D触发器,之所以要加入这部分,是为了避免JK触发器遇到A=1,B=1这样的无效输入。同时我们要缩减信号变化的时间范围,当前图中亮起的线是时钟线,这个D触发器会在时钟线亮起时被锁住,这样就保证了JK触发器的输入信号变化只发生时钟的下降沿。


        IP属地:俄罗斯4楼2021-08-11 22:22
        回复

          时钟信号的输入采用的是一个极其传统的中继器时钟,时钟信号会取反后送入D触发器


          IP属地:俄罗斯5楼2021-08-11 22:24
          回复
            除此之外,D触发器的输入信号,我准备链接上一个计数器,这部分目前还没做


            IP属地:俄罗斯6楼2021-08-11 22:25
            回复

              刚才那个寄存器部分有个极其简便的实现方法,就是这样,不过我并不愿意去使用。
              因为中继器的寄存功能和T触发器,这两者一个是封装好的解决方案,另一个是利用了活塞的延迟特性,而我希望的是用纯数字电路来解决问题


              IP属地:俄罗斯7楼2021-08-11 22:44
              回复

                计数器部分完成了,之前做寄存器的时候考虑的不够周全,实际上计数器本身已经内置了寄存器了,所以原先的寄存器已经没用了。
                可以注意到,计数器整体外形和寄存器是很像的,只是在寄存器的基础上,前面连接了一个四位全加器,并且每次运算时的第二个加数都是二进制常量0001,再把全加器的结果连接到寄存器的输入端D上,另一端信号由时钟控制。这样一个时序计数器就完成了

                接下来要做的就是把原先的寄存器删除掉,再把计数器连接过来


                IP属地:俄罗斯8楼2021-08-12 00:09
                回复

                  这是成品图,但是有一些瑕疵,从一个输出变化到下一个输出时,会出现一些多余的输出。时钟并没有把这些输出给过滤掉,因此我准备再接入一个时钟寄存器。


                  IP属地:俄罗斯9楼2021-08-12 01:14
                  回复

                    这是改进后的成品图,但仔细一样,仅仅为了过滤掉多余的输出,貌似没必要用时钟寄存器,会导致很多不必要的延迟,仅仅一个时钟与门就够了。。。。。。。嘤,懒得再改了


                    IP属地:俄罗斯10楼2021-08-12 01:16
                    回复
                      淦,我还想了半天流水灯是个啥,原来是跑马灯


                      IP属地:北京来自Android客户端11楼2021-08-12 11:57
                      收起回复