diff --git a/PipelineProcessor.sim/sim_1/behav/xsim/xelab.pb b/PipelineProcessor.sim/sim_1/behav/xsim/xelab.pb
index 27c36ec..d9fa7c5 100644
Binary files a/PipelineProcessor.sim/sim_1/behav/xsim/xelab.pb and b/PipelineProcessor.sim/sim_1/behav/xsim/xelab.pb differ
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 5f222df..e41ffff 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
@@ -55,23 +55,21 @@
typedef void (*funcp)(char *, char *);
extern int main(int, char**);
IKI_DLLESPEC extern void execute_2(char*, char *);
-IKI_DLLESPEC extern void execute_156(char*, char *);
+IKI_DLLESPEC extern void execute_158(char*, char *);
+IKI_DLLESPEC extern void execute_159(char*, char *);
IKI_DLLESPEC extern void execute_313(char*, char *);
IKI_DLLESPEC extern void execute_314(char*, char *);
-IKI_DLLESPEC extern void execute_234(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_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 execute_312(char*, char *);
IKI_DLLESPEC extern void vlog_simple_process_execute_0_fast_no_reg_no_agg(char*, char*, char*);
IKI_DLLESPEC extern void vlog_const_rhs_process_execute_0_fast_no_reg_no_agg(char*, char*, char*);
-IKI_DLLESPEC extern void execute_232(char*, char *);
-IKI_DLLESPEC extern void execute_233(char*, char *);
-IKI_DLLESPEC extern void execute_162(char*, char *);
+IKI_DLLESPEC extern void execute_235(char*, char *);
+IKI_DLLESPEC extern void execute_236(char*, char *);
+IKI_DLLESPEC extern void execute_165(char*, char *);
IKI_DLLESPEC extern void execute_8(char*, char *);
IKI_DLLESPEC extern void execute_9(char*, char *);
IKI_DLLESPEC extern void execute_10(char*, char *);
@@ -185,18 +183,15 @@ IKI_DLLESPEC extern void execute_118(char*, char *);
IKI_DLLESPEC extern void execute_119(char*, char *);
IKI_DLLESPEC extern void execute_120(char*, char *);
IKI_DLLESPEC extern void execute_129(char*, char *);
-IKI_DLLESPEC extern void execute_163(char*, char *);
-IKI_DLLESPEC extern void execute_164(char*, char *);
-IKI_DLLESPEC extern void execute_168(char*, char *);
-IKI_DLLESPEC extern void execute_169(char*, char *);
-IKI_DLLESPEC extern void execute_178(char*, char *);
-IKI_DLLESPEC extern void execute_179(char*, char *);
-IKI_DLLESPEC extern void execute_180(char*, char *);
+IKI_DLLESPEC extern void execute_166(char*, char *);
+IKI_DLLESPEC extern void execute_167(char*, char *);
+IKI_DLLESPEC extern void execute_171(char*, char *);
+IKI_DLLESPEC extern void execute_172(char*, char *);
IKI_DLLESPEC extern void execute_181(char*, char *);
IKI_DLLESPEC extern void execute_182(char*, char *);
-IKI_DLLESPEC extern void execute_190(char*, char *);
-IKI_DLLESPEC extern void execute_191(char*, char *);
-IKI_DLLESPEC extern void execute_192(char*, char *);
+IKI_DLLESPEC extern void execute_183(char*, char *);
+IKI_DLLESPEC extern void execute_184(char*, char *);
+IKI_DLLESPEC extern void execute_185(char*, char *);
IKI_DLLESPEC extern void execute_193(char*, char *);
IKI_DLLESPEC extern void execute_194(char*, char *);
IKI_DLLESPEC extern void execute_195(char*, char *);
@@ -230,30 +225,27 @@ IKI_DLLESPEC extern void execute_222(char*, char *);
IKI_DLLESPEC extern void execute_223(char*, char *);
IKI_DLLESPEC extern void execute_224(char*, char *);
IKI_DLLESPEC extern void execute_225(char*, char *);
+IKI_DLLESPEC extern void execute_226(char*, char *);
+IKI_DLLESPEC extern void execute_227(char*, char *);
IKI_DLLESPEC extern void execute_228(char*, char *);
+IKI_DLLESPEC extern void execute_231(char*, char *);
IKI_DLLESPEC extern void execute_135(char*, char *);
-IKI_DLLESPEC extern void execute_235(char*, char *);
-IKI_DLLESPEC extern void execute_236(char*, char *);
-IKI_DLLESPEC extern void execute_237(char*, char *);
-IKI_DLLESPEC extern void execute_134(char*, char *);
-IKI_DLLESPEC extern void execute_141(char*, char *);
-IKI_DLLESPEC extern void execute_238(char*, char *);
IKI_DLLESPEC extern void execute_239(char*, char *);
-IKI_DLLESPEC extern void execute_240(char*, char *);
IKI_DLLESPEC extern void execute_241(char*, char *);
IKI_DLLESPEC extern void execute_242(char*, char *);
+IKI_DLLESPEC extern void execute_134(char*, char *);
+IKI_DLLESPEC extern void execute_142(char*, char *);
IKI_DLLESPEC extern void execute_243(char*, char *);
IKI_DLLESPEC extern void execute_244(char*, char *);
IKI_DLLESPEC extern void execute_245(char*, char *);
IKI_DLLESPEC extern void execute_246(char*, char *);
-IKI_DLLESPEC extern void execute_263(char*, char *);
-IKI_DLLESPEC extern void execute_269(char*, char *);
-IKI_DLLESPEC extern void execute_270(char*, char *);
+IKI_DLLESPEC extern void execute_247(char*, char *);
+IKI_DLLESPEC extern void execute_248(char*, char *);
+IKI_DLLESPEC extern void execute_249(char*, char *);
IKI_DLLESPEC extern void execute_250(char*, char *);
IKI_DLLESPEC extern void execute_251(char*, char *);
-IKI_DLLESPEC extern void execute_252(char*, char *);
-IKI_DLLESPEC extern void execute_253(char*, char *);
-IKI_DLLESPEC extern void execute_254(char*, char *);
+IKI_DLLESPEC extern void execute_268(char*, char *);
+IKI_DLLESPEC extern void execute_274(char*, char *);
IKI_DLLESPEC extern void execute_255(char*, char *);
IKI_DLLESPEC extern void execute_256(char*, char *);
IKI_DLLESPEC extern void execute_257(char*, char *);
@@ -262,38 +254,45 @@ IKI_DLLESPEC extern void execute_259(char*, char *);
IKI_DLLESPEC extern void execute_260(char*, char *);
IKI_DLLESPEC extern void execute_261(char*, char *);
IKI_DLLESPEC extern void execute_262(char*, char *);
-IKI_DLLESPEC extern void execute_139(char*, char *);
+IKI_DLLESPEC extern void execute_263(char*, char *);
IKI_DLLESPEC extern void execute_264(char*, char *);
IKI_DLLESPEC extern void execute_265(char*, char *);
-IKI_DLLESPEC extern void execute_268(char*, char *);
-IKI_DLLESPEC extern void execute_145(char*, char *);
-IKI_DLLESPEC extern void execute_271(char*, char *);
-IKI_DLLESPEC extern void execute_272(char*, char *);
+IKI_DLLESPEC extern void execute_266(char*, char *);
+IKI_DLLESPEC extern void execute_267(char*, char *);
+IKI_DLLESPEC extern void execute_139(char*, char *);
+IKI_DLLESPEC extern void execute_140(char*, char *);
+IKI_DLLESPEC extern void execute_269(char*, char *);
+IKI_DLLESPEC extern void execute_270(char*, char *);
IKI_DLLESPEC extern void execute_273(char*, char *);
+IKI_DLLESPEC extern void execute_146(char*, char *);
IKI_DLLESPEC extern void execute_275(char*, char *);
IKI_DLLESPEC extern void execute_276(char*, char *);
-IKI_DLLESPEC extern void execute_282(char*, char *);
-IKI_DLLESPEC extern void execute_285(char*, char *);
+IKI_DLLESPEC extern void execute_277(char*, char *);
+IKI_DLLESPEC extern void execute_279(char*, char *);
+IKI_DLLESPEC extern void execute_280(char*, char *);
IKI_DLLESPEC extern void execute_286(char*, char *);
-IKI_DLLESPEC extern void execute_144(char*, char *);
-IKI_DLLESPEC extern void execute_274(char*, char *);
-IKI_DLLESPEC extern void execute_147(char*, char *);
IKI_DLLESPEC extern void execute_289(char*, char *);
IKI_DLLESPEC extern void execute_290(char*, char *);
-IKI_DLLESPEC extern void execute_149(char*, char *);
-IKI_DLLESPEC extern void execute_297(char*, char *);
-IKI_DLLESPEC extern void execute_151(char*, char *);
-IKI_DLLESPEC extern void execute_299(char*, char *);
-IKI_DLLESPEC extern void execute_153(char*, char *);
-IKI_DLLESPEC extern void execute_300(char*, char *);
+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_302(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_158(char*, char *);
-IKI_DLLESPEC extern void execute_159(char*, char *);
-IKI_DLLESPEC extern void execute_160(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_161(char*, char *);
+IKI_DLLESPEC extern void execute_162(char*, char *);
+IKI_DLLESPEC extern void execute_163(char*, char *);
+IKI_DLLESPEC extern void execute_164(char*, char *);
IKI_DLLESPEC extern void execute_315(char*, char *);
IKI_DLLESPEC extern void execute_316(char*, char *);
IKI_DLLESPEC extern void execute_317(char*, char *);
@@ -301,42 +300,36 @@ IKI_DLLESPEC extern void execute_318(char*, char *);
IKI_DLLESPEC extern void execute_319(char*, char *);
IKI_DLLESPEC extern void execute_320(char*, char *);
IKI_DLLESPEC extern void vlog_transfunc_eventcallback(char*, char*, unsigned, unsigned, unsigned, char *);
-IKI_DLLESPEC extern void transaction_7(char*, char*, unsigned, unsigned, unsigned);
-IKI_DLLESPEC extern void transaction_8(char*, char*, unsigned, unsigned, unsigned);
+IKI_DLLESPEC extern void transaction_63(char*, char*, unsigned, unsigned, unsigned);
IKI_DLLESPEC extern void transaction_65(char*, char*, unsigned, unsigned, unsigned);
-IKI_DLLESPEC extern void transaction_66(char*, char*, unsigned, unsigned, unsigned);
-IKI_DLLESPEC extern void transaction_68(char*, char*, unsigned, unsigned, unsigned);
-IKI_DLLESPEC extern void transaction_70(char*, char*, unsigned, unsigned, unsigned);
-IKI_DLLESPEC extern void transaction_77(char*, char*, unsigned, unsigned, unsigned);
-IKI_DLLESPEC extern void transaction_78(char*, char*, unsigned, unsigned, unsigned);
+IKI_DLLESPEC extern void transaction_72(char*, char*, unsigned, unsigned, unsigned);
+IKI_DLLESPEC extern void transaction_73(char*, char*, unsigned, unsigned, unsigned);
+IKI_DLLESPEC extern void transaction_75(char*, char*, unsigned, unsigned, unsigned);
+IKI_DLLESPEC extern void transaction_76(char*, char*, unsigned, unsigned, unsigned);
+IKI_DLLESPEC extern void transaction_79(char*, char*, unsigned, unsigned, unsigned);
IKI_DLLESPEC extern void transaction_80(char*, char*, unsigned, unsigned, unsigned);
IKI_DLLESPEC extern void transaction_81(char*, char*, unsigned, unsigned, unsigned);
-IKI_DLLESPEC extern void transaction_84(char*, char*, unsigned, unsigned, unsigned);
-IKI_DLLESPEC extern void transaction_85(char*, char*, unsigned, unsigned, unsigned);
-IKI_DLLESPEC extern void transaction_86(char*, char*, unsigned, unsigned, unsigned);
+IKI_DLLESPEC extern void transaction_82(char*, char*, unsigned, unsigned, unsigned);
+IKI_DLLESPEC extern void transaction_83(char*, char*, unsigned, unsigned, unsigned);
IKI_DLLESPEC extern void transaction_87(char*, char*, unsigned, unsigned, unsigned);
-IKI_DLLESPEC extern void transaction_88(char*, char*, unsigned, unsigned, unsigned);
-IKI_DLLESPEC extern void transaction_92(char*, char*, unsigned, unsigned, unsigned);
-IKI_DLLESPEC extern void transaction_96(char*, char*, unsigned, unsigned, unsigned);
-IKI_DLLESPEC extern void transaction_595(char*, char*, unsigned, unsigned, unsigned);
-IKI_DLLESPEC extern void transaction_599(char*, char*, unsigned, unsigned, unsigned);
-IKI_DLLESPEC extern void transaction_114(char*, char*, unsigned, unsigned, unsigned);
-IKI_DLLESPEC extern void transaction_115(char*, char*, unsigned, unsigned, unsigned);
-IKI_DLLESPEC extern void transaction_160(char*, char*, unsigned, unsigned, unsigned);
-IKI_DLLESPEC extern void transaction_195(char*, char*, unsigned, unsigned, unsigned);
-IKI_DLLESPEC extern void transaction_196(char*, char*, unsigned, unsigned, unsigned);
-IKI_DLLESPEC extern void transaction_221(char*, char*, unsigned, unsigned, unsigned);
-IKI_DLLESPEC extern void transaction_268(char*, char*, unsigned, unsigned, unsigned);
-IKI_DLLESPEC extern void transaction_269(char*, char*, unsigned, unsigned, unsigned);
-IKI_DLLESPEC extern void transaction_300(char*, char*, unsigned, unsigned, unsigned);
-IKI_DLLESPEC extern void transaction_329(char*, char*, unsigned, unsigned, unsigned);
-IKI_DLLESPEC extern void transaction_330(char*, char*, unsigned, unsigned, unsigned);
-funcp funcTab[277] = {(funcp)execute_2, (funcp)execute_156, (funcp)execute_313, (funcp)execute_314, (funcp)execute_234, (funcp)execute_305, (funcp)execute_306, (funcp)execute_307, (funcp)execute_308, (funcp)execute_309, (funcp)execute_310, (funcp)execute_311, (funcp)execute_312, (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_232, (funcp)execute_233, (funcp)execute_162, (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_163, (funcp)execute_164, (funcp)execute_168, (funcp)execute_169, (funcp)execute_178, (funcp)execute_179, (funcp)execute_180, (funcp)execute_181, (funcp)execute_182, (funcp)execute_190, (funcp)execute_191, (funcp)execute_192, (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_228, (funcp)execute_135, (funcp)execute_235, (funcp)execute_236, (funcp)execute_237, (funcp)execute_134, (funcp)execute_141, (funcp)execute_238, (funcp)execute_239, (funcp)execute_240, (funcp)execute_241, (funcp)execute_242, (funcp)execute_243, (funcp)execute_244, (funcp)execute_245, (funcp)execute_246, (funcp)execute_263, (funcp)execute_269, (funcp)execute_270, (funcp)execute_250, (funcp)execute_251, (funcp)execute_252, (funcp)execute_253, (funcp)execute_254, (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_139, (funcp)execute_264, (funcp)execute_265, (funcp)execute_268, (funcp)execute_145, (funcp)execute_271, (funcp)execute_272, (funcp)execute_273, (funcp)execute_275, (funcp)execute_276, (funcp)execute_282, (funcp)execute_285, (funcp)execute_286, (funcp)execute_144, (funcp)execute_274, (funcp)execute_147, (funcp)execute_289, (funcp)execute_290, (funcp)execute_149, (funcp)execute_297, (funcp)execute_151, (funcp)execute_299, (funcp)execute_153, (funcp)execute_300, (funcp)execute_301, (funcp)execute_302, (funcp)execute_303, (funcp)execute_304, (funcp)execute_158, (funcp)execute_159, (funcp)execute_160, (funcp)execute_161, (funcp)execute_315, (funcp)execute_316, (funcp)execute_317, (funcp)execute_318, (funcp)execute_319, (funcp)execute_320, (funcp)vlog_transfunc_eventcallback, (funcp)transaction_7, (funcp)transaction_8, (funcp)transaction_65, (funcp)transaction_66, (funcp)transaction_68, (funcp)transaction_70, (funcp)transaction_77, (funcp)transaction_78, (funcp)transaction_80, (funcp)transaction_81, (funcp)transaction_84, (funcp)transaction_85, (funcp)transaction_86, (funcp)transaction_87, (funcp)transaction_88, (funcp)transaction_92, (funcp)transaction_96, (funcp)transaction_595, (funcp)transaction_599, (funcp)transaction_114, (funcp)transaction_115, (funcp)transaction_160, (funcp)transaction_195, (funcp)transaction_196, (funcp)transaction_221, (funcp)transaction_268, (funcp)transaction_269, (funcp)transaction_300, (funcp)transaction_329, (funcp)transaction_330};
-const int NumRelocateId= 277;
+IKI_DLLESPEC extern void transaction_91(char*, char*, unsigned, unsigned, unsigned);
+IKI_DLLESPEC extern void transaction_109(char*, char*, unsigned, unsigned, unsigned);
+IKI_DLLESPEC extern void transaction_110(char*, char*, unsigned, unsigned, unsigned);
+IKI_DLLESPEC extern void transaction_155(char*, char*, unsigned, unsigned, unsigned);
+IKI_DLLESPEC extern void transaction_190(char*, char*, unsigned, unsigned, unsigned);
+IKI_DLLESPEC extern void transaction_191(char*, char*, unsigned, unsigned, unsigned);
+IKI_DLLESPEC extern void transaction_216(char*, char*, unsigned, unsigned, unsigned);
+IKI_DLLESPEC extern void transaction_263(char*, char*, unsigned, unsigned, unsigned);
+IKI_DLLESPEC extern void transaction_264(char*, char*, unsigned, unsigned, unsigned);
+IKI_DLLESPEC extern void transaction_295(char*, char*, unsigned, unsigned, unsigned);
+IKI_DLLESPEC extern void transaction_324(char*, char*, unsigned, unsigned, unsigned);
+IKI_DLLESPEC extern void transaction_325(char*, char*, unsigned, unsigned, unsigned);
+funcp funcTab[270] = {(funcp)execute_2, (funcp)execute_158, (funcp)execute_159, (funcp)execute_313, (funcp)execute_314, (funcp)execute_237, (funcp)execute_238, (funcp)execute_309, (funcp)execute_310, (funcp)execute_311, (funcp)execute_312, (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_315, (funcp)execute_316, (funcp)execute_317, (funcp)execute_318, (funcp)execute_319, (funcp)execute_320, (funcp)vlog_transfunc_eventcallback, (funcp)transaction_63, (funcp)transaction_65, (funcp)transaction_72, (funcp)transaction_73, (funcp)transaction_75, (funcp)transaction_76, (funcp)transaction_79, (funcp)transaction_80, (funcp)transaction_81, (funcp)transaction_82, (funcp)transaction_83, (funcp)transaction_87, (funcp)transaction_91, (funcp)transaction_109, (funcp)transaction_110, (funcp)transaction_155, (funcp)transaction_190, (funcp)transaction_191, (funcp)transaction_216, (funcp)transaction_263, (funcp)transaction_264, (funcp)transaction_295, (funcp)transaction_324, (funcp)transaction_325};
+const int NumRelocateId= 270;
void relocate(char *dp)
{
- iki_relocate(dp, "xsim.dir/test_cpu_behav/xsim.reloc", (void **)funcTab, 277);
+ iki_relocate(dp, "xsim.dir/test_cpu_behav/xsim.reloc", (void **)funcTab, 270);
/*Populate the transaction function pointer field in the whole net structure */
}
@@ -344,21 +337,12 @@ void relocate(char *dp)
void sensitize(char *dp)
{
iki_sensitize(dp, "xsim.dir/test_cpu_behav/xsim.reloc");
-}
-
- // Initialize Verilog nets in mixed simulation, for the cases when the value at time 0 should be propagated from the mixed language Vhdl net
-
-void wrapper_func_0(char *dp)
-
-{
-
}
void simulate(char *dp)
{
iki_schedule_processes_at_time_zero(dp, "xsim.dir/test_cpu_behav/xsim.reloc");
- wrapper_func_0(dp);
-
+ // Initialize Verilog nets in mixed simulation, for the cases when the value at time 0 should be propagated from the mixed language Vhdl net
iki_execute_processes();
// Schedule resolution functions for the multiply driven Verilog nets that have strength
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 b561ac3..9a47aa0 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/sim_1/new/test_cpu.v b/PipelineProcessor.srcs/sim_1/new/test_cpu.v
index 05e1272..a5ffb94 100644
--- a/PipelineProcessor.srcs/sim_1/new/test_cpu.v
+++ b/PipelineProcessor.srcs/sim_1/new/test_cpu.v
@@ -13,8 +13,14 @@ module test_cpu ();
CPU cpu(
.hardware_clk(sim_clk),
- .reset(reset),
+ .hardware_reset(reset),
.clock_locked(clk_locked),
.bcd_control(bcd_control)
);
+
+ initial begin
+ reset = 1;
+ #30;
+ reset = 0;
+ end
endmodule
diff --git a/PipelineProcessor.srcs/sources_1/new/CPU.v b/PipelineProcessor.srcs/sources_1/new/CPU.v
index a7ad8fa..ef306d2 100644
--- a/PipelineProcessor.srcs/sources_1/new/CPU.v
+++ b/PipelineProcessor.srcs/sources_1/new/CPU.v
@@ -1,7 +1,7 @@
`timescale 1ns / 1ps
module CPU (
input hardware_clk,
- input reset,
+ input hardware_reset,
output clock_locked,
output [11:0] bcd_control
);
@@ -14,9 +14,12 @@ module CPU (
.locked(clock_locked)
);
+ wire reset;
+ assign reset = hardware_reset || ~clock_locked;
+
// Out of IF
- wire IF_fetched_instruction;
- wire IF_PC_plus_4;
+ wire [31:0] IF_fetched_instruction;
+ wire [31:0] IF_PC_plus_4;
// Out of ID
wire [1:0] ID_PC_jump;
@@ -89,6 +92,7 @@ module CPU (
InstFetch instruction_fetch (
.clk(clk),
+ .reset(reset),
.branch_target(EX_branch_target),
.jump_target(ID_jump_target),
.jump_register_target(ID_jump_register_target),
@@ -101,12 +105,13 @@ module CPU (
InstDecode instruction_decode (
.clk(clk),
+ .reset(reset),
.prev_fetched_instruction(IF_fetched_instruction),
.prev_PC_plus_4(IF_PC_plus_4),
.IFIDSrc(hazard_IFID_source),
- .WB_write_enable(WB_write_enable),
- .WB_write_address(WB_write_address),
- .WB_write_data(WB_write_data),
+ .WB_write_enable(WB_register_write),
+ .WB_write_address(WB_register_write_address),
+ .WB_write_data(WB_register_write_data),
.PC_jump(ID_PC_jump),
.jump_target(ID_jump_target),
.jump_register_target(ID_jump_register_target),
@@ -131,6 +136,7 @@ module CPU (
Execution execution (
.clk(clk),
+ .reset(reset),
.prev_is_branch(ID_is_branch),
.prev_WB_source(ID_WB_source),
.prev_memory_write(ID_memory_write),
@@ -166,6 +172,7 @@ module CPU (
MemoryAccess memory_access (
.clk(clk),
+ .reset(reset),
.prev_register_write(EX_register_write),
.prev_WB_source(EX_WB_source),
.prev_memory_write(EX_memory_write),
@@ -190,6 +197,7 @@ module CPU (
WriteBack write_back (
.clk(clk),
+ .reset(reset),
.prev_register_write(MEM_register_write),
.prev_WB_source(MEM_WB_source),
.prev_memory_read_data(MEM_memory_read_data),
@@ -202,6 +210,7 @@ module CPU (
DataMemory data_memory (
.clk(clk),
+ .reset(reset),
.address(MEM_data_memory_address),
.write_enable(MEM_data_memory_write),
.write_data(MEM_data_memory_write_data),
diff --git a/PipelineProcessor.srcs/sources_1/new/DataMemory.v b/PipelineProcessor.srcs/sources_1/new/DataMemory.v
index 65642f6..0bebe85 100644
--- a/PipelineProcessor.srcs/sources_1/new/DataMemory.v
+++ b/PipelineProcessor.srcs/sources_1/new/DataMemory.v
@@ -2,6 +2,7 @@
module DataMemory (
input clk,
+ input reset,
input [31:0] address,
input write_enable,
input [31:0] write_data,
@@ -13,12 +14,26 @@ module DataMemory (
reg [31:0] memory_data[MEM_SIZE + START_ADDRESS - 1:START_ADDRESS];
- assign bcd_hardwire = memory_data[START_ADDRESS + 4];
+ assign bcd_hardwire = memory_data[START_ADDRESS+4];
+
+ integer i;
+
+ initial begin
+ for (i = START_ADDRESS; i < MEM_SIZE + START_ADDRESS; i = i + 1) begin
+ memory_data[i] <= 32'h00000000;
+ end
+ end
always @(posedge clk) begin
- if (write_enable) begin
- memory_data[address] <= write_data;
+ if (reset) begin
+ for (i = START_ADDRESS; i < MEM_SIZE + START_ADDRESS; i = i + 1) begin
+ memory_data[i] <= 32'h00000000;
+ end
+ end else begin
+ if (write_enable) begin
+ memory_data[address] <= write_data;
+ end
+ read_data <= memory_data[address];
end
- read_data <= memory_data[address];
end
endmodule
diff --git a/PipelineProcessor.srcs/sources_1/new/Execution.v b/PipelineProcessor.srcs/sources_1/new/Execution.v
index b3bb78a..ff35fc1 100644
--- a/PipelineProcessor.srcs/sources_1/new/Execution.v
+++ b/PipelineProcessor.srcs/sources_1/new/Execution.v
@@ -1,6 +1,7 @@
`timescale 1ns / 1ps
module Execution (
input clk,
+ input reset,
// From prev stage
input prev_is_branch,
input prev_WB_source,
@@ -96,7 +97,7 @@ module Execution (
assign rt_address = EX_rt_address;
always @(posedge clk) begin
- if (IDEXSrc == 1'b1) begin
+ if (IDEXSrc == 1'b1 || reset == 1'b1) begin
EX_register_write <= 1'b0;
EX_WB_source <= 1'b0;
EX_memory_write <= 1'b0;
diff --git a/PipelineProcessor.srcs/sources_1/new/InstDecode.v b/PipelineProcessor.srcs/sources_1/new/InstDecode.v
index 3228bce..3bb217a 100644
--- a/PipelineProcessor.srcs/sources_1/new/InstDecode.v
+++ b/PipelineProcessor.srcs/sources_1/new/InstDecode.v
@@ -1,6 +1,7 @@
`timescale 1ns / 1ps
module InstDecode (
input clk,
+ input reset,
// From prev stage
input [31:0] prev_fetched_instruction,
input [31:0] prev_PC_plus_4,
@@ -65,7 +66,7 @@ module InstDecode (
// Signals to connect from control unit to register file and immediate extend unit
wire write_ra;
wire ra_addr_source;
- wire extendop;
+ wire [1:0] extendop;
ControlUnit control_unit (
.opcode(opcode),
@@ -93,6 +94,7 @@ module InstDecode (
RegisterFile register_file (
.clk(clk),
+ .reset(reset),
.read_addr1(rs),
.read_addr2(rt),
.write_enable(WB_write_enable),
@@ -108,31 +110,36 @@ module InstDecode (
assign register_file_read_A = RF_read_A_out;
assign jump_register_target = RF_read_A_out;
- ImmediateExtender immediate_extender(
+ ImmediateExtender immediate_extender (
.immediate(immediate),
.extendop(extendop),
.extended_immediate(extended_immediate)
);
always @(posedge clk) 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 (reset) begin
+ 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
+ end
end
endmodule
diff --git a/PipelineProcessor.srcs/sources_1/new/InstFetch.v b/PipelineProcessor.srcs/sources_1/new/InstFetch.v
index 626463e..85f884a 100644
--- a/PipelineProcessor.srcs/sources_1/new/InstFetch.v
+++ b/PipelineProcessor.srcs/sources_1/new/InstFetch.v
@@ -1,6 +1,7 @@
`timescale 1ns / 1ps
module InstFetch (
input clk,
+ input reset,
input [31:0] branch_target,
input [31:0] jump_target,
input [31:0] jump_register_target,
@@ -17,22 +18,27 @@ module InstFetch (
.instruction(fetched_instruction)
);
- wire adder_out;
+ wire [31:0] adder_out;
assign adder_out = PC + 4;
+ assign PC_plus_4 = adder_out;
always @(posedge clk) begin
- if (need_stall) begin
- PC <= PC;
+ if (reset) begin
+ PC <= 32'h00000000;
end else begin
- if (PC_branch) begin
- PC <= branch_target;
+ if (need_stall) begin
+ PC <= PC;
end else begin
- case (PC_jump)
- 2'b00: PC <= adder_out;
- 2'b01: PC <= jump_target;
- 2'b10: PC <= jump_register_target;
- default: PC <= adder_out;
- endcase
+ if (PC_branch) begin
+ PC <= branch_target;
+ end else begin
+ case (PC_jump)
+ 2'b00: PC <= adder_out;
+ 2'b01: PC <= jump_target;
+ 2'b10: PC <= jump_register_target;
+ default: PC <= adder_out;
+ endcase
+ end
end
end
end
diff --git a/PipelineProcessor.srcs/sources_1/new/InstructionMemory.v b/PipelineProcessor.srcs/sources_1/new/InstructionMemory.v
index 6f11662..6ad9887 100644
--- a/PipelineProcessor.srcs/sources_1/new/InstructionMemory.v
+++ b/PipelineProcessor.srcs/sources_1/new/InstructionMemory.v
@@ -8,7 +8,7 @@ module InstructionMemory (
always @(*) begin
case (address[31:2])
20'd0: instruction <= 32'h20210001;
- 20'd1: instruction <= 32'h08000000;
+ 20'd10: instruction <= 32'h08000000;
default: instruction <= 32'h00000000;
endcase
end
diff --git a/PipelineProcessor.srcs/sources_1/new/MemoryAccess.v b/PipelineProcessor.srcs/sources_1/new/MemoryAccess.v
index 0945405..e831f95 100644
--- a/PipelineProcessor.srcs/sources_1/new/MemoryAccess.v
+++ b/PipelineProcessor.srcs/sources_1/new/MemoryAccess.v
@@ -1,6 +1,7 @@
`timescale 1ns / 1ps
module MemoryAccess (
input clk,
+ input reset,
// From prev stage
input prev_register_write,
input prev_WB_source,
@@ -61,12 +62,22 @@ module MemoryAccess (
assign register_write_destination = MEM_register_write_destination;
always @(posedge clk) begin
- MEM_register_write <= prev_register_write;
- MEM_WB_source <= prev_WB_source;
- MEM_memory_write <= prev_memory_write;
- MEM_ALU_result <= prev_ALU_result;
- MEM_memory_write_data <= prev_memory_write_data;
- MEM_register_write_destination <= prev_register_write_destination;
- MEM_rt_address <= prev_rt_address;
+ if (reset) begin
+ MEM_register_write <= 1'b0;
+ MEM_WB_source <= 1'b0;
+ MEM_memory_write <= 1'b0;
+ MEM_ALU_result <= 32'h00000000;
+ MEM_memory_write_data <= 32'h00000000;
+ MEM_register_write_destination <= 5'b00000;
+ MEM_rt_address <= 5'b00000;
+ end else begin
+ MEM_register_write <= prev_register_write;
+ MEM_WB_source <= prev_WB_source;
+ MEM_memory_write <= prev_memory_write;
+ MEM_ALU_result <= prev_ALU_result;
+ MEM_memory_write_data <= prev_memory_write_data;
+ MEM_register_write_destination <= prev_register_write_destination;
+ MEM_rt_address <= prev_rt_address;
+ end
end
endmodule
diff --git a/PipelineProcessor.srcs/sources_1/new/RegisterFile.v b/PipelineProcessor.srcs/sources_1/new/RegisterFile.v
index 6686494..5a84825 100644
--- a/PipelineProcessor.srcs/sources_1/new/RegisterFile.v
+++ b/PipelineProcessor.srcs/sources_1/new/RegisterFile.v
@@ -2,6 +2,7 @@
module RegisterFile (
input clk,
+ input reset,
input [4:0] read_addr1,
input [4:0] read_addr2,
input write_enable,
@@ -14,7 +15,8 @@ module RegisterFile (
output [31:0] read_output2
);
- reg [31:0] registers[31:1];
+ reg [31:0] registers[1:31];
+ integer i;
assign read_output1 = (read_addr1 == 5'b00000) ? 32'h00000000 :
(read_addr1 == write_ra_addr) ? write_ra_data :
@@ -24,22 +26,34 @@ module RegisterFile (
(read_addr2 == write_ra_addr) ? write_ra_data :
(read_addr2 == write_addr) ? write_data : registers[read_addr2];
+ initial begin
+ for (i = 1; i < 32; i = i + 1) begin
+ registers[i] <= 32'h00000000;
+ end
+ end
+
always @(posedge clk) begin
- if (write_addr == write_ra_addr) begin
- if (write_ra) begin
- registers[write_ra_addr] <= write_ra_data;
+ if (reset) begin
+ for (i = 1; i < 32; i = i + 1) begin
+ registers[i] <= 32'h00000000;
+ end
+ end else begin
+ if (write_addr == write_ra_addr) begin
+ if (write_ra) begin
+ registers[write_ra_addr] <= write_ra_data;
+ end else begin
+ if (write_enable) begin
+ registers[write_addr] <= write_data;
+ end
+ end
end else begin
+ if (write_ra) begin
+ registers[write_ra_addr] <= write_ra_data;
+ end
if (write_enable) begin
registers[write_addr] <= write_data;
end
end
- end else begin
- if (write_ra) begin
- registers[write_ra_addr] <= write_ra_data;
- end
- if (write_enable) begin
- registers[write_addr] <= write_data;
- end
end
end
diff --git a/PipelineProcessor.srcs/sources_1/new/WriteBack.v b/PipelineProcessor.srcs/sources_1/new/WriteBack.v
index 708022f..812146e 100644
--- a/PipelineProcessor.srcs/sources_1/new/WriteBack.v
+++ b/PipelineProcessor.srcs/sources_1/new/WriteBack.v
@@ -1,6 +1,7 @@
`timescale 1ns / 1ps
module WriteBack (
input clk,
+ input reset,
// From prev stage
input prev_register_write,
input prev_WB_source,
@@ -24,10 +25,18 @@ module WriteBack (
assign register_write_addr = WB_register_write_destination;
always @(posedge clk) begin
- WB_register_write <= prev_register_write;
- WB_WB_source <= prev_WB_source;
- WB_memory_read_data <= prev_memory_read_data;
- WB_ALU_result <= prev_ALU_result;
- WB_register_write_destination <= prev_register_write_destination;
+ if (reset) begin
+ WB_register_write <= 1'b0;
+ WB_WB_source <= 1'b0;
+ WB_memory_read_data <= 32'h00000000;
+ WB_ALU_result <= 32'h00000000;
+ WB_register_write_destination <= 5'b00000;
+ end else begin
+ WB_register_write <= prev_register_write;
+ WB_WB_source <= prev_WB_source;
+ WB_memory_read_data <= prev_memory_read_data;
+ WB_ALU_result <= prev_ALU_result;
+ WB_register_write_destination <= prev_register_write_destination;
+ end
end
endmodule
diff --git a/PipelineProcessor.xpr b/PipelineProcessor.xpr
index 480e77b..ea874e2 100644
--- a/PipelineProcessor.xpr
+++ b/PipelineProcessor.xpr
@@ -60,7 +60,7 @@
-
+