|
楼主 |
发表于 2014-8-28 00:30:19
|
显示全部楼层
本帖最后由 ran_newstar 于 2014-8-29 16:48 编辑
IF/ID模块也是位于OpenMIPS内部,并不直接与外部的ROM连接,还是通过OpenMIPS模块与ROM连接,你可以读读Ope ...
leishangwen 发表于 2014-8-20 13:26
雷大侠,我还是有点疑问。
图上可以看出ROM有与IF/ID和PC模块连接的。
opemnmips.v代码里
//IF/ID阶段寄存器
if_id if_id0(
.clk(clk),
.rst(rst),
.stall(stall),
.flush(flush),
.if_pc(pc), //从PC来,用了pc,根据图对应的PC也应该有pc,PC的确有pc,能对应
.if_inst(rom_data_i), //从ROM来,用了rom_data_i,根据图对应的ROM也应该有这个rom_data_i,没对应
.id_pc(id_pc_i),
.id_inst(id_inst_i)
);
//pc_reg例化
pc_reg pc_reg0(
.clk(clk),
.rst(rst),
.stall(stall),
.flush(flush),
.new_pc(new_pc),
.branch_flag_i(id_branch_flag_o),
.branch_target_address_i(branch_target_address),
.pc(pc)
//这里与IF/ID和ROM连,与IF/ID能对应,与ROM不能对应,ROM用了inst_addr
);
assign rom_addr_o = pc;
在openmips_min_sopc.v代码里:
openmips openmips0(
.clk(clk),
.rst(rst),
.rom_addr_o(inst_addr), //到ROM去,用了inst_addr,可以与ROM对应
.rom_data_i(inst), //从ROM而来,用了inst,可以与ROM对应
.int_i(int),
.ram_we_o(mem_we_i),
.ram_addr_o(mem_addr_i),
.ram_sel_o(mem_sel_i),
.ram_data_o(mem_data_i),
.ram_data_i(mem_data_o),
.timer_int_o(timer_int)
);
inst_rom inst_rom0(
.rst(rst),
.addr(inst_addr),
.inst(inst)
); |
|