在状态机练习2中,需要在状态S1和状态2中进行计数实现状态转移,显然这两个状态下的计数不会重叠使用,也就是
可以采用一个计数器来实现,但两种状态下的计数值却不一样,容易想到明德扬计数器方案中的变量设计方法,我采用
了这样方法,并进行仿真验证,效果一致,也保证了代码的一致性!原计数器代码略。修改后代码为:
always@(*)begin
if(!rst_n)begin
x = 0;
end
else if(state_c ==S1)begin
x = 5;
end
else if(state_c == S2)begin
x = 7;
end
else begin
x = 0;
end
end
always @(posedge clk or negedge rst_n)begin
if(!rst_n)begin
cnt <= 0;
end
else if(add_cnt)begin
if(end_cnt)
cnt <= 0;
else
cnt <= cnt + 1'b1;
end
end
assign add_cnt = en && (state_c == S1 || state_c == S2);
assign end_cnt = add_cnt && cnt== x-1;
仿真效果如下图:
D:\AA_my_design\MDY_exercise\dianbo\state_machine\exercise2\img\wave.bmp