hyhyx1 发表于 2019-11-12 22:00:27

采用变量计数法的计数状态机实现与仿真

在状态机练习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
页: [1]
查看完整版本: 采用变量计数法的计数状态机实现与仿真