第8章 有限状态机的设计
有限状态机FSM设计
有限状态机(FSM)设计利用VHDL设计的许多实用逻辑系统中,有许多是可以利用有限状态机的设计方案来描述和实现的。
无论与基于VHDL的其它设计方案相比,还是与可完成相似功能的CPU相比,状态机都有其难以逾越的优越性。
它主要表现在以下几方面:由于状态机的结构模式相对简单,设计方案相对固定,特别是可以定义符号化枚举类型的状态,这一切都为VHDL综合器尽可能发挥其强大的优化功能提供了有利条件。
而且性能良好的综合器都具备许多可控或不可控的专门用于优化状态机的功能。
状态机容易构成性能良好的同步时序逻辑模块,这对于对付大规模逻辑电路设计中令人深感棘手的竞争冒险现象无疑是一个上佳的选择,加之综合器对状态机的特有的优化能,使得状态机解决方案的优越性更为突出。
状态机的VHDL设计程序层次分明,结构清晰,易读易懂,在排错、修改和模块移植方面,初学者特别容易掌握。
在高速运算和控制方面,状态机更有其巨大的优势。
由于在VHDL中,一个状态机可以由多个进程构成,一个结构体中可以包含多个状态机,而一个单独的状态机(或多个并行运行的状态机)以顺序方式的所能完成的运算和控制方面的工作与一个CPU类似。
由此不难理解,一个设计实体的功能便类似于一个含有并行运行的多CPU的高性能微处理器的功能。
事实上这种多CPU的微处理器早已在通信、工控和军事等领域有了十分广泛的应用。
就运行速度而言,尽管CPU和状态机都是按照时钟节拍以顺序时序方式工作的,但CPU 是按照指令周期以逐条执行指令的方式运行的;每执行一条指令通常只能完成一项操作,而一个指令周期须由多个CPU机器周期构成,一个机器周期又由多个时钟周期构成,一个含有运算和控制的完整设计程序往往需要成百上千条指令。
相比之下,状态机状态变换周期只有一个时钟周期,而且由于在每一状态中状态机可以完成许多并行的运算和控制操作,所以一个完整的控制程序,即使由多个并行的状态机构成,其状态数也是十分有限的。
有限状态机的设计
驱动方程: 驱动方程: Q n +1 = D = Q Q 2 2 2 1
Q2 n +1 = D1 = Q 2 Q1 X
二、MDS图 图 1. MDS图符号 图符号 Si
MDS图与状态图十分相似,且扩展了状态图的功能,又简练了 图与状态图十分相似,且扩展了状态图的功能, 图与状态图十分相似 状态图。 图表现设计过程时, 状态图。MDS图表现设计过程时,既方便清晰又具有较大的灵活性 图表现设计过程时
现态 Q2 Q1 0 0 0 0 0 1 1 0 1 1
次态 X Q2 n+1 Q1 n+1 0 1 0 1 1 1 x 0 0 x 0 0 x 0 0
输出 Z1 Z2 1 1 1 0 0 0 0 0 0 0
由此可得PLA硬件逻辑图 硬件逻辑图 由此可得
输出方程: Z = ( P ) = Q Q 输出方程: 1 2 1
IN ← X AC ← 0 Sr = 1
001
每隔规定的 数量脉冲转 到下一状态
(Q) )
010
ASM图表面上和软件流程图相似 但ASM 图表面上和软件流程图相似, 图表面上和软件流程图相似 图有时间序列, 图有时间序列 即每隔规定的数量脉冲转 到下一状态。 到下一状态。
(R) )
(2)条件分枝框(判断框) )条件分枝框(判断框) (3)条件输出框 条件输出框
Si Z↑↓=Si•E
2. 状态图到 状态图到MDS图 这是一个莫尔型电路,三个状态A、B、C和 图 这是一个莫尔型电路,三个状态 、 、 和 输出Z 依次为01、 、 。这说明: 输出 1Z2依次为 、11、00。这说明: A态到 态时,Z1由0变1,Z1有效; 态到B态时, 变 , 有效; 态到 态时 B态到 态时,Z1由1变0,Z1无效。 态到C态时 态到 态时, 变 , 无效。 同理: 同理: C态到 态时,Z2由0变1,Z2有效; 态到A态时 态到 态时, 变 , 有效; B态到 态时,Z2由1变0,Z2无效 态到C态时 态到 态时, 变 , Z2↑
EDA技术第八章有限状态机设计
EDA技术第八章有限状态机设计有限状态机(Finite State Machine,简称FSM)是一种用于描述和建模系统行为的数学模型。
它可以将系统的行为抽象化为一个有限的状态集合和状态间的转移关系。
在EDA(Electronic Design Automation,电子设计自动化)技术中,有限状态机设计是一项关键技术,用于设计和实现数字电路中的控制逻辑。
有限状态机设计通常包括状态定义、状态转移关系以及输出逻辑的设计。
首先,需要明确定义系统的状态集合。
每个状态代表了系统在特定时间点的行为和状态。
状态可以是简单的布尔值,也可以是复杂的数据结构。
在有限状态机设计中,对状态的定义要具体明确,以便于后续的状态转移关系和输出逻辑的设计。
接下来,需要定义状态间的转移关系。
转移关系决定了系统在不同状态间的切换条件和方式。
可以通过绘制状态转移图或者使用状态转移表的方式来描述状态间的转移关系。
状态转移关系需要保证系统在任意时间点都有确定性的行为,即从一个状态到另一个状态的转移是唯一确定的。
最后,需要设计输出逻辑。
输出逻辑定义了系统在不同状态下的输出行为。
输出可以是控制信号,也可以是数据等其他形式。
输出逻辑的设计需要根据系统的需求和功能来确定,确保在不同状态下的输出能够满足系统的要求。
在有限状态机设计中,可以使用硬件描述语言(HardwareDescription Language,简称HDL)来实现系统的控制逻辑。
常见的HDL语言包括VHDL和Verilog。
通过使用HDL,可以将有限状态机的设计转化为硬件电路的实现,从而在芯片级别上实现系统的功能。
有限状态机设计在EDA技术中起到了至关重要的作用。
它可以帮助工程师更好地理解和描述系统的行为,从而优化和改进设计。
同时,有限状态机设计可以提高设计的灵活性和可重用性,使得设计更易于维护和扩展。
总之,有限状态机设计是EDA技术中的关键技术之一、它通过定义状态集合、状态转移关系和输出逻辑,帮助工程师实现系统的控制逻辑。
EDA第八章 有限状态机设计
DA Lab
图7-5 采样状态机结构框图
DA Lab
7.2.1 三进程有限状态机
【例7-2】 】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY AD574 IS PORT (D :IN STD_LOGIC_VECTOR(11 DOWNTO 0); CLK ,STATUS : IN STD_LOGIC;--状态机时钟 状态机时钟CLK,AD574状态信号 状态信号STATUS 状态机时钟 , 状态信号 LOCK0 : OUT STD_LOGIC; --内部锁存信号 内部锁存信号LOCK的测试信号 内部锁存信号 的测试信号 CS,A0,RC,K12X8 : OUT STD_LOGIC; --AD574控制信号 控制信号 Q : OUT STD_LOGIC_VECTOR(11 DOWNTO 0)); --锁存数据输出 锁存数据输出 END AD574; ARCHITECTURE behav OF AD574 IS TYPE states IS (st0, st1, st2, st3,st4); SIGNAL current_state, next_state: states :=st0 ; SIGNAL REGL : STD_LOGIC_VECTOR(11 DOWNTO 0); SIGNAL LOCK : STD_LOGIC; BEGIN K12X8 <= '1'; LOCK0 <= LOCK ; COM1: PROCESS(current_state,STATUS) --决定转换状态的进程 决定转换状态的进程 接下页
DA Lab
状态机类型:
Moore状态机 输出仅为当前状态的函数 Mealy状态机 输出为当前状态和所有输入信号的函数 (同步输出)
有限状态机的设计1212
教学目的
认识状态机及其特点 学习状态转移图的画法 掌握摩尔(MOORE)型状态机的VHDL设计法 掌握米勒(MEALY)型状态机的VHDL设计法
0.1 什么是状态机
有限状态机(简称状态机)相当于一个控制器, 它将一项功能的完成分解为若干步,每一步对应 于二进制的一个状态,通过预先设计的顺序在各 状态之间进行转换,状态转换的过程就是实现逻 辑功能的过程。
ARCHITECTURE a OF mealy IS TYPE STATE IS (S0,S1,S2,S3,S4); SIGNAL pstate :STATE; BEGIN Mealy型 PROCESS(clk) 状态机描述 BEGIN IF (clk‟EVENT AND clk=„1‟) THEN CASE pstate is WHEN S0=> IF data=„1‟ THEN pstate<=S1; ELSE pstate<=S0; END IF; zo<=0; WHEN S1=> IF data=„1‟ THEN pstate<=S2; ELSE pstate<=S0; END IF; zo<=0; WHEN S2=> IF data=„1‟ THEN pstate<=S2; ELSE pstate<=S3; END IF; zo<=0; WHEN S3=> IF data=„1‟ THEN pstate<=S4; zo<=1; ELSE pstate<=S0; zo<=0;END IF; WHEN S4=> IF data=„1‟ THEN pstate<=S1; ELSE pstate<=S0; END IF; zo<=0; END CASE; END IF; END PROCESS;
第8章 Verilog有限状态机设计
always @(posedge clk or posedge clr)
//此过程定义状态转换
beginif(clr) qout<=0;
//异步复位
else case(qout)
3'b000: qout<=3'b001;
3'b001: qout<=3'b010;
3'b010: qout<=3'b011;
第8章 Verilog有限状态机设计
8.1 有限状态机(FSM)
有限状态机(Finite State Machine,FSM) 1、适于设计数字系统的控制模块,适于用
FPGA实现; 2、认为是组合逻辑和寄存器逻辑的特殊组 合,寄存器用于存储状态,组合逻辑用于状态 译码和产生输出信号;
8.1 有限状态机
位热码方式*/
/*状态编码,采用一
always @(posedge clk or posedge clr)
//此过程定义状态转换
begin
if(clr) state<=s0;
//异步复位
else case(state)
s0: state<=s1;
s1: state<=s2;
s2: state<=s3;
s3: state<=s4;
s4: state<=s0;
default: state<=s0; /*default语句*/
endcase
end
always @(state)
/*此过程产生输出逻辑*/
begin case(state)s4:z=1'b1;
空调系统有限状态机的设计
空调系统有限状态机的设计-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN空调系统有限状态机的设计摘要:空调系统状态机自动控制是以可编程逻辑为核心,配以各种传感器,电机驱动,状态机,变频器等实现自动控制,能确保空调末端温度供给,降低系统运行费用和时间,从而节约资源,它必将日趋成熟,在人类的生活中大显身手。
一直以来,环保问题时世界关注的焦点,各种替代能源动力车的出现,为空调业提出来新的课题与挑战。
现代家用也得发展成为人们生活的追求,空调已成为人们的必备品。
关键字:FPGA,空调系统状态机,自动控制。
一、设计分析:1.课程设计目的:本课程设计的目的是在掌握EDA实验开发的初步使用基础上,了解EDA技术,对空调系统进一步了解,掌握其状态机的工作原理,掌握用Verilog实现状态机的方法。
通过本课程的设计,更好的巩固加深基础知识的理解,独立完成仿真过程,增强理论联系实际,提高电路分析能力,为日后的学习奠定基础。
2.课程设计要求:试设计一个空调系统状态机,它两个输入端A和B分别与传感器相连(用两位拨码开关模拟),用于检测室内温度。
如果室内温度正常,则A和B均为0。
如果室内温度过高,则A为“1”,B为“0”。
如果室内温度过低,则A为“0”,B为“1”。
根据A和B 的值来判断当前的状态,如太热,则在液晶上显示TOO-HOT,并将输出端COOL置为“1”,并显示,表明现在开始制冷;如太冷,则在液晶上显示TOO-COLD,并将输出端HEAT置为“1”,并显示,表明现在开始加热;如适中,则在液晶上显示JUST-RIGHT,COOL和HEAT都为“0”。
要求一: 由传感器检测室内温度,并将采集来的数据传输到控制系统的预处理单元,在预处理单元将采集来的温度信号与设定值相比较,来判断当前的状态 (太热、太冷或适中),然后将处理结果传输到控制单元,最后由执行机构接受控制单元输出的控制信号,控制室内空调。
有限状态机的设计
2、状态编码
最常用的有三种编码方式: state0, state1, state2, state3 二进制 00, 01, 10, 11 格雷码 Gray 00, 01, 11, 10 独热编码One-hot 0001,0010, 0100,1000 CPLD使用Gray状态码,FPGA使用one-hot 编码
datain=0/out=0
case语句
datain=1/out=1
If(!datain) next_state=1’b0; else next_state=1’b1; end 1’b1 : begin out=datain; If(!datain) next_state=1’b0; else next_state=1’b1; end default: {next_state, out}=2’b00; endcase endmodule 必须规定状态变量,用来定义状态机的状态。 必须有初态处理和默认状态处理 要改变当前的状态,必须改变状态变量的值,状态变量的值的改变要与 时钟沿同步。
下一个状态 默认状态
改写为摩尔状态机
datain=0 rst=1 0 out=0 datain=0
datain=1 1 out=0
datain=0
datain=1 2 out=1 datain=1
改写为摩尔状态机
module exp(out, datain, clk, rst); input clk, rst, datain; output out; reg out; reg[1:0] state,next_state; always@(posedge clk or posedge rst) begin if(rst) state<=2’b0; else state<=next_state; end always@(state or datain) begin case(state) 2’b00: begin out=1’b0; if(!datain) next_state=2’b00; else next_state=2’b01; end 2’b01 : begin out=1’b0; if(datain) next_state=2’b10; else next_state=2’b00; end 2’b10 : begin out=1’b1; if(!datain) next_state=2’b00; else next_state=2’b10; end default: {next_state,out}=3’b000; endcase end endmodule
有限状态机的设计
-- Moore output definition using pres_state only outputs: process (pres_state) begin case pres_state is when st0 => data_out <= '1'; when st1 => data_out <= '0'; when st2 => data_out <= '1'; when st3 => data_out <= '0'; when st4 => data_out <= '1'; when others => data_out <= '0'; end case; end process outputs; end behave;
有限状态机的设计
7、有限状态机的设计
输入 数据单元 输出
时钟 控制单元 复 位
数字系统的组成框图
• 数据单元:保存运算数据和运算结果的 寄存器及完成运算的组合电路。 • 控制单元:产生控制信号序列。 微程序控制单元 硬件实现的控制单元(有限状态机)
7、有限状态机的设计
有限状态机由三部分组成: (1). 当前状态寄存器:是用来保存当前状态矢量的一 组n比特的触发器,这组触发器由一个时钟信号驱动。 长度为n比特的状态矢量具有2n 个可能状态,称为状态 编码。通常并不是所有的2n个都需要,所以在正常操作 时就不能出现未使用的状态。或者说,具有m个状态的 有 限 状 态 机 至 少 需 要 log2 ( m ) 个 状 态 触 发 器 。 在 VHDL设计有限状态机时一般采用枚举类型来定义状态 机的状态。 (2). 下一个状态逻辑:有限状态机在任何给定时刻只 能处于一个状态,只有在时钟的有效沿上才从当前状态 转移到下一个状态。这个转换过程是由“下一个状态逻 辑”确定的,下一个状态是状态机的输入和当前状态的 函数。在VHDL设计有限状态机时一般由一个进程实现, 进程的敏感信号为当前状态和状态机的输入。
有限状态机的设计
17
default:begin red=1; yellow=0; green=0; next_state=red_state; end endcase end endmodule
18
仿真波形
19
一段式状态机
检测输入信号0110 状态转换图
20
状态转换表
21
声明部分
module fsm_seq1(x,z,clk,reset); input x,clk,reset; output z; reg z; reg[2:0]state; parameter s0='d0,s1='d1,s2='d2,s3='d3,s4='d4;
16
yellow_state:begin red=0; yellow=1; green=0; repeat (delay_y2g) @(posedge clock); next_state=green_state; end green_state:begin red=0; yellow=0; green=1; repeat (delay_g2r) @(posedge clock); next_state=red_state; end
2
moore型红绿灯
状态转换图
3
模型代码
module trafficlight1(clock,reset,red,yellow,green); input clock,reset; //输入时钟和复位信号 output red,yellow,green; //输出红黄绿的驱动信号 reg red,yellow,green; reg [1:0] current_state,next_state; //保存当前状态和下一状态 parameter red_state=2'b00, yellow_state=2'b01, green_state=2'b10, delay_r2y=4'd8, delay_y2g=4'd3, delay_g2r=4'd11; //参数声明
空调系统有限状态自动机的设计
1 引言1.1 课程设计的背景空调的发明已经列入20世纪全球十大发明之一,它首次向世界证明了人类对环境温度、湿度、通风和空气品质的控制能力。
19世紀,英国科学家及发明家麦克·法拉第(Michael Faraday),发现压缩及液化某种气体可以將空气冷冻,当时其意念仍流于理论化。
二十世纪六七十年代美国为解决干旱缺水地区的冷热源问题而率先研制出风冷式冷水机,用空气散热代替冷却塔,其英文名为 Air cool chiller, 简称Chiller。
之后,设备设计和制造技术在90年代被转让到中国[1] 。
随着人们生活水平的逐渐提高,空调产品也将由“生活奢侈品”逐渐转变为日常生活用品。
在空调健康、节能功能以及外观设计上,国内企业也经过引进、消化、吸收,技术水平及产品质量都在不断趋于完善,我国已经发展成为世界空调产业重要的研发和生产基地。
随着经济的发展,空调已成为必备的家用电器,对空调的设计更加重要。
随着社会需求的变化,空调朝着节能、环保及智能化方向发展。
1.2课程设计的目的本课程设计的目的是在掌握EDA实验开发系统的初步使用基础上,了解EDA 技术,对空调系统进一步了解,掌握其有限状态自动机工作原理。
通过本次课程设计更好地巩固和加深对基础知识的理解,学会设计中小型数字系统的方法,独立完成仿真过程,增强理论联系实际的能力,提高电路分析和理解能力。
为日后的学习和工作奠定基础。
1.3课程设计的任务本课程设计任务是通过设计空调系统有限状态自动机的基本方法学习硬件设计的基本思想和基本流程,采用Max+plus2等软件为开发工具。
通过对计算机硬件和软件解决方案的论证,对应用领域进行调查分析,参考各种资料和进行硬件开发实践。
在指导老师的帮助下,已经基本上成功地实现了设计任务书的要求。
1.4课程设计的内容本课程设计主要完成基于VHDL的空调系统的设计与实现。
本文运用有限状态自动机的方法,设计了状态机进程与信号控制进程相互配合。
EDA技术实用教程Verilog四版第8章
第8章有限状态机设计技术有限状态机及其设计技术是实用数字系统设计中的重要组成部分,也是实现高效率、高可靠和高速控制逻辑系统的重要途径。
广义而论,只要是涉及触发器的电路,无论电路大小,都能归结为状态机。
因此,对于数字系统设计工程师,面对的只要是时序电路设计,状态机的概念则是必须贯穿于整个设计始终的最基本的设计思想和设计方法论;只有从电路状态的角度去考虑,才能从根本上把握可靠,高效的时序逻辑的设计关键。
在现代数字系统设计中,状态机的设计对系统的高速性能、高可靠性、稳定性都具有决定性的作用。
读者对于此章的学习必须给于高度的关注。
有限状态机应用广泛,特别是对那些操作和控制流程非常明确的系统设计,在数字通信领域、自动化控制领域、CPU设计领域以及家电设计领域都拥有重要的和不可或缺的地位。
尽管到目前为止,有限状态机的设计理论并没有增加多少新的内容,然而面对先进的EDA工具、日益发展的大规模集成电路技术和强大的硬件描述语言,有限状态机在其具体的设计和优化技术以及实现方法上却有了许多新的内容和新的实现方法。
本章重点介绍用Verilog设计不同类型有限状态机的方法,同时考虑EDA工具和设计实现中许多必须重点关注的问题,如优化、毛刺的处理及编码方式等方面的问题。
8.1 Verilog状态机的一般形式就理论而言,任何时序模型都可以归结为一个状态机。
如只含一个D触发器的二分频电路或一个普通的4位二进制计数器都可算作一个状态机;前者是两状态型状态机,后者是16状态型状态机,都属于一般状态机的特殊形式。
但这些并非出自明确的自觉的设计目的和合理的状态机设计方案而导致的时序模块,未必能成为一高速、高效、稳定、控制流畅、修改便捷和功能目标明确的真正意义上的状态机。
基于现代数字系统设计技术自觉意义上的状态机的HDL表述形态和表述风格具有一定的典型性和格律化。
正是据此,现代EDA的综合器能从不同表述形态的HDL程序中轻易地萃取出(Extract)状态机设计,并加以多侧面多目标和多种形式的优化;甚至还能能动地改变、脱离甚至不遵从设计程序文字上的表述,而按照综合器自己的方式去优化状态机的设计。
有限状态机FSM
100
011
1/0
010
11
0010/0
10 1001/0 1010/0 1100/1 1010/0
图2 1101序列检测器状态图
图3 1101序列检测器次态卡诺图
(5)根据次态卡诺图画分解卡诺图,然后求状态方程和 输出方程 Q3卡诺图
有限状态机克服了纯硬件数字系统顺序方式控制不灵活 的缺点
状态机的结构模式相对简单,层次分明、易读易懂易排 错 状态机容易构成性能良好的同步时序逻辑模块 状态机的verilog表述丰富多样,综合器易于优化 利用同步时序和全局时钟线可实现高速有限状态机 可靠性高,非法状态易控制
FSM是为时序电路设计而创建的特殊模型技术,在针对
激励信号
状态 寄存器
clk 输入
当前状态
输出逻辑 G
输出
时钟信号clk
例:时钟同步状态机(D触发器)
下一状态逻辑 产生激励信号
X X’
状态存储器
输出逻辑
MAX
X
输入
D0
Q0
输出
Q0
Q0’ D1 Q1
Q1
Q1’
激励
CLK
时钟信号
当前状态
X
X X’
MAX D0 Q0
(3)由激励方程和触发器特征方程
Q0 得到转移方程(状态方程)
有限状态机(FSM)-建模
有限状态机的Verilog描述:
定义模块名和输入输出端口; 定义输入、输出变量或寄存器; 定义时钟和复位信号; 定义状态变量和状态寄存器; 用时钟沿触发的always块表示状态转移过程;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
18
Verilog HDL数字系统设计及仿真
default:begin red=1; yellow=0; green=0; next_state=red_state; end endcase end endmodule
19
Verilog HDL数字系统设计及仿真
仿真波形
20
一段式状态机
Verilog HDL数字系统设计及仿真
Verilog HDL数字系统设计及仿真
声明部分
module fsm_seq2(x,z,clk,reset); input x,clk,reset; output z; reg z; reg[2:0]state,nstate; //state表示原态,nstate表示新态 parameter s0='d0,s1='d1,s2='d2,s3='d3,s4='d4;
9
Verilog HDL数字系统设计及仿真
功能仿真
时序仿真
10
Verilog HDL数字系统设计及仿真
增加一个可变计数器
always @(posedge clock or posedge reset) begin if(reset) light_count<=0; else if (light_count==light_delay) //达到规定的计数值light_delay时置1 light_count<=1; else light_count<=light_count+1; end
moore型红绿灯
Verilog HDL数字系统设计及仿真
状态转换图
4
模型代码
Verilog HDL数字系统设计及仿真
module trafficlight1(clock,reset,red,yellow,green); input clock,reset; //输入时钟和复位信号 output red,yellow,green; //输出红黄绿的驱动信号 reg red,yellow,green; reg [1:0] current_state,next_state; //保存当前状态和下一状态 parameter red_state=2'b00, yellow_state=2'b01, green_state=2'b10, delay_r2y=4'd8, delay_y2g=4'd3, delay_g2r=4'd11; //参数声明
12
Verilog HDL数字系统设计及仿真
green_state:begin red=0; yellow=0; green=1; light_delay=green_delay; //延迟时间被赋值为green时的延迟 if(light_count==light_delay) //达到延迟时间变为下一状态 next_state=red_state; end
27
Verilog HDL数字系统设计及仿真
功能仿真波形
时序仿真波形
28
一段式特点
Verilog HDL数字系统设计及仿真
①仅有一段always结构,里面包含了 状态转换、复位和输出; ②always结构的敏感列表是时钟沿, 所以最后的输出结构是以寄存器形式 输出,即时序逻辑输出的
29
两段式状态机
17
Verilog HDL数字系统设计及仿真
yellow_state:begin red=0; yellow=1; green=0; repeat (delay_y2g) @(posedge clock); next_state=green_state; end green_state:begin red=0; yellow=0; green=1; repeat (delay_g2r) @(posedge clock); next_state=red_state; end
16
Verilog HDL数字系统设计及仿真
always @(current_state or x) begin case(current_state) red_state:begin red=1; yellow=0; green=0; if(x==1) //红灯时若x为1,则把下一状态指向黄灯 begin repeat (delay_r2y) @(posedge clock); next_state=yellow_state; end end
6
Verilog HDL数字系统设计及仿真
//第二段always,用于根据当前状态判断下一状态, 并产生输出always @(current_state) begin case(current_state) red_state:begin red=1; yellow=0; green=0; repeat (delay_r2y) @(posedge clock); next_state=yellow_state; end
25
Verilog HDL数字系统设计及仿真
S2状态
s2: begin if(x==0) begin state<=s1; z<=0; end else begin state<=s3; z<=0; end end
S3状态
s3: begin if(x==0) begin state<=s4; z<=1; end else begin state<=s0; z<=0; end end
26
Verilog HDL数字系统设计及仿真
S4状态
s4: begin if(x==0) begin state<=s1; z<=0; end else begin state<=s2; z<=0; end end
结束
default: state<=s0; endcase end endmodule
11
Verilog HDL数字系统设计及仿真
case(current_state) red_state:begin red=1; yellow=0; green=0; light_delay=red_delay; if(light_count==light_delay) next_state=yellow_state; end yellow_state:begin red=0; yellow=1; green=0; light_delay=yellow_delay; if(light_count==light_delay) next_state=green_state; end
5
Verilog HDL数字系统设计及仿真
//第一段always,用于把下一状态赋值给当前状态 always @(posedge clock or posedge reset) begin if(reset) current_state<=red_state; else current_state<=next_state; end
7
Verilog HDL数字系统设计及仿真
完成状态描述
yellow_state:begin red=0; yellow=1; green=0; repeat (delay_y2g) @(posedge clock); next_state=green_state; end green_state:begin red=0; yellow=0; green=1; repeat (delay_g2r) @(posedge clock); next_state=red_state; end default:begin red=1; yellow=0; green=0; next_state=red_state; end endcase end 8 endmodule
13
mealy型红绿灯
Verilog HDL数字系统设计及仿真
状态转换图
14
设计模块
Verilog HDL数字系统设计及仿真
module trafficlight3(clock,reset,x,red,yellow,green); input clock,reset; input x; //多添加了一个输入端x output red,yellow,green; reg red,yellow,green; reg [1:0] current_state,next_state; parameter red_state=2'b00, yellow_state=2'b01, green_state=2'b10, delay_r2y=4'd8, delay_y2g=4'd3, delay_g2r=4'd11;
23
Verilog HDL数字系统设计及仿真
一段always
always@(posedge clk or posedge reset) //仅有一段always begin if(reset) //复位信号有效 begin state<=s0; //回到初始状态 z=0; //z输出0 end
24
30
Verilog HDL数字系统设计及仿真
第一段always
always @(posedge clk or posedge reset) begin if(reset) state<=s0; else state<=nstate; end
第二段always
always@(state or x) begin casex(state) s0: begin if(x==1) begin nstate=s0; z=0; end else begin nstate=s1; z=0; end end
15
Verilog HDL数字系统设计及仿真