如何在MIPS中向指定地址写入数据?TKgate单周期MIPS存储器实现求助
TKgate 1.8 单周期MIPS数据存储器(lw/sw指令)实现指南
核心逻辑梳理
- lw(加载字):关闭
MemWrite,数据存储器根据Address指定的地址读取数据,通过ReadData输出到寄存器堆,最终写入目标寄存器。 - sw(存储字):开启
MemWrite,把WriteData端口传入的寄存器数据,写入Address指定的存储器地址。
TKgate中数据存储器的实操步骤
端口连接
- 将ALU计算出的有效地址(lw/sw的偏移地址+基址寄存器值)接到数据存储器的
Address端口; - sw指令中,把寄存器堆读出的源寄存器数据接到
WriteData端口; - 控制器生成的
MemWrite控制信号接入数据存储器的使能端; - 数据存储器的
ReadData输出接至多路选择器,lw指令时选通该通路,将数据送入寄存器堆完成写入。
- 将ALU计算出的有效地址(lw/sw的偏移地址+基址寄存器值)接到数据存储器的
单周期时序配合
单周期处理器的时钟上升沿触发时:- 若
MemWrite=1(sw指令):数据存储器完成WriteData到Address对应单元的写入操作; - 若
MemWrite=0(lw或其他非存储指令):数据存储器从Address对应单元读出数据,输出到ReadData端口。
- 若
TKgate数据存储器内部结构说明
TKgate的Data Memory是同步读写RAM模块,内部由三部分组成:
- 存储阵列:按32位字为单位划分存储单元,每个单元对应唯一的地址;
- 地址译码器:将输入的
Address信号译码,选中对应的存储单元; - 读写控制逻辑:根据
MemWrite信号切换操作模式:- 写使能时,将
WriteData的32位数据写入选中的存储单元; - 读模式时,把选中单元的32位数据输出到
ReadData端口。
- 写使能时,将
常见问题排查
- sw指令执行后数据未写入:检查
MemWrite信号是否在时钟周期内有效,确认Address是4的倍数(MIPS要求lw/sw地址必须字对齐); - lw指令读回错误数据:验证ALU计算的
Address是否正确,确认MemWrite已置0,检查ReadData到寄存器堆的通路是否导通。
内容的提问来源于stack exchange,提问作者Serg_20
相关产品推荐
相关产品推荐

