zoukankan      html  css  js  c++  java
  • 三、状态机的设计指导原则

    一、状态机设计的关键是什么?

      如何才能把一个电路系统抽象为一个或者多个相互配合嵌套的状态机和组合系统模块?是关键。

    二、状态机设计指导原则

      1、使用独热码

      2、采用case语句,加default,变量值位‘bx,因为这样编译的电路删除了多余的东东

      3、应该加上异步复位端

      4、如果设计必须有不同的时钟触发,利用甲模块的时钟是乙模块时钟同步计数器的输出。

      5、把异步触发的电路转换成同步时钟触发的电路并不困难,详见15章。异步状态即使没有确定时钟的状态机。

      6、千万不要使用综合工具设计异步状态机。如果非要设计就用电路图输入的方法。因为他会简化你的意图。

      7、必须明确赋值,使用parameter,define,你懂的,不多说

    三、典型状态机实例

      module statemachine(launch_shuttle,land_shuttle,start_countdown,start_trip_meter,clk,all_systems_go,

                  just_lauchched,is_landed,cnt,abort_mission);

      ::::::::::

      parameter  HOLD=5'b00001,SEQUENCE=5'B00010,LAUNCH=5'B00100;

      parameter  ON_MISSION=5'b01000,LAND=5'b10000;//这里表明了航天器的多种状态

      reg[4:0] state;

        always@(negedge clk or posedge abort_miossion)

          begin

            //检查异步rst的值,即abort_mission

          if(abort_mission)

            begin

            {launch_shuttle,lan_shuttle,start_trip_meter,start_countdown}<=4'b0000;

            state<=LAND;

            end

          else

            begin

              //主机状态

              case(state)

                HOLD:

                  if(all_system_go) begin state<=SEQUENCE;  start_countdown<=1;end

                  else state<=HOLD;

                SEQUENCE:

                  if(cnt==0) state<= LAUNCH;

                  else state<=SEQUENCE;

                LAUNCH:

                  begin state<= ON_MISSION;launch_shuttle<=1;end

                ON_MISSION:

                  if(just_launched) start_trip_meter<=1;

                  else  state<=ON_MISSON;

                LAND:

                  if(is_landed) state<=HOLD;

                  else begin land_shuttle<=1;state<=LAND;end

                default: state<=5'bxxxxx;

              endcase

            end

          end

      endmodule

    摘自:verilog数字系统设计教程(夏宇闻)

     

  • 相关阅读:
    为开源项目 go-gin-api 增加后台任务模块
    将多行数据以',' 进行分隔
    syslog中的“(CRON)信息(未安装MTA,丢弃输出)”错误,crontab定时任务失效
    为什么我不推荐大家去外包公司?
    Linux永久修改系统时间
    云数据库 Redis 暂时不支持外网访问
    Nginx中worker connections问题的解决方法 大量用户502
    入手
    nginx 之$proxy_host|$host|$http_host区别
    grpc-golang入门
  • 原文地址:https://www.cnblogs.com/qidaiymm/p/4902686.html
Copyright © 2011-2022 走看看