i'm beginner in verilog and digital circuits, and i have one doubt in the code below. In this code i made a state machine that saves values in a "reg" into another module in verilog. I made this code just to explain my doubt:
//STATE MACHINE module RegTest(clk,enable,reset, readData1_out); parameter State1 = 0; parameter State2 = 1; parameter State3 = 2; parameter State4 = 3; parameter State5 = 4; parameter State6 = 5; parameter State7 = 6; parameter State8 = 7; parameter State9 = 8; parameter State10 = 9; parameter Beg = 10; input clk, enable, reset; output readData1_out; wire clk,enable, reset; reg[5:0] State; reg writeEn ; reg [15:0] writeData; wire [15:0] readData1; wire writeEn_out = writeEn; RegFile registrador_component ( .dataIn(writeData), .dataOut(readData1), .clock(clk), .writeEnable(writeEn) ); defparam registrador_component.WIDTH = 16; always @(posedge clk or posedge reset) begin if (reset) begin State = Beg; end else begin case (State) Beg: begin State = State1; end State1: begin writeEn = 1 ; writeData = 10; State = State2; end State2: begin writeEn = 0 ; State = State3; end State3: begin writeEn = 1; writeData = readData1 + 10; State = State4; end State4: begin writeEn = 0 ; State = State5; end State5: begin writeEn = 1 ; writeData = readData1 + 10; State = State6; end State6: begin writeEn = 0 ; State = State7; end State7: begin writeEn = 1 ; writeData = readData1 + 10; State = State8; end State8: begin writeEn = 0 ; State = State9; end endcase end end endmodule //Example of a register file module RegFile(clock, writeEnable, dataIn, dataOut); parameter WIDTH = 16; input clock, writeEnable; input [WIDTH-1 : 0] dataIn; output [WIDTH-1 : 0] dataOut; wire [WIDTH-1 : 0] dataOut; reg [WIDTH-1 : 0] wha; assign dataOut = wha; always@( posedge clock) begin if (writeEnable) wha = dataIn; end endmodule My doubt is, why do I need to wait 1 cycle to get the value that is stored in RegFile? Why can't I skip the State2 for example?