OpenCores
URL https://opencores.org/ocsvn/m1_core/m1_core/trunk

Subversion Repositories m1_core

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 50 to Rev 51
    Reverse comparison

Rev 50 → Rev 51

/trunk/hdl/rtl/m1_core/m1_cpu.v
98,6 → 98,7
reg[2:0] ex_mem_size;
reg[31:0] ex_mem_store_value;
reg[3:0] ex_mem_store_sel; // Byte Selector on Stores
reg[31:0] ex_mem_destold; // Old value for partial rewrite
reg[4:0] ex_mem_destreg;
reg ex_mem_desthi, ex_mem_destlo;
reg[4:0] ex_mem_destsyscon;
814,7 → 815,7
id_ex_load <= 1;
id_ex_store <= 0;
id_ex_size <= `SIZE_LEFT;
id_ex_store_value <= 0;
id_ex_store_value <= GPR[if_id_rt];
id_ex_destreg <= if_id_rt;
id_ex_desthi <= 0;
id_ex_destlo <= 0;
898,7 → 899,7
id_ex_load <= 1;
id_ex_store <= 0;
id_ex_size <= `SIZE_RIGHT;
id_ex_store_value <= 0;
id_ex_store_value <= GPR[if_id_rt];
id_ex_destreg <= if_id_rt;
id_ex_desthi <= 0;
id_ex_destlo <= 0;
1762,6 → 1763,7
ex_mem_load <= id_ex_load;
ex_mem_store <= id_ex_store;
ex_mem_size <= id_ex_size;
ex_mem_destold <= id_ex_store_value;
ex_mem_destreg <= id_ex_destreg;
ex_mem_desthi <= id_ex_desthi;
ex_mem_destlo <= id_ex_destlo;
1815,6 → 1817,46
end
endcase
end
`SIZE_LEFT: begin
case(alu_result_i[1:0])
2'b00: begin
ex_mem_store_value <= {24'b0, id_ex_store_value[31:24]};
ex_mem_store_sel <= 4'b0001;
end
2'b01: begin
ex_mem_store_value <= {16'b0, id_ex_store_value[31:16]};
ex_mem_store_sel <= 4'b0011;
end
2'b10: begin
ex_mem_store_value <= {8'b0, id_ex_store_value[31:8]};
ex_mem_store_sel <= 4'b0111;
end
2'b11: begin
ex_mem_store_value <= id_ex_store_value;
ex_mem_store_sel <= 4'b1111;
end
endcase
end
`SIZE_RIGHT: begin
case(alu_result_i[1:0])
2'b00: begin
ex_mem_store_value <= id_ex_store_value;
ex_mem_store_sel <= 4'b1111;
end
2'b01: begin
ex_mem_store_value <= {id_ex_store_value[23:0], 8'b0};
ex_mem_store_sel <= 4'b1110;
end
2'b10: begin
ex_mem_store_value <= {id_ex_store_value[15:0], 16'b0};
ex_mem_store_sel <= 4'b1100;
end
2'b11: begin
ex_mem_store_value <= {id_ex_store_value[7:0], 24'b0};
ex_mem_store_sel <= 4'b1000;
end
endcase
end
endcase
 
// Not a store
1871,6 → 1913,22
2'b11: mem_wb_value[31:0] <= {{24{dmem_data_i[31]}}, dmem_data_i[31:24]};
endcase
end
`SIZE_LEFT: begin
case(ex_mem_aluout[1:0])
2'b00: mem_wb_value[31:0] <= {dmem_data_i[7:0], ex_mem_destold[23:0]};
2'b01: mem_wb_value[31:0] <= {dmem_data_i[15:0], ex_mem_destold[15:0]};
2'b10: mem_wb_value[31:0] <= {dmem_data_i[23:0], ex_mem_destold[7:0]};
2'b11: mem_wb_value[31:0] <= dmem_data_i;
endcase
end
`SIZE_RIGHT: begin
case(ex_mem_aluout[1:0])
2'b00: mem_wb_value[31:0] <= dmem_data_i;
2'b01: mem_wb_value[31:0] <= {ex_mem_destold[31:24], dmem_data_i[31:8]};
2'b10: mem_wb_value[31:0] <= {ex_mem_destold[31:16], dmem_data_i[31:16]};
2'b11: mem_wb_value[31:0] <= {ex_mem_destold[31:8], dmem_data_i[31:24]};
endcase
end
endcase
 
// For multiplications and divisions the result is 64-bit wide

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.