diff --git a/PipelineProcessor.sim/sim_1/behav/xsim/xsim.dir/test_cpu_behav/obj/xsim_2.c b/PipelineProcessor.sim/sim_1/behav/xsim/xsim.dir/test_cpu_behav/obj/xsim_2.c index fc1db81..46ffc81 100644 --- a/PipelineProcessor.sim/sim_1/behav/xsim/xsim.dir/test_cpu_behav/obj/xsim_2.c +++ b/PipelineProcessor.sim/sim_1/behav/xsim/xsim.dir/test_cpu_behav/obj/xsim_2.c @@ -61,7 +61,6 @@ IKI_DLLESPEC extern void execute_312(char*, char *); IKI_DLLESPEC extern void execute_313(char*, char *); IKI_DLLESPEC extern void execute_237(char*, char *); IKI_DLLESPEC extern void execute_238(char*, char *); -IKI_DLLESPEC extern void execute_309(char*, char *); IKI_DLLESPEC extern void execute_310(char*, char *); IKI_DLLESPEC extern void execute_311(char*, char *); IKI_DLLESPEC extern void vlog_simple_process_execute_0_fast_no_reg_no_agg(char*, char*, char*); @@ -276,18 +275,18 @@ IKI_DLLESPEC extern void execute_145(char*, char *); IKI_DLLESPEC extern void execute_278(char*, char *); IKI_DLLESPEC extern void execute_148(char*, char *); IKI_DLLESPEC extern void execute_293(char*, char *); -IKI_DLLESPEC extern void execute_294(char*, char *); IKI_DLLESPEC extern void execute_150(char*, char *); IKI_DLLESPEC extern void execute_301(char*, char *); IKI_DLLESPEC extern void execute_152(char*, char *); IKI_DLLESPEC extern void execute_153(char*, char *); IKI_DLLESPEC extern void execute_303(char*, char *); -IKI_DLLESPEC extern void execute_155(char*, char *); IKI_DLLESPEC extern void execute_304(char*, char *); +IKI_DLLESPEC extern void execute_155(char*, char *); IKI_DLLESPEC extern void execute_305(char*, char *); IKI_DLLESPEC extern void execute_306(char*, char *); IKI_DLLESPEC extern void execute_307(char*, char *); IKI_DLLESPEC extern void execute_308(char*, char *); +IKI_DLLESPEC extern void execute_309(char*, char *); IKI_DLLESPEC extern void execute_161(char*, char *); IKI_DLLESPEC extern void execute_162(char*, char *); IKI_DLLESPEC extern void execute_163(char*, char *); @@ -323,12 +322,12 @@ IKI_DLLESPEC extern void transaction_262(char*, char*, unsigned, unsigned, unsig IKI_DLLESPEC extern void transaction_293(char*, char*, unsigned, unsigned, unsigned); IKI_DLLESPEC extern void transaction_322(char*, char*, unsigned, unsigned, unsigned); IKI_DLLESPEC extern void transaction_323(char*, char*, unsigned, unsigned, unsigned); -funcp funcTab[269] = {(funcp)execute_2, (funcp)execute_158, (funcp)execute_159, (funcp)execute_312, (funcp)execute_313, (funcp)execute_237, (funcp)execute_238, (funcp)execute_309, (funcp)execute_310, (funcp)execute_311, (funcp)vlog_simple_process_execute_0_fast_no_reg_no_agg, (funcp)vlog_const_rhs_process_execute_0_fast_no_reg_no_agg, (funcp)execute_235, (funcp)execute_236, (funcp)execute_165, (funcp)execute_8, (funcp)execute_9, (funcp)execute_10, (funcp)execute_11, (funcp)execute_12, (funcp)execute_13, (funcp)execute_14, (funcp)execute_15, (funcp)execute_16, (funcp)execute_17, (funcp)execute_18, (funcp)execute_19, (funcp)execute_20, (funcp)execute_21, (funcp)execute_22, (funcp)execute_24, (funcp)execute_25, (funcp)execute_26, (funcp)execute_27, (funcp)execute_28, (funcp)execute_29, (funcp)execute_30, (funcp)execute_31, (funcp)execute_32, (funcp)execute_33, (funcp)execute_34, (funcp)execute_35, (funcp)execute_36, (funcp)execute_37, (funcp)execute_38, (funcp)execute_39, (funcp)execute_40, (funcp)execute_41, (funcp)execute_42, (funcp)execute_43, (funcp)execute_44, (funcp)execute_45, (funcp)execute_46, (funcp)execute_47, (funcp)execute_48, (funcp)execute_49, (funcp)execute_50, (funcp)execute_51, (funcp)execute_52, (funcp)execute_53, (funcp)execute_54, (funcp)execute_55, (funcp)execute_56, (funcp)execute_57, (funcp)execute_58, (funcp)execute_59, (funcp)execute_60, (funcp)execute_61, (funcp)execute_62, (funcp)execute_63, (funcp)execute_64, (funcp)execute_65, (funcp)execute_66, (funcp)execute_67, (funcp)execute_68, (funcp)execute_69, (funcp)execute_70, (funcp)execute_71, (funcp)execute_72, (funcp)execute_73, (funcp)execute_74, (funcp)execute_75, (funcp)execute_76, (funcp)execute_77, (funcp)execute_78, (funcp)execute_79, (funcp)execute_80, (funcp)execute_81, (funcp)execute_82, (funcp)execute_83, (funcp)execute_84, (funcp)execute_85, (funcp)execute_86, (funcp)execute_87, (funcp)execute_88, (funcp)execute_89, (funcp)execute_90, (funcp)execute_91, (funcp)execute_92, (funcp)execute_93, (funcp)execute_94, (funcp)execute_95, (funcp)execute_96, (funcp)execute_97, (funcp)execute_98, (funcp)execute_99, (funcp)execute_100, (funcp)execute_101, (funcp)execute_102, (funcp)execute_103, (funcp)execute_104, (funcp)execute_105, (funcp)execute_106, (funcp)execute_107, (funcp)execute_108, (funcp)execute_109, (funcp)execute_110, (funcp)execute_111, (funcp)execute_112, (funcp)execute_113, (funcp)execute_114, (funcp)execute_115, (funcp)execute_116, (funcp)execute_117, (funcp)execute_118, (funcp)execute_119, (funcp)execute_120, (funcp)execute_129, (funcp)execute_166, (funcp)execute_167, (funcp)execute_171, (funcp)execute_172, (funcp)execute_181, (funcp)execute_182, (funcp)execute_183, (funcp)execute_184, (funcp)execute_185, (funcp)execute_193, (funcp)execute_194, (funcp)execute_195, (funcp)execute_196, (funcp)execute_197, (funcp)execute_198, (funcp)execute_199, (funcp)execute_200, (funcp)execute_201, (funcp)execute_202, (funcp)execute_203, (funcp)execute_204, (funcp)execute_205, (funcp)execute_206, (funcp)execute_207, (funcp)execute_208, (funcp)execute_209, (funcp)execute_210, (funcp)execute_211, (funcp)execute_212, (funcp)execute_213, (funcp)execute_214, (funcp)execute_215, (funcp)execute_216, (funcp)execute_217, (funcp)execute_218, (funcp)execute_219, (funcp)execute_220, (funcp)execute_221, (funcp)execute_222, (funcp)execute_223, (funcp)execute_224, (funcp)execute_225, (funcp)execute_226, (funcp)execute_227, (funcp)execute_228, (funcp)execute_231, (funcp)execute_135, (funcp)execute_239, (funcp)execute_241, (funcp)execute_242, (funcp)execute_134, (funcp)execute_142, (funcp)execute_243, (funcp)execute_244, (funcp)execute_245, (funcp)execute_246, (funcp)execute_247, (funcp)execute_248, (funcp)execute_249, (funcp)execute_250, (funcp)execute_251, (funcp)execute_268, (funcp)execute_274, (funcp)execute_255, (funcp)execute_256, (funcp)execute_257, (funcp)execute_258, (funcp)execute_259, (funcp)execute_260, (funcp)execute_261, (funcp)execute_262, (funcp)execute_263, (funcp)execute_264, (funcp)execute_265, (funcp)execute_266, (funcp)execute_267, (funcp)execute_139, (funcp)execute_140, (funcp)execute_269, (funcp)execute_270, (funcp)execute_273, (funcp)execute_146, (funcp)execute_275, (funcp)execute_276, (funcp)execute_277, (funcp)execute_279, (funcp)execute_280, (funcp)execute_286, (funcp)execute_289, (funcp)execute_290, (funcp)execute_145, (funcp)execute_278, (funcp)execute_148, (funcp)execute_293, (funcp)execute_294, (funcp)execute_150, (funcp)execute_301, (funcp)execute_152, (funcp)execute_153, (funcp)execute_303, (funcp)execute_155, (funcp)execute_304, (funcp)execute_305, (funcp)execute_306, (funcp)execute_307, (funcp)execute_308, (funcp)execute_161, (funcp)execute_162, (funcp)execute_163, (funcp)execute_164, (funcp)execute_314, (funcp)execute_315, (funcp)execute_316, (funcp)execute_317, (funcp)execute_318, (funcp)execute_319, (funcp)vlog_transfunc_eventcallback, (funcp)transaction_61, (funcp)transaction_63, (funcp)transaction_70, (funcp)transaction_71, (funcp)transaction_73, (funcp)transaction_74, (funcp)transaction_77, (funcp)transaction_78, (funcp)transaction_79, (funcp)transaction_80, (funcp)transaction_81, (funcp)transaction_85, (funcp)transaction_89, (funcp)transaction_107, (funcp)transaction_108, (funcp)transaction_153, (funcp)transaction_188, (funcp)transaction_189, (funcp)transaction_214, (funcp)transaction_261, (funcp)transaction_262, (funcp)transaction_293, (funcp)transaction_322, (funcp)transaction_323}; -const int NumRelocateId= 269; +funcp funcTab[268] = {(funcp)execute_2, (funcp)execute_158, (funcp)execute_159, (funcp)execute_312, (funcp)execute_313, (funcp)execute_237, (funcp)execute_238, (funcp)execute_310, (funcp)execute_311, (funcp)vlog_simple_process_execute_0_fast_no_reg_no_agg, (funcp)vlog_const_rhs_process_execute_0_fast_no_reg_no_agg, (funcp)execute_235, (funcp)execute_236, (funcp)execute_165, (funcp)execute_8, (funcp)execute_9, (funcp)execute_10, (funcp)execute_11, (funcp)execute_12, (funcp)execute_13, (funcp)execute_14, (funcp)execute_15, (funcp)execute_16, (funcp)execute_17, (funcp)execute_18, (funcp)execute_19, (funcp)execute_20, (funcp)execute_21, (funcp)execute_22, (funcp)execute_24, (funcp)execute_25, (funcp)execute_26, (funcp)execute_27, (funcp)execute_28, (funcp)execute_29, (funcp)execute_30, (funcp)execute_31, (funcp)execute_32, (funcp)execute_33, (funcp)execute_34, (funcp)execute_35, (funcp)execute_36, (funcp)execute_37, (funcp)execute_38, (funcp)execute_39, (funcp)execute_40, (funcp)execute_41, (funcp)execute_42, (funcp)execute_43, (funcp)execute_44, (funcp)execute_45, (funcp)execute_46, (funcp)execute_47, (funcp)execute_48, (funcp)execute_49, (funcp)execute_50, (funcp)execute_51, (funcp)execute_52, (funcp)execute_53, (funcp)execute_54, (funcp)execute_55, (funcp)execute_56, (funcp)execute_57, (funcp)execute_58, (funcp)execute_59, (funcp)execute_60, (funcp)execute_61, (funcp)execute_62, (funcp)execute_63, (funcp)execute_64, (funcp)execute_65, (funcp)execute_66, (funcp)execute_67, (funcp)execute_68, (funcp)execute_69, (funcp)execute_70, (funcp)execute_71, (funcp)execute_72, (funcp)execute_73, (funcp)execute_74, (funcp)execute_75, (funcp)execute_76, (funcp)execute_77, (funcp)execute_78, (funcp)execute_79, (funcp)execute_80, (funcp)execute_81, (funcp)execute_82, (funcp)execute_83, (funcp)execute_84, (funcp)execute_85, (funcp)execute_86, (funcp)execute_87, (funcp)execute_88, (funcp)execute_89, (funcp)execute_90, (funcp)execute_91, (funcp)execute_92, (funcp)execute_93, (funcp)execute_94, (funcp)execute_95, (funcp)execute_96, (funcp)execute_97, (funcp)execute_98, (funcp)execute_99, (funcp)execute_100, (funcp)execute_101, (funcp)execute_102, (funcp)execute_103, (funcp)execute_104, (funcp)execute_105, (funcp)execute_106, (funcp)execute_107, (funcp)execute_108, (funcp)execute_109, (funcp)execute_110, (funcp)execute_111, (funcp)execute_112, (funcp)execute_113, (funcp)execute_114, (funcp)execute_115, (funcp)execute_116, (funcp)execute_117, (funcp)execute_118, (funcp)execute_119, (funcp)execute_120, (funcp)execute_129, (funcp)execute_166, (funcp)execute_167, (funcp)execute_171, (funcp)execute_172, (funcp)execute_181, (funcp)execute_182, (funcp)execute_183, (funcp)execute_184, (funcp)execute_185, (funcp)execute_193, (funcp)execute_194, (funcp)execute_195, (funcp)execute_196, (funcp)execute_197, (funcp)execute_198, (funcp)execute_199, (funcp)execute_200, (funcp)execute_201, (funcp)execute_202, (funcp)execute_203, (funcp)execute_204, (funcp)execute_205, (funcp)execute_206, (funcp)execute_207, (funcp)execute_208, (funcp)execute_209, (funcp)execute_210, (funcp)execute_211, (funcp)execute_212, (funcp)execute_213, (funcp)execute_214, (funcp)execute_215, (funcp)execute_216, (funcp)execute_217, (funcp)execute_218, (funcp)execute_219, (funcp)execute_220, (funcp)execute_221, (funcp)execute_222, (funcp)execute_223, (funcp)execute_224, (funcp)execute_225, (funcp)execute_226, (funcp)execute_227, (funcp)execute_228, (funcp)execute_231, (funcp)execute_135, (funcp)execute_239, (funcp)execute_241, (funcp)execute_242, (funcp)execute_134, (funcp)execute_142, (funcp)execute_243, (funcp)execute_244, (funcp)execute_245, (funcp)execute_246, (funcp)execute_247, (funcp)execute_248, (funcp)execute_249, (funcp)execute_250, (funcp)execute_251, (funcp)execute_268, (funcp)execute_274, (funcp)execute_255, (funcp)execute_256, (funcp)execute_257, (funcp)execute_258, (funcp)execute_259, (funcp)execute_260, (funcp)execute_261, (funcp)execute_262, (funcp)execute_263, (funcp)execute_264, (funcp)execute_265, (funcp)execute_266, (funcp)execute_267, (funcp)execute_139, (funcp)execute_140, (funcp)execute_269, (funcp)execute_270, (funcp)execute_273, (funcp)execute_146, (funcp)execute_275, (funcp)execute_276, (funcp)execute_277, (funcp)execute_279, (funcp)execute_280, (funcp)execute_286, (funcp)execute_289, (funcp)execute_290, (funcp)execute_145, (funcp)execute_278, (funcp)execute_148, (funcp)execute_293, (funcp)execute_150, (funcp)execute_301, (funcp)execute_152, (funcp)execute_153, (funcp)execute_303, (funcp)execute_304, (funcp)execute_155, (funcp)execute_305, (funcp)execute_306, (funcp)execute_307, (funcp)execute_308, (funcp)execute_309, (funcp)execute_161, (funcp)execute_162, (funcp)execute_163, (funcp)execute_164, (funcp)execute_314, (funcp)execute_315, (funcp)execute_316, (funcp)execute_317, (funcp)execute_318, (funcp)execute_319, (funcp)vlog_transfunc_eventcallback, (funcp)transaction_61, (funcp)transaction_63, (funcp)transaction_70, (funcp)transaction_71, (funcp)transaction_73, (funcp)transaction_74, (funcp)transaction_77, (funcp)transaction_78, (funcp)transaction_79, (funcp)transaction_80, (funcp)transaction_81, (funcp)transaction_85, (funcp)transaction_89, (funcp)transaction_107, (funcp)transaction_108, (funcp)transaction_153, (funcp)transaction_188, (funcp)transaction_189, (funcp)transaction_214, (funcp)transaction_261, (funcp)transaction_262, (funcp)transaction_293, (funcp)transaction_322, (funcp)transaction_323}; +const int NumRelocateId= 268; void relocate(char *dp) { - iki_relocate(dp, "xsim.dir/test_cpu_behav/xsim.reloc", (void **)funcTab, 269); + iki_relocate(dp, "xsim.dir/test_cpu_behav/xsim.reloc", (void **)funcTab, 268); /*Populate the transaction function pointer field in the whole net structure */ } diff --git a/PipelineProcessor.sim/sim_1/behav/xsim/xsim.dir/test_cpu_behav/xsim.mem b/PipelineProcessor.sim/sim_1/behav/xsim/xsim.dir/test_cpu_behav/xsim.mem index bbd5aab..5e04a5c 100644 Binary files a/PipelineProcessor.sim/sim_1/behav/xsim/xsim.dir/test_cpu_behav/xsim.mem and b/PipelineProcessor.sim/sim_1/behav/xsim/xsim.dir/test_cpu_behav/xsim.mem differ diff --git a/PipelineProcessor.srcs/sources_1/new/CPU.v b/PipelineProcessor.srcs/sources_1/new/CPU.v index e3adab6..6d3d7bb 100644 --- a/PipelineProcessor.srcs/sources_1/new/CPU.v +++ b/PipelineProcessor.srcs/sources_1/new/CPU.v @@ -74,7 +74,7 @@ module CPU ( wire [4:0] WB_register_write_address; // Out of hazard control - wire [1:0] hazard_IFID_source; + wire hazard_IFID_source; wire hazard_IDEX_source; wire hazard_IF_need_stall; diff --git a/PipelineProcessor.srcs/sources_1/new/DataMemory.v b/PipelineProcessor.srcs/sources_1/new/DataMemory.v index e6315d5..1eb3ba5 100644 --- a/PipelineProcessor.srcs/sources_1/new/DataMemory.v +++ b/PipelineProcessor.srcs/sources_1/new/DataMemory.v @@ -6,7 +6,7 @@ module DataMemory ( input [31:0] address, input write_enable, input [31:0] write_data, - output reg [31:0] read_data, + output [31:0] read_data, output [31:0] bcd_hardwire ); parameter integer MEM_SIZE_IN_WORD = 64; @@ -16,7 +16,9 @@ module DataMemory ( reg [31:0] memory_data[MEM_SIZE_IN_WORD + StartAddressInWord - 1 : StartAddressInWord]; - assign bcd_hardwire = memory_data[StartAddressInWord + 4]; + assign bcd_hardwire = memory_data[StartAddressInWord+4]; + + assign read_data = memory_data[address[31:2]]; integer i; @@ -35,7 +37,6 @@ module DataMemory ( if (write_enable) begin memory_data[address[31:2]] <= write_data; end - read_data <= memory_data[address[31:2]]; end end endmodule diff --git a/PipelineProcessor.srcs/sources_1/new/HazardUnit.v b/PipelineProcessor.srcs/sources_1/new/HazardUnit.v index 0ad1208..aa678d5 100644 --- a/PipelineProcessor.srcs/sources_1/new/HazardUnit.v +++ b/PipelineProcessor.srcs/sources_1/new/HazardUnit.v @@ -3,7 +3,7 @@ module HazardUnit ( input [1:0] PC_jump, input is_loadword, input PC_branch, - output [1:0] IFID_source, + output IFID_source, output IDEX_source, output IF_need_stall ); @@ -11,10 +11,9 @@ module HazardUnit ( wire is_jump; assign is_jump = PC_jump == 2'b01 || PC_jump == 2'b10; -assign IFID_source = (is_loadword == 1'b1) ? 2'b10 : - (PC_branch == 1'b1 || is_jump == 1'b1) ? 2'b01 : 2'b00; +assign IFID_source = (PC_branch == 1'b1 || is_jump == 1'b1 || is_loadword == 1'b1) ? 1'b1 : 1'b0; -assign IDEX_source = (is_loadword == 1'b1 || PC_branch == 1'b1 || is_jump == 1'b1) ? 1 : 0; +assign IDEX_source = (PC_branch == 1'b1 || is_jump == 1'b1) ? 1'b1 : 1'b0; -assign IF_need_stall = (is_loadword == 1'b1) ? 1 : 0; +assign IF_need_stall = (is_loadword == 1'b1) ? 1'b1 : 1'b0; endmodule diff --git a/PipelineProcessor.srcs/sources_1/new/InstDecode.v b/PipelineProcessor.srcs/sources_1/new/InstDecode.v index 3bb217a..3b817cf 100644 --- a/PipelineProcessor.srcs/sources_1/new/InstDecode.v +++ b/PipelineProcessor.srcs/sources_1/new/InstDecode.v @@ -6,7 +6,7 @@ module InstDecode ( input [31:0] prev_fetched_instruction, input [31:0] prev_PC_plus_4, // For hazard unit - input [1:0] IFIDSrc, + input IFIDSrc, // From WB stage input WB_write_enable, input [4:0] WB_write_address, @@ -121,24 +121,13 @@ module InstDecode ( IFID_instruction <= 32'h00000000; IFID_PC_plus_4 <= 32'h00000000; end else begin - case (IFIDSrc) - 2'b00: begin - IFID_instruction <= prev_fetched_instruction; - IFID_PC_plus_4 <= prev_PC_plus_4; - end - 2'b01: begin - IFID_instruction <= 32'h00000000; - IFID_PC_plus_4 <= 32'h00000000; - end - 2'b10: begin - IFID_instruction <= IFID_instruction; - IFID_PC_plus_4 <= IFID_PC_plus_4; - end - default: begin - IFID_instruction <= 32'h00000000; - IFID_PC_plus_4 <= 32'h00000000; - end - endcase + if (IFIDSrc == 1'b1) begin + IFID_instruction <= 32'h00000000; + IFID_PC_plus_4 <= 32'h00000000; + end else begin + IFID_instruction <= prev_fetched_instruction; + IFID_PC_plus_4 <= prev_PC_plus_4; + end end end diff --git a/PipelineProcessor.srcs/sources_1/new/MemoryAccess.v b/PipelineProcessor.srcs/sources_1/new/MemoryAccess.v index c2c6122..44a0ecd 100644 --- a/PipelineProcessor.srcs/sources_1/new/MemoryAccess.v +++ b/PipelineProcessor.srcs/sources_1/new/MemoryAccess.v @@ -53,7 +53,7 @@ module MemoryAccess ( assign data_memory_address = MEM_ALU_result; assign data_memory_write_data = (MEM_write_data_source == 1'b0) ? MEM_memory_write_data : WB_forwarded_data; - assign read_data = data_memory_read_data; + assign memory_read_data = data_memory_read_data; assign rt_address = MEM_rt_address; assign register_write = MEM_register_write; diff --git a/PipelineProcessor.xpr b/PipelineProcessor.xpr index d4db360..b50b370 100644 --- a/PipelineProcessor.xpr +++ b/PipelineProcessor.xpr @@ -60,7 +60,7 @@