红石电路吧 关注:32,252贴子:153,455

回复:计算机组成原理及ProjecRed技术实用教程——从零开始构建计算

只看楼主收藏回复

对于寄存器组,由于寄存器共用输入线,需要对寄存器进行选择,选择的寄存器允许送数,其他寄存器不允许送数,所以这里的寄存器单元必须要带有使能端,使能端可以这样构造:

在EN=0时,总是保持不变,在EN=1时允许送数。
(Logisim的D触发器本身带有使能端,这里为了演示不使用EN端)。


IP属地:广东54楼2014-10-22 15:10
回复
    留下两个思考题:
    一、使能端可以这样构造吗?为什么?

    二、对于MC,有更简单的方法构造使能端吗?


    IP属地:广东55楼2014-10-22 15:49
    收起回复
      2025-08-21 06:48:06
      广告
      不感兴趣
      开通SVIP免广告
      有了以上的基础就可以开始构建寄存器组了!
      首先,我们考虑对寄存器的写入。
      需要对寄存器写入,这就需要数据输入端,此外,还需要指定对哪个寄存器写,这可以把多个寄存器编址,用地址来表示一个具体的寄存器,比如四个寄存器可以用两位地址指定一个寄存器,八个需要三位。
      但如果一个都不写怎么办呢?时钟是不会变的,一旦时钟来了就会写,这时候,使能端就发挥作用了,我们利用使能端结合地址实现指定一个寄存器,利用读写端和使能端结合实现要不要写入。
      然后考虑对寄存器的读取
      寄存器的输出端是一个持续不断的输出,而根据前面的运算器,我们需要从寄存器取两个操作数输入运算器,因此,寄存器组需要有两个输出,这两个输出要能够分别选择连接到两个寄存器,也就是要实现选择两个寄存器分别输出到A、B端,这个好解决,两个通道分别设置两个数据选择器,每个选择器能够选择任意的寄存器。


      IP属地:广东56楼2014-10-22 17:17
      收起回复
        补充:寄存器的时钟端是只针对写操作而言的,一旦上升沿到来并且读写端为1且寄存器被选中,那么输入端的数就会送到寄存器中。对于输出端,不管时钟怎样,也不管读写端是0还是1,输出端时时刻刻都是寄存器的值。
        至此,【通用寄存器组】就构建完成啦


        IP属地:广东57楼2014-10-22 17:27
        回复
          卧槽


          IP属地:北京58楼2014-10-22 20:18
          回复
            哇塞,这可是真正的专业触啊!用mod的话,科学计算器就根本不在话下啊!


            来自Android客户端59楼2014-10-22 22:03
            收起回复
              触发器不是有电平触发脉冲触发和边沿触发么脉冲被吃了?


              IP属地:日本来自Android客户端60楼2014-10-22 23:07
              收起回复
                推荐一个棒极了的网站:
                http://www.nand2tetris.org/
                这个网站免费提供教学,教学的内容就是从与非门开始构建计算机,一直到写出操作系统并运行一个俄罗斯方块的程序。
                教学分为13个主题,配有书本、讲座、项目、软件。

                当然计算机远远没有这么简单,教程注重的是原理,通过一些简单的典型模型来教学,能够让你在短期内了解整个计算机体系的大致结构。


                IP属地:广东61楼2014-10-23 14:57
                收起回复
                  2025-08-21 06:42:06
                  广告
                  不感兴趣
                  开通SVIP免广告
                  总体来说已经很专业了,赞一个,楼主什么专业的,计算机还是电子


                  IP属地:陕西来自Android客户端62楼2014-10-23 17:27
                  收起回复


                    IP属地:北京来自Android客户端63楼2014-10-23 19:41
                    收起回复
                      【控制器】
                      控制器顾名思义,是整个CPU的控制中心,用来控制数据的流向,程序的转移。
                      一般来说,控制器包括程序计数器(PC),指令译码器(ID),有时也将指令寄存器(IR)归入到控制器中。
                      总的控制功能是这样实现的:
                      程序计数器负责保存程序执行到的位置,指令寄存器保存当前指令,指令译码器把指令转化成控制字(控制字后面会将)。
                      首先需要知道指令在哪里:
                      一般来说,程序包括三种结构:顺序、分支和循环,其中分支和循环实际上可以由跳转实现,所以程序的执行方式可以归纳为顺序和跳转,对于顺序执行,只需要对程序计数器每次加一个固定的数即可实现,对于跳转,有两种方式实现,一种是绝对跳转,一种是相对跳转,绝对跳转直接给出下一条指令的地址,对程序计数器直接置数,对于相对跳转,则通过程序计数器加上或者减去某个值实现,一般来说大多数情况下用的是相对跳转。
                      程序计数器可以用寄存器、加法器和数据选择器实现

                      如果要顺序执行,则MUX选择常数01,指令所在地址每次加一
                      如果要跳转,则MUX选择下方的通路,下一条指令地址为当前地址加上偏移量。


                      IP属地:广东66楼2014-10-24 19:55
                      回复
                        程序计数器给定了地址就可以把指令从存储器取过来了
                        指令从存储器取来放入指令寄存器中,指令寄存器与一般的寄存器完全一样。

                        (画电路的时候忘记分步截图了


                        IP属地:广东67楼2014-10-24 20:00
                        回复
                          取得了指令还需要对指令进行译码,由于译码后的控制字与数据通路紧密相关,所以必须先确定好数据通路。
                          【数据通路设计】
                          数据通路是关于CPU内部多个组件直接数据的流向通道。
                          数据通路的类型多种多样,有的程序和数据分开,有的不分开,有的所有数据共用一条总线,也就是CPU的内部总线,也有的数据总线分多条。
                          在这里我们采用一种类似于MIPS的数据通路,其中程序、数据的数据线和地址线全都有专用的线,数据在寄存器与运算器、存储器都存在直接的通路,这样能够使得控制较为方便,效率比较高,但是连线比较多,寻址不够灵活。
                          一个大致的通路如下图所示(存储器就是RAM):


                          IP属地:广东68楼2014-10-24 20:16
                          回复
                            (上图的通路中,存储器接受的两路信号分别是数据线和地址线)
                            仔细观察上图不难发现,这种通路无法在一个周期里面实现寄存器简介寻址并参与运算,因为一个周期要么访问存储器,要么进行运算。
                            此外上图无法实现立即数寻址,这是无法忍受的,所以必须要在通路中加入立即数通路。

                            那么问题来了,两个或多个数据汇集到一起怎么办?就像上图红圈的地方。
                            办法是在每个交叉的地方设置“闸门”,也就是数据选择器,从而选择不同的通路。
                            对于存储器,只要提供“是否写入"的信号就能间接确定是否走存储器这条通路。
                            类似于这中闸门的还有许多,就像前面寄存器上面的A、B选择线、寄存器选择线、是否写入寄存器等。
                            把所有的这些控制通路的信号汇集到一起,组合成一个二进制数,就可以通过一个二进制数来控制通路了,这就是控制字!


                            IP属地:广东69楼2014-10-24 20:30
                            收起回复
                              2025-08-21 06:36:06
                              广告
                              不感兴趣
                              开通SVIP免广告
                              通过控制字,可以决定在这个周期里面,用哪些寄存器做为待运算的数、是进行运算还是送入存储器、进行何种运算、是把运算结果还是存储器读出的值送入寄存器、送入哪个寄存器。
                              通过确定以上的信号,就能确定CPU要做的事情了!这就是控制字的作用,而指令可以看做是控制字的压缩码!
                              对于ADD R3,R2,R1,(即R3=R2+R1)这一条指令,实际CPU做的事情就是:
                              在A通道选择R2输出,在B通道选择R1输出
                              不选择立即数
                              存储器不写入
                              运算器选择加法运算
                              选择运算器输出的结果
                              选择R3作为待写入寄存器
                              寄存器组写入信号激活
                              时钟信号上升沿到来!
                              R3的值成功变为R2+R1!


                              IP属地:广东70楼2014-10-24 20:40
                              回复