`timescale 1ns/1ns

module huawei7(
	input wire clk  ,
	input wire rst  ,
	output reg clk_out
);

//*************code***********//
reg [1:0] cnt;
reg [2:0] state;
parameter WAIT = 'b001;
parameter SEND = 'b010;
parameter WRIT = 'b100;

always @(posedge clk or negedge rst) 
begin
    if(rst == 1'b0)
        begin
            state <= WAIT;
        end
    case (state)
        WAIT: begin
            if(rst == 1'b1)
                begin
                    state <= SEND;
                end 
            else
                begin
                    state <= WRIT;
                end
            end
        WRIT: begin
            if(cnt == 2'd3)
                begin
                    state <= SEND;
                end
            else
                begin
                    state <= WRIT;
                end 
            end
        SEND:begin
            if(cnt == 2'd0)
                begin
                    state <= WRIT;
                end
            else
                begin
                    state <= SEND;
                end
        end
        default: state <= WAIT;
    endcase
end

always@(posedge clk or negedge rst)
begin
	if(rst == 1'b0)
		begin
			cnt <= 2'd3;
			clk_out <= 1'b0;
		end
	else if(cnt == 2'd3)
		begin
			cnt <= 2'd0;
			clk_out <= 1'b1;
		end
	else
		begin
			cnt <= cnt + 1'b1;
			clk_out <= 1'b0;
		end
end







//*************code***********//
endmodule

这个题出的不是太好,最简单的一个计数器就搞定了,非要用状态机的话,就会导致状态机用起来不伦不类。换言之就是复杂度用不到状态机。所以我这里就象征性的用了一个一阶段状态机表示一下状态,输出还是用平常的计数器做了。二阶段状态机真用不到,要是通过状态的变化来控制计数器,就得考虑延拍,这样就会出现状态跟输出不一致的问题。