📄 nnarm.prog
字号:
1、发现一个问题,当branch时,如果if正在等待prefetch,则会导致branch给出的pc更新信号丢失。另外改正了一个敏感表的问题,存为sARM01_05_25_1.zip
--------------------------------------------------------------------------
--------------------------------------------------------------------------
2001 5 28
1/重新书写了IF模块,使得当branch时的更新pc信号直接进入IF的寄存器,不再受到prefetchwait的影响,对于非branch的情况则与从前相同,由于prefetch在miss时自己记录了miss地址,所以可以在没有得到完成load的情况下给出新地址。但是又发现新问题,CMP应当是不回写减法结果的,存为sARM01_05_28_1.zip
2/改写decoder,因为有些指令不写reg,如CMP,而decoder只在对alu段的信号中考虑了这一点,并没有在mem段的信号中考虑这一点,所以改正后存为sARM01_05_28_2.zip,但是load什么都没有load近来,看看怎么回事
--------------------------------------------------------------------------
--------------------------------------------------------------------------
2001 5 29
1/终于找到了datacache的问题,对于PrevAccess和ReplaceEntry,由于都是存储器类型,所以应该是元素宽度为[1:0],个数为[3:0],而不是[1:0],改正后存为sARM01_05_29_1.zip,但是还有问题,最后一次load还是不行。
2/终于找到了load不进来的问题,主要是因为read in和write back结束后,没有修改tag,导致总是不能match up,不停的重新access,无法得到结果.修正后存为sARM01_05_29_2.zip
--------------------------------------------------------------------------
--------------------------------------------------------------------------
2001 6 5
1/为了运行elf文件,将pc初始地址改为0x8000,而SDT的linker中给出的代码段基地址为0x8000,数据段地址为0x0000,存为sARM01_06_05_1.zip
指令cache出了问题
--------------------------------------------------------------------------
--------------------------------------------------------------------------
2001 6 6
1/不是cache出了问题,将prefetchbuffer中FetchAddress的初始化改为用pc,加入了为fft专门写的benchmark.
发现一个问题:当作cmp时,armulator不会有carry,但是nnARM有carry.在作减法时什么时候会和不会carry
问题的答案是:当作减法时,结果为负时不carry,当非负时carry
改动:1 减法的carry值等于加法器carry的反
2 将乘法独立出来单独由一个assign完成
存为sARM01_06_06_2.zip
改动decoder使其在碰到从mem forward的情况时结束发射,使得插入一个bulk.
data cache中的dirty和valid等用4位来寻址,也就是有16个,现在却用replace entry来寻址,也就是用2位寻址,故不行.
--------------------------------------------------------------------------
--------------------------------------------------------------------------
2001 6 7
1/改动了昨天最后一个问题,又发现了新的问题,出了ALU和msr之外,应该不会有什么指令改变cpsr.看看文档吧
问题解决了,不是因为decoder有错,而是因为MEM忘记处理MEMPSRType_WriteConditionCode,加上
在cachecontroller中的writeback状态下,所有的地址生成都应该用WBAddress,但是发现有用RIAddress,改正.
存为sARM01_06_07_1.zip
又改正一个问题,writeback时地址生成有错,原来用replacecontent,现在改用replaceentry来寻址.
--------------------------------------------------------------------------
--------------------------------------------------------------------------
2001 6 8
1/又进行了多个测试,都没有问题,存为sARM01_06_08_1.zip
--------------------------------------------------------------------------
--------------------------------------------------------------------------
2001 6 9
1/又发现问题,ALUComb中的带carry的加减法没有真正使用carry.而是定为1'b1.
--------------------------------------------------------------------------
--------------------------------------------------------------------------
2001 6 11
1修改ALUComb中的带carry的加减操作,使之可以使用上一条指令的carry.存为sARM01_06_11_1.zip
2增加了ALUShell中和nnARM中对上一条指令的carry的支持
在测试jump时有问题,cmp中似乎减法不应该对carry求反,
--------------------------------------------------------------------------
--------------------------------------------------------------------------
2001 6 12
1改正昨天问题,又发现新问题,对于不带s标志的alu指令仍然设置了cpsr,原因是在decoder处理时只给出了有s时的情况,而没有s时会使用前面设的值,而在前面的两种情况中都毫无理由的设置了psrthread的微操作.改正后运行
--------------------------------------------------------------------------
--------------------------------------------------------------------------
2001 6 14
1增加了对SWI的支持,但是还没有输出状态转换信号到两个寄存器文件,而且还没有差错,存为sARM01_06_14_1.zip
--------------------------------------------------------------------------
--------------------------------------------------------------------------
2001 6 15
1 输出状态信号到寄存器文件并查错,存为sARM01_06_15_1.zip
2 调试成功,存为sARM01_06_15_2.zip
--------------------------------------------------------------------------
--------------------------------------------------------------------------
2001 6.27
1 改正了一个小错误,mul的形参是33和32位的,但是实参是31位的,改正之,可以综合。存在以下问题:
1 barrelshifter 的out_carry是有用的,但是没有驱动 ok
2 没有按照arm7vc.pdf中对于flags的设置进行设置 ok
3 据说还有一个latch在alucomb中。
4 对于shift,还有reg作移位量时的特殊情况
--------------------------------------------------------------------------
--------------------------------------------------------------------------
2001 7 3
1 barrel shift中的out_carry有了驱动,存为sARM01_07_03_1.zip
2 解决了6 27的问题1 2, 问题3已经发问,问题4还没有解决,存为sARM01_07_03_2.zip
--------------------------------------------------------------------------
--------------------------------------------------------------------------
2001 7 4
1 除了问题3还没有解决外,全部ok,但是还没有测试,存为sARM01_07_04_1.zip
2 进行测试,发现以下问题,RRX只发生在ope2是reg,而且shift count为imm时,改正后存为sARM01_07_04_2.zip
3 经过完全测试和整理,得到可以跑全部testbench的sARM01_07_04_3.zip
--------------------------------------------------------------------------
--------------------------------------------------------------------------
2001 7 6
1 解决了所有的综合问题,存为sARM01_07_06_1.zip
--------------------------------------------------------------------------
--------------------------------------------------------------------------
2001 7 11
1 加法器改为一级,存为sARM01_07_11_1.zip
--------------------------------------------------------------------------
--------------------------------------------------------------------------
2001 7 12
1 Jerry_Hsu发现SecondWriteBus重复定义,删去,并存为sARM01_07_12_2.zip
--------------------------------------------------------------------------
--------------------------------------------------------------------------
2001 7 17
1 修改和注释Thumb_2_nnARM.v,存为sARM01_07_17_2.zip
--------------------------------------------------------------------------
--------------------------------------------------------------------------
2001 7 19
1 正在添加Thumb支持,已经到了Decoder_ARM中对于BX的处理,还要干三件事情
1 添加对ALUPSRType_ModifyThumbState的支持 ok
2 继续处理PC relatvie的问题 ok
3 处理因为Thumb造成的不同语义,如condition 和uncondition branch中对于off的处理 ok
存为sARM01_07_19_1.zip
2 完成以上改进,存为sARM01_07_19_2.zip,但是还有以下问题
1 load address的PC+4要清bit 1
2 pc relative load的PC+4也要清bit 1
3 解决以上问题,存为sARM01_07_19_3.zip
4 改正错误,可以运行Thumb,但是仍然不支持long branch with link,存为sARM01_07_19_4.zip
--------------------------------------------------------------------------
--------------------------------------------------------------------------
2001 7 20
1 已经支持long branch with link, 但是LR的问题还没有解决,存为sARM01_07_20_1.zip
2 解决了LR的问题,存为sARM01_07_20_2.zip
--------------------------------------------------------------------------
--------------------------------------------------------------------------
2001 7 23
1 去掉几个include,还有在InstructionPrefetch中防止地址为Z。存为sARM01_07_23_1.zip
2 将$time()的括号去掉,得到sARM01_07_23_2.zip
--------------------------------------------------------------------------
--------------------------------------------------------------------------
2001 7 28
1 关于CPSR和SPSR的新鲜度, 有于他们很有可能在流水线中被更改,所以所有使用CPSR的地方(寄存器文件,中断)都应该使用流水线中的最新CPSR和SPSR,而流水线最好在ALU结束时输出CPSR和SPSR的最新版本,不管当前是什么指令。这样就可以一直使用alu末端的CPSR,
--------------------------------------------------------------------------
--------------------------------------------------------------------------
2001 7 30
1 改正了7月28的问题,还没有测试,存为sARM01_07_30_1.zip
2 经过测试,存为sARM01_07_30_2.zip
3 还有一个问题,当有跳转时,必须清除decoder中的状态
ALUMisc[8]转义为exception
ALUMisc[13:9]为exception state
流水线中必须制定可不可以改变cpsr的规则,
4 完成了中断的处理,但是还没有改正3的问题,存为sARM01_07_30_3.zip
5 终于可以跑所有的以前的例子了,但是还没有找到其他的可以支持SWI和中断处理的例子,存为sARM01_07_30_4.zip
--------------------------------------------------------------------------
--------------------------------------------------------------------------
2001 8 27
1 完成了最普通的情况下的LDM down。存为sARM01_08_27_1.zip,ALUMisc[14]为delay branch,ALUMisc[15]为store delay branch target
--------------------------------------------------------------------------
--------------------------------------------------------------------------
2001 8 28
1 在昨天的基础上加入了alushell和mem stage的支持
发现一个问题,中断不理会整个流水线的状态,直接进入,会导致正在译码的指令的中断,应该先判断当前译码指令是否已经完成。
改完错,存为sARM01_08_28_1.zip
还有一个问题,当load pc时,应该向字或者半字靠齐
2 终于可以load进来了,但是不停的进入r7和r6,why? 存为sARM01_08_28_2.zip
--------------------------------------------------------------------------
--------------------------------------------------------------------------
2001 8 29
1 终于可以完成包含pc在内的ldm,但是还需要考虑thumb对pc的影响,存为sARM01_08_29_1.zip
又发现一个问题,ldm to PC还只支持ARM 状态,不支持Thumb状态
存为sARM01_08_29_2.zip
2 支持了回写spsr_mode to cpsr,存为sARM01_08_29_3.zip
3 寄存器文件支持了对user bank 的访问,存为sARM01_08_29_4.zip
4 ALUMisc[16]定义为访问user bank,已经完成代码的编写,并改正语法错误,但是还没有写测试程序,存为sARM01_08_29_5.zip
--------------------------------------------------------------------------
--------------------------------------------------------------------------
2001 8 30
1 完成了递增ldm的设计,测试通过,存为sARM01_08_30_1.zip
还有以下问题
== 1 当有跳转时,必须清除decoder中的状态
2 中断不理会整个流水线的状态,直接进入,会导致正在译码的指令的中断,应该先判断当前译码指令是否已经完成。
== 3 ldm to pc时必须考虑ARM和Thumb状态对低两位地址的影响
== 4 整个设计中存在Z值。
5 选择0和4应该使用IfCurrentRegAccessByLDMSTM作为表达式的一部分
== 6 stm pc
2 完成了STM的支持,无语法错,存为sARM01_08_30_2.zip
3 终于通过测试,完全无错,存为sARM01_08_30_3.zip
--------------------------------------------------------------------------
--------------------------------------------------------------------------
2001 8 31
1 支持了LDM to PC under thumb 正在测试,ARM状态下的已经测试通过,存为sARM01_08_31_1.zip
== 但是,Thumb 状态下还没有支持
--------------------------------------------------------------------------
--------------------------------------------------------------------------
2001 9 1
1 发现Thumb/ARM之间的转换只可能出现在BX和异常进入和退出时,只能是在ALUShell阶段,改正完成可以运行tblock例子,存为sARM01_09_01_1.zip
--------------------------------------------------------------------------
--------------------------------------------------------------------------
2001 9 3
1 处理了8 30的问题1,存为sARM01_09_03_1.zip
2 改为使用Wishbone,注意敏感表的问题,同时还有仲裁器输出的使用,还有存储器的有效Byte,存为sARM01_09_03_2.zip
--------------------------------------------------------------------------
--------------------------------------------------------------------------
2001 9 4
1 改正了所有的语法错误,存为sARM01_09_04_1.zip
2 仍然存在错误,存为sARM01_09_04_2.zip
3 终于可以支持wishbone了,存为sARM01_09_04_3.zip
--------------------------------------------------------------------------
--------------------------------------------------------------------------
2001 9 5
1 去掉设计中的Z,改正语法错误并存为sARM01_09_05_1.zip
2 成功的运行了所有的testbench,存为sARM01_09_05_2.zip
--------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -