老婆出轨 发表于 2023-2-12 17:39:39

11-verilog-有限状态机

有限状态机

写RTL的时候,实现一个功能的时候有很多种方法

[*]将系统划分为多个状态,状态之间有状态的转移,第一步,第二步,,,,形成有限状态机
[*]流水线技术设计,从输入到输出有多个步骤
有限状态机,状态是有限的,比如8个状态,16个状态等,在进行设计的时候,状态机的状态不要太多,状态超过10个,就会造成设计复杂度和验证复杂度都变高.
有限状态机分类


[*]Moore FSM
输出只与当前的状态有关,与输入没有关系
[*]Mealy FSM
输出不仅与当前的状态有关,还与输入有关
Moore FSM-设计自动售货机

分析输入输出信号


[*]自动售货机,输入的就是硬币,输出的是饮料和找零 (确定输入,输出)
https://img2023.cnblogs.com/blog/3077491/202302/3077491-20230212140641563-1560533416.png
[*]假设饮料只有一种价格2.5元,输入的零钱只有一元和五角(两种状态,用1bit表示),找零的情况只有两种0元和5角(用1bit表示)(确定输出输出的状态,用几位的信号表示)
定义接口


[*]状态机要存储一些状态,肯定会有一些寄存器,会有时钟和复位信号
https://img2023.cnblogs.com/blog/3077491/202302/3077491-20230212141856430-1054377398.png
[*]在设计一个模块的时候,最先确定输入输出的端口和位宽以及时序
定义时序


[*]输入的一元和五角不能同时为1(确定输入的约束)
内部实现--画出状态转移图

要存储当前已经存储了多少钱,初始状态时0,可以收到1元和5角
https://img2023.cnblogs.com/blog/3077491/202302/3077491-20230212142936870-437541320.png

[*]IDLE就是当前系统是空闲状态,没有收到任何的投币
https://img2023.cnblogs.com/blog/3077491/202302/3077491-20230212143741986-1191976210.png
[*]这是一个Moore类型的有限状态机,输出只与当前的状态有关
Moore有限状态机电路特点

[*]输入与当前的状态有关,所以需要一个寄存器存储当前的状态
[*]寄存器存储的状态输入给组合逻辑之后,进行输出
[*]输入与当前的状态值,经过组合逻辑之后,输入给寄存器
[*]时序清晰,输入和输出,没有一条直接的组合逻辑路径;如果输入经过组合逻辑,没有经过寄存器,直接输出,这样的设计不好;因为不知道周围环境的组合逻辑的时序是多少
https://img2023.cnblogs.com/blog/3077491/202302/3077491-20230212144633658-1608395946.png
Code

module drink_status_moore(input clk,input reset,input half,input one,output out,output cout);parameter s0 = 3'b000,                  s1 = 3'b001,                  s2 = 3'b010,                  s3 = 3'b011,                  s4 = 3'b100,                  s5 = 3'b101,                  s6 = 3'b110;   //定义6个状态reg curr_state;   //当前状态CSreg next_state;   //下一个状态 NSreg定义的信号不一定是寄存器    //第一段:声明一个寄存器,state transferalways @ (posedge clk ,negedge reset) begin    if(~reset)   curr_state
页: [1]
查看完整版本: 11-verilog-有限状态机