美文网首页
流水线?

流水线?

作者: 萍水间人 | 来源:发表于2019-04-14 16:00 被阅读0次

    前面的框架基本照书

    我现在写我的测试过程

    我还只是测试了两条指令, 结果第二条指令读不出来

    1

    第一条指令读进去了
    但是pcsource 这个信号有问题
    我不知道是不是自己没定义的问题

    2

    将所有能够添加的指令全部添加完之后

    还是pc和npc的问题
    npc已经+4了, 问题是pc并没有被赋值

    继续查看发现
    应该是锁存器的问题, 因为时钟到来之后也没有进行赋值

    重新测试了一些dffe32

    结果发现没有任何问题

    3

    终于解决昨天的的问题了

    原来是信号的问题
    书上的dffe32是低电平复位的, 而老师给的代码中是高电平复位的

    可以看到第一条指令的执行还是很有问题的
    alu的两个选择端口都有问题

    译码似乎没出问题

    现在主要问题就是好多信号我还不知道是干嘛的。。

    4

    如何跟踪一条指令的执行过程呢?

    我们从第一个单元开始看吧

    prog_cnt 单元


    这里PC成功地+4了

    这里第二个单元就开始出问题了

    不明白这里的jpc, bpc为什么会被修改了

    if_stage 这个单元的功能:

    对输入的bpc, jpc, rpc, pc进行选择, 同时pc+4的值进行传递, 还有指令的传递

    至少现在从功能上来说没有任何问题

    inst_stage 单元
    从功能上来说也没有问题

    inst-> dinst
    inst本来还需要接受输入的, 但是由于只有一条指令, 没有后续的输入了, 这一点我们之后可以继续尝试

    pc4->dpc4
    也没有啥问题

    不过注意的是, 这时候已经是第二个时钟周期了

    接下来先看一下寄存器
    注意到寄存器是下降沿的时候读数据

    显然看到下降沿的时候rnb 已经变成02了

    所以我们可以看到在第二个时钟周期, 已经完成译码了

    de_reg单元

    此时可以看到
    daluc为0 做加法
    dimm 为1 加立即数
    drn为2 要写的寄存器为2号

    这还是在第二个时钟周期

    exe_stage单元
    问题来了

    啥都没变化
    这里。 在上一步就出问题了

    真正的问题出在这里

    当然这是我修改之后的
    原因当然是: 一定是在上升沿的时候清零

    这个时候你再看

    第三个周期到来的时候, 所有信号都传送过去了

    那么这个时候。。。
    EXE级的组合电路

    可以看到这时候ALU的两个输入口的数据都没错

    我知道了。。。 原来是ALU定义就不一样。。

    ALU的功能我采用的是老师的, 然后。。
    现在行了

    此处debug

    中间省略一万字。。。。

    现在你可以看到我的第一条指令了

    这是一条addi指令
    addi $2 ,$0 ,5

    我们可以看到在时钟的下降沿读数据(当然这里是读0)
    在第五个周期的上升沿写数据(写入5)

    相关文章

      网友评论

          本文标题:流水线?

          本文链接:https://www.haomeiwen.com/subject/jhwrwqtx.html