专栏中心

EEPW首页 > 专栏 > 状态机推荐编写方式

状态机推荐编写方式

发布人:0750long 时间:2010-03-12 来源:工程师 发布文章
状态机推荐编写方式

 

 

状态转移单独一个模块,状态操作、判断写一个模块。

初始化状态和默认状态:完备状态机,能自恢复。

所有输出最好有寄存器打一拍。

以下是Altera的一个设计范例,功能是读ROM

`timescale 1 ps / 1 ps

module read_control_logic
(
 input clk_i, reset_i, rdempty_i,
 input [31:0] data_i,
 output reg rdreq_o, wren_o, rden_o,
 output reg [7:0] addr_o,
 output [31:0] data_o,
 output reg [8:0] word_count_o
);
 
 reg [1:0] state;

 // Declare states
 parameter IDLE = 0, INCADR = 1, WRITE = 2, WAIT = 3;
 parameter RAM_DEPTH = 255;
 parameter FIFO_DEPTH = 64;
 
 assign data_o = data_i;

 // Output depends only on the state
 always @ (state ) begin
  case (state )
   IDLE:
   begin
    rdreq_o = 1'b0;
    wren_o = 1'b0;
    rden_o = 1'b0;         
   end
   INCADR:
   begin
    rdreq_o = 1'b1;
    wren_o = 1'b0;    
    rden_o = 1'b0;             
   end
   WRITE:
   begin 
    rdreq_o = 1'b0;
    wren_o = 1'b1;       
    rden_o = 1'b1;         
   end
   WAIT:
   begin
    rdreq_o = 1'b0;
    wren_o = 1'b0;    
    rden_o = 1'b0;             
   end
   default:
   begin
    rdreq_o = 1'b0;
    wren_o = 1'b0;    
    rden_o = 1'b0;             
   end
  endcase
 end

 always @ (posedge clk_i or posedge reset_i) begin
  if (reset_i)
  begin
   state  <= IDLE;
   addr_o <= 8'hff;
   word_count_o <= 9'h0;
  end
  else
   case (state)
      
    IDLE:
    begin
     if(!rdempty_i)
     begin
      state  <= INCADR;
      addr_o <= addr_o + 8'h01;
     end
     else
     begin
      state  <= IDLE;
      addr_o <= 8'hff;
      word_count_o <= 9'h0;
     end
    end
    
    INCADR:
    begin
     state  <= WRITE;
     word_count_o <= word_count_o + 9'h1;
        end
       
    WRITE:
    begin
     if(rdempty_i)
      state  <= WAIT;
     else
      begin
       state  <= INCADR;
       addr_o <= addr_o + 8'h01;
      end
    end
      
    WAIT:
    begin
     if(!rdempty_i)
     begin 
      state  <= INCADR;
      addr_o <= addr_o + 8'h01;
     end
     else
      state  <= WAIT;
    end
    default:
    begin
     state  <= IDLE;
     addr_o <= 8'hff;
     word_count_o <= 9'h0;
    end
   endcase
 end

endmodule

专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词:

相关推荐

READ24C02数据手册

RTL8139C数据手册

“车规级IMU”适合机器人的大规模应用,可提供稳定可靠的运动感知功能

中南民族大学:基于虚拟环绕声的音频处理器设计

视频 2012-06-15

适配医疗 Type CF 类应用的专用电源解决方案

洞察无形:高端模拟前端如何赋予机器人真正的自我感知能力

RTA Suite运行分析测试工具介绍文件

5V 单片机与5V 耐压单片机有何区别,为什么至关重要

我国人形机器人的标准正在制定,基础设施建设在全球最为全面

寻人启事

marisa 2005-04-21

S3C2410a32位RISCARM处理器用户手册

TDK 发布 SensorStage 传感器评估平台,大幅加速 IMU 开发进程

浙江大学:基于FPGA的发动机信号接口系统

视频 2012-06-15

基于物联网的电池组均衡充电与监控系统

rtl8201bl 芯片手册

山东大学:植物识别

视频 2012-06-15

RK3576 MIPI Camera ISP调试:客观标定与环境准备(上)

2026-05-09

江南大学:基于VLC的无线导览系统

视频 2012-06-15

大连理工大学:基于FPGA的嵌入式多核物联网数据中心控制器设计

视频 2012-06-15

意瑞半导体:霍尔传感器在机器人中的应用优势

2026 传感器大会:数字 RF 技术有望打破智能眼镜普及瓶颈

更多 培训课堂
更多 焦点
更多 视频

技术专区