简单的检测输入序列中 检测序列的状态机,但是输出后不能全部检测,有些 ”01“,输出为 0;
大侠帮我看看吧
我的程序:
fsm01.v
//////////////////////////////////////////
module fsm01(rst,clk,din,dout);
input rst,clk;
input din;
output dout;
reg dout;
reg[1:0] state,nextstate;
parameter[1:0] A = 2'b00,
B = 2'b11,
IDLE = 2'b01;
always @(posedge clk)
if(!rst)
state <= IDLE;
else
state <= nextstate;
always @(posedge clk)
begin
nextstate = 2'bx;
dout = 1'b0;
case(state)
A: if(din == 1)
begin
dout = 1'b1;
nextstate = B;
end
else
nextstate = A;
B:
if(din == 1)
nextstate = B;
else
nextstate = A;
IDLE:if(din == 0)
nextstate = A;
else
nextstate = IDLE;
endcase
end
endmodule
////////////////////////////////////
testbench
testfsm01.v
//////////////////////////////////////////
`timescale 1ns/1ns
module testfsm01;
reg t_clk,t_rst;
reg[25:0] data;
wire x,z;
assign x = data[25];
initial
begin
t_clk = 0;
t_rst = 0;
#45 t_rst = 1;
data = 26'b10011001100101101010010110;
end
always #30 t_clk = ~t_clk;
always @(posedge t_clk)
data = {data[24:0],data[25]};//移位
fsm01 DUT(
.clk(t_clk),
.rst(t_rst),
.din(x),
.dout(z)
);
endmodule |