集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 1042|回复: 7

利用有限状态机进行复杂时序逻辑的设计

[复制链接]
zxopenljx 发表于 2020-7-22 09:44:20 | 显示全部楼层 |阅读模式
目的:掌握利用有限状态机实现复杂时序逻辑的方法。

在数字电路中我们已经学习过通过建立有限状态机来进行数字逻辑的设计,而在Verilog HDL硬件描述语言中,这种设计方法得到进一步的发展。通过Verilog HDL提供的语句,我们可以直观地设计出适合更为复杂的时序逻辑的电路。关于有限状态机的设计方法在教材中已经作了较为详细的阐述,在此就不赘述了。

下例是一个简单的状态机设计,功能是检测一个5位二进制序列"10010"。考虑到序列重叠的可能,有限状态机共提供8个状态(包括初始状态IDLE)。

状态机设计确实是一个很实用的工具,可以加快设计的进展。当然在进行状态机原理图的会之前设计者心里要清楚各个状态间如何进行转换。
用状态机设计后生成的VerilogHDL:

00 module untitled(CLK,CODE_IN,RESET,CHECK);
01
02 input CLK;
03 input CODE_IN,RESET;
04 output CHECK;
05 reg CHECK,next_CHECK;
06 reg A,next_A,B,next_B,C,next_C,D,next_D,E,next_E,IDLE,next_IDLE;
07
08 always @(posedge CLK)
09 begin
10 A = next_A;
11 B = next_B;
12 C = next_C;
13 D = next_D;
14 E = next_E;
15 IDLE = next_IDLE;
16 CHECK = next_CHECK;
17 end
18
19 always @ (A or B or C or CODE_IN or D or E or IDLE or RESET)
20 begin
21
22 if ( ~RESET & CODE_IN & A | ~RESET & CODE_IN & B | ~RESET & CODE_IN & D | ~RESET & CODE_IN & E | ~RESET & CODE_IN & IDLE ) next_A=1;
23 else next_A=0;
24
25 if ( ~RESET & ~CODE_IN & A ) next_B=1;
26 else next_B=0;
27
28 if ( ~RESET & ~CODE_IN & B | ~RESET & ~CODE_IN & E ) next_C=1;
29 else next_C=0;
30
31 if ( ~RESET & CODE_IN & C ) next_D=1;
32 else next_D=0;
33
34 if ( ~RESET & ~CODE_IN & D ) next_E=1;
35 else next_E=0;
36
37 if ( ~CODE_IN & C | ~CODE_IN & IDLE | RESET ) next_IDLE=1;
38 else next_IDLE=0;
39
40
41 if ( ~RESET & ~CODE_IN & D ) next_CHECK=1;
42 else next_CHECK=0;
43 end
44 endmodule
zhangyukun 发表于 2020-7-22 18:23:43 | 显示全部楼层
利用有限状态机进行复杂时序逻辑的设计
hellokity 发表于 2020-7-22 19:23:26 | 显示全部楼层
利用有限状态机进行复杂时序逻辑的设计
 楼主| zxopenljx 发表于 2023-11-12 18:30:22 | 显示全部楼层
利用有限状态机进行复杂时序逻辑的设计
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

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

QQ|小黑屋|手机版|Archiver|集成电路技术分享 ( 京ICP备20003123号-1 )

GMT+8, 2024-4-28 13:13 , Processed in 0.074199 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表