收藏此站 联系我们 网站
当前位置:首页» 公司新闻 » 【建站服务】海口淘宝装修/海口京东店铺设计/海口拼多多网店装修公司/海口企业网店开通申请-网店装修设计-域名申请

【建站服务】海口淘宝装修/海口京东店铺设计/海口拼多多网店装修公司/海口企业网店开通申请-网店装修设计-域名申请

作者: 风兰 . 阅读量: 6 . 发表时间:2022-09-21 03:13:27

网站建设

上往建站提供服务器空间服务商百度快照排名网站托管百度推广运营,致力于设计外包服务与源代码定制开发360推广搜狗推广,增加网站的能见度及访问量提升网络营销的效果,主营:网站公司,百度推广公司电话,官网搭建服务,网站服务企业排名,服务器空间,英文域名等业务,专业团队服务,效果好。



海口淘宝装修/海口京东店铺设计/海口拼多多网店装修公司/海口企业网店开通申请-网店装修设计

网站建设.png

将上述修改的新模块例化到 3 段式的 testbench 中即可进行仿真,结果如下:

由图可知,输出信号与 3 段式状态机完全一致。

1 段式状态机的缺点就是许多种逻辑糅合在一起,不易后期的维护。当状态机和输出信号较少时,可以尝试此种描述方式。

状态机修改:Moore 型

如果使用 Moore 型状态机描述售卖机的工作流程,那么还需要再增加 2 个状态编码,用以描述 Mealy 状态机输出时的输入信号和状态机状态。

3 段式 Moore 型状态机描述的自动售卖机 Verilog 代码如下:

实例

module  vending_machine_moore    (
    input           clk ,
    input           rstn ,
    input [1:0]     coin ,     //01 for 0.5 jiao, 10 for 1 yuan

    output [1:0]    change ,
    output          sell    //output the drink
    );

    //machine state decode
    parameter            IDLE   = 3'd0 ;
    parameter            GET05  = 3'd1 ;
    parameter            GET10  = 3'd2 ;
    parameter            GET15  = 3'd3 ;
    // new state for moore state-machine
    parameter            GET20  = 3'd4 ;
    parameter            GET25  = 3'd5 ;

    //machine variable
    reg [2:0]            st_next ;
    reg [2:0]            st_cur ;

    //(1) state transfer
    always @(posedge clk or negedge rstn) begin
        if (!rstn) begin
            st_cur      <= 'b0 ;
        end
        else begin
            st_cur      <= st_next ;
        end
    end

    //(2) state switch, using block assignment for combination-logic
    always @(*) begin //all case items need to be displayed completely
        case(st_cur)
            IDLE:
                case (coin)
                    2'b01:     st_next = GET05 ;
                    2'b10:     st_next = GET10 ;
                    default:   st_next = IDLE ;
                endcase
            GET05:
                case (coin)
                    2'b01:     st_next = GET10 ;
                    2'b10:     st_next = GET15 ;
                    default:   st_next = GET05 ;
                endcase



    //(2) state switch, using block assignment for combination-logic

    always @(*) begin //all case items need to be displayed completely

        case(st_cur)

            IDLE:

                case (coin)

                    2'b01:     st_next = GET05 ;

                    2'b10:     st_next = GET10 ;

                    default:   st_next = IDLE ;

                endcase

            GET05:

                case (coin)

                    2'b01:     st_next = GET10 ;

                    2'b10:     st_next = GET15 ;

                    default:   st_next = GET05 ;

                endcase


            GET10:

                case (coin)

                    2'b01:     st_next = GET15 ;

                    2'b10:     st_next = GET20 ;

                    default:   st_next = GET10 ;

                endcase

            GET15:

                case (coin)

                    2'b01:     st_next = GET20 ;

                    2'b10:     st_next = GET25 ;

                    default:   st_next = GET15 ;

                endcase

            GET20:         st_next = IDLE ;

            GET25:         st_next = IDLE ;

            default:       st_next = IDLE ;

        endcase // case (st_cur)

    end // always @ (*)


   // (3) output logic,

   // one cycle delayed when using non-block assignment

    reg  [1:0]   change_r ;

    reg          sell_r ;

    always @(posedge clk or negedge rstn) begin

        if (!rstn) begin

            change_r       <= 2'b0 ;

            sell_r         <= 1'b0 ;

        end

        else if (st_cur == GET20 ) begin

            sell_r         <= 1'b1 ;

        end

        else if (st_cur == GET25) begin

            change_r       <= 2'b1 ;

            sell_r         <= 1'b1 ;

        end

        else begin

            change_r       <= 2'b0 ;

            sell_r         <= 1'b0 ;

        end

    end

    assign       sell    = sell_r ;

    assign       change  = change_r ;


endmodule

将上述修改的 Moore 状态机例化到 3 段式的 testbench 中即可进行仿真,结果如下:


由图可知,输出信号与 Mealy 型 3 段式状态机相比延迟了一个时钟周期,这是因为进入到新增加的编码状态机时需要一个时钟周期的时延。此时,输出再用非阻塞赋值就会导致最终的输出信号延迟一个时钟周期。这也属于 Moore 型状态机的特点。



输出信号赋值时,用阻塞赋值,则可以提前一个时钟周期。


输出逻辑修改如下。


实例


    // (3.2) output logic, using block assignment

    reg  [1:0]   change_r ;

    reg          sell_r ;

    always @(*) begin

        change_r  = 'b0 ;

        sell_r    = 'b0 ; //not list all condition, initializing them

        if (st_cur == GET20 ) begin

            sell_r         = 1'b1 ;

        end

        else if (st_cur == GET25) begin

            change_r       = 2'b1 ;

            sell_r         = 1'b1 ;

        end

    end

输出信号阻塞赋值的仿真结果如下:


由图可知,输出信号已经和 3 段式 Mealy 型状态机一致。


海口淘宝装修/海口京东店铺设计/海口拼多多网店装修公司/海口企业网店开通申请-网店装修设计


上往建站提供搭建网站域名注册官网备案服务网店详情页设计企业网店专业网络店铺管理运营全托管公司咨询电话,服务器空间,微信公众号托管网页美工排版,致力于域名申请竞价托管软文推广全网营销,提供标准级专业技术保障,了却后顾之忧,主营:虚拟主机网站推广百度竞价托管网站建设上网建站推广服务网络公司有哪些等业务,专业团队服务,效果好。

服务热线:400-111-6878 手机微信同号:18118153152(各城市商务人员可上门服务)


关键词:网站建设,企业网站,网站制作,网页设计,高端网站建设,企业网站制作,网页制作,制作网站,网站设计,高端网页设计,高端网站设计,做网站,自适应网站

全国服务热线
18114747181
二维码
手机端二维码
上往建站
地址:全国各地都有驻点商务 |  网站建设上往建站
在线咨询QQ:1120768800
 
QQ在线咨询
售前咨询热线
18114747181
营销顾问
营销顾问
售后服务热线
400-000-1116
售后服务
售后服务