diff --git a/CPU9bits_tb_behav.wcfg b/CPU9bits_tb_behav.wcfg new file mode 100644 index 0000000..033cbe2 --- /dev/null +++ b/CPU9bits_tb_behav.wcfg @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + instruction[8:0] + instruction[8:0] + + + clk + clk + + + done + done + + + reset + reset + + + enable + enable + + + write_index[1:0] + write_index[1:0] + + + op0_idx[1:0] + op0_idx[1:0] + + + op1_idx[1:0] + op1_idx[1:0] + + + write_data[8:0] + write_data[8:0] + + + op0[8:0] + op0[8:0] + + + op1[8:0] + op1[8:0] + + + decOut[3:0] + decOut[3:0] + + + r0_out[8:0] + r0_out[8:0] + + + r1_out[8:0] + r1_out[8:0] + + + r2_out[8:0] + r2_out[8:0] + + + r3_out[8:0] + r3_out[8:0] + + + op_idx + op_idx + + + AddrIn[8:0] + AddrIn[8:0] + + + AddrOut[8:0] + AddrOut[8:0] + + + progC_out[8:0] + progC_out[8:0] + + + result_m[8:0] + result_m[8:0] + + + cout + cout + + diff --git a/lab2CA.sim/sim_1/behav/xsim/webtalk.jou b/lab2CA.sim/sim_1/behav/xsim/webtalk.jou index eb52ade..d81d9af 100644 --- a/lab2CA.sim/sim_1/behav/xsim/webtalk.jou +++ b/lab2CA.sim/sim_1/behav/xsim/webtalk.jou @@ -2,8 +2,8 @@ # Webtalk v2018.3 (64-bit) # SW Build 2405991 on Thu Dec 6 23:38:27 MST 2018 # IP Build 2404404 on Fri Dec 7 01:43:56 MST 2018 -# Start of session at: Thu Mar 14 14:24:20 2019 -# Process ID: 14664 +# Start of session at: Sat Mar 16 13:34:35 2019 +# Process ID: 4680 # Current directory: C:/Users/JoseIgnacio/CA Lab/lab2CA.sim/sim_1/behav/xsim # Command line: wbtcv.exe -mode batch -source C:/Users/JoseIgnacio/CA Lab/lab2CA.sim/sim_1/behav/xsim/xsim.dir/CPU9bits_tb_behav/webtalk/xsim_webtalk.tcl -notrace # Log file: C:/Users/JoseIgnacio/CA Lab/lab2CA.sim/sim_1/behav/xsim/webtalk.log diff --git a/lab2CA.sim/sim_1/behav/xsim/webtalk_12808.backup.jou b/lab2CA.sim/sim_1/behav/xsim/webtalk_14664.backup.jou similarity index 77% rename from lab2CA.sim/sim_1/behav/xsim/webtalk_12808.backup.jou rename to lab2CA.sim/sim_1/behav/xsim/webtalk_14664.backup.jou index cd841e1..eb52ade 100644 --- a/lab2CA.sim/sim_1/behav/xsim/webtalk_12808.backup.jou +++ b/lab2CA.sim/sim_1/behav/xsim/webtalk_14664.backup.jou @@ -2,10 +2,10 @@ # Webtalk v2018.3 (64-bit) # SW Build 2405991 on Thu Dec 6 23:38:27 MST 2018 # IP Build 2404404 on Fri Dec 7 01:43:56 MST 2018 -# Start of session at: Wed Mar 13 11:21:19 2019 -# Process ID: 12808 +# Start of session at: Thu Mar 14 14:24:20 2019 +# Process ID: 14664 # Current directory: C:/Users/JoseIgnacio/CA Lab/lab2CA.sim/sim_1/behav/xsim -# Command line: wbtcv.exe -mode batch -source C:/Users/JoseIgnacio/CA Lab/lab2CA.sim/sim_1/behav/xsim/xsim.dir/comparator_tb_behav/webtalk/xsim_webtalk.tcl -notrace +# Command line: wbtcv.exe -mode batch -source C:/Users/JoseIgnacio/CA Lab/lab2CA.sim/sim_1/behav/xsim/xsim.dir/CPU9bits_tb_behav/webtalk/xsim_webtalk.tcl -notrace # Log file: C:/Users/JoseIgnacio/CA Lab/lab2CA.sim/sim_1/behav/xsim/webtalk.log # Journal file: C:/Users/JoseIgnacio/CA Lab/lab2CA.sim/sim_1/behav/xsim\webtalk.jou #----------------------------------------------------------- diff --git a/lab2CA.sim/sim_1/behav/xsim/webtalk_17968.backup.jou b/lab2CA.sim/sim_1/behav/xsim/webtalk_4744.backup.jou similarity index 77% rename from lab2CA.sim/sim_1/behav/xsim/webtalk_17968.backup.jou rename to lab2CA.sim/sim_1/behav/xsim/webtalk_4744.backup.jou index f19d8f7..03fe54d 100644 --- a/lab2CA.sim/sim_1/behav/xsim/webtalk_17968.backup.jou +++ b/lab2CA.sim/sim_1/behav/xsim/webtalk_4744.backup.jou @@ -2,10 +2,10 @@ # Webtalk v2018.3 (64-bit) # SW Build 2405991 on Thu Dec 6 23:38:27 MST 2018 # IP Build 2404404 on Fri Dec 7 01:43:56 MST 2018 -# Start of session at: Wed Mar 13 11:20:32 2019 -# Process ID: 17968 +# Start of session at: Sat Mar 16 12:09:51 2019 +# Process ID: 4744 # Current directory: C:/Users/JoseIgnacio/CA Lab/lab2CA.sim/sim_1/behav/xsim -# Command line: wbtcv.exe -mode batch -source C:/Users/JoseIgnacio/CA Lab/lab2CA.sim/sim_1/behav/xsim/xsim.dir/comparator_tb_behav/webtalk/xsim_webtalk.tcl -notrace +# Command line: wbtcv.exe -mode batch -source C:/Users/JoseIgnacio/CA Lab/lab2CA.sim/sim_1/behav/xsim/xsim.dir/CPU9bits_tb_behav/webtalk/xsim_webtalk.tcl -notrace # Log file: C:/Users/JoseIgnacio/CA Lab/lab2CA.sim/sim_1/behav/xsim/webtalk.log # Journal file: C:/Users/JoseIgnacio/CA Lab/lab2CA.sim/sim_1/behav/xsim\webtalk.jou #----------------------------------------------------------- diff --git a/lab2CA.sim/sim_1/behav/xsim/xsim.dir/CPU9bits_tb_behav/obj/xsim_1.c b/lab2CA.sim/sim_1/behav/xsim/xsim.dir/CPU9bits_tb_behav/obj/xsim_1.c index e13ebca..ae6a047 100644 --- a/lab2CA.sim/sim_1/behav/xsim/xsim.dir/CPU9bits_tb_behav/obj/xsim_1.c +++ b/lab2CA.sim/sim_1/behav/xsim/xsim.dir/CPU9bits_tb_behav/obj/xsim_1.c @@ -46,16 +46,14 @@ typedef void (*funcp)(char *, char *); extern int main(int, char**); extern void execute_2(char*, char *); extern void execute_3(char*, char *); -extern void execute_135(char*, char *); -extern void execute_332(char*, char *); -extern void execute_333(char*, char *); -extern void execute_334(char*, char *); +extern void execute_137(char*, char *); +extern void execute_336(char*, char *); +extern void execute_337(char*, char *); +extern void execute_338(char*, char *); extern void vlog_const_rhs_process_execute_0_fast_no_reg_no_agg(char*, char*, char*); -extern void execute_316(char*, char *); -extern void execute_317(char*, char *); extern void execute_318(char*, char *); +extern void execute_319(char*, char *); extern void execute_320(char*, char *); -extern void execute_321(char*, char *); extern void execute_322(char*, char *); extern void execute_323(char*, char *); extern void execute_324(char*, char *); @@ -66,51 +64,55 @@ extern void execute_328(char*, char *); extern void execute_329(char*, char *); extern void execute_330(char*, char *); extern void execute_331(char*, char *); -extern void execute_140(char*, char *); -extern void execute_141(char*, char *); +extern void execute_332(char*, char *); +extern void execute_333(char*, char *); +extern void execute_334(char*, char *); +extern void execute_335(char*, char *); extern void execute_142(char*, char *); extern void execute_143(char*, char *); extern void execute_144(char*, char *); extern void execute_145(char*, char *); extern void execute_146(char*, char *); +extern void execute_147(char*, char *); +extern void execute_148(char*, char *); extern void execute_7(char*, char *); extern void execute_9(char*, char *); extern void execute_17(char*, char *); -extern void execute_166(char*, char *); extern void execute_168(char*, char *); -extern void execute_169(char*, char *); -extern void execute_147(char*, char *); -extern void execute_148(char*, char *); +extern void execute_170(char*, char *); +extern void execute_171(char*, char *); +extern void execute_149(char*, char *); +extern void execute_150(char*, char *); extern void execute_34(char*, char *); -extern void execute_278(char*, char *); -extern void execute_207(char*, char *); -extern void execute_188(char*, char *); -extern void execute_228(char*, char *); -extern void execute_229(char*, char *); +extern void execute_280(char*, char *); +extern void execute_209(char*, char *); +extern void execute_190(char*, char *); extern void execute_230(char*, char *); extern void execute_231(char*, char *); extern void execute_232(char*, char *); extern void execute_233(char*, char *); -extern void execute_275(char*, char *); -extern void execute_276(char*, char *); +extern void execute_234(char*, char *); +extern void execute_235(char*, char *); +extern void execute_277(char*, char *); +extern void execute_278(char*, char *); extern void execute_102(char*, char *); extern void execute_104(char*, char *); extern void execute_120(char*, char *); -extern void execute_137(char*, char *); -extern void execute_138(char*, char *); extern void execute_139(char*, char *); -extern void execute_335(char*, char *); -extern void execute_336(char*, char *); -extern void execute_337(char*, char *); -extern void execute_338(char*, char *); +extern void execute_140(char*, char *); +extern void execute_141(char*, char *); extern void execute_339(char*, char *); +extern void execute_340(char*, char *); +extern void execute_341(char*, char *); +extern void execute_342(char*, char *); +extern void execute_343(char*, char *); extern void vlog_transfunc_eventcallback(char*, char*, unsigned, unsigned, unsigned, char *); -funcp funcTab[61] = {(funcp)execute_2, (funcp)execute_3, (funcp)execute_135, (funcp)execute_332, (funcp)execute_333, (funcp)execute_334, (funcp)vlog_const_rhs_process_execute_0_fast_no_reg_no_agg, (funcp)execute_316, (funcp)execute_317, (funcp)execute_318, (funcp)execute_320, (funcp)execute_321, (funcp)execute_322, (funcp)execute_323, (funcp)execute_324, (funcp)execute_325, (funcp)execute_326, (funcp)execute_327, (funcp)execute_328, (funcp)execute_329, (funcp)execute_330, (funcp)execute_331, (funcp)execute_140, (funcp)execute_141, (funcp)execute_142, (funcp)execute_143, (funcp)execute_144, (funcp)execute_145, (funcp)execute_146, (funcp)execute_7, (funcp)execute_9, (funcp)execute_17, (funcp)execute_166, (funcp)execute_168, (funcp)execute_169, (funcp)execute_147, (funcp)execute_148, (funcp)execute_34, (funcp)execute_278, (funcp)execute_207, (funcp)execute_188, (funcp)execute_228, (funcp)execute_229, (funcp)execute_230, (funcp)execute_231, (funcp)execute_232, (funcp)execute_233, (funcp)execute_275, (funcp)execute_276, (funcp)execute_102, (funcp)execute_104, (funcp)execute_120, (funcp)execute_137, (funcp)execute_138, (funcp)execute_139, (funcp)execute_335, (funcp)execute_336, (funcp)execute_337, (funcp)execute_338, (funcp)execute_339, (funcp)vlog_transfunc_eventcallback}; -const int NumRelocateId= 61; +funcp funcTab[63] = {(funcp)execute_2, (funcp)execute_3, (funcp)execute_137, (funcp)execute_336, (funcp)execute_337, (funcp)execute_338, (funcp)vlog_const_rhs_process_execute_0_fast_no_reg_no_agg, (funcp)execute_318, (funcp)execute_319, (funcp)execute_320, (funcp)execute_322, (funcp)execute_323, (funcp)execute_324, (funcp)execute_325, (funcp)execute_326, (funcp)execute_327, (funcp)execute_328, (funcp)execute_329, (funcp)execute_330, (funcp)execute_331, (funcp)execute_332, (funcp)execute_333, (funcp)execute_334, (funcp)execute_335, (funcp)execute_142, (funcp)execute_143, (funcp)execute_144, (funcp)execute_145, (funcp)execute_146, (funcp)execute_147, (funcp)execute_148, (funcp)execute_7, (funcp)execute_9, (funcp)execute_17, (funcp)execute_168, (funcp)execute_170, (funcp)execute_171, (funcp)execute_149, (funcp)execute_150, (funcp)execute_34, (funcp)execute_280, (funcp)execute_209, (funcp)execute_190, (funcp)execute_230, (funcp)execute_231, (funcp)execute_232, (funcp)execute_233, (funcp)execute_234, (funcp)execute_235, (funcp)execute_277, (funcp)execute_278, (funcp)execute_102, (funcp)execute_104, (funcp)execute_120, (funcp)execute_139, (funcp)execute_140, (funcp)execute_141, (funcp)execute_339, (funcp)execute_340, (funcp)execute_341, (funcp)execute_342, (funcp)execute_343, (funcp)vlog_transfunc_eventcallback}; +const int NumRelocateId= 63; void relocate(char *dp) { - iki_relocate(dp, "xsim.dir/CPU9bits_tb_behav/xsim.reloc", (void **)funcTab, 61); + iki_relocate(dp, "xsim.dir/CPU9bits_tb_behav/xsim.reloc", (void **)funcTab, 63); /*Populate the transaction function pointer field in the whole net structure */ } diff --git a/lab2CA.sim/sim_1/behav/xsim/xsim.dir/CPU9bits_tb_behav/webtalk/xsim_webtalk.tcl b/lab2CA.sim/sim_1/behav/xsim/xsim.dir/CPU9bits_tb_behav/webtalk/xsim_webtalk.tcl index fb02517..20a4efa 100644 --- a/lab2CA.sim/sim_1/behav/xsim/xsim.dir/CPU9bits_tb_behav/webtalk/xsim_webtalk.tcl +++ b/lab2CA.sim/sim_1/behav/xsim/xsim.dir/CPU9bits_tb_behav/webtalk/xsim_webtalk.tcl @@ -1,6 +1,6 @@ webtalk_init -webtalk_dir C:/Users/JoseIgnacio/CA Lab/lab2CA.sim/sim_1/behav/xsim/xsim.dir/CPU9bits_tb_behav/webtalk/ webtalk_register_client -client project -webtalk_add_data -client project -key date_generated -value "Thu Mar 14 14:36:57 2019" -context "software_version_and_target_device" +webtalk_add_data -client project -key date_generated -value "Sat Mar 16 13:42:13 2019" -context "software_version_and_target_device" webtalk_add_data -client project -key product_version -value "XSIM v2018.3 (64-bit)" -context "software_version_and_target_device" webtalk_add_data -client project -key build_version -value "2405991" -context "software_version_and_target_device" webtalk_add_data -client project -key os_platform -value "WIN64" -context "software_version_and_target_device" @@ -14,7 +14,7 @@ webtalk_add_data -client project -key target_package -value "not_applicable" -co webtalk_add_data -client project -key target_speed -value "not_applicable" -context "software_version_and_target_device" webtalk_add_data -client project -key random_id -value "17336daf-0d92-4f07-b4a4-ff1c52043edb" -context "software_version_and_target_device" webtalk_add_data -client project -key project_id -value "0a5803efda44405bb28bbf43ba22e808" -context "software_version_and_target_device" -webtalk_add_data -client project -key project_iteration -value "45" -context "software_version_and_target_device" +webtalk_add_data -client project -key project_iteration -value "53" -context "software_version_and_target_device" webtalk_add_data -client project -key os_name -value "Microsoft Windows 8 or later , 64-bit" -context "user_environment" webtalk_add_data -client project -key os_release -value "major release (build 9200)" -context "user_environment" webtalk_add_data -client project -key cpu_name -value "Intel(R) Core(TM) i5-3230M CPU @ 2.60GHz" -context "user_environment" @@ -22,11 +22,21 @@ webtalk_add_data -client project -key cpu_speed -value "2594 MHz" -context "user webtalk_add_data -client project -key total_processors -value "1" -context "user_environment" webtalk_add_data -client project -key system_ram -value "8.000 GB" -context "user_environment" webtalk_register_client -client xsim -webtalk_add_data -client xsim -key Command -value "xsim" -context "xsim\\command_line_options" -webtalk_add_data -client xsim -key trace_waveform -value "true" -context "xsim\\usage" -webtalk_add_data -client xsim -key runtime -value "70 ns" -context "xsim\\usage" -webtalk_add_data -client xsim -key iteration -value "0" -context "xsim\\usage" -webtalk_add_data -client xsim -key Simulation_Time -value "0.00_sec" -context "xsim\\usage" -webtalk_add_data -client xsim -key Simulation_Memory -value "5712_KB" -context "xsim\\usage" -webtalk_transmit -clientid 920060351 -regid "" -xml C:/Users/JoseIgnacio/CA Lab/lab2CA.sim/sim_1/behav/xsim/xsim.dir/CPU9bits_tb_behav/webtalk/usage_statistics_ext_xsim.xml -html C:/Users/JoseIgnacio/CA Lab/lab2CA.sim/sim_1/behav/xsim/xsim.dir/CPU9bits_tb_behav/webtalk/usage_statistics_ext_xsim.html -wdm C:/Users/JoseIgnacio/CA Lab/lab2CA.sim/sim_1/behav/xsim/xsim.dir/CPU9bits_tb_behav/webtalk/usage_statistics_ext_xsim.wdm -intro "

XSIM Usage Report


" +webtalk_add_data -client xsim -key File_Counter -value "7" -context "xsim\\command_line_options" +webtalk_add_data -client xsim -key Command -value "xelab" -context "xsim\\command_line_options" +webtalk_add_data -client xsim -key Vhdl2008 -value "false" -context "xsim\\command_line_options" +webtalk_add_data -client xsim -key GenDLL -value "false" -context "xsim\\command_line_options" +webtalk_add_data -client xsim -key SDFModeling -value "false" -context "xsim\\command_line_options" +webtalk_add_data -client xsim -key HWCosim -value "false" -context "xsim\\command_line_options" +webtalk_add_data -client xsim -key DPI_Used -value "false" -context "xsim\\command_line_options" +webtalk_add_data -client xsim -key Debug -value "typical" -context "xsim\\command_line_options" +webtalk_add_data -client xsim -key Simulation_Image_Code -value "92 KB" -context "xsim\\usage" +webtalk_add_data -client xsim -key Simulation_Image_Data -value "15 KB" -context "xsim\\usage" +webtalk_add_data -client xsim -key Total_Nets -value "0" -context "xsim\\usage" +webtalk_add_data -client xsim -key Total_Processes -value "230" -context "xsim\\usage" +webtalk_add_data -client xsim -key Total_Instances -value "118" -context "xsim\\usage" +webtalk_add_data -client xsim -key Xilinx_HDL_Libraries_Used -value "secureip unimacro_ver unisims_ver " -context "xsim\\usage" +webtalk_add_data -client xsim -key Compiler_Time -value "0.92_sec" -context "xsim\\usage" +webtalk_add_data -client xsim -key Compiler_Memory -value "42696_KB" -context "xsim\\usage" +webtalk_transmit -clientid 3357111948 -regid "" -xml C:/Users/JoseIgnacio/CA Lab/lab2CA.sim/sim_1/behav/xsim/xsim.dir/CPU9bits_tb_behav/webtalk/usage_statistics_ext_xsim.xml -html C:/Users/JoseIgnacio/CA Lab/lab2CA.sim/sim_1/behav/xsim/xsim.dir/CPU9bits_tb_behav/webtalk/usage_statistics_ext_xsim.html -wdm C:/Users/JoseIgnacio/CA Lab/lab2CA.sim/sim_1/behav/xsim/xsim.dir/CPU9bits_tb_behav/webtalk/usage_statistics_ext_xsim.wdm -intro "

XSIM Usage Report


" webtalk_terminate diff --git a/lab2CA.sim/sim_1/behav/xsim/xsim.dir/CPU9bits_tb_behav/xsim.mem b/lab2CA.sim/sim_1/behav/xsim/xsim.dir/CPU9bits_tb_behav/xsim.mem index 3b54dd3..ad10912 100644 Binary files a/lab2CA.sim/sim_1/behav/xsim/xsim.dir/CPU9bits_tb_behav/xsim.mem and b/lab2CA.sim/sim_1/behav/xsim/xsim.dir/CPU9bits_tb_behav/xsim.mem differ diff --git a/lab2CA.srcs/sources_1/new/CPU9bits.v b/lab2CA.srcs/sources_1/new/CPU9bits.v index 2674138..b866e9f 100644 --- a/lab2CA.srcs/sources_1/new/CPU9bits.v +++ b/lab2CA.srcs/sources_1/new/CPU9bits.v @@ -6,10 +6,10 @@ module CPU9bits( output wire done ); - wire [8:0] op1, op0, FUAddr,FUJB,PCout,JBRes,FUJ,FUB,AddiOut,AluOut,RFIn, loadMux, dataMemOut; + wire [8:0] op1, op0, FUAddr,FUJB,PCout,JBRes,FUJ,FUB,AddiOut,AluOut,RFIn, loadMux, dataMemOut, linkData; wire [2:0] FU; wire [3:0] aluOp; - wire addiS, RegEn, loadS, fetchBranch, halt, cout0, cout1; + wire addiS, RegEn, loadS, fetchBranch, halt, cout0, cout1, link; RegFile RF( .clk(clk), @@ -46,7 +46,8 @@ module CPU9bits( .addi(addiS), .mem(loadS), .RegEn(RegEn), - .halt(done) + .halt(done), + .link(link) ); @@ -60,28 +61,28 @@ module CPU9bits( .Cout(cout0)); mux_2_1 mux1( - .A(op1), + .A(op0), .B(FUJB), .out(FUAddr), .switch(FU[1])); mux_2_1 mux2( - .A({4'b0000,instr[4:0]}), //Jump - .B({6'b000000,instr[2:0]}),//Branch + .A({4'b0000,instr[4:0]}), //Jump -- Change with signer module! + .B({6'b000000,instr[2:0]}),//Branch -- Change with signer module! .out(JBRes), .switch(FU[2])); bit1_mux_2_1 BranMux( // BEQ MUX .A(FU[0]), - .B(op1[0]), + .B(op0[0]), .out(fetchBranch), .switch(FU[2])); // FU[2] only goes high when BEQ ///--------------------------Addi Stuff add_9bit Addier( - .A({6'b000000,instr[2:0]}), - .B(op1), + .A({6'b000000,instr[2:0]}), // Change with signer module! + .B(op0), .Cin(1'b0), .Sum(AddiOut), .Cout(cout1)); @@ -92,11 +93,22 @@ module CPU9bits( .out(loadMux), .switch(addiS)); + + ///--------------------------Mem stuff + mux_2_1 mux4( - .A(loadMux), - .B(9'b000000001), + .A(linkData), + .B(9'b000000001), // This is DATA MEM .out(RFIn), .switch(loadS)); + + ///--------------------------Link Stuff + + mux_2_1 mux5( + .A(loadMux), + .B(PCout), + .out(linkData), + .switch(link)); endmodule @@ -133,6 +145,8 @@ module CPU9bits_tb(); #10 instruction = 9'b111100000; #10 + instruction = 9'b001101000; + #10 instruction = 9'b000000000; #10 $finish; diff --git a/lab2CA.srcs/sources_1/new/ControlUnit.v b/lab2CA.srcs/sources_1/new/ControlUnit.v index 6f716ed..3722fe7 100644 --- a/lab2CA.srcs/sources_1/new/ControlUnit.v +++ b/lab2CA.srcs/sources_1/new/ControlUnit.v @@ -8,7 +8,8 @@ module ControlUnit( output reg addi, output reg mem, output reg RegEn, - output reg halt); + output reg halt, + output reg link); always @(instIn, functBit)begin case(instIn) @@ -20,6 +21,7 @@ module ControlUnit( halt <= 1'b0; addi <= 1'b0; mem <= 1'b0; + link <= 1'b0; end else begin aluOut <= 4'b0000; //Add @@ -28,6 +30,7 @@ module ControlUnit( halt <= 1'b0; addi <= 1'b0; mem <= 1'b0; + link <= 1'b0; end 4'b1101: begin aluOut <= 4'b0011; //nor @@ -36,6 +39,7 @@ module ControlUnit( halt <= 1'b0; addi <= 1'b0; mem <= 1'b0; + link <= 1'b0; end 4'b1110: if(functBit == 1) begin @@ -45,6 +49,7 @@ module ControlUnit( halt <= 1'b0; addi <= 1'b0; mem <= 1'b0; + link <= 1'b0; end else begin aluOut <= 4'b0010; //or @@ -53,6 +58,7 @@ module ControlUnit( halt <= 1'b0; addi <= 1'b0; mem <= 1'b0; + link <= 1'b0; end 4'b1111: if(functBit == 1) begin @@ -62,6 +68,7 @@ module ControlUnit( halt <= 1'b0; addi <= 1'b0; mem <= 1'b0; + link <= 1'b0; end else begin aluOut <= 4'b0101; //shift left @@ -70,6 +77,7 @@ module ControlUnit( halt <= 1'b0; addi <= 1'b0; mem <= 1'b0; + link <= 1'b0; end 4'b0111: begin aluOut <= 4'b1001; //Less than @@ -78,6 +86,7 @@ module ControlUnit( halt <= 1'b0; addi <= 1'b0; mem <= 1'b0; + link <= 1'b0; end 4'b0110: begin aluOut <= 4'b0000; @@ -86,14 +95,25 @@ module ControlUnit( FU <= 3'b001; // Disable Branching halt <= 1'b0; mem <= 1'b0; + link <= 1'b0; end - 4'b1001: begin //We got it wrong, first bit must always be zero whenever branching happens. Fixed + 4'b1001: begin aluOut <= 4'b0000; FU <= 3'b010; // jump RegEn <= 1'b1; halt <= 1'b0; addi <= 1'b0; mem <= 1'b0; + link <= 1'b0; + end + 4'b0011: begin // link + halt <= 1'b0; + RegEn <= 1'b0; + FU <= 3'b001; + addi <= 1'b0; + aluOut <= 4'b0000; + mem <= 1'b0; + link <= 1'b1; end 4'b1010: begin aluOut <= 4'b0000; @@ -102,6 +122,7 @@ module ControlUnit( halt <= 1'b0; addi <= 1'b0; mem <= 1'b0; + link <= 1'b0; end 4'b1000: begin aluOut <= 4'b0000; @@ -110,6 +131,7 @@ module ControlUnit( halt <= 1'b0; addi <= 1'b0; mem <= 1'b0; + link <= 1'b0; end 4'b0001: begin aluOut <= 4'b0000; @@ -118,6 +140,7 @@ module ControlUnit( FU <= 3'b001; // Disable Branching addi <= 1'b0; halt <= 1'b0; + link <= 1'b0; end 4'b0010: begin aluOut <= 4'b0000; @@ -126,6 +149,7 @@ module ControlUnit( FU <= 3'b001; // Disable Branching halt <= 1'b0; addi <= 1'b0; + link <= 1'b0; end 4'b0000: begin // regs should initialize at 0, so we shouldn't need to declare it everywhere halt <= 1'b1; // halt @@ -134,6 +158,7 @@ module ControlUnit( addi <= 1'b0; aluOut <= 4'b0000; mem <= 1'b0; + link <= 1'b0; end default: begin halt <= 1'b1; @@ -142,6 +167,7 @@ module ControlUnit( addi <= 1'b0; aluOut <= 4'b0000; mem <= 1'b0; + link <= 1'b0; end endcase end diff --git a/lab2CA.xpr b/lab2CA.xpr index 3dadb41..7550d07 100644 --- a/lab2CA.xpr +++ b/lab2CA.xpr @@ -31,7 +31,7 @@