|  | 
 
 楼主|
发表于 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)
 
 
 );
 | 
 |