最能飞的芯片人的个人空间 https://blog.eetop.cn/1775617 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

状态机

热度 12已有 3279 次阅读| 2021-4-20 11:22 |个人分类:FPGA|系统分类:芯片设计| 状态机

状态机:全称是有限状态机,缩写为fsm,是组合逻辑和时序逻辑的一种组合

独热码:每个状态只有一个寄存器置位,译码逻辑简单


四段论写出来的状态机是三段式状态机

  1. 状态空间定义

  2. 状态跳转(时序逻辑)

  3. 下个状态判断(组合逻辑)

  4. 各个状态下的动作(时序逻辑和时序逻辑都可以)



1-2.jpg


给出分频器的代码

module divider7_fsm(
        input           clk,
        input           rst_n,
        //输出时钟
        output     reg     clk_divider    //一定要申明类型!!!

);
//reg define
reg [6:0]   curr_st;
reg [6:0]   next_st;

//parameter define     状态空间定义
parameter s0 = 7'b0000_001;
parameter s1 = 7'b0000_010;
parameter s2 = 7'b0000_100;
parameter s3 = 7'b0001_000;
parameter s4 = 7'b0010_000;
parameter s5 = 7'b0100_000;
parameter s6 = 7'b1000_000;

//状态跳转(时序逻辑)
always @ (posedge clk or negedge rst_n) begin
    if(!rst_n)
        curr_st  <= s0;
    else curr_st <= next_st;    
end


//下个状态判断(组合逻辑)
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 @ (posedge clk or negedge rst_n)begin
if(!rst_n)
    clk_divider <= 0;
else if ((curr_st == s0)|(curr_st == s1)|(curr_st == s2)|(curr_st == s3))
        clk_divider <= 0;
        else if((curr_st == s4)|(curr_st == s5)|(curr_st == s6))
        clk_divider <= 1;
        else
        ;     //这个别漏了 ,不然就不是完整的,而且会产生latch!!!1
end 


endmodule


1

点赞

刚表态过的朋友 (1 人)

发表评论 评论 (1 个评论)

回复 dqwuf2020 2021-5-29 23:13
时序逻辑电路产生什么latch

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 1

    粉丝
  • 1

    好友
  • 1

    获赞
  • 1

    评论
  • 13

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-26 11:22 , Processed in 0.025148 second(s), 16 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部