I have designed a MIPS single cycle processor in Xilinx using VHDL. The abstract design is based on the theory provided by Patterson and Henessy book. After completing the design i ran few assembly codes to check it's functioning and it was giving the desired results. My problem is with the "TIMING SUMMARY" in the design summary report(".SYR" file). Every time I change the assembly code that is stored in the Instruction memory(which is my ROM) the minimum clock period for the single cycle processor keeps changing. I don't quite understand the reason?
Timing Summary: --------------- Speed Grade: -4 Minimum period: 17.561ns (Maximum Frequency: 56.945MHz) Minimum input arrival time before clock: No path found Maximum output required time after clock: 16.296ns Maximum combinational path delay: No path found Timing Detail: -------------- All values displayed in nanoseconds (ns) ========================================================================= Timing constraint: Default period analysis for Clock 'clk' Clock period: 17.561ns (frequency: 56.945MHz) Total number of paths / destination ports: 6965792 / 616 ------------------------------------------------------------------------- Delay: 17.561ns (Levels of Logic = 22) Source: MIPS_processor_unit/Datapath_comp/PC_reg/q_5_1 (FF) Destination: MIPS_processor_unit/Datapath_comp/RegF/memory_0_0 (FF) Source Clock: clk rising Destination Clock: clk rising Data Path: MIPS_processor_unit/Datapath_comp/PC_reg/q_5_1 to MIPS_processor_unit/Datapath_comp/RegF/memory_0_0 Gate Net Cell:in->out fanout Delay Delay Logical Name (Net Name) ---------------------------------------- ------------ FDCE:C->Q 2 0.591 0.622 MIPS_processor_unit/Datapath_comp/PC_reg/q_5_1 >>(MIPS_processor_unit/Datapath_comp/PC_reg/q_5_1) LUT2_L:I0->LO 1 0.704 0.104 Instruction_memory_unit/Mrom_Instruction_out391220_SW0 (N1361) LUT4:I3->O 3 0.704 0.535 Instruction_memory_unit/Mrom_Instruction_out391236_SW0 (N141) LUT4:I3->O 17 0.704 1.051 Instruction_memory_unit/Mrom_Instruction_out391236 (Instruction_tl_s) MUXF5:S->O 2 0.739 0.526 MIPS_processor_unit/Datapath_comp/RegF/mux8_8_f5 (MIPS_processor_unit/Datapath_comp/RegF/mux8_8_f5) LUT4:I1->O 1 0.704 0.000 MIPS_processor_unit/Datapath_comp/ALUSrc_mux/y1_F (N276) MUXF5:I0->O 3 0.321 0.610 MIPS_processor_unit/Datapath_comp/ALUSrc_mux/y1 (MIPS_processor_unit/Datapath_comp/ALU_2nd_input_s) LUT2:I1->O 1 0.704 0.000 MIPS_processor_unit/Datapath_comp/ALU_comp/Msub_y_sig_addsub0001_lut (MIPS_processor_unit/Datapath_comp/ALU_comp/Msub_y_sig_addsub0001_lut) MUXCY:S->O 1 0.464 0.000 MIPS_processor_unit/Datapath_comp/ALU_comp/Msub_y_sig_addsub0001_cy (MIPS_processor_unit/Datapath_comp/ALU_comp/Msub_y_sig_addsub0001_cy) MUXCY:CI->O 1 0.059 0.000 MIPS_processor_unit/Datapath_comp/ALU_comp/Msub_y_sig_addsub0001_cy (MIPS_processor_unit/Datapath_comp/ALU_comp/Msub_y_sig_addsub0001_cy) MUXCY:CI->O 1 0.059 0.000 MIPS_processor_unit/Datapath_comp/ALU_comp/Msub_y_sig_addsub0001_cy (MIPS_processor_unit/Datapath_comp/ALU_comp/Msub_y_sig_addsub0001_cy) MUXCY:CI->O 1 0.059 0.000 MIPS_processor_unit/Datapath_comp/ALU_comp/Msub_y_sig_addsub0001_cy (MIPS_processor_unit/Datapath_comp/ALU_comp/Msub_y_sig_addsub0001_cy) MUXCY:CI->O 1 0.059 0.000 MIPS_processor_unit/Datapath_comp/ALU_comp/Msub_y_sig_addsub0001_cy (MIPS_processor_unit/Datapath_comp/ALU_comp/Msub_y_sig_addsub0001_cy) MUXCY:CI->O 1 0.059 0.000 MIPS_processor_unit/Datapath_comp/ALU_comp/Msub_y_sig_addsub0001_cy (MIPS_processor_unit/Datapath_comp/ALU_comp/Msub_y_sig_addsub0001_cy) MUXCY:CI->O 0 0.059 0.000 MIPS_processor_unit/Datapath_comp/ALU_comp/Msub_y_sig_addsub0001_cy (MIPS_processor_unit/Datapath_comp/ALU_comp/Msub_y_sig_addsub0001_cy) XORCY:CI->O 1 0.804 0.424 MIPS_processor_unit/Datapath_comp/ALU_comp/Msub_y_sig_addsub0001_xor (MIPS_processor_unit/Datapath_comp/ALU_comp/y_sig_addsub0001) LUT4:I3->O 1 0.704 0.000 MIPS_processor_unit/Datapath_comp/ALU_comp/y_sig_mux0000_f5_G (N237) MUXF5:I1->O 259 0.321 1.334 MIPS_processor_unit/Datapath_comp/ALU_comp/y_sig_mux0000_f5 (Output_address_0_OBUF) RAM32X1S:A0->O 1 1.025 0.499 Data_memory_unit/Mram_data_mem1 (N10) LUT3:I1->O 1 0.704 0.000 inst_LPM_MUX_6 (inst_LPM_MUX_6) MUXF5:I0->O 1 0.321 0.000 inst_LPM_MUX_4_f5 (inst_LPM_MUX_4_f5) MUXF6:I0->O 1 0.521 0.455 inst_LPM_MUX_2_f6 (Read_data_tl_s) LUT3:I2->O 8 0.704 0.000 MIPS_processor_unit/Datapath_comp/WB_mux/y1 (MIPS_processor_unit/Datapath_comp/write_data_s) FDCE:D 0.308 MIPS_processor_unit/Datapath_comp/RegF/memory_0_0 ---------------------------------------- Total 17.561ns (11.401ns logic, 6.160ns route) (64.9% logic, 35.1% route) =========================================================================
Timing Summary: --------------- Speed Grade: -4 Minimum period: 13.551ns (Maximum Frequency: 73.798MHz) Minimum input arrival time before clock: No path found Maximum output required time after clock: 14.466ns Maximum combinational path delay: No path found Timing Detail: -------------- All values displayed in nanoseconds (ns) ========================================================================= Timing constraint: Default period analysis for Clock 'clk' Clock period: 13.551ns (frequency: 73.798MHz) Total number of paths / destination ports: 256927 / 278 ------------------------------------------------------------------------- Delay: 13.551ns (Levels of Logic = 13) Source: MIPS_processor_unit/Datapath_comp/PC_reg/q_6 (FF) Destination: MIPS_processor_unit/Datapath_comp/PC_reg/q_2 (FF) Source Clock: clk rising Destination Clock: clk rising Data Path: MIPS_processor_unit/Datapath_comp/PC_reg/q_6 to MIPS_processor_unit/Datapath_comp/PC_reg/q_2 Gate Net Cell:in->out fanout Delay Delay Logical Name (Net Name) ---------------------------------------- ------------ FDCE:C->Q 71 0.591 1.354 MIPS_processor_unit/Datapath_comp/PC_reg/q_6 (MIPS_processor_unit/Datapath_comp/PC_reg/q_6) LUT3_D:I1->O 8 0.704 0.761 Instruction_memory_unit/Mrom_Instruction_out4711110 (N91) LUT4:I3->O 17 0.704 1.051 Instruction_memory_unit/Mrom_Instruction_out43111_2 (Instruction_memory_unit/Mrom_Instruction_out43111_1) MUXF5:S->O 1 0.739 0.000 MIPS_processor_unit/Datapath_comp/RegF/mux3_7_f5_0 (MIPS_processor_unit/Datapath_comp/RegF/mux3_7_f51) MUXF6:I0->O 1 0.521 0.424 MIPS_processor_unit/Datapath_comp/RegF/mux3_5_f6_0 (MIPS_processor_unit/Datapath_comp/RegF/mux3_5_f61) LUT4:I3->O 1 0.704 0.424 MIPS_processor_unit/Datapath_comp/RegF/read_data_11 (MIPS_processor_unit/Datapath_comp/read_data_1_s) LUT4:I3->O 1 0.704 0.000 MIPS_processor_unit/Datapath_comp/ALU_comp/Maddsub_y_sig_addsub0000_lut (MIPS_processor_unit/Datapath_comp/ALU_comp/Maddsub_y_sig_addsub0000_lut) MUXCY:S->O 1 0.464 0.000 MIPS_processor_unit/Datapath_comp/ALU_comp/Maddsub_y_sig_addsub0000_cy (MIPS_processor_unit/Datapath_comp/ALU_comp/Maddsub_y_sig_addsub0000_cy) MUXCY:CI->O 1 0.059 0.000 MIPS_processor_unit/Datapath_comp/ALU_comp/Maddsub_y_sig_addsub0000_cy (MIPS_processor_unit/Datapath_comp/ALU_comp/Maddsub_y_sig_addsub0000_cy) MUXCY:CI->O 1 0.059 0.000 MIPS_processor_unit/Datapath_comp/ALU_comp/Maddsub_y_sig_addsub0000_cy (MIPS_processor_unit/Datapath_comp/ALU_comp/Maddsub_y_sig_addsub0000_cy) MUXCY:CI->O 0 0.059 0.000 MIPS_processor_unit/Datapath_comp/ALU_comp/Maddsub_y_sig_addsub0000_cy (MIPS_processor_unit/Datapath_comp/ALU_comp/Maddsub_y_sig_addsub0000_cy) XORCY:CI->O 18 0.804 1.072 MIPS_processor_unit/Datapath_comp/ALU_comp/Maddsub_y_sig_addsub0000_xor (MIPS_processor_unit/Datapath_comp/write_data_s) LUT4_D:I3->O 5 0.704 0.637 MIPS_processor_unit/Controller_comp/PCSrc9 (MIPS_processor_unit/Controller_comp/PCSrc9) LUT4:I3->O 1 0.704 0.000 MIPS_processor_unit/Datapath_comp/Jump_mux/y1 (MIPS_processor_unit/Datapath_comp/Next_PC_1_s) FDCE:D 0.308 MIPS_processor_unit/Datapath_comp/PC_reg/q_6 ---------------------------------------- Total 13.551ns (7.828ns logic, 5.723ns route) (57.8% logic, 42.2% route) =========================================================================
As can be seen I gave my Instruction_memory_unit two different assembly codes and the minimum period for the single cycle processor changes.These are my doubts:
1)Every time I change my assembly codes, does xilinx evaluate the critical path on the basis of the instructions that i have specified in my assembly code? If 'Yes', then how should i get a general minimum period for my design?
2)I have RegF as my Register file which is basically the RAM containing the 32 registers of a MIPS processor. What I can't understand is that, in both these timing summary the 'Gate delay + Net Delay' is different. Theoretically, shouldn't the register file being a memory have a fixed read time?