Lab8 part1report
intro
这个report有三个小exercise
lw、add、
因为在mips中是byte寻址的,也就是说最小单元对应一个byte,但是每个instruction和datamemory是按照4字节一个字的格式存储的,也就说他们的地址每个差4,这样的话每次换到下一个地址相当于+0x100,因此后面的两位是不变化的,所以可以不考虑后两位,直接存前六位。
snake_patterns.asm:
减缓模式切换速度,当累积到一个大数的时候再进行下一次切换,否则蛇会爬得很快。
clock_div:
利用count来进行分频,得到一个比较低的频率。
DispCount:
he counter is large to allow enough time for each LED to fully light up. we could probably increase it a bit further。
chatgpt如是说:
问题 1:
哪些MIPS指令会在ControlUnit信号RegWrite为‘stuck at 0’(即RegWrite始终为0)时产生错误输出?换句话说,哪些MIPS指令依赖于控制信号RegWrite?
解答:
RegWrite信号控制是否将结果写入寄存器文件。当RegWrite信号为0时,任何需要将结果写回寄存器的指令都无法正确执行。这些指令包括:
add
,sub
,and
,or
,slt
等算术与逻辑运算指令,因为它们的结果必须写入寄存器。lw
(加载字),因为它需要将从内存中加载的数据存入寄存器。jal
(跳转并链接),它需要将返回地址写入寄存器$ra
。
如果RegWrite为0,这些指令将无法将结果写入寄存器,导致错误输出。
问题 2:
为什么指令和数据存储器只需要6位地址?(提示:考虑存储器的大小。)
解答:
6位地址表示2^6 = 64个地址空间。如果指令和数据存储器各自的大小是64个字(word),那么6位地址就足够覆盖所有存储单元。因此,6位地址可以访问64个指令或64个数据存储单元,这对于实验的需求来说是足够的。
问题 3:
如你所见,在本次实验中有三个不同的计数器。一个在snake_patterns.asm
文件中,第二个在clock_div
模块中,第三个是用于7段显示器的DispCount
信号。请简要说明这三个计数器/分频器的功能。
解答:
snake_patterns.asm
中的计数器用于控制贪吃蛇的移动速度或模式变化,它决定了何时更新显示的贪吃蛇图案。clock_div
模块中的计数器是一个时钟分频器,用于将输入时钟信号分频到合适的频率,以适应不同的电路模块。DispCount
信号计数器用于控制7段显示器上显示的数字,它确定显示器上的字符切换或刷新频率。