欢迎光临
我们一直在努力

字母的序列检测(赋代码和状态转移图)

        题目:数据流输入data_in为8位宽数据,数据形式遵循下里面ascii码表,每一个字符对应一个8bit有效数据。要求完成能识别“$GNRMC”序列,识别成功输出1;识别“$GPRMC”序列,识别成功输出2;其他情况输出0。需要编写仿真自行验证功能。

如果有什么问题,欢迎来讨论。

下面是代码

module ASCII(

    input  wire     clk         ,
    input  wire     rst_n     ,
    input  wire [7:0] data_in , //
    output reg  [1:0] signal    //输出状态
);
    reg [3:0] state;
    parameter idle     = 4'd0;
    parameter s0     = 4'd1;
    parameter s1    = 4'd2;
    parameter s2    = 4'd3;
    parameter s3    = 4'd4;
    parameter s4    = 4'd5;
    parameter s5    = 4'd6;
    parameter s6    = 4'd7;
    parameter s7    = 4'd8;
    parameter s8    = 4'd9;
    parameter s9    = 4'd10;

always @(posedge clk,negedge rst_n)
begin
    if(~rst_n)
        state <= idle;
    else case (state)
    idle:begin              ///空闲
        if(data_in=="$")
            state <= s0;
        else 
            state <= idle;
        end
    s0: begin                ///$
        if(data_in == "G")
            state <= s1;
        else if(data_in == "$")
            state <= s0;
        else
            state <= idle;    
    end
    s1:begin
        if(data_in =="P")
            state <= s2; 
        else if(data_in == "N")
            state <= s6;
        else if(data_in =="$")
            state <= s0;
        else
            state <= idle;
    end
    s2:begin
        if(data_in == "R")
        state <= s3;
        else if(data_in == "$")
            state <= s0;
        else
            state <= idle;
    end
    s3:begin
        if(data_in == "M")
            state <= s4;
        else if(data_in == "$")
            state <= s0;
        else
            state <= idle;
    end
    s4: begin
        if(data_in == "C")
            state <= s5;
        else if(data_in == "$")
            state <= s0;
        else
            state <= idle;
    end
    s5:begin
        if(data_in == "$")
            state <= s0;
        else 
            state <= idle;
    end
    s6: begin
        if(data_in == "R")
            state <= s7;
        else if(data_in =="$")
            state <= s0;
        else 
            state <= idle;
    end
    s7:begin
        if(data_in == "M")
            state <= s8;
        else if(data_in == "$")
            state <= s0;
        else
            state <= idle;
    end
    s8:begin
        if(data_in == "C")
            state <= s9;
        else if(data_in == "$")
            state <= s0;
        else 
            state <= idle;
    end
    s9:begin
        if(data_in == "$")
            state <= s0;
        else
            state <= idle;
    end
    default: begin
        state <= idle;
    end
    endcase
end

always @(posedge clk,negedge rst_n)
begin
    if(~rst_n)
        signal <= 0;
    else if(state == s5)
        signal <= 2;
    else if(state == s9)
        signal <= 1;
    else 
        signal <= 0;
end

endmodule

赞(0)
未经允许不得转载:171主机测评 » 字母的序列检测(赋代码和状态转移图)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址