FPGA(三) 三段式状态机

使用三个always模块

一个always模块使用同步时序描述状态转移;

例如:

always @(posedge sys_clk or negedge sys_rst_n) begin
  if( !sys_rst_n)
     curr_st <= S0;
  else
     curr_st <= next_st;  
  end

一个always采用组合逻辑判断状态转移条件;

always @(*) begin
  case (curr_st)
    S0: next_st = S1; 
    S1: next_st = S2;
    S2: next_st = S3;
    S3: next_st = S4;
    S4: next_st = S5; 
    S5: next_st = S6;
    S6: next_st = S0;
   default:next_st = S0;
  endcase
end

另一个always描述状态输出(可用组合电路输出,也可以时序电路输出),一般推荐时序电路输出;

always @(posedge sys_clk or negedge sys_rst_n) begin 
  if (!sys_rst_n)
    clk_divide_7 <= 1'b0;
  else if ((curr_st == S0) | (curr_st == S1) | (curr_st == S2) | (curr_st == S3)) 
    clk_divide_7 <= 1'b0;
  else if ((curr_st == S4) | (curr_st == S5) | (curr_st == S6)) 
    clk_divide_7 <= 1'b1;
  else 
   ;
 end

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值