assign ila_probe0[0]=is_write_read_flag; assign ila_probe0[1]=write_en; assign ila_probe0[2]=read_en; assign ila_probe0[3]=fifo_full; assign ila_probe0[4]=fifo_empty; assign ila_probe0[12:5]=write_data[7:0]; assign ila_probe0[20:13]=read_data[7:0]; assign ila_probe0[24:21]=system_state[3:0]; //always block ,1s triger onece to read write always@(posedge clk ornegedge rstn)begin if(rstn=='b0)begin counter_reg<='b0; end elsebegin if(counter_reg<(CLK_FREQ-'b1))counter_reg<=counter_reg+'b1; else counter_reg<='b0; end end //state machine always@(posedge clk ornegedge rstn)begin if(rstn=='b0)begin system_state_reg<='b0; state_timeout_reg<='b0; end elsebegin if(counter_reg==(CLK_FREQ-'b1))begin system_state_reg<=STATE_WRITE; state_timeout_reg<='b0; end elsebegin if(system_state_reg==STATE_WRITE)begin//write fifo state if(state_timeout_reg<'d256)state_timeout_reg<=state_timeout_reg+'b1; elsebegin state_timeout_reg<='b0; system_state_reg<=STATE_READ; end end elseif(system_state_reg==STATE_READ)begin//read fifo state if(state_timeout_reg<'d256)state_timeout_reg<=state_timeout_reg+'b1; elsebegin state_timeout_reg<='b0; system_state_reg<=STATE_IDLE; end end end end end //write read logic generate always@(posedge clk ornegedge rstn)begin if(rstn=='b0)begin write_data_reg<='b0; end elsebegin if(system_state_reg==STATE_WRITE)begin write_data_reg<=write_data_reg+'b1; read_en_reg='b0; write_en_reg<='b1; end elseif(system_state_reg==STATE_READ)begin write_data_reg<='b0; read_en_reg='b1; write_en_reg='b0; end elseif(system_state_reg==STATE_IDLE)begin write_data_reg<='b0; read_en_reg='b0; write_en_reg='b0; end end end
// 1s triger once to read write always @(posedge clk ornegedge rstn) begin if ( !rstn ) begin counter_reg <= 0; end elsebegin if ( counter_reg < (CLK_FREQ - 1'b1)) counter_reg <= counter_reg + 1'b1; else counter_reg <= 'b0; end end // state machine always @(posedge clk ornegedge rstn) begin if ( !rstn ) current_state <= STATE_IDLE; else current_state <= next_state; end
always @(*) begin case ( current_state ) STATE_IDLE: if (counter_reg == (CLK_FREQ - 1'b1)) next_state = STATE_WRITE; else next_state = STATE_IDLE; STATE_WRITE: if (state_timeout_reg == 'd256) next_state = STATE_READ; else next_state = STATE_WRITE; STATE_READ: if (state_timeout_reg == 'd256) next_state = STATE_IDLE; else next_state = STATE_READ; default: next_state = STATE_IDLE; endcase end
always @(*) begin if (!rstn) begin read_en_reg = 'b0; write_en_reg = 'b0; end elsebegin case (current_state) STATE_WRITE: begin read_en_reg = 'b0; write_en_reg = 'b1; end STATE_READ: begin read_en_reg = 'b1; write_en_reg = 'b0; end STATE_IDLE: begin read_en_reg = 'b0; write_en_reg = 'b0; end default: begin read_en_reg = 'b0; write_en_reg = 'b0; end endcase end end
always @(posedge clk ornegedge rstn) begin if (!rstn) begin write_data_reg <= 'b0; end elsebegin case (current_state) STATE_WRITE: write_data_reg <= write_data_reg + 'b1; STATE_READ: write_data_reg <= 'b0; STATE_IDLE: write_data_reg <= 'b0; default: write_data_reg <= 'b0; endcase end end
always @(posedge clk ornegedge rstn) begin if (!rstn) begin state_timeout_reg <= 0; end elsebegin case(current_state) STATE_WRITE: if (state_timeout_reg < 'd256) state_timeout_reg <= state_timeout_reg + 'b1; else state_timeout_reg <= 'b0; STATE_READ: if (state_timeout_reg < 'd256) state_timeout_reg <= state_timeout_reg + 'b1; else state_timeout_reg <= 'b0; default: state_timeout_reg <= 'b0; endcase end end