题目:数据流输入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






