首页 > 技术 > 内容

浅谈FPGA 四段式状态机

时间:2025-12-11  作者:Diven  阅读:0

FPGA中,相信有FPGA学习经验的都能了解,现在流行的状态机设计,一般可分为一段式、两段式和三段式,如果不了解的,可以自行百度。

上面的三种设计法虽然很流行,但设计时仍然要考虑很多因素,导致总是要反反复复调试才能设计成功。这不符合明德扬一次考虑一个因素、一次性设计正确的设计理念。为此,明德扬特推出四段式状态机的写法。

四段式不是指三个always代码,而是四段程序。使用四段式的写法,可参照明德扬GVIM特色指令Ztj产生的状态机模板。

第一段,同步时序的always模块,格式化描述次态迁移到现态寄存器

always@(posedge clk or negedge rst_n)begin

if(!rst_n)begin

state_c 《= IDLE;

end

else begin

state_c 《= state_n;

end

end

第二段,组合逻辑的always模块,描述状态转移条件判断。注意转移条件用信号来表示,信号名要按明德扬规则来命名。

always@(*)begin

case(state_c)

IDLE:begin

if(idle2s1_start)begin

state_n = S1;

end

else begin

state_n = state_c;

end

end

S1:begin

if(s12s2_start)begin

state_n = S2;

end

else begin

state_n = state_c;

end

end

S2:begin

if(s22idl)begin

state_n = IDLE;

end

else begin

state_n = state_c;

end

end

default:begin

state_n = IDLE;

end

endcase

end

assign idle2s1_start = state_c==IDLE && ;

assign s12s2_start = state_c==S1 && ;

assign s22idl_start = state_c==S2 && ;

第三段,用assign定义转移条件。注意条件一定要加上现态。

assign idle2s1_start = state_c==IDLE && ;

assign s12s2_start = state_c==S1 && ;

assign s22idl_start = state_c==S2 && ;

第四段,设计输出信号。明德扬规范要求一个always设计一个信号,因此有多少个输出信号,就有多少个always。

always @(posedge clk or negedge rst_n)begin

if(!rst_n)begin

out1 《=1‘b0

end

else if(state_c==S1)begin

out1 《= 1’b1;

end

else begin

out1 《= 1‘b0;

end

end

明德扬四段式状态机符合一次只考虑一个因素的设计理念。第一段代码,照抄格式,完全不用想其。第二段代码,只考虑状态之间的跳转,也就是说各个状态机之间跳转关系。第三段代码,只考虑跳转条件。第三段,每个信号逐个设计。

明德扬为了保证一次设计正确,还制定了一些规范。例如第二段的跳转条件,只准用信号名代替,并且制定了跳转条件的命名规范,1是解决了命名困难的问题,2是对转移条件一目了然,如idl2s1_start,就可以看出是IDLE跳到S1状态的条件。还有,明德扬规定转移条件的格式,一定是“ 当前状态&&具体条件”,以防想不到的情况出现。有了这些规范的保证,无论多复杂的场合,任何设计都能有条理、有步骤地一次性设计正确。

猜您喜欢


现代电子设备中,连接器扮演着非常重要的角色。CONN_40.64X2.5MM_TM作为一种新型连接器,因其独特的设计和优越的性能,正在逐渐成为市场上的热门选择。...
2025-03-08 00:47:13
现代科技迅速发展的背景下,各种设备和配件层出不穷。Accessories_6X6MM_TM作为高性能配件,因其独特的设计和优越的性能,受到了的关注。本文将深入探...
2025-04-19 20:00:02
移动电源是现代人生活中不可少的充电设备,根据不同的特点和用途可以分为多种类型。按容量分类,移动电源可分为小容量(5000mAh以下)、中容量(5000mAh-2...
2018-11-14 00:00:00
放大镜作为常见的光学工具,应用于学习、工作和日常生活中。选择合适的放大镜,了解其参数非常重要。放大倍数是最重要的参数,通常以1X、2X、3X等表示。倍数越大,物...
2023-10-28 00:00:00
线性稳压器是一种常见的电源管理元件,用于将不稳定的直流电压转换为稳定的直流电压输出。为了确保线性稳压器在各种负载条件下都能稳定工作,需要进行环路补偿。什么是环路...
2024-07-08 00:00:00
贴片电阻上的512标记并非直接表示阻值大小,而是采用一种数字编码方式。代表的是51 x 10^2 欧姆,即5100欧姆,通常简写为5.1kΩ。这种编码方式遵循E...
2024-11-29 10:26:30
电解电容和电容是电子元件中常见的。很多人对的区别不是很了解。本文将详细阐述这两者的不同之处。定义不同电容是储存电能的元件。电解电容是特殊类型的电容。的工作原理和...
2025-03-26 10:31:39
弹簧是常见的机械元件,应用于各个领域。主要作用是储存和释放能量,能够在受到外力作用时产生形变,并在外力解除后恢复到原来的形状。这一特性使得弹簧在各种机械装置中是...
2010-03-31 00:00:00
现代电子设备中,贴片电阻作为一种重要的元器件,被应用于各种电路设计中。由于其小巧的体积和优良的性能,贴片电阻已经成为电子工程师的首选。然而,贴片电阻的封装类型多...
2025-03-16 22:31:39
T型套筒扳手是常见的工具,应用于机械维修和日常生活中。设计独特,使得在狭小空间内也能轻松操作。T型套筒扳手在市场上有多种不同类型,各自具有不同的特点。材质是一个...
2022-08-28 00:00:00