- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1
FSM是为时序电路设计而创建的特殊模型技术,在针对任务顺序非常明确的电路(如交通灯控制器)是非常实用。
理论上,任何时序电路都可以建立FSM模型,但并不总是一种高效的方法。如果一味地追求使用FSM来设计时序电路,可能会导致代码冗长和容易出错。例如,任务简单的寄存器就不必使用FSM方式实现。又例如,虽然任务与顺序很明确,但任务数目太多或者性能要求较高时,也不宜用FSM方式实现。
状态机的设计包含两个主要过程,一是状态机的建模,二是状态机的编码。
第8章 状态机(Finite State Machine,FSM)
2
状态机的组成:如图。
状态机的种类:
Mealy型:当前状态、当前输入相关
Moore型:仅当前状态相关
VHDL代码结构:
时序逻辑部分:process内部
组合逻辑部分:
在使用FSM方式设计VHDL代码时,通常会在结构体的开始部分插入一个用户自定义的枚举数据类型,其中包含所有可能出现的电路状态。
8.1 引言
3
8.2 设计风格#1
一种结构清晰、易于实现的FSM设计风格:
FSM中的时序逻辑部分和组合逻辑部分分别独立设计;
定义一个枚举数据类型,内部包含所有FSM需要的状态;
4
FSM中时序逻辑部分的设计特点:
确定的输入/输出端口
典型的模板可供使用
------------lower section---------------
process (clock, reset)
begin
if (reset = 1‘) then
pr_state = state0;
elsif (clock’event and clock=‘1’) then
pr_state = nx_state;
end if;
end process;
标准的设计
寄存器数目少:默认的编码方式下,log2n
表现为位宽
5
FSM中组合逻辑部分的设计特点:
并发代码、顺序代码皆可;
顺序代码方式的设计模板
process的敏感信号列表
完整列出IN/OUT组合
无边沿赋值,无寄存器生成
------------upper section---------------
process (input, pr_state)
begin
case pr_state is
when state0= //多个条件转移分支
if (input=...) then
output = value;
nx_state=state1;
else ....;
end if;
when state1=
if (input=...) then
output = value;
nx_state=state2;
else ....;
end if;
......
end case;
end process;
6
设计风格#1的状态机模板
library ieee;
use ieee.std_logic_1164.all;
entity entity_name is
port (input: in data_type;
reset, clock: in std_logic;
output: out data_type);
end entity_name;
architecture arch_name of entity_name is
type state is (state0, state1, state2, state3, ...);
signal pr_state, nx_state: state;
begin
------------lower section---------------
process (clock, reset)
begin
if (reset = 1‘) then
pr_state = state0;
elsif (clock’event and clock=‘1’) then
pr_state = nx_state;
end if;
end process;
------------upper section--
原创力文档


文档评论(0)