网站首页
IC库存
IC展台
电子资讯
技术资料
PDF文档
我的博客
IC72论坛
ic72 logo
搜索关键字: 所有资讯 行业动态 市场趋势 政策法规 新品发布 技术资讯 价格快报 展会资讯
  • 达普IC芯片交易网 > 新闻中心 > 技术信息 > 正文
  • RSS
  • 状态机举例
    http://www.ic72.com 发布时间:2007/4/29 9:51:35
    你可以指定状态寄存器和状态机的状态。以下是一个有四种状态的普通状态机。

    // These are the symbolic names for states
    // 定义状态的符号名称
    parameter [1:0]
    S0 = 2'h0,
    S1 = 2'h1,
    S2 = 2'h2,
    S3 = 2'h3;

    // These are the current state and next state variables
    // 定义当前状态和下一状态变量
    reg [1:0] state;
    reg [1:0] next_state;


    // state_vector state
    // 状态向量的转移关系
    always @ (state or y or x)
    begin
    next_state = state;
    case (state)
    S0: begin
    if (x) begin
    next_state = S1;
    end
    else begin
    next_state = S2;
    end
    end
    S1: begin
    if (y) begin
    next_state = S2;
    end
    else begin
    next_state = S0;
    end
    end
    S2: begin
    if (x & y) begin
    next_state = S3;
    end
    else begin
    next_state = S0;
    end
    end
    S3: begin
    next_state = S0;
    end
    endcase
    end


    always @ (posedge clk or posedge reset)
    begin
    if (reset) begin
    state <= S0;
    end
    else begin
    state <= next_state;
    end
    end


      同样的状态机也可以用下面的代码以“One hot”编码方式实现。
    // These are the symbolic names for states
    // 定义状态的符号名称
    parameter [1:0]
    S0 = 2'h0,
    S1 = 2'h1,
    S2 = 2'h2,
    S3 = 2'h3;

    parameter [3:0]
    s0 = 4'h1,
    s1 = 4'h2,
    s2 = 4'h4,
    s3 = 4'h8;

    // These are the current state and next state variables
    // 定义当前状态和下一状态变量
    reg [3:0] state;
    reg [3:0] next_state;


    // state_vector state
    // 状态向量的转移关系
    always @ (state or y or x)
    begin
    next_state = state;
    case (1)
    state[S0]: begin
    if (x) begin
    next_state = 1 << S1;
    end
    else begin
    next_state = 1 << S2;
    end
    end
    state[S1]: begin
    if (y) begin
    next_state = 1 << S2;
    end
    else begin
    next_state = 1 << S0;
    end
    end
    state[S2]: begin
    if (x & y) begin
    next_state = 1 << S3;
    end
    else begin
    next_state = 1 << S0;
    end
    end
    state[S3]: begin
    next_state = 1 << S0;
    end
    endcase
    end


    always @ (posedge clk or posedge reset)
    begin
    if (reset) begin
    state <= 1 << S0;
    end
    else begin
    state <= next_state;
    end
    end


    www.ic72.com 达普IC芯片交易网
  • 行业动态
  • 市场趋势
  • 政策法规
  • 新品发布
  • Baidu

    IC快速检索:abcdefghijklmnopqrstuvwxyz0123456789
    COPYRIGHT:(1998-2010) IC72 达普IC芯片交易网
    客户服务:service@IC72.com 库存上载:IC72@IC72.com
    (北京)联系方式: 在线QQ咨询:点击这里给我发消息 联系电话:010-82614113 传真:010-82614123
    京ICP备06008810号-21 京公网安备 11010802032910 号 企业资质