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栏 执行打印的一个过程
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)