net11 有限状态机

FPGA开发中 各个always块都是并行运行的   但有些时候希望顺序运行  有限状态机

 

要学会:1   两段式状态机写法   2  自动仿真脚本的使用方法

 

状态机

mealy型:输出不仅与当前状态有关,还与输入有关

moore型:输出只与当前状态有关。

正常不用考虑哪种类型,能够完成功能就行

 

改文件头

首选项  浏览插件目录  verilog gadget  template  verilog_header.v文件进行修改

 

声明状态机    

 

首先确认有几个状态  编码

      //2'b00  2'b01  2'b10  binary    2bit表示的状态,时钟采集信号时,就需要采集2个信号的状态,如果两个信号到达时间不一样,就容易产生时序问题

      //3'b001   3'b010  3'b100   one hot   只判断某一位为高,就认为在哪一状态,不会去考虑另外两个比特的状态。能使我们时序上的逻辑特性变好

 

两段式 一段描述状态的迁移,一段描述赋值的操作

复制代码
module    fsm(
    input    wire    clk,
    input    wire    rst,
    input    wire    money,
    output    reg    tea);

parameter    IDLE=3'b001;
parameter    ONE=3'b010;
parameter    TWO=3'b100;    
reg    [2:0]state;

always@(posedge clk or negedge rst)
begin
    if(!rst)
        state<=IDLE;
        else begin
            case(state)
                    IDLE:begin
                        if(money)
                        state<=ONE;
                    end
                    ONE:begin
                        if(money)
                        state<=TWO;
                        else if(!money)//这一句可以不写 因为是时序电路,所以不写的话默认是保持的。  
                        state<=state;
                    end
                    TWO:if(money)
                        state<=IDLE;
            default:state<=IDLE;
            endcase
        end

end

always @(posedge clk or negedge rst) begin
    if (!rst) begin
        tea<=0;
    end
    else if (state==TWO &&    money==1'b1) begin

        tea<=1'b1;
    end
    else begin
        tea<=0;
    end
end

endmodule
复制代码
复制代码
`timescale    1ns/1ns
module    tb_fsm();
reg    clk,rst,money;
wire    tea;
initial
begin
    clk=0;
    rst=0;
    money=0;
    #50 rst=1'b1;
end

always #10    clk=~clk;
always #10    money={$random};
    fsm  inst_fsm (
            .clk   (clk),
            .rst   (rst),
            .money (money),
            .tea   (tea)
        );//shift+tab    回退
endmodule
复制代码

 

 

 

自动化仿真  通过脚本的方式启动仿真

添加界面(project)transcript栏  执行打印的一个过程

posted @   涛大林  阅读(104)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示