前面的框架基本照书
我现在写我的测试过程
我还只是测试了两条指令, 结果第二条指令读不出来
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)
网友评论