/*
1.https://blog.csdn.net/qq_45634652/article/details/137179556
2.https://blog.csdn.net/H19981118/article/details/141529623
3.https://www.baidu.com/link?url=R18NjfXtTOPfWDpgX5m4kr9MroGE5TMkqqn7afyrV7mcmh8khx6lyVRQQkE45q7R01NW96M_OPs98uoZuPMjtK&wd=&eqid=a660df4d0109eaa30000000568972172
*/
module nfc_design
(
input i_clk,
input i_rst_n,
input i_fifo_half_full,
input i_nfc_ready,
output reg o_nfc_valid,
output reg[15:0] o_nfc_data
);
localparam IDLE = 4'd0;
localparam SEND_OFF_DATA = 4'd1;
localparam SEND_OFF_DONE = 4'd2;
localparam SEND_ON_DATA = 4'd3;
localparam SEND_ON_DONE = 4'd4;
reg[3:0]nfc_ctrl_state;
always@(posedge i_clk or negedge i_rst_n)begin
if(i_rst_n==1'b0)begin
nfc_ctrl_state <= IDLE;
o_nfc_valid <= 1'b0;
o_nfc_data <= 'd0;
end
else begin
case(nfc_ctrl_state)
IDLE:begin
if(i_fifo_half_full)begin
nfc_ctrl_state <= SEND_OFF_DATA;
o_nfc_valid <= 1'b1;
o_nfc_data <= {7'd0,1'b1,8'd0};
end
end
SEND_OFF_DATA:begin
if(o_nfc_valid == 1'b1 && i_nfc_tready == 1'b1) begin
nfc_ctrl_state <= SEND_OFF_DONE;
o_nfc_valid <= 1'b0;
end
end
SEND_OFF_DONE:begin
if(!i_fifo_half_full) begin
nfc_ctrl_state <= SEND_ON_DATA;
o_nfc_valid <= 1'b1;
o_nfc_data <= {7'd0,1'b0,8'd0};
end
end
SEND_ON_DATA:begin
if(o_nfc_valid == 1'b1 && i_nfc_tready == 1'b1) begin
nfc_ctrl_state <= SEND_ON_DONE;
o_nfc_valid <= 1'b0;
end
end
SEND_ON_DONE:begin
nfc_ctrl_state <= IDLE;
o_nfc_valid <= 1'b0;
o_nfc_data <= {7'd0,1'b0,8'd0};
end
default:begin
;
end
endcase
end
end
endmodule