第1个回答 2010-06-21
状态机,把状态图做出来就简单了。110序列检测器,状态转换方法很多。最简单的是串行检测,来一个检测一个。
设置初始状态为 S0, 来1的时候进入状态S1,表示检测到第一个1,来0的时候保持S0。
S1状态下,来1的时候进S2,表示检测到前两个1,来0的时候返回S0
S2状态下,来1的时候进S2,这时共有3个1,所以还是进入S2,表示检测到两个1,来0的时候进入S3,表示检测到110。 S3状态下输出1,表示检测到序列。
S3状态下,来1时进入S1,表示检测到一个1,来0时进入S0初始状态。
代码:
module Detec_110(clk,reset,data_in,bingo)
parameter S0=4'b0001;
parameter S1=4'b0010;
parameter S2=4'b0100;
parameter S3=4'b1000;
input clk,reset;
input data_in;
output bingo;
wire bingo;
reg state;
always@(posedge clk or negedge reset)
if (!reset)
state<=S0;
else case(state)
S0: if(data_in==1'b1) state<=S1; else state<=S0;
S1: if(data_in==1'b1) state<=S2; else state<=S0;
S2: if(data_in==1'b1) state<=S2; else state<=S3;
S3: if(data_in==1'b1) state<=S1; else state<=S0;
default: state<=S0;
endcase
assign bingo=(state==S3)?1'b1:1'b0;
endmodule本回答被网友采纳