求高手指点关于状态机的程序
仿真的时序与我上传的图片时序不对应,肯定是程序出了问题,求大虾指点module pulse(clk,reset,pulse1_uin,pulse1_lin,pulse2_uin,pusle2_lin);
input clk,reset;
output pulse1_uin,pulse1_lin,pulse2_uin,pusle2_lin;
reg pulse1_uin,pulse1_lin,pulse2_uin,pusle2_lin;
integerstate,nxstate,counter;
parameter st0=0,st1=1,st2=2,st3=3,st4=4,st5=5,st6=6,st7=7;
always @(posedge clk or negedge reset)
begin
if(!reset)
begin
state=st0;
counter=0;
// nxstate=st0;
end
else
begin
counter<=counter+1;
state=nxstate;
end
end
always @(state)
begin
case(state)
st0: begin
pulse1_uin=1'b0;pulse1_lin=1'b1;
pulse2_uin=1'b0;pusle2_lin=1'b1;
if(counter==5)
nxstate=st1;
#100 nxstate=st1;
end
st1: begin
pulse1_uin=1'b0;pulse1_lin=1'b0;
pulse2_uin=1'b0;pusle2_lin=1'b1;
if(counter==10)
#100 nxstate=st2;
end
st2: begin
pulse1_uin=1'b1;pulse1_lin=1'b0;
pulse2_uin=1'b0;pusle2_lin=1'b1;
if(counter==15)
nxstate=st3;
end
st3: begin
pulse1_uin=1'b0;pulse1_lin=1'b0;
pulse2_uin=1'b0;pusle2_lin=1'b1;
if(counter==20)
#100 nxstate=st4;
end
st4: begin
pulse1_uin=1'b0;pulse1_lin=1'b1;
pulse2_uin=1'b0;pusle2_lin=1'b1;
if(counter==25)
#100 nxstate=st5;
end
st5: begin
pulse1_uin=1'b0;pulse1_lin=1'b1;
pulse2_uin=1'b0;pusle2_lin=1'b0;
if(counter==30)
#100 nxstate=st6;
end
st6: begin
pulse1_uin=1'b0;pulse1_lin=1'b1;
pulse2_uin=1'b1;pusle2_lin=1'b0;
if(counter==35)
#100 nxstate=st7;
end
st7: begin
pulse1_uin=1'b0;pulse1_lin=1'b1;
pulse2_uin=1'b0;pusle2_lin=1'b0;
if(counter==40)
begin
#100 nxstate=st0;
counter=0;
end
end
endcase
end
endmodule 我用vhdl,看得有点头晕。 我也是,看着很头晕的!!!! reg state; 也可能是程序有问题,也可能是测试文件有问题,你结合波形图,多找找原因吧!!!!!!!!! 你仿真的图呢,放出来好分析 你仿真的图呢,放出来好分析 最好把测试文件和仿真图都放上面,那么更有利于问题的分析和解决!!!!!!!!
页:
[1]