马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
大大们下午好,小弟新学VERILOG遇到了一个很头疼的问题,盼你们能帮助一下我。
我写了一个10010序列检测器,每检测有一串10010就输输出一个1。我写出了代码,仿真不对,希望大大们帮我分析一下
代码如下
`timescale 1ns / 1ps
module test8_fsm(x,z,clk,rst,
state_out );
input x,clk,rst;
output z;
output [2:0]state_out;
wire z;
reg[2:0] state,nextstate;
parameter idle=3'b000,
s1=3'b001,
s10=3'b010,
s100=3'b011,
s1001=3'b100,
s10010=3'b101;
assign state_out=state;
always@(posedge clk)
if(rst)
state<=idle;
else
state<=nst;
always@( posedge clk )
case(state)
idle: if(x) nextstate=s1;//小弟编了6个装备,空闲0,按10010输入的顺序,S1,S10,S100,S1001,S10010
else nextstate=idle;
s1: if(!x) nextstate=s10;
else nextstate=s1;
s10:
if(!x ) nextstate=s100;
else nextstate=s1;
s100:if(x) nextstate=s1001;
else nextstate=idle;
s1001:if(!x) nextstate=s10010;
else nextstate=s1;
s10010:if(x) nextstate=s1;
else nextstate=s100;
default:nextstate=3'bxxx;
endcase
assign z=(state==s10010)?1:0;
endmodule
仿真激励如下
`timescale 1ns / 1ps
module time_test8;
wire x;
reg clk;
reg rst;
reg [23:0]data;
wire z;
wire [2:0]state_out;
test8_fsm uut (
.x(x),
.z(z),
.clk(clk),
.rst(rst),
.state_out(state_out)
);
assign x=data[23];
always #10clk=~clk;
always@(posedge clk)
data<={data[22:0],data[23]};
initial
begin
clk = 1;
rst = 0;
data=24'b1100_1001_0000_10010_0100_1010;
#10rst=1;
#100rst=0;
#1000 rst=1;
#1000 rst=0;
#2000 rst=1;
#1000 rst=0;
#5000 $stop;
end
endmodule
错误的仿真结果如下··
|