|
哪位能帮我看看,这个三段式状态机怎么不好使?COUNTER不是在每个时钟上升沿加,是自己在里面连续的加,和CLK都没关系了,这个是怎么回事,是我哪里写错了么
module testchabu2(clk1,pwmout,start,reset);
input clk1,start,reset;
output pwmout;
reg pwmout;
reg[1:0] StepOfPWMSend_P,StepOfPWMSend_N;
reg[3:0] JVX;
reg[3:0] JRX;
reg[3:0] Counter;
parameter [3:0] ADDTotal=4'B1000;
//************************************************
parameter [1:0]
PWMSEND_IDLE=2'B00, PWMSEND_S1=2'B01,
PWMSEND_S2=2'B10, PWMSEND_S3=2'B11;
//**********************************************************************
always @(posedge clk1 or negedge reset)
if(!reset)
StepOfPWMSend_P<=PWMSEND_IDLE;
else
StepOfPWMSend_P<=StepOfPWMSend_N;
//*******************************************************
always @(StepOfPWMSend_P)
begin
StepOfPWMSend_N=PWMSEND_IDLE;
case(StepOfPWMSend_P)
PWMSEND_IDLE:begin
if(start)
begin JVX=5;JRX=0;Counter=0;StepOfPWMSend_N=PWMSEND_S1;end
else
begin JVX=5;JRX=0;Counter=0;StepOfPWMSend_N=PWMSEND_IDLE;end
end
PWMSEND_S1:begin
if(Counter>=ADDTotal)
begin
Counter=0;StepOfPWMSend_N=PWMSEND_IDLE;
end
else
begin
Counter=Counter+1;JRX=JVX+JRX;
if(JRX>=8)// or JRX<=-8)
begin
JRX=JRX-8;StepOfPWMSend_N=PWMSEND_S2;
end
else
begin
StepOfPWMSend_N=PWMSEND_S3;
end
end
end
PWMSEND_S2:StepOfPWMSend_N=PWMSEND_S1;
PWMSEND_S3:StepOfPWMSend_N=PWMSEND_S1;
endcase
end
//************************************************************
always @(posedge clk1 or negedge reset)
if(!reset)
pwmout<=0;
else
begin
pwmout<=0;
case(StepOfPWMSend_N)
PWMSEND_IDLE:pwmout<=0;
PWMSEND_S1:pwmout<=0;
PWMSEND_S2:pwmout<=1;
PWMSEND_S3:pwmout<=0;
endcase
end
endmodule |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|