缺氧吧 关注:157,160贴子:2,005,252

【直播】8位静态流水线CPU——QDU3000的设计与制造

取消只看楼主收藏回复



IP属地:浙江1楼2020-04-22 02:55回复
    1、有用吗?当然没用了。既不能发电又不能制氧。
    2、能干嘛?能编程跑程序,后续如果有空写个简单的编译器的话能跑部分C语言语句。
    3、包教,但不包会;你敢问我就敢答,你一直问我可以一直答。
    4、设计?不,不设计,想到哪造到哪。
    5、之前b站发过一版,做得不好所以不推荐了,这一版主要是性能以及布线优化,预计性能较上代提升5到10倍。
    6、可以配合教程贴食用tieba.baidu.com/p/6501195445


    IP属地:浙江3楼2020-04-22 02:57
    回复
      指令集(暂定)
      1、由于乘除法器体积过大,红字部分暂时不会加入,但会保留接口,预计在后续版本添加(大概率会打mod)
      2、表格中,指令是按照类型来排序的,但操作码的编码没有按照指令的排列顺序,这是为了方便后续的译码
      3、由于操作码为4位,最多编码16条指令,没有位置了,所以寄存器间的mov指令请用addi指令实现;强制跳转请用等于跳转实现(某个寄存器必定和自身相等,因此就可以做到强制跳转)
      4、除法指令只求商,求余指令只求余数,不支持一条指令同时求商和余数,因为一条指令同时求商和余数需要寄存器堆有2个写端口,比较麻烦
      5、支持“low版”间接寻址,仅可以通过R8或R9来间接访问寄存器堆,且不支持基址+偏移量
      6、由于是静态流水线cpu,所以添加了空操作,在延迟槽不可用时向流水线中填入气泡


      IP属地:浙江4楼2020-04-22 03:13
      收起回复
        设计主频:3倍速下3.75Hz,若超前进位加法器体积过大无法实现,则可能更低;
        通用寄存器:R0~R7,共8个8位寄存器,可读可写;
        间接寄存器:R8、R9,可用于间接访问,同时也可做为普通的寄存器进行直接访问,可读可写;
        输出端口:R10,外接译码器,会将其中的值译码为10进制,可读可写;
        输入端口:R11,接收外部输入,可读不可写;
        指令存储器:32*16bit,最多支持存储32条指令,每条指令16位,指令通过气压传感器进行写入;


        IP属地:浙江6楼2020-04-22 03:41
        回复
          取指模块
          用于每一周期向指令存储器送出正确的PC。若重置标志有效,则令PC置0;否则若当前执行的不是跳转指令,则每周期PC+1,若是跳转指令(跳转标志有效)则令PC=跳转地址。



          IP属地:浙江7楼2020-04-22 04:24
          收起回复
            给出一个大概的框图吧,仅供参考,只是标出大致数据通路,不严谨(特别是流水线部分)


            IP属地:浙江8楼2020-04-22 05:09
            回复
              接下来要造指令存储器了,首先科普一下ROM:只读存储器,这类存储器没有写端口,只能读不能写。我的指令存储器就是ROM,里面存储的内容直接用气压传感器或者开关来给定,程序运行过程中不能修改


              IP属地:浙江来自Android客户端27楼2020-04-22 15:59
              回复
                每条指令是16位,所以用16个气压传感器来表示一条指令

                4个传感器为一组,汇入总线,这就是可以存储一条指令的“指令寄存器”(只读)

                将它复制32份,得到32个16位的存储单元


                IP属地:浙江28楼2020-04-22 16:15
                收起回复
                  接下来要为这32个存储单元建造“读端口”——既数据选择器
                  请参考教程贴141楼的“存储器”读端口部分、以及72楼的“数据选择器”
                  请注意部分信号线没有连接

                  放大部分细节,可以明显看出,“读地址”为0的情况下,0号存储单元,既最上面的存储单元被“选择”了


                  IP属地:浙江30楼2020-04-22 16:47
                  收起回复
                    目前遇到了第一次游戏崩溃,看来还是要勤存档


                    IP属地:浙江来自Android客户端34楼2020-04-22 17:48
                    回复
                      费了半天劲,终于把所有线都连起来了


                      IP属地:浙江35楼2020-04-22 18:21
                      收起回复
                        突然发现了一个巨大的问题
                        我把指令ROM升级成32*16的了,可是跳转指令的跳转地址部分只给了4位,不够表示32个地址。


                        IP属地:浙江来自Android客户端45楼2020-04-24 09:17
                        回复
                          16位的指令长度实在是不够用了,但是如果设计成32位的话,那指令ROM也太大了


                          IP属地:浙江来自Android客户端46楼2020-04-24 09:19
                          回复
                            另一种方式是把跳转指令的功能设计成pc<=pc+address,但这样的话需要占用运算器,目前我打算利用减法来判断小于跳转指令中的两个操作数的大小,运算器是被占用了的


                            IP属地:浙江来自Android客户端47楼2020-04-24 09:23
                            回复
                              如果我把指令长度设置成20位会不会很奇怪


                              IP属地:浙江来自Android客户端48楼2020-04-24 09:27
                              收起回复