基于VHDL语言的有限状态机设计方法
合集下载
10 VHDL有限状态机设计

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY ADC0809 IS PORT( D: IN STD_LOGIC_VECTOR(7 DOWNTO 0); clk , reset : IN STD_LOGIC; EOC : IN STD_LOGIC; ALE , START ,OE : OUT STD_LOGIC; ADDA, LOCK_T : OUT STD_LOGIC; Q : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ); END ENTITY ADC0809 ; 说明部分: ARCHITECTURE bhv OF ADC0809 IS 状态类型定义, TYPE states IS (s0,s1,s2,s3,s4); 当前状态和次态信号定义 SIGNAL cs, next_state : states:=s0; SIGNAL REGL :STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL LOCK : STD_LOGIC; BEGIN 锁存数据和锁存信号定义 ADDA<='0';
COM1 : PROCESS(cs,EOC) IS BEGIN CASE cs IS WHEN s0 => next_state <= s1; WHEN s1 => next_state <= s2;
WHEN s2 => IF EOC='1' THEN next_state<=s3;
ELSE next_state<=s2; END IF; WHEN s3 => next_state <= s4;
【例10-2】:AD0809控制器的设计
COM : PROCESS( cs , EOC) IS BEGIN CASE cs IS WHEN s0 => ALE <= '0'; START <= '0'; OE <= '0'; LOCK <= '0'; next_state <= s1; WHEN s1 => ALE <= '1'; START <= '1'; OE <= '0'; LOCK <= '0'; next_state <= s2; WHEN s2 => ALE <= '0'; START <= '0'; OE <= '0'; LOCK <= '0'; IF EOC='1' THEN next_state<=s3; ELSE next_state<=s2; END IF; WHEN s3 => ALE <= '0'; START <= '0'; OE <= '1'; LOCK <= '0'; next_state < '0'; START <= '0'; OE <= '1'; LOCK <= '1'; next_state <= s0; WHEN OTHERS => ALE <= '0'; START <= '0'; OE <= '0'; LOCK <= '0'; next_state <= s0; END CASE; END PROCESS COM; 主控组合进程: LOCK_T <= LOCK;
COM1 : PROCESS(cs,EOC) IS BEGIN CASE cs IS WHEN s0 => next_state <= s1; WHEN s1 => next_state <= s2;
WHEN s2 => IF EOC='1' THEN next_state<=s3;
ELSE next_state<=s2; END IF; WHEN s3 => next_state <= s4;
【例10-2】:AD0809控制器的设计
COM : PROCESS( cs , EOC) IS BEGIN CASE cs IS WHEN s0 => ALE <= '0'; START <= '0'; OE <= '0'; LOCK <= '0'; next_state <= s1; WHEN s1 => ALE <= '1'; START <= '1'; OE <= '0'; LOCK <= '0'; next_state <= s2; WHEN s2 => ALE <= '0'; START <= '0'; OE <= '0'; LOCK <= '0'; IF EOC='1' THEN next_state<=s3; ELSE next_state<=s2; END IF; WHEN s3 => ALE <= '0'; START <= '0'; OE <= '1'; LOCK <= '0'; next_state < '0'; START <= '0'; OE <= '1'; LOCK <= '1'; next_state <= s0; WHEN OTHERS => ALE <= '0'; START <= '0'; OE <= '0'; LOCK <= '0'; next_state <= s0; END CASE; END PROCESS COM; 主控组合进程: LOCK_T <= LOCK;
一种应用VHDL语言设计有限状态机控制器的方法

图 2 ADC0809 控制器连接方法及其时序图
其 中 D 7~ D 0 为 A D 变 换 数 据 输 出; AD 2 V HDL 语言在同一进程内不允许时钟的两个沿作
DR ESS 为 8 路通道选择地址; STA R T 信号是转换 为敏感变量, 所以将产生 STA R T 信号单列为一个
of Sequen tia l F in ite Sta te M ach ines IEEE T ran saction s on Com p u ter- A ided D esign. 1989, 8 (11) : 1206~ 1217
图 1 状态机进程划分图
3. 2 状态划分 在进行状态机控制部分的设计过程中, 主要是
通过分析 ADC0809 的时序来确定状态转换进程中 的各个状态和几个状态下的控制信号输出。 3. 2. 1 ADC0809 时序分析
ADC0809 为单极性输 入, 8 位 转 换 逐 次 逼 近 A D 转换器, 可对 0~ 5V 的 IN T 0~ IN T 7 8 路模拟 信号分时进行转换, 完成一次转换的时间约为 100 微秒。 其与控制器连接方法及时序图见图 2 所示。
状 态 S2, 启 动 转 换; 在 启 动 转 换 后, ADC0809 使 EO C 置为低电平, 设置 S3 状态等待 A D 转换结 束; 当数据转换结束后, EO C 信号由低电平转换为 高电平, 状态机进入 S4 状态, 开启输出允许 O E; 状 态机进入 S5 状态, 开启数据锁存信号 LO CK 对输 出数据进行锁存; 为产生与其它进程通信的信号, 状 态机设置 S6 状态作为最后一个状态, 然后跳转回 S0 初始状态。 其状态转换及控制输出如图 3 所示。
启动信号, 上升沿有效; EO C 为状态结束标志, 低电 平转为高电平时转换结束; O E 为数据输出允许信 号, 高电平有效; AL E 为地址锁存允许信号; LO CK 为数据锁存信号。
有限状态机

comreg:PROCESS(clk) --时钟进程和状态转化进程 BEGIN IF clk‘event AND clk=‘1' THEN CASE state IS WHEN s0=> IF x='0' THEN state<=s0; ELSE state<=s1; END IF; WHEN s1=> IF x='0' THEN state<=s0; ELSE state<=s2; END IF; WHEN s2=> IF x='0' THEN state<=s0; ELSE state<=s2; END IF; END CASE; END IF; END PROCESS;
---输出进程
已知米里型电路的状态转换图如图所示,试给出其VHDL描述。 描述。 例 已知米里型电路的状态转换图如图所示,试给出其 描述
S
X/Y
0/0
0/0
S0
1/ 0
S1Leabharlann 1/ 0S21/ 1
0/0
该电路有一个输入信号X和一个输出信号Y以及三个状态,因此在描述 时需要定义一个仅含S0、S1、S2三个状态的枚举类型,并定义一个信 号表示电路状态。VHDL描述如下: 2个进程描述
com1:PROCESS(present_state,x) --状态转换进程 BEGIN CASE present_state IS WHEN s0=> IF x='0' THEN next_state<=s0; ELSE next_state<=s1; END IF; WHEN s1=> IF x='0' THEN next_state<=s0; ELSE next_state<=s2; END IF; WHEN s2=> IF x='0' THEN next_state<=s0; ELSE next_state<=s3 next_state<=s3; END IF; WHEN s3=> IF x='0' THEN next_state<=s0; ELSE next_state<=s3; END IF; END CASE; END PROCESS;
8 VHDL语言状态机

0000_0000_0000_0001
0000_0000_0000_0010 0000_0000_0000_0100 0000_0000_0000_1000 0000_0000_0001_0000 0000_0000_0010_0000 0000_0000_0100_0000 0000_0000_1000_0000 0000_0001_0000_0000 0000_0010_0000_0000 0000_0100_0000_0000 0000_1000_0000_0000 0001_0000_0000_0000 0010_0000_0000_0000 0100_0000_0000_0000 1000_0000_0000_0000
3.摩尔状态机
Moore状态机的输出只与有限状态自动机的当
前状态有关,与输入信号的当前值无关。 Moore有限状态机在时钟CLOCK脉冲的有效 边沿后的有限个门延后,输出达到稳定值。即 使在一个时钟周期内输入信号发生变化,输出也 会在一个完整的时钟周期内保持稳定值而不变。 输入对输出的影响要到下一个时钟周期才能反 映出来。
Mealy型有限状态机的结构图
1 状态机分类
FSM的设计要点
定义枚举类型表达不同的状态特点;
设置信号表达现有状态和转换的状态;
对每一个现态,利用选择语句,根据控制条
件x决定转换次态;
根据现态和x决定输出y。
1 状态机分类 状态机的基本操作
状态机内部状态转换。状态机的下一个状态
由译码器根据当前状态和输入条件决定。 产生输出信号序列。输出信号由输出译码器 根据当前状态和输入条件决定。
0000
0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
第六章 状态机的VHDL设计

WHEN st1=>comb_outputs<="01"; --对应st1的译码输出“01” WHEN st3=>comb_outputs<="11"; IF state_inputs="00" THEN IF state_inputs="11" THEN --根据外部的状态控制输入“00” next_state<=st3; next_state<=st1; ELSE --在下一时钟后,进程REG的状态将维 next_state<=st0; 持为st1 END IF; ELSE END CASE; next_state<=st2; END PROCESS; --否则,在下一时钟后,进程reg的状 --由信号next_state将下一状态值带出此 态将为st2 进程,进入时序进程reg END IF; END behave; WHEN st2=>comb_outputs<="10"; --以下依次类推 REG和COM进程间一般是 IF state_inputs="11" THEN next_state<=st2; 并行运行的,但由于敏感 ELSE 信号CLK的设置不同以及 next_state<=st3; END IF; 电路的延迟,在时序上进
END IF; END PROCESS; -由current_state将当前状态值带出 此进程,进入组合逻辑进程COM COM:PROCESS(current_state,stat e_inputs) --组合逻辑进程 BEGIN CASE current_state IS --确定当前状态的状态值 WHEN st0=>comb_outputs<="00"; --初始态译码输出 IF state_inputs="00" THEN --根据外部的状态控制输入“00” next_state<=st0; --在下一时钟后,进程REG的状态 维持为st0 ELSE next_state<=st1; --否则,在下一时钟后,进程REG 的状态将为st1 5 END IF;
有限状态机的VHDL设计

8.4 米立状态机设计(续2)
例8.3四状态米立状态机的描述。
COM:PROCESS (state, input) -- 依据当前状态和输入信号决定输出信号,与时钟无关 BEGIN CASE state IS WHEN s0=> IF input = '0' THEN output <= "00"; ELSE output <= "01"; END IF; WHEN s1=> IF input = '0' THEN output <= "01"; ELSE output <= "10"; END IF; WHEN s2=> IF input = '0' THEN output <= "10"; ELSE output <= "11"; END IF; WHEN s3=> IF input = '0' THEN output <= "11"; ELSE output <= "00"; END IF; END CASE; END PROCESS; END rtl;
8.3 摩尔状态机设计(续1)
例8.2 四状态摩尔型有限状态机的描述。
BEGIN PROCESS (clk, reset) -- 状态转换的时序进程 BEGIN IF reset = '1' THEN state <= s0; ELSIF (clk'EVENT and clk='1') THEN CASE state IS WHEN s0=> IF input = '1' THEN ELSE END IF; WHEN s1=> IF input = '1' THEN ELSE END IF; WHEN s2=> IF input = '1' THEN ELSE END IF; WHEN s3 => IF input = '1' THEN ELSE END IF; END CASE; END IF; END PROCESS; PROCESS (state) -- 输出由当前状态唯一决定的组合逻辑进程 BEGIN CASE state IS WHEN s0 => output <= "00"; WHEN s1 => output <= "01"; WHEN s2 => output <= "10"; WHEN s3 => output <= "11"; END CASE; END PROCESS;
用VHDL设计有限状态机的方法

用VHDL设计有限状态机的方法现代数字系统的设计一般都采用自顶向下的模块化设计方法。
即从整个系统的功能出发,将系统分割成若干功能模块。
在自顶向下划分的过程中,最重要的是将系统或子系统按计算机组成结构那样划分成控制器和若干个受控制的功能模块。
受控部分通常是设计者们所熟悉的各种功能电路,设计较为容易。
主要任务是设计控制器,而其控制功能可以用有限状态机来实现。
因而有必要深入探讨有限状态机的设计方法。
1 状态机设计的一般方法 传统的设计方法是首先绘制出控制器的状态利用VHDL设计状态机,不需要进行繁琐的状态分配、绘制状态表和化简次态方程。
设计者不必使用卡诺(1)根据系统要求确定状态数量、状态转移的条件和各状态输出信号的赋值,并画出状态转移(2)按照状态转移(3)利用EDA工具对状态机的功能进行仿真验证。
下面以离心机定时顺序控制器的设计为例,说明状态机的设计方法。
2 定时顺序控制状态机的设计 在化工生产中,离心机用于固、液分离的工艺流程,如系统工作方式如下:当系统处于初始状态或复位信号reset有效时,系统处于复位状态。
按下自动工作键C0,系统进入加料工序并开始自动控制离心机的运行。
以加水工序为例,首先在加水预置数状态(water_ld)时,状态机输出信号FO,开启加水电磁阀及指示灯,同时输出信号G控制选通加水时间预置数,在LD1信号的控制下,将预置数送入COUNTER1。
此时ENA1=1,J=1,使计数器为减计数状态。
然后,在下一个时钟周期进入加水工作状态(water),并开始减计时。
当计时为零时,计数器发出借位信号R1作为此工序结束的信号送入状态机,使其转入。
已看 第五章VHDL有限状态机设计

当前状态。
精品资料
1 有限(yǒuxiàn)状态机的基本概念
1. 说明部分
ARCHITECTURE ...IS
TYPE FSM_ST IS (s0,s1,s2,s3);
SIGNAL current_state, next_state: FSM_ST;
2.主控时序(shíxù)进程
负责状态机运转和在时钟驱动下的状态转换,
精品资料
1 有限(yǒuxiàn)状态机的基本概念
状态机的本质 对具有“逻辑顺序”和“时序规律”事件
的一种描述方法。 应用思路 从状态变量入手,分析每个状态的输入,
状态转移和输出,从而完成电路的功能。 首先明确电路的输出关系(guān xì),这些
输出相当于状态的输出,回溯规划每个状 态和状态转移条件与状态输入。
精品资料
1 有限(yǒuxiàn)状态机的基本概念
符号化状态机 所谓符号化状态机,就是(jiùshì)在程序的
说明部分使用TYPE语句定义枚举类型,其 元素用状态机的状态名来定义。状态变量 (如状态机的现态和次态)定义为变量或 信号,并将状态变量的数据类型定义为含 有既定状态元素的枚举类型。 在使用多进程时,为便于信息传递,要将 状态变量定义为信号。
运转及状态转换。 寄存器逻辑 寄存器逻辑的功能:用来存储有限状态机的内部状
态。
精品资料
1 有限(yǒuxiàn)状态机的基本概念
状态机实现三个功能
状态译码:根据输入以及系统当前的状态,
由状态方程来决
定下一状态的状态码。
状态输出:根据当前的状态码决定电路当
前输出。
状态转换(zhuǎnhuàn):将下一状态转变为
安全性等因素,所以并不经常使用状态转
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机技术与应用进展 ・ 0 2 4 0
硬币,则给出 1 盒饮料的同时找回5 角钱。 这是一个属于M a 型状态机问 el y 题。 状态机的状态转换图 如图4 所示, 投币 信号是输入逻辑变量, 用 A和 B表示,A 1 = 表示投入一枚 1 元硬币,B 1 = 表示投入一枚 5 角硬币。输出信号用 Y和 Z表示, Y1 = 表示售出一盒饮料,Z 1 = 表示找回 5 角钱。
E I Y OOR I NT T M EI S
PR( O T
C , I S D L G C 一C O K PR : T _ I; d N O LC
AB: T e I; - I u - , I S D L GC N s O pt n S nl ia g S nl ia g
BE N GI
R G : R C S (dC ) O E S , E IP R P
BE N GI
I R =' T N F d 0 HE '
C r nSa < S ; ur tt e O e t =
E SE 'VE L I CPE NTAND CP=' T N 1 HE '
态译码电路较少。
3 o 型状态机的描述 Mor e
用V D 描述状态转换图如图3 HL 所示的状态机, 该状态 机属于 Mor型,状态机有四种状态,分别是 S , , , o e O S S l 2 S 。有一个状态输入信号 A和一个状态输出信号 Y 3 o 用V D 描述 M O E型 HL O R 状态机时, 需要区分组合逻辑 电 路部分和时序逻辑电路部分。用一个 P O E S R C S 语句描述 N 组合逻辑电路和输出组合逻辑电路, S 用另一个 P O E S R CS 语句描述当前状态寄存器, 属于时序逻辑电路。 P O E S 用 R CS 语句描述时序逻辑电路要用到 I C ' E T D F E N A C PV N P=1 1 . TE H N语句,并且要把时钟信号引入敏感信号列表中。因为 M O E型状态机的输出只与当前的状态有关,所以在描述 OR 图3 o 型状态机状态转换图 Mor e 组合逻辑电路的进程中用 C S- E 语句判别有限状态 A EWH N F LEE D语 - 机的四个状态, 把输出 信号变量的赋值语句放在 I-L EE D语句之后,而不能放在 I E S-N F S-N E
SG A S t E M; IN L e :T T e t a SA s
Curn Sae re t t t
0/ 00
图 4 a Mel v型状态机状态转
SG A N x te :T T e A E M; IN L t a e St S s
一Ne t t x S ae t
... -
73 0
路的 输入信号 态机的当 状态, 此, P 有效 化时 信号 化。 是状 前 因 在C 发生 变 输出 变 而在M a 型 机 ey 状态 l
中,输出组合逻辑电路的输入信号是状态机的当前状态和状态机的输入信号 A 。因此,当 C P发生有效 变化时和输入信号改变时输出信号都可能改变。
专用集成电路上, 这样最大程度地缩短了设计和开发时间,降低了成本, 提高了系统的可靠性汇- 。 13 本 -1
文以有限状态机的设计和应用来说明V D 语言在逻辑电路硬件设计中的应用。 HL
2 有限 状态机 (ne e h e F i St a i ) it t M cn a
有限状态机 F i te h e 是由状态寄存器和组合逻辑电 (itS tM ci ) ne a n a 路构成的, 能够根据控制信号按照 预先设定的状态进行状态间转移, 是协调相关信号动作、 完成特定操作的控制中心, 属于一种同步时序 逻辑电路。 状态机分为M o 型和 M a 型。 M o 型状态机中, or e el 在 or y e 状态机的输出 信号只是当前状态的 函数,与输入信号无关。 or型状态机的内部结构图如图1 Mo e 所示。 而在M a 型状态机中, el y 状态机的 输出信号是当前状态和输入信号的函数, a 型状态机的内 Mey l 部结构图 如图2 所示。[5 41 , 常用的状态机由 三个部分组成。即当前状态寄存器 ( ue St Crn te r t ,简称 C 、下一状态组合逻辑 a S) ( t ,简称 N ) NxS t e te a S 和输出 组合逻辑 ( uLg ,简称O ) Ot t c u oi p L o 当前状态寄存器的 任务是保存当 前状态Crn st 当 ue te 前状态的实现是 r t 。 a 在状态时钟信号C 发生有 P 效变化时,通过对状态寄存器进行赋值,其输入信号是 N S组合逻辑电路的输出 信号 ( ette,其 N x st sa e ) 输出将作为输出组合逻辑和N 组合逻辑电路的输入。 d S R 是异步复位端, 低电平有效。 N S组合逻辑电路的作用是根据状态机的输入信号 A 和当前状态 C rn t u ette确定下一个状态 r 一a s N x st的取值。 et e t a 输出组合逻辑电 路的任务是确定状态机的对外输出 信号Y 在 M o 型状态机中, 。 or e 输出组合逻辑电
向 (oo - ) 上 btmu 的设计也 p 支持从顶向 ( p on 的设计,同时也支持结构、行为和数据流三种形 下 t-w ) od
式的混合描述。 在使用 V D H L语言进行逻辑电路设计时, 不需要考虑特定电路制造工艺的影响, 其设计 覆盖所有的逻辑电路形式。 其语法结构以 严谨著称, 适合于复杂逻辑电路的设计。 设计者可以利用 V D HL 描述设计的电路,然后利用 E A工具进行综合和仿真,形成目 D 标文件,最后将系统实现在 P D芯片或 L
共定义了 4个当前状态,4个状态 的含义是: S: O 投币时,售货机内没有硬币; S: l 投币时,售货机内已有 5 角; S : 币时,售货机 内已有 1 2投 元; S : 币时,售货机 内已有 1 5 3投 元 角。 自动售货机的 V D H L描述如下:
L B AR IE ; I R Y E E
个PO ES 句 述, 样 的 序 构 分明 便于 读, 用 较 杂电 设 用 个 R C S 语 描 这 编出 程 结 层次 , 阅 适 于 复 路的 计。 两
P O ES R C S 语句描述的方法是把 N 组合逻辑电路和输出组合逻辑电路在一个 P O E S S R C S 语句中描述, 用 另一个 P O E S R C S 语句描述当前状态寄存器。 在V D H L中, 可以 用枚举型数据类型定义一个状态变量数据类型, 状态变量的元素用符号表示。 例
计算机技术与应用进展 .04 -0 2
基于V D 语言的有限状态机设计方法’ HL
朱维勇 傅桂生
合肥工业大学电气与自 动化学院 200 309 摘 要 在数字逻辑电 路设计中, 有限状态机是数字逻挥电 路的重要组成部分,在工业控制领域 应用广泛, 很多复杂的逻辑控制问 题都可以用有限状态机来描述。文章介绍两类有限状态机的结构
原理和设计特点, 利用V D 语言中的 HL 结构描述语句 和从顶向下 ( p on 设计对有限状态 t- w ) od 的 机
进行结构化和层次化描述, 通过典型的实例说明利用E A工具实 D 现逻辑电路的设计方法有效性。 关健词 V D H L有限状态机 逻辑电路设计
1 引
言
V D 语言作为一种标准的硬件描述语言,支持从系统级到门级电路的所有层次描述,既支持自 HL 底
图1 oe Mor状态机的内部结构
图2 el状态机的内 M a y 部结构
用VD H L描述状态机常用的方法有:三个 P O E S语句描述和两个 P O E S语句描述。三个 RCS R CS P O E S语句描述的方法是把 N R CS S组合逻辑电路、C S当前状态寄存器和 O L输出组合逻辑电路各用一
作者简历:朱维勇,男,16 年生,硕士学位,讲师,现从事电子技术和计算机应用等学科的教学与研究工作. 93
荃于VD 语言的有限状态机设计方法 HL
巨口目皿曰....口口目目口口.......里里旦旦旦旦旦口旦口口.巨 鱼 鱼 里 鱼 里 圈 皿恤 里 曰一 国 口 鱼 鱼 鱼 鱼 皿 鱼口
.. . ̄
0/ 0 0
AB/ _ YZ
U E ES D L GC 16.L ; S IE . _ I_ 4 L E T O 1 A U E ES D L GC A IHA L S IE . _ I_ T .L ; E T O R
US IE .T L GI U I NE AL ; E ES D O C NSG D. L E
如语句 T P SAE I ( , , , ) YE T- S S S S ;用来定义 SAE 是一个新的数据类型,名称是 T M S 12 3 O TT- M
"T T M 。定义数据类型的元素是 S, , , 。 SA E " O I 2 3 其状态编码由 S S S 具体的 V D H L综合工具确定。也可以 直接对状态变量进行编码, 状态机的编码方式很多, 如格雷码, n- t oe o码等, h 每种编码方式均有各 自的 特点, 如格雷码译码时不会产生毛刺, 但电路结构复杂; n- t 尽管编码电路较大, oe o码, h 但是需要的状
) ;
E ND AL I ME Y ; ARC T C UR C F E YI HI E T E O M AL I S
0/ 00 0/ 00
YZ : U S D L GC t t . u u , O T e I . p T sO O
T P SA E I (0S, S) IS, ; Y E T - S , 2 3 T M S D c r - te e le - a Tp e a St y
BE N GI
CAS C r nSae E r ttt I ue S WHE S = -T T S N O > -S A E O
I A=OA D '' H N -N U A O = O F ( ' N B 0 T E - P T =, ' = ) I B