数字系统通常划分为信息处理单元和控制单元。信息单元主要进行信息的传输和运算, 而控制单元的主要任务是控制信息处理单元的微操作的顺序。控制单元的实现方式有: 有限状态机、控制寄存器和微代码控制器等。有限状态机在时间尺度上对其控制信号进行离散化控制, 利用状态转移使控制信号在有限状态机的状态节拍控制下变化, 以实现对被控对象的控制。有限状态机设计的关键是如何把一个实际的时序逻辑关系抽象成一个时序逻辑函数,传统的电路图输入法通过直接设计寄存器组来实现各个状态之间的转换, 而用硬件描述语言来描述有限状态机, 往往是通过充分发挥硬件描述语言的抽象建模能力,通过对系统在系统级或寄存器传输级进行描述来建立有限状态机。EDA 工具的快速发展,使通过CAD快速设计有限状态机自动化成为可能。

传统上在系统级和寄存器传输级完成VHDL 的描述主要分以下几步:

(1) 分析控制器设计指标, 建立系统算法模型图;
(2) 分析被控对象的时序状态, 确定控制器有限状态机的各个状态及输入.输出条件;
(3) 应用VHDL 语言完成描述。

使用XILINX的ISE6.1软件包能加速有限状态机设计,大大简化状态机的设计过程,实现状态机设计的自动化。下面分析二个简单的状态机设计实例来介绍使用ISE6.1软件包中STATECAD来介绍快速设计有限状态机的方法。使用STATECAD进行状态机设计的流程如下:

(1) 分析控制器设计指标, 建立系统算法模型图;
(2) 分析被控对象的时序状态, 确定控制器有限状态机的各个状态及输入.输出条件;
(3) 在STATECAD中输入有限状态机状态图,自动产生VHDL模型描述,使用STATEBENCH进行状态转移分析,分析无误后使用导出VHDL模型块到ISE中进行仿真后综合,实现到CPLD或FPGA的映射。

设计人员的主要工作在第一步。第二步,第三步基本上可以通过STATECAD完成有限状态机的自动生成和分析,还可以利用分析结果来对被控对象的逻辑进行分析,改进,完善系统控制逻辑。

下面以一个VCR控制机状态机设计过程来介绍如何使用STATECAD设计状态机。
VCR控制机描述:

外部输入:
1.POWERSWITCH---------电源开关
2.STOP----------------停按钮
3.PLAY――――――――播放按钮
4.RECORD―――――――录影按钮

输出状态:
1. 有电显示:电源指示灯亮,播放指示灯灭,录影指示灯灭;
2. 按播放按钮,进入播放状态,播放指示灯亮,电源指示灯亮,录影指示灯灭;按停按钮,退出播放状态回到有电状态,播放指示灯灭,电源指示灯亮,录影指示灯灭;
3. 按录影按钮,进入录影状态,录影指示灯亮;按停按钮,退出录影状态回到有电状态;电源指示灯亮,播放指示灯灭,录影指示灯灭;
4. 电源开关断开,电源指示灯灭,播放指示灯灭,录影指示灯灭;

打开STATECAD,输入如下的状态图:

进行逻辑优化(工具自动进行逻辑优化)后,使用STATEBENCH进行状态转移分析。以下是自动状态转移模拟波形。

也可以进行行为状态模拟:如以下动作的模拟波形,按电源开关上电,按播放按钮,按播放按钮,按停按钮,按录影按钮,按停按钮,电源开关断电。

综合以上的模拟波形结果,可以看到状态机安装指定的状态转移图工作。
导出VHDL模型块到ISE中进行仿真后综合后可以适配到XC9536-5-PC44芯片,适配结果如下:

宏模块使用 Pterms Used 寄存器使用情况 引脚使用情况 IOB使用情况
9/36  (25%) 37/180  (21%) 9/36  (25%) 13/34  (39%) 11/72  (16%)

进行引脚锁定后就可以进行编程。 
代码如下:
--  D:\XILINXTUTORIAL\VCRSTATE.vhd
--  VHDL code created by Xilinx's StateCAD 6.1i

LIBRARY ieee;
USE ieee.std_logic_1164.all;

ENTITY VCRSTATE IS
 PORT (CLK,PLAYSWITCH,POWERSWITCH,RECORDSWITCH,RESET,STOPSWITCH: IN std_logic ;
  PLAYLED,POWERLED,RECORDLED : OUT std_logic);
END;

ARCHITECTURE BEHAVIOR OF VCRSTATE IS
 TYPE type_sreg IS (OFF,PLAY,POWERON,RECORDING);
 SIGNAL sreg, next_sreg : type_sreg;
 SIGNAL next_PLAYLED,next_POWERLED,next_RECORDLED : std_logic;
BEGIN
 PROCESS (CLK, RESET, next_sreg, next_PLAYLED, next_POWERLED, next_RECORDLED)
 BEGIN
  IF ( RESET='1' ) THEN
   sreg <= OFF;              PLAYLED <= '0';
   POWERLED <= '0';             RECORDLED <= '0';
  ELSIF CLK='1' AND CLK'event THEN
   sreg <= next_sreg;             PLAYLED <= next_PLAYLED;
   POWERLED <= next_POWERLED;  RECORDLED <= next_RECORDLED;
  END IF;
 END PROCESS;

PROCESS (sreg,PLAYSWITCH,POWERSWITCH,RECORDSWITCH,STOPSWITCH)
 BEGIN
  next_PLAYLED <= '0'; next_POWERLED <= '0'; next_RECORDLED <= '0'; 
  next_sreg<=OFF;
  CASE sreg IS
   WHEN OFF =>
    IF ( POWERSWITCH='1' ) THEN
     next_sreg<=POWERON; next_POWERLED<='1';
     next_PLAYLED<='0'; next_RECORDLED<='0';
     ELSE
     next_sreg<=OFF;  next_POWERLED<='0';
     next_PLAYLED<='0'; next_RECORDLED<='0';
    END IF;
   WHEN PLAY =>
    IF ( POWERSWITCH='1' AND STOPSWITCH='0' ) THEN
     next_sreg<=PLAY;    next_POWERLED<='1';
     next_PLAYLED<='1'; next_RECORDLED<='0';
    END IF;
    IF ( POWERSWITCH='0' ) THEN
     next_sreg<=OFF;  next_POWERLED<='0';
     next_PLAYLED<='0'; next_RECORDLED<='0';
    END IF;
    IF ( STOPSWITCH='1' AND POWERSWITCH='1' ) THEN
     next_sreg<=POWERON; next_POWERLED<='1';
     next_PLAYLED<='0'; next_RECORDLED<='0';
    END IF;
   WHEN POWERON =>
    IF ( POWERSWITCH='0' ) THEN
     next_sreg<=OFF;  next_POWERLED<='0';
     next_PLAYLED<='0'; next_RECORDLED<='0';
    ELSIF ( RECORDSWITCH='1' ) THEN
     next_sreg<=RECORDING; next_POWERLED<='1';
     next_PLAYLED<='0';  next_RECORDLED<='1';
    ELSIF ( PLAYSWITCH='1' ) THEN
     next_sreg<=PLAY;     next_POWERLED<='1';
     next_PLAYLED<='1';  next_RECORDLED<='0';
     ELSE
     next_sreg<=POWERON;  next_POWERLED<='1';
     next_PLAYLED<='0';  next_RECORDLED<='0';
    END IF;
   WHEN RECORDING =>
    IF ( POWERSWITCH='1' AND STOPSWITCH='0' ) THEN
     next_sreg<=RECORDING; next_POWERLED<='1';
     next_PLAYLED<='0';  next_RECORDLED<='1';
    END IF;
    IF ( POWERSWITCH='0' ) THEN
     next_sreg<=OFF;   next_POWERLED<='0';
     next_PLAYLED<='0';  next_RECORDLED<='0';
    END IF;
    IF ( STOPSWITCH='1' AND POWERSWITCH='1' ) THEN
     next_sreg<=POWERON;  next_POWERLED<='1';
     next_PLAYLED<='0';  next_RECORDLED<='0';
    END IF;
   WHEN OTHERS =>
  END CASE;
 END PROCESS;
END BEHAVIOR;

整个状态机实现过程比相当简单。快捷。有效。

用STATECAD快速设计有限状态机相关推荐

  1. 如何快速设计元器件原理图库和PCB封装库?

    目录 1.立创商城EDA免费库 2.Altium Library Loader 3.贸泽电子ECAD模型 在设计电路的过程中经常会遇到这样的问题:无法快速找到合适的元器件原理图封装和PCB封装(Foo ...

  2. butter滤波器是iir吗_如何快速设计一个IIR滤波器

    在文章如何快速设计一个FIR滤波器(一)以及如何快速设计一个FIR滤波器(二)等文章中,我们讨论了如何设计FIR(Finite Impulse Response Filter),FIR有很多优点,比如 ...

  3. matlab绘制蜂窝,PPT技巧:如何快速设计蜂窝表达的图形设计?

    这个设计还蛮好看的,怎么做出来的呢?牛闪闪给教教吧!这类蜂窝状表达也是目前流行的表达方式之一,牛闪闪把方法交给大家. 场景:企业市场.财务.人事部等需要PPT演示汇报的办公人士. 问题:如何快速设计蜂 ...

  4. db设计专用excel_独家|自卸车如何实现侧板结构快速设计,减少重复工作?

    作者| 张凯 汉阳专用汽车研究所科研技术部工程师 主要从事专用汽车产品结构仿真与轻量化 随着城市发展的步伐不断加快,适用于各种工况的自卸车.城市渣土车市场需求量不断增大. 目前市场自卸车车厢主要有两种 ...

  5. butter滤波器是iir吗_如何快速设计应用一个IIR滤波器

    在小平:如何快速设计应用一个FIR滤波器 中,我们讨论了如何设计一个FIR滤波器,接下来我们介绍IIR滤波器.和设计FIR滤波器一样,我们可以粗略的设计IIR滤波器(幅频响应不精确,设计简单),也可以 ...

  6. 能帮你快速设计好APP的UI kits套装

    能帮你快速设计好APP的UI Kit通常包含了非常全面的资源集合,同时也能让您正确的规划组织结构,您也可以把您创意跟模板结合.UI Kit通常包含了各种模板和ui组件(按钮,复选框,进度条,导航栏等) ...

  7. 使用linux批量引物设计,干货分享:如何快速设计多条qPCR引物?

    原标题:干货分享:如何快速设计多条qPCR引物? 干货分享: 小伙伴们,新的一周已经开始啦,有没有从周末中复苏过来,今天首先让我们来了解一款快速设计多条qPCR引物的数据库. MRPrimer使用篇 ...

  8. 利用ADS快速设计低噪放

    仿真软件的出现,让我们不再需要推导复杂的公式,帮助我们快速且优质地完成射频设计. ADS的DesignGuide里面有各式各样的模板,可以协助我们进行设计.今天我想探讨的是,如何利用DesignGui ...

  9. 如何根据原理图画封装_如何快速设计元器件原理图库和PCB封装库?

    在设计电路的过程中经常会遇到这样的问题:无法快速找到合适的元器件原理图封装和PCB封装(Footprint),通常最基本的做法是百度找找别人分享的资源,或者自己按照尺寸绘制.这样做法效率较低,影响到项 ...

最新文章

  1. Linux复制文件scp
  2. 少走弯路:强烈推荐的TensorFlow快速入门资料(可下载)
  3. 台式电脑一般价钱多少_让你少走弯路,看我怎么花低价钱配出高配置的台式电脑的...
  4. jsp图片墙_JS实现的非常漂亮的3D立体照片墙显示效果
  5. 使用pip install出现超时警告的解决方法
  6. 同学的博客,没想到也这么多文章。
  7. 华为路由交换常见配置
  8. java 包之 BeanUtils包的使用
  9. 文字识别成语音_广东人专属!微信语音转文字可以识别粤语了!
  10. 批处理之计划任务at和schtasks
  11. 【物联网控制技术】--第一章--【自动控制】【反馈控制】【调节过程】【系统要求】【典型的外部输入信号】
  12. Skype和LibFetion无法输入中文的解决方法
  13. Excel如何给单元格加斜线
  14. [QT学习]-调色板|选择文件
  15. python对外正式发布年份_python正式对外发布的年份
  16. 电脑dns服务器未响应啥意思,电脑诊断出DNS服务器未响应是什么意思
  17. 咖啡屋时光书城【原创】
  18. linux卸载beyondcompare,CentOS上运行BeyondCompare
  19. 【55种开源数据可视化工具简介】
  20. 装修颜色搭配大全,全是惊喜啊

热门文章

  1. oracle按区间查询,Oracle模糊查询时间以及按照时间区间查询
  2. 计算机显示休眠状态进不去,如何让电脑进入不休眠状态,福利在这里,电脑系统怎样才能进入不休眠状态...
  3. macos安装软件总报错,最终解决
  4. 基于html扫雷游戏毕业论文,扫雷游戏的设计与开发毕业设计毕业论文正稿
  5. 小程序如何防御DDOS攻击?
  6. java 微信 qq 登录_拾人牙慧篇之———QQ微信的第三方登录实现
  7. 更新iCloud设置iPhone / iPad卡住时该怎么修复
  8. SS310L-ASEMI肖特基二极管SS310L
  9. 黑白艺术海报排版欣赏 | 分享设计好物|一组黑白艺术海报设计分享
  10. 专访iDST NLP负责人——淘宝内容搜索、评价归纳的幕后英雄