序列检测器:检测110101
目的:检测一个序列中是不是有序列110101
Moore型状态机实现
Moore型状态机:输出只由当前状态决定,即次态=f(现状,输入),输出=f(现状);
状态转移图:
程序:
module head(
input clk,
input rst_n,
input in,
output out
);
parameter s0=0,s1=1,s2=2,s3=3,s4=4,s5=5,s6=6;
reg [2:0] state;
reg [2:0] next_state;
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
state<=s0;
else
state<=next_state;
end
always@(*)
begin
case(state)
s0:next_state<=in?s1:s0;
s1:next_state<=in?s2:s0;
s2:next_state<=in?s2:s3;
s3:next_state<=in?s4:s0;
s4:next_state<=in?s2:s5;
s5:next_state<=in?s6:s0;
s6:next_state<=in?s2:s0;
default:next_state<=s0;
endcase
end
assign out=(state==s6)?1:0;
endmodule
测试程序
module tt;
reg clk;
reg rst_n;
wire in;
wire out;
head uut (
.clk(clk),
.rst_n(rst_n),
.in(in),
.out(out)
);
reg [23 : 0] data;
initial begin
clk = 0;
rst_n = 0;
data='b1100_1010_1110_1010_1111_0101;
#100;
rst_n = 1;
end
always #10 clk=~clk;
always@(negedge clk) #5 data