好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

verilogFPGA状态机描述.ppt

4页
  • 卖家[上传人]:博****1
  • 文档编号:584406800
  • 上传时间:2024-08-31
  • 文档格式:PPT
  • 文档大小:116.55KB
  • / 4 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 3-1Example: Example: 一段式状态机一段式状态机描述方法描述方法 stop: begin if ( A ) begin state <= clear; K2 <= 1; end else state <= stop; end clear: begin if ( !A) begin state <= idle ; {K2,K1} <= 2’b01; end else state <= clear ; end endcase endmodule module Mealy_state_machine (clock, reset, A, K2, K1 ); input clock, reset, A; output K2, K1; reg K2, K1; reg [1,0] state; parameter idle =2’b00, start =2’b01; stop =2’b10, clear =2’11; always @(posedge clock or negedge reset) if (!reset) begin state <= idle; {K2,K1} <= 2’b00; end else case (state) idle: begin if ( A) begin state <= start ; K1 <= 0; end else state <= idle ; end   start: begin if ( !A) state <= stop ; else state <= start ; end 3.5 状态机描述方法状态机描述方法 3-2module state_machine (clock, reset, rdy, r_w, oe, we); input clock, reset; input rdy, r_w; output oe,we; reg oe,we; reg [3,0] present_state, next_state; parameter idle =4’b0001, decision=4’b0010; read=4’b0100, write=4’1000; // sequential state transition always @ (posedge clock or negedge reset ) if ( !reset ) present_state <= idle ; else present_state <= next_state ; //combinational block always @(reset or present_state or rdy or r_w) begin case (present_state) idle: begin {oe,we} = 2’b00; if ( rdy) next_state = decision ; else next_state = idle ; end   decision: begin {oe,we} = 2’b00; if ( r_w) next_state = read ; else next_state = write ; end read: begin {oe,we} = 2’b10; if ( rdy) next_state = idle ; else next_state = read; end write: begin {oe,we} = 2’b01; if ( rdy) next_state = idle ; else next_state = write ; end default: begin {oe,we} = 2’b00; next_state = 4’bx ; end endcase end // end always begin endmodule;rdyrdyrdyr_wr_wResetrdyrdyidle00decision00write01read10StateidledecisionwritereadOutputsoe0001we0010Example: Example: 两段式状态机两段式状态机描述方法(推荐)描述方法(推荐) 3-3module state_machine (clock, reset, rdy, r_w, oe, we); input clock, reset; input rdy, r_w; output oe,we; reg oe,we; reg [3,0] present_state, next_state; parameter idle =4’b0001, decision=4’b0010; read=4’b0100, write=4’1000; // sequential state transition always @ (posedge clock or negedge reset ) if ( ! reset ) present_state <= idle ; else present_state <= next_state ; //combinational block always @(reset or present_state or rdy or r_w) begin case(present_state) idle: begin idle_output; if ( rdy) next_state = decision ; else next_state = idle ; end   decision: begin decision_output; if ( r_w) next_state = read ; else next_state = write ; end     read: begin read_output; if ( rdy) next_state = idle ; else next_state = read; end write: begin write_output; if ( rdy) next_state = idle ; else next_state = write ; end default: begin idle_output; next_state = 4’bx ; end endcase end //end always begin//output taskstask idle_output; {oe,we} = 2’b00;endtasktask decision_output; {oe,we} = 2’b00;endtasktask read_output; {oe,we} = 2’b10;endtasktask write_output; {oe,we} = 2’b01;endtaskendmodule;Example: Example: 两段式状态机描述使用两段式状态机描述使用tasktask(推荐编码)(推荐编码) 3-4module state_machine (clock, reset, rdy, r_w, oe, we); input clock, reset; input rdy, r_w; output oe,we; reg oe,we; reg [3,0] present_state, next_state; parameter idle =4’b0001, decision=4’b0010; read=4’b0100, write=4’1000; // sequential state transition always @ (posedge clock or negedge reset ) if ( ! reset ) present_state <= idle ; else present_state <= next_state ; //combinational block always @(reset or present_state or rdy or r_w) begin case (present_state) idle: begin if ( rdy) next_state = decision ; else next_state = idle ; end   decision: begin if ( r_w) next_state = read ; else next_state = write ; end     read: begin if ( rdy) next_state = idle ; else next_state = read; end write: begin if ( rdy) next_state = idle ; else next_state = write ; end default: begin next_state = 4’bx ; end endcase end //end always begin//Registered outputalways @ (posedge clock or negedge reset ) if ( ! reset ) {oe,we} <= 2’b00 else begin case(next_state) idle: {oe,we} <= 2’b00 ; decision: {oe,we} <= 2’b00; read: {oe,we} <= 2’b10; write: {oe,we} <= 2’b01; endcase endendmodule;Example: Example: 三段式状态机描述(推荐编码)三段式状态机描述(推荐编码) 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.