利用狀態機實現簡易包文型別識別器

2021-10-02 19:23:11 字數 4212 閱讀 9240

資料報文格式分為資料報文和控制包文格式

end輔助head 中間變數

//head_cnt

//head_cnt

reg [3:0] head_cnt;

always @(posedge clk or negedge rst_n)begin

if(rst_n==1'b0)begin

head_cnt<=0;

endelse if(state_c==head)begin

if (head_flag==0)begin//檢測55

if (din==8'h55) begin

head_cnt<=head_cnt+1;

endelse begin

head_cnt<=0;

endend

else if(head_flag==1)begin

if (din==8'hd5)begin

if (head_cnt==9)begin

head_cnt<=0;

endelse begin

head_cnt<=head_cnt+1;

endend

else if(din==8'h55)begin

head_cnt<=1;

endelse begin

head_cnt<=0;

endend

else begin

head_cnt<=0;

endend

else begin

head_cnt<=0;

endend

head_flag

head_flag=0,等待55

head_flag=1,等待d5

//head_flag

reg head_flag;

always @(posedge clk or negedge rst_n)begin

if(rst_n==1'b0)begin

head_flag<=0;

endelse if (state_c==haed)begin

if(din==8'h55)begin

head_flag<=1;

endelse begin

head_flag<=0;

endend

else begin

head_flag<=0;

endend

輔助len,中間變數

len_cnt

//len_cnt

reg len_cnt;

always @(posedge clk or negedge rst_n)begin

if(rst_n==1'b0)begin

len_cnt<=0;

endelse if(state_c==len)begin

len_cnt<=len_cnt+1;

endelse begin

len_cnt<=0;

endend

輔助data 中間變數

data_cnt

//data_cnt

always @(posedge clk or negedge rst_n)begin

if(rst_n==1'b0)begin

data_cnt<=0;

endelse if(state_c==type&&din==0 )begin

data_cnt<=64-1;

endelse if(state_c==len)begin

if(len_cnt==0)begin

data_cnt<=;

endelse begin

data_cnt<=-1;

endend

else if(data_cnt!=0)begin

data_cnt<=data_cnt-1;

endend

輔助fcs 中間變數

fcs_cnt

//fcs_cnt

always @(posedge clk or negedge rst_n)begin

if(rst_n==1'b0)begin

fcs_cnt<=0;

endelse if(state_c==fcs)begin

if(fcs_cnt==3)begin

fcs_cnt<=0;

endelse begin

fcs_cnt<=fcs_cnt+1;

endend

else begin

fcs_cnt<=0;

enden

//dout

always @(posedge clk or negedge rst_n)begin

if(rst_n==1'b0)begin

dout<=0;

endelse begin

dout<=din;

endend//dout_vld

always @(posedge clk or negedge rst_n)begin

if(rst_n==1'b0)begin

dout_vld<=0;

endelse if (state_c!=head)begin

dout_vld<=1;

endelse begin

dout_vld<=0;

endend//dout_sop

always @(posedge clk or negedge rst_n)begin

if(rst_n==1'b0)begin

dout_sop<=0;

endelse if(state_c==type) begin

dout_sop<=1;

endelse begin

dout_sop<=0;

endend//dout_eop

always @(posedge clk or negedge rst_n)begin

if(rst_n==1'b0)begin

dout_eop<=0;

endelse if(state_c==fcs&&fcs_cnt==3) begin

dout_eop<=1;

endelse begin

dout_eop<=0;

endend

kanzi狀態機實現

1.在library中選中state managers建立create state manager。2.在library中選中property types建立create property type,name state category custom datatype interger。3.修改s...

qt狀態機的實現

建立狀態,設定狀態中的屬性,設定初始狀態,設定狀態裝換條件 動畫,啟動狀態機 int nmargin 9 int ninitwidth m pselmoldform width int ninitheight m pselmoldform height int nconfepyformw m pco...

實現有狀態物件或狀態機

想實現乙個狀態機或可以在許多不同狀態下執行的物件,但又不想在 中新增很多條件。一般通過新增不同狀態符號來執行不同狀態下的 如下 class connection def init self self.state closed def read self if self.state open rais...