diff --git a/PipelineProcessor.sim/sim_1/behav/xsim/InstFetch.tcl b/PipelineProcessor.sim/sim_1/behav/xsim/InstFetch.tcl new file mode 100644 index 0000000..1094e45 --- /dev/null +++ b/PipelineProcessor.sim/sim_1/behav/xsim/InstFetch.tcl @@ -0,0 +1,11 @@ +set curr_wave [current_wave_config] +if { [string length $curr_wave] == 0 } { + if { [llength [get_objects]] > 0} { + add_wave / + set_property needs_save false [current_wave_config] + } else { + send_msg_id Add_Wave-1 WARNING "No top level signals found. Simulator will start without a wave window. If you want to open a wave window go to 'File->New Waveform Configuration' or type 'create_wave_config' in the TCL console." + } +} + +run 1000ns diff --git a/PipelineProcessor.sim/sim_1/behav/xsim/glbl.v b/PipelineProcessor.sim/sim_1/behav/xsim/glbl.v new file mode 100644 index 0000000..ed3b249 --- /dev/null +++ b/PipelineProcessor.sim/sim_1/behav/xsim/glbl.v @@ -0,0 +1,84 @@ +// $Header: /devl/xcs/repo/env/Databases/CAEInterfaces/verunilibs/data/glbl.v,v 1.14 2010/10/28 20:44:00 fphillip Exp $ +`ifndef GLBL +`define GLBL +`timescale 1 ps / 1 ps + +module glbl (); + + parameter ROC_WIDTH = 100000; + parameter TOC_WIDTH = 0; + parameter GRES_WIDTH = 10000; + parameter GRES_START = 10000; + +//-------- STARTUP Globals -------------- + wire GSR; + wire GTS; + wire GWE; + wire PRLD; + wire GRESTORE; + tri1 p_up_tmp; + tri (weak1, strong0) PLL_LOCKG = p_up_tmp; + + wire PROGB_GLBL; + wire CCLKO_GLBL; + wire FCSBO_GLBL; + wire [3:0] DO_GLBL; + wire [3:0] DI_GLBL; + + reg GSR_int; + reg GTS_int; + reg PRLD_int; + reg GRESTORE_int; + +//-------- JTAG Globals -------------- + wire JTAG_TDO_GLBL; + wire JTAG_TCK_GLBL; + wire JTAG_TDI_GLBL; + wire JTAG_TMS_GLBL; + wire JTAG_TRST_GLBL; + + reg JTAG_CAPTURE_GLBL; + reg JTAG_RESET_GLBL; + reg JTAG_SHIFT_GLBL; + reg JTAG_UPDATE_GLBL; + reg JTAG_RUNTEST_GLBL; + + reg JTAG_SEL1_GLBL = 0; + reg JTAG_SEL2_GLBL = 0 ; + reg JTAG_SEL3_GLBL = 0; + reg JTAG_SEL4_GLBL = 0; + + reg JTAG_USER_TDO1_GLBL = 1'bz; + reg JTAG_USER_TDO2_GLBL = 1'bz; + reg JTAG_USER_TDO3_GLBL = 1'bz; + reg JTAG_USER_TDO4_GLBL = 1'bz; + + assign (strong1, weak0) GSR = GSR_int; + assign (strong1, weak0) GTS = GTS_int; + assign (weak1, weak0) PRLD = PRLD_int; + assign (strong1, weak0) GRESTORE = GRESTORE_int; + + initial begin + GSR_int = 1'b1; + PRLD_int = 1'b1; + #(ROC_WIDTH) + GSR_int = 1'b0; + PRLD_int = 1'b0; + end + + initial begin + GTS_int = 1'b1; + #(TOC_WIDTH) + GTS_int = 1'b0; + end + + initial begin + GRESTORE_int = 1'b0; + #(GRES_START); + GRESTORE_int = 1'b1; + #(GRES_WIDTH); + GRESTORE_int = 1'b0; + end + +endmodule +`endif diff --git a/PipelineProcessor.sim/sim_1/behav/xsim/test_cpu.tcl b/PipelineProcessor.sim/sim_1/behav/xsim/test_cpu.tcl new file mode 100644 index 0000000..1094e45 --- /dev/null +++ b/PipelineProcessor.sim/sim_1/behav/xsim/test_cpu.tcl @@ -0,0 +1,11 @@ +set curr_wave [current_wave_config] +if { [string length $curr_wave] == 0 } { + if { [llength [get_objects]] > 0} { + add_wave / + set_property needs_save false [current_wave_config] + } else { + send_msg_id Add_Wave-1 WARNING "No top level signals found. Simulator will start without a wave window. If you want to open a wave window go to 'File->New Waveform Configuration' or type 'create_wave_config' in the TCL console." + } +} + +run 1000ns diff --git a/PipelineProcessor.sim/sim_1/behav/xsim/test_cpu_vlog.prj b/PipelineProcessor.sim/sim_1/behav/xsim/test_cpu_vlog.prj new file mode 100644 index 0000000..c2720cc --- /dev/null +++ b/PipelineProcessor.sim/sim_1/behav/xsim/test_cpu_vlog.prj @@ -0,0 +1,26 @@ +# compile verilog/system verilog design source files +verilog xil_defaultlib --include "../../../../PipelineProcessor.ip_user_files/ipstatic" \ +"../../../../PipelineProcessor.gen/sources_1/ip/phase_locked_loop/phase_locked_loop_clk_wiz.v" \ +"../../../../PipelineProcessor.gen/sources_1/ip/phase_locked_loop/phase_locked_loop.v" \ +"../../../../PipelineProcessor.srcs/sources_1/new/ALU.v" \ +"../../../../PipelineProcessor.srcs/sources_1/new/ControlUnit.v" \ +"../../../../PipelineProcessor.srcs/sources_1/new/DataMemory.v" \ +"../../../../PipelineProcessor.srcs/sources_1/new/Execution.v" \ +"../../../../PipelineProcessor.srcs/sources_1/new/ExecutionForward.v" \ +"../../../../PipelineProcessor.srcs/sources_1/new/HazardUnit.v" \ +"../../../../PipelineProcessor.srcs/sources_1/new/ImmediateExtender.v" \ +"../../../../PipelineProcessor.srcs/sources_1/new/InstDecode.v" \ +"../../../../PipelineProcessor.srcs/sources_1/new/InstFetch.v" \ +"../../../../PipelineProcessor.srcs/sources_1/new/InstructionMemory.v" \ +"../../../../PipelineProcessor.srcs/sources_1/new/MemoryAccess.v" \ +"../../../../PipelineProcessor.srcs/sources_1/new/MemoryForward.v" \ +"../../../../PipelineProcessor.srcs/sources_1/new/RegisterFile.v" \ +"../../../../PipelineProcessor.srcs/sources_1/new/WriteBack.v" \ +"../../../../PipelineProcessor.srcs/sources_1/new/CPU.v" \ +"../../../../PipelineProcessor.srcs/sim_1/new/test_cpu.v" \ + +# compile glbl module +verilog xil_defaultlib "glbl.v" + +# Do not sort compile order +nosort diff --git a/PipelineProcessor.sim/sim_1/behav/xsim/xelab.pb b/PipelineProcessor.sim/sim_1/behav/xsim/xelab.pb new file mode 100644 index 0000000..27c36ec Binary files /dev/null and b/PipelineProcessor.sim/sim_1/behav/xsim/xelab.pb differ diff --git a/PipelineProcessor.sim/sim_1/behav/xsim/xsim.dir/InstFetch_behav/Compile_Options.txt b/PipelineProcessor.sim/sim_1/behav/xsim/xsim.dir/InstFetch_behav/Compile_Options.txt new file mode 100644 index 0000000..fa6accc --- /dev/null +++ b/PipelineProcessor.sim/sim_1/behav/xsim/xsim.dir/InstFetch_behav/Compile_Options.txt @@ -0,0 +1 @@ +--incr --debug "typical" --relax --mt "2" -L "xil_defaultlib" -L "unisims_ver" -L "unimacro_ver" -L "secureip" -L "xpm" --snapshot "InstFetch_behav" "xil_defaultlib.InstFetch" "xil_defaultlib.glbl" -log "elaborate.log" diff --git a/PipelineProcessor.sim/sim_1/behav/xsim/xsim.dir/InstFetch_behav/TempBreakPointFile.txt b/PipelineProcessor.sim/sim_1/behav/xsim/xsim.dir/InstFetch_behav/TempBreakPointFile.txt new file mode 100644 index 0000000..fdbc612 --- /dev/null +++ b/PipelineProcessor.sim/sim_1/behav/xsim/xsim.dir/InstFetch_behav/TempBreakPointFile.txt @@ -0,0 +1 @@ +Breakpoint File Version 1.0 diff --git a/PipelineProcessor.sim/sim_1/behav/xsim/xsim.dir/InstFetch_behav/obj/xsim_1.c b/PipelineProcessor.sim/sim_1/behav/xsim/xsim.dir/InstFetch_behav/obj/xsim_1.c new file mode 100644 index 0000000..a7a70aa --- /dev/null +++ b/PipelineProcessor.sim/sim_1/behav/xsim/xsim.dir/InstFetch_behav/obj/xsim_1.c @@ -0,0 +1,119 @@ +/**********************************************************************/ +/* ____ ____ */ +/* / /\/ / */ +/* /___/ \ / */ +/* \ \ \/ */ +/* \ \ Copyright (c) 2003-2020 Xilinx, Inc. */ +/* / / All Right Reserved. */ +/* /---/ /\ */ +/* \ \ / \ */ +/* \___\/\___\ */ +/**********************************************************************/ + +#if defined(_WIN32) + #include "stdio.h" + #define IKI_DLLESPEC __declspec(dllimport) +#else + #define IKI_DLLESPEC +#endif +#include "iki.h" +#include +#include +#ifdef __GNUC__ +#include +#else +#include +#define alloca _alloca +#endif +/**********************************************************************/ +/* ____ ____ */ +/* / /\/ / */ +/* /___/ \ / */ +/* \ \ \/ */ +/* \ \ Copyright (c) 2003-2020 Xilinx, Inc. */ +/* / / All Right Reserved. */ +/* /---/ /\ */ +/* \ \ / \ */ +/* \___\/\___\ */ +/**********************************************************************/ + +#if defined(_WIN32) + #include "stdio.h" + #define IKI_DLLESPEC __declspec(dllimport) +#else + #define IKI_DLLESPEC +#endif +#include "iki.h" +#include +#include +#ifdef __GNUC__ +#include +#else +#include +#define alloca _alloca +#endif +typedef void (*funcp)(char *, char *); +extern int main(int, char**); +IKI_DLLESPEC extern void execute_4(char*, char *); +IKI_DLLESPEC extern void execute_10(char*, char *); +IKI_DLLESPEC extern void execute_11(char*, char *); +IKI_DLLESPEC extern void execute_12(char*, char *); +IKI_DLLESPEC extern void execute_3(char*, char *); +IKI_DLLESPEC extern void execute_6(char*, char *); +IKI_DLLESPEC extern void execute_7(char*, char *); +IKI_DLLESPEC extern void execute_8(char*, char *); +IKI_DLLESPEC extern void execute_9(char*, char *); +IKI_DLLESPEC extern void execute_13(char*, char *); +IKI_DLLESPEC extern void execute_14(char*, char *); +IKI_DLLESPEC extern void execute_15(char*, char *); +IKI_DLLESPEC extern void execute_16(char*, char *); +IKI_DLLESPEC extern void execute_17(char*, char *); +IKI_DLLESPEC extern void execute_18(char*, char *); +IKI_DLLESPEC extern void vlog_transfunc_eventcallback(char*, char*, unsigned, unsigned, unsigned, char *); +funcp funcTab[16] = {(funcp)execute_4, (funcp)execute_10, (funcp)execute_11, (funcp)execute_12, (funcp)execute_3, (funcp)execute_6, (funcp)execute_7, (funcp)execute_8, (funcp)execute_9, (funcp)execute_13, (funcp)execute_14, (funcp)execute_15, (funcp)execute_16, (funcp)execute_17, (funcp)execute_18, (funcp)vlog_transfunc_eventcallback}; +const int NumRelocateId= 16; + +void relocate(char *dp) +{ + iki_relocate(dp, "xsim.dir/InstFetch_behav/xsim.reloc", (void **)funcTab, 16); + + /*Populate the transaction function pointer field in the whole net structure */ +} + +void sensitize(char *dp) +{ + iki_sensitize(dp, "xsim.dir/InstFetch_behav/xsim.reloc"); +} + +void simulate(char *dp) +{ + iki_schedule_processes_at_time_zero(dp, "xsim.dir/InstFetch_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 + iki_execute_processes(); + + // Schedule resolution functions for the multiply driven Verilog nets that have strength + // Schedule transaction functions for the singly driven Verilog nets that have strength + +} +#include "iki_bridge.h" +void relocate(char *); + +void sensitize(char *); + +void simulate(char *); + +extern SYSTEMCLIB_IMP_DLLSPEC void local_register_implicit_channel(int, char*); +extern SYSTEMCLIB_IMP_DLLSPEC int xsim_argc_copy ; +extern SYSTEMCLIB_IMP_DLLSPEC char** xsim_argv_copy ; + +int main(int argc, char **argv) +{ + iki_heap_initialize("ms", "isimmm", 0, 2147483648) ; + iki_set_xsimdir_location_if_remapped(argc, argv) ; + iki_set_sv_type_file_path_name("xsim.dir/InstFetch_behav/xsim.svtype"); + iki_set_crvs_dump_file_path_name("xsim.dir/InstFetch_behav/xsim.crvsdump"); + void* design_handle = iki_create_design("xsim.dir/InstFetch_behav/xsim.mem", (void *)relocate, (void *)sensitize, (void *)simulate, (void*)0, 0, isimBridge_getWdbWriter(), 0, argc, argv); + iki_set_rc_trial_count(100); + (void) design_handle; + return iki_simulate_design(); +} diff --git a/PipelineProcessor.sim/sim_1/behav/xsim/xsim.dir/InstFetch_behav/xsim.mem b/PipelineProcessor.sim/sim_1/behav/xsim/xsim.dir/InstFetch_behav/xsim.mem new file mode 100644 index 0000000..d055b5e Binary files /dev/null and b/PipelineProcessor.sim/sim_1/behav/xsim/xsim.dir/InstFetch_behav/xsim.mem differ diff --git a/PipelineProcessor.sim/sim_1/behav/xsim/xsim.dir/test_cpu_behav/Compile_Options.txt b/PipelineProcessor.sim/sim_1/behav/xsim/xsim.dir/test_cpu_behav/Compile_Options.txt new file mode 100644 index 0000000..28ad594 --- /dev/null +++ b/PipelineProcessor.sim/sim_1/behav/xsim/xsim.dir/test_cpu_behav/Compile_Options.txt @@ -0,0 +1 @@ +--incr --debug "typical" --relax --mt "2" -L "xil_defaultlib" -L "unisims_ver" -L "unimacro_ver" -L "secureip" -L "xpm" --snapshot "test_cpu_behav" "xil_defaultlib.test_cpu" "xil_defaultlib.glbl" -log "elaborate.log" diff --git a/PipelineProcessor.sim/sim_1/behav/xsim/xsim.dir/test_cpu_behav/TempBreakPointFile.txt b/PipelineProcessor.sim/sim_1/behav/xsim/xsim.dir/test_cpu_behav/TempBreakPointFile.txt new file mode 100644 index 0000000..fdbc612 --- /dev/null +++ b/PipelineProcessor.sim/sim_1/behav/xsim/xsim.dir/test_cpu_behav/TempBreakPointFile.txt @@ -0,0 +1 @@ +Breakpoint File Version 1.0 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 new file mode 100644 index 0000000..5f222df --- /dev/null +++ b/PipelineProcessor.sim/sim_1/behav/xsim/xsim.dir/test_cpu_behav/obj/xsim_2.c @@ -0,0 +1,389 @@ +/**********************************************************************/ +/* ____ ____ */ +/* / /\/ / */ +/* /___/ \ / */ +/* \ \ \/ */ +/* \ \ Copyright (c) 2003-2020 Xilinx, Inc. */ +/* / / All Right Reserved. */ +/* /---/ /\ */ +/* \ \ / \ */ +/* \___\/\___\ */ +/**********************************************************************/ + +#if defined(_WIN32) + #include "stdio.h" + #define IKI_DLLESPEC __declspec(dllimport) +#else + #define IKI_DLLESPEC +#endif +#include "iki.h" +#include +#include +#ifdef __GNUC__ +#include +#else +#include +#define alloca _alloca +#endif +/**********************************************************************/ +/* ____ ____ */ +/* / /\/ / */ +/* /___/ \ / */ +/* \ \ \/ */ +/* \ \ Copyright (c) 2003-2020 Xilinx, Inc. */ +/* / / All Right Reserved. */ +/* /---/ /\ */ +/* \ \ / \ */ +/* \___\/\___\ */ +/**********************************************************************/ + +#if defined(_WIN32) + #include "stdio.h" + #define IKI_DLLESPEC __declspec(dllimport) +#else + #define IKI_DLLESPEC +#endif +#include "iki.h" +#include +#include +#ifdef __GNUC__ +#include +#else +#include +#define alloca _alloca +#endif +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_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_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_8(char*, char *); +IKI_DLLESPEC extern void execute_9(char*, char *); +IKI_DLLESPEC extern void execute_10(char*, char *); +IKI_DLLESPEC extern void execute_11(char*, char *); +IKI_DLLESPEC extern void execute_12(char*, char *); +IKI_DLLESPEC extern void execute_13(char*, char *); +IKI_DLLESPEC extern void execute_14(char*, char *); +IKI_DLLESPEC extern void execute_15(char*, char *); +IKI_DLLESPEC extern void execute_16(char*, char *); +IKI_DLLESPEC extern void execute_17(char*, char *); +IKI_DLLESPEC extern void execute_18(char*, char *); +IKI_DLLESPEC extern void execute_19(char*, char *); +IKI_DLLESPEC extern void execute_20(char*, char *); +IKI_DLLESPEC extern void execute_21(char*, char *); +IKI_DLLESPEC extern void execute_22(char*, char *); +IKI_DLLESPEC extern void execute_24(char*, char *); +IKI_DLLESPEC extern void execute_25(char*, char *); +IKI_DLLESPEC extern void execute_26(char*, char *); +IKI_DLLESPEC extern void execute_27(char*, char *); +IKI_DLLESPEC extern void execute_28(char*, char *); +IKI_DLLESPEC extern void execute_29(char*, char *); +IKI_DLLESPEC extern void execute_30(char*, char *); +IKI_DLLESPEC extern void execute_31(char*, char *); +IKI_DLLESPEC extern void execute_32(char*, char *); +IKI_DLLESPEC extern void execute_33(char*, char *); +IKI_DLLESPEC extern void execute_34(char*, char *); +IKI_DLLESPEC extern void execute_35(char*, char *); +IKI_DLLESPEC extern void execute_36(char*, char *); +IKI_DLLESPEC extern void execute_37(char*, char *); +IKI_DLLESPEC extern void execute_38(char*, char *); +IKI_DLLESPEC extern void execute_39(char*, char *); +IKI_DLLESPEC extern void execute_40(char*, char *); +IKI_DLLESPEC extern void execute_41(char*, char *); +IKI_DLLESPEC extern void execute_42(char*, char *); +IKI_DLLESPEC extern void execute_43(char*, char *); +IKI_DLLESPEC extern void execute_44(char*, char *); +IKI_DLLESPEC extern void execute_45(char*, char *); +IKI_DLLESPEC extern void execute_46(char*, char *); +IKI_DLLESPEC extern void execute_47(char*, char *); +IKI_DLLESPEC extern void execute_48(char*, char *); +IKI_DLLESPEC extern void execute_49(char*, char *); +IKI_DLLESPEC extern void execute_50(char*, char *); +IKI_DLLESPEC extern void execute_51(char*, char *); +IKI_DLLESPEC extern void execute_52(char*, char *); +IKI_DLLESPEC extern void execute_53(char*, char *); +IKI_DLLESPEC extern void execute_54(char*, char *); +IKI_DLLESPEC extern void execute_55(char*, char *); +IKI_DLLESPEC extern void execute_56(char*, char *); +IKI_DLLESPEC extern void execute_57(char*, char *); +IKI_DLLESPEC extern void execute_58(char*, char *); +IKI_DLLESPEC extern void execute_59(char*, char *); +IKI_DLLESPEC extern void execute_60(char*, char *); +IKI_DLLESPEC extern void execute_61(char*, char *); +IKI_DLLESPEC extern void execute_62(char*, char *); +IKI_DLLESPEC extern void execute_63(char*, char *); +IKI_DLLESPEC extern void execute_64(char*, char *); +IKI_DLLESPEC extern void execute_65(char*, char *); +IKI_DLLESPEC extern void execute_66(char*, char *); +IKI_DLLESPEC extern void execute_67(char*, char *); +IKI_DLLESPEC extern void execute_68(char*, char *); +IKI_DLLESPEC extern void execute_69(char*, char *); +IKI_DLLESPEC extern void execute_70(char*, char *); +IKI_DLLESPEC extern void execute_71(char*, char *); +IKI_DLLESPEC extern void execute_72(char*, char *); +IKI_DLLESPEC extern void execute_73(char*, char *); +IKI_DLLESPEC extern void execute_74(char*, char *); +IKI_DLLESPEC extern void execute_75(char*, char *); +IKI_DLLESPEC extern void execute_76(char*, char *); +IKI_DLLESPEC extern void execute_77(char*, char *); +IKI_DLLESPEC extern void execute_78(char*, char *); +IKI_DLLESPEC extern void execute_79(char*, char *); +IKI_DLLESPEC extern void execute_80(char*, char *); +IKI_DLLESPEC extern void execute_81(char*, char *); +IKI_DLLESPEC extern void execute_82(char*, char *); +IKI_DLLESPEC extern void execute_83(char*, char *); +IKI_DLLESPEC extern void execute_84(char*, char *); +IKI_DLLESPEC extern void execute_85(char*, char *); +IKI_DLLESPEC extern void execute_86(char*, char *); +IKI_DLLESPEC extern void execute_87(char*, char *); +IKI_DLLESPEC extern void execute_88(char*, char *); +IKI_DLLESPEC extern void execute_89(char*, char *); +IKI_DLLESPEC extern void execute_90(char*, char *); +IKI_DLLESPEC extern void execute_91(char*, char *); +IKI_DLLESPEC extern void execute_92(char*, char *); +IKI_DLLESPEC extern void execute_93(char*, char *); +IKI_DLLESPEC extern void execute_94(char*, char *); +IKI_DLLESPEC extern void execute_95(char*, char *); +IKI_DLLESPEC extern void execute_96(char*, char *); +IKI_DLLESPEC extern void execute_97(char*, char *); +IKI_DLLESPEC extern void execute_98(char*, char *); +IKI_DLLESPEC extern void execute_99(char*, char *); +IKI_DLLESPEC extern void execute_100(char*, char *); +IKI_DLLESPEC extern void execute_101(char*, char *); +IKI_DLLESPEC extern void execute_102(char*, char *); +IKI_DLLESPEC extern void execute_103(char*, char *); +IKI_DLLESPEC extern void execute_104(char*, char *); +IKI_DLLESPEC extern void execute_105(char*, char *); +IKI_DLLESPEC extern void execute_106(char*, char *); +IKI_DLLESPEC extern void execute_107(char*, char *); +IKI_DLLESPEC extern void execute_108(char*, char *); +IKI_DLLESPEC extern void execute_109(char*, char *); +IKI_DLLESPEC extern void execute_110(char*, char *); +IKI_DLLESPEC extern void execute_111(char*, char *); +IKI_DLLESPEC extern void execute_112(char*, char *); +IKI_DLLESPEC extern void execute_113(char*, char *); +IKI_DLLESPEC extern void execute_114(char*, char *); +IKI_DLLESPEC extern void execute_115(char*, char *); +IKI_DLLESPEC extern void execute_116(char*, char *); +IKI_DLLESPEC extern void execute_117(char*, char *); +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_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_193(char*, char *); +IKI_DLLESPEC extern void execute_194(char*, char *); +IKI_DLLESPEC extern void execute_195(char*, char *); +IKI_DLLESPEC extern void execute_196(char*, char *); +IKI_DLLESPEC extern void execute_197(char*, char *); +IKI_DLLESPEC extern void execute_198(char*, char *); +IKI_DLLESPEC extern void execute_199(char*, char *); +IKI_DLLESPEC extern void execute_200(char*, char *); +IKI_DLLESPEC extern void execute_201(char*, char *); +IKI_DLLESPEC extern void execute_202(char*, char *); +IKI_DLLESPEC extern void execute_203(char*, char *); +IKI_DLLESPEC extern void execute_204(char*, char *); +IKI_DLLESPEC extern void execute_205(char*, char *); +IKI_DLLESPEC extern void execute_206(char*, char *); +IKI_DLLESPEC extern void execute_207(char*, char *); +IKI_DLLESPEC extern void execute_208(char*, char *); +IKI_DLLESPEC extern void execute_209(char*, char *); +IKI_DLLESPEC extern void execute_210(char*, char *); +IKI_DLLESPEC extern void execute_211(char*, char *); +IKI_DLLESPEC extern void execute_212(char*, char *); +IKI_DLLESPEC extern void execute_213(char*, char *); +IKI_DLLESPEC extern void execute_214(char*, char *); +IKI_DLLESPEC extern void execute_215(char*, char *); +IKI_DLLESPEC extern void execute_216(char*, char *); +IKI_DLLESPEC extern void execute_217(char*, char *); +IKI_DLLESPEC extern void execute_218(char*, char *); +IKI_DLLESPEC extern void execute_219(char*, char *); +IKI_DLLESPEC extern void execute_220(char*, char *); +IKI_DLLESPEC extern void execute_221(char*, char *); +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_228(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_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_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_255(char*, char *); +IKI_DLLESPEC extern void execute_256(char*, char *); +IKI_DLLESPEC extern void execute_257(char*, char *); +IKI_DLLESPEC extern void execute_258(char*, char *); +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_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_273(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_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_301(char*, char *); +IKI_DLLESPEC extern void execute_302(char*, char *); +IKI_DLLESPEC extern void execute_303(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_161(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 *); +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_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_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_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; + +void relocate(char *dp) +{ + iki_relocate(dp, "xsim.dir/test_cpu_behav/xsim.reloc", (void **)funcTab, 277); + + /*Populate the transaction function pointer field in the whole net structure */ +} + +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); + + iki_execute_processes(); + + // Schedule resolution functions for the multiply driven Verilog nets that have strength + // Schedule transaction functions for the singly driven Verilog nets that have strength + +} +#include "iki_bridge.h" +void relocate(char *); + +void sensitize(char *); + +void simulate(char *); + +extern SYSTEMCLIB_IMP_DLLSPEC void local_register_implicit_channel(int, char*); +extern SYSTEMCLIB_IMP_DLLSPEC int xsim_argc_copy ; +extern SYSTEMCLIB_IMP_DLLSPEC char** xsim_argv_copy ; + +int main(int argc, char **argv) +{ + iki_heap_initialize("ms", "isimmm", 0, 2147483648) ; + iki_set_xsimdir_location_if_remapped(argc, argv) ; + iki_set_sv_type_file_path_name("xsim.dir/test_cpu_behav/xsim.svtype"); + iki_set_crvs_dump_file_path_name("xsim.dir/test_cpu_behav/xsim.crvsdump"); + void* design_handle = iki_create_design("xsim.dir/test_cpu_behav/xsim.mem", (void *)relocate, (void *)sensitize, (void *)simulate, (void*)0, 0, isimBridge_getWdbWriter(), 0, argc, argv); + iki_set_rc_trial_count(100); + (void) design_handle; + return iki_simulate_design(); +} 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 new file mode 100644 index 0000000..b561ac3 Binary files /dev/null and b/PipelineProcessor.sim/sim_1/behav/xsim/xsim.dir/test_cpu_behav/xsim.mem differ diff --git a/PipelineProcessor.sim/sim_1/behav/xsim/xvlog.pb b/PipelineProcessor.sim/sim_1/behav/xsim/xvlog.pb new file mode 100644 index 0000000..b635ca2 Binary files /dev/null and b/PipelineProcessor.sim/sim_1/behav/xsim/xvlog.pb differ diff --git a/PipelineProcessor.srcs/sim_1/new/test_cpu.v b/PipelineProcessor.srcs/sim_1/new/test_cpu.v new file mode 100644 index 0000000..05e1272 --- /dev/null +++ b/PipelineProcessor.srcs/sim_1/new/test_cpu.v @@ -0,0 +1,20 @@ +`timescale 1ns / 1ps +module test_cpu (); + reg sim_clk = 0; + reg reset = 0; + wire [11:0] bcd_control; + wire clk_locked; + + initial begin + forever begin + #5 sim_clk <= ~sim_clk; + end + end + + CPU cpu( + .hardware_clk(sim_clk), + .reset(reset), + .clock_locked(clk_locked), + .bcd_control(bcd_control) + ); +endmodule diff --git a/PipelineProcessor.srcs/sources_1/new/ALU.v b/PipelineProcessor.srcs/sources_1/new/ALU.v index ec9f487..7813342 100644 --- a/PipelineProcessor.srcs/sources_1/new/ALU.v +++ b/PipelineProcessor.srcs/sources_1/new/ALU.v @@ -4,7 +4,7 @@ module ALU ( input [ 4:0] funct, input [31:0] in_1, input [31:0] in_2, - output [31:0] result + output reg [31:0] result ); wire lt_signed; @@ -14,24 +14,24 @@ module ALU ( always @(*) begin case (funct) - 5'b00000: result = in_1 & in_2; // 0, and - 5'b00001: result = in_1 | in_2; // 1, or - 5'b00010: result = in_1 + in_2; // 2, add - 5'b00110: result = in_1 - in_2; // 6, sub - 5'b00111: result = {31'b0, lt_signed}; // 7, slt signed - 5'b01000: result = {31'b0, in_1 < in_2}; // 8, slt unsigned - 5'b01100: result = ~(in_1 | in_2); // 12, nor - 5'b01101: result = in_1 ^ in_2; // 13, xor - 5'b10000: result = in_2 << in_1[4:0]; // 16, sll - 5'b10001: result = {31'b0, in_1 == in_2}; // 17, eq - 5'b10010: result = {31'b0, ~(in_1 == in_2)}; // 18, neq - 5'b10011: result = {31'b0, (in_1[31] == 1'b0 && in_1 != 32'h00000000)}; // 19, gtz - 5'b10100: result = {31'b0, in_1[31] == 1'b1}; // 20, ltz - 5'b10101: result = {31'b0, (in_1[31] == 1'b1 || in_1 == 32'h00000000)}; // 21, lez - 5'b11000: result = {in2 >> in1[4:0]}; // 24, srl - 5'b11001: result = {{32{in2[31]}}, in2} >> in1[4:0]; // 25, sra - 5'b11010: result = in1 * in2; // 26, mul - default: result = 31'h00000000; + 5'b00000: result <= in_1 & in_2; // 0, and + 5'b00001: result <= in_1 | in_2; // 1, or + 5'b00010: result <= in_1 + in_2; // 2, add + 5'b00110: result <= in_1 - in_2; // 6, sub + 5'b00111: result <= {31'b0, lt_signed}; // 7, slt signed + 5'b01000: result <= {31'b0, in_1 < in_2}; // 8, slt unsigned + 5'b01100: result <= ~(in_1 | in_2); // 12, nor + 5'b01101: result <= in_1 ^ in_2; // 13, xor + 5'b10000: result <= in_2 << in_1[4:0]; // 16, sll + 5'b10001: result <= {31'b0, in_1 == in_2}; // 17, eq + 5'b10010: result <= {31'b0, ~(in_1 == in_2)}; // 18, neq + 5'b10011: result <= {31'b0, (in_1[31] == 1'b0 && in_1 != 32'h00000000)}; // 19, gtz + 5'b10100: result <= {31'b0, in_1[31] == 1'b1}; // 20, ltz + 5'b10101: result <= {31'b0, (in_1[31] == 1'b1 || in_1 == 32'h00000000)}; // 21, lez + 5'b11000: result <= {in_2 >> in_1[4:0]}; // 24, srl + 5'b11001: result <= {{32{in_2[31]}}, in_2} >> in_1[4:0]; // 25, sra + 5'b11010: result <= in_1 * in_2; // 26, mul + default: result <= 31'h00000000; endcase end endmodule diff --git a/PipelineProcessor.srcs/sources_1/new/CPU.v b/PipelineProcessor.srcs/sources_1/new/CPU.v index 0514b48..a7ad8fa 100644 --- a/PipelineProcessor.srcs/sources_1/new/CPU.v +++ b/PipelineProcessor.srcs/sources_1/new/CPU.v @@ -2,6 +2,7 @@ module CPU ( input hardware_clk, input reset, + output clock_locked, output [11:0] bcd_control ); @@ -9,7 +10,8 @@ module CPU ( wire clk; phase_locked_loop pll ( .clk_in1 (hardware_clk), - .clk_out1(clk) + .clk_out1(clk), + .locked(clock_locked) ); // Out of IF @@ -94,7 +96,7 @@ module CPU ( .PC_branch(EX_PC_branch), .need_stall(hazard_IF_need_stall), .fetched_instruction(IF_fetched_instruction), - .PC_plus_4(IF_PC_plus_4), + .PC_plus_4(IF_PC_plus_4) ); InstDecode instruction_decode ( @@ -195,7 +197,7 @@ module CPU ( .prev_register_write_destination(MEM_register_write_destination), .register_write(WB_register_write), .register_write_data(WB_register_write_data), - .register_write_addr(WB_register_write_address), + .register_write_addr(WB_register_write_address) ); DataMemory data_memory ( @@ -222,7 +224,7 @@ module CPU ( .WB_register_write(WB_register_write), .WB_register_write_address(WB_register_write_address), .MEM_rt_address(MEM_rt_address), - .MEM_write_data_source(MEMforward_MEM_write_data_source), + .MEM_write_data_source(MEMforward_MEM_write_data_source) ); HazardUnit hazard_unit ( diff --git a/PipelineProcessor.srcs/sources_1/new/ExecutionForward.v b/PipelineProcessor.srcs/sources_1/new/ExecutionForward.v index 2081a71..10dcf1f 100644 --- a/PipelineProcessor.srcs/sources_1/new/ExecutionForward.v +++ b/PipelineProcessor.srcs/sources_1/new/ExecutionForward.v @@ -6,32 +6,32 @@ module ExecutionForward ( input [4:0] MEM_register_write_address, input WB_register_write, input [4:0] WB_register_write_address, - output [1:0] IDA_source, - output [1:0] IDB_source + output reg [1:0] IDA_source, + output reg [1:0] IDB_source ); always @(*) begin if (MEM_register_write == 1'b1 && MEM_register_write_address == EX_rs_address && EX_rs_address != 5'b00000) begin - IDA_source = 2'b00; + IDA_source <= 2'b00; end else begin if (WB_register_write == 1'b1 && WB_register_write_address == EX_rs_address && EX_rs_address != 5'b00000) begin - IDA_source = 2'b10; + IDA_source <= 2'b10; end else begin - IDA_source = 2'b00; + IDA_source <= 2'b00; end end if (MEM_register_write == 1'b1 && MEM_register_write_address == EX_rt_address && EX_rt_address != 5'b00000) begin - IDB_source = 2'b00; + IDB_source <= 2'b00; end else begin if (WB_register_write == 1'b1 && WB_register_write_address == EX_rt_address && EX_rt_address != 5'b00000) begin - IDB_source = 2'b10; + IDB_source <= 2'b10; end else begin - IDB_source = 2'b00; + IDB_source <= 2'b00; end end end diff --git a/PipelineProcessor.xpr b/PipelineProcessor.xpr index 3f0005a..480e77b 100644 --- a/PipelineProcessor.xpr +++ b/PipelineProcessor.xpr @@ -60,7 +60,7 @@