现在位置:范文先生网>理工论文>电子通信论文>用STATECAD快速设计有限状态机

用STATECAD快速设计有限状态机

时间:2023-02-21 00:15:08 电子通信论文 我要投稿
  • 相关推荐

用STATECAD快速设计有限状态机

数字系统通常划分为信息处理单元和控制单元。信息单元主要进行信息的传输和运算,而控制单元的主要任务是控制信息处理单元的微操作的顺序。控制单元的实现方式有:有限状态机、控制寄存器和微代码控制器等。有限状态机在时间尺度上对其控制信号进行离散化控制,利用状态转移使控制信号在有限状态机的状态节拍控制下变化,以实现对被控对象的控制。有限状态机设计的关键是如何把一个实际的时序逻辑关系抽象成一个时序逻辑函数,传统的电路图输入法通过直接设计寄存器组来实现各个状态之间的转换,而用硬件描述语言来描述有限状态机,往往是通过充分发挥硬件描述语言的抽象建模能力,通过对系统在系统级或寄存器传输级进行描述来建立有限状态机。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芯片,适配结果如下:
  
  宏模块使用PtermsUsed寄存器使用情况引脚使用情况IOB使用情况
  9/36(25%)37/180(21%)9/36(25%)13/34(39%)11/72(16%)
  
  进行引脚锁定后就可以进行编程。
  代码如下:
  --D:\XILINXTUTORIAL\VCRSTATE.vhd
  --VHDLcodecreatedbyXilinx'sStateCAD6.1i
  
  LIBRARYieee;
  USEieee.std_logic_1164.all;
  
  ENTITYVCRSTATEIS
  PORT(CLK,PLAYSWITCH,POWERSWITCH,RECORDSWITCH,RESET,STOPSWITCH:INstd_logic;
  PLAYLED,POWERLED,RECORDLED:OUTstd_logic);
  END;
  
  ARCHITECTUREBEHAVIOROFVCRSTATEIS
  TYPEtype_sregIS(OFF,PLAY,POWERON,RECORDING);
  SIGNALsreg,next_sreg:type_sreg;
  SIGNALnext_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';
  ELSIFCLK='1'ANDCLK'eventTHEN
  sreg<=next_sreg;PLAYLED<=next_PLAYLED;
  POWERLED<=next_POWERLED;RECORDLED<=next_RECORDLED;
  ENDIF;
  ENDPROCESS;
  
  PROCESS(sreg,PLAYSWITCH,POWERSWITCH,RECORDSWITCH,STOPSWITCH)
  BEGIN
  next_PLAYLED<='0';next_POWERLED<='0';next_RECORDLED<='0';
  next_sreg<=OFF;
  CASEsregIS
  WHENOFF=>
  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';
  ENDIF;
  WHENPLAY=>
  IF(POWERSWITCH='1'ANDSTOPSWITCH='0')THEN
  next_sreg<=PLAY;next_POWERLED<='1';
  next_PLAYLED<='1';next_RECORDLED<='0';
  ENDIF;
  IF(POWERSWITCH='0')THEN
  next_sreg<=OFF;next_POWERLED<='0';
  next_PLAYLED<='0';next_RECORDLED<='0';
  ENDIF;
  IF(STOPSWITCH='1'ANDPOWERSWITCH='1')THEN
  next_sreg<=POWERON;next_POWERLED<='1';
  next_PLAYLED<='0';next_RECORDLED<='0';
  ENDIF;
  WHENPOWERON=>
  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';
  ENDIF;
  WHENRECORDING=>
  IF(POWERSWITCH='1'ANDSTOPSWITCH='0')THEN
  next_sreg<=RECORDING;next_POWERLED<='1';
  next_PLAYLED<='0';next_RECORDLED<='1';
  ENDIF;
  IF(POWERSWITCH='0')THEN
  next_sreg<=OFF;next_POWERLED<='0';
  next_PLAYLED<='0';next_RECORDLED<='0';
  ENDIF;
  IF(STOPSWITCH='1'ANDPOWERSWITCH='1')THEN
  next_sreg<=POWERON;next_POWERLED<='1';
  next_PLAYLED<='0';next_RECORDLED<='0';
  ENDIF;
  WHENOTHERS=>
  ENDCASE;
  ENDPROCESS;
  ENDBEHAVIOR;
  
  整个状态机实现过程比相当简单。快捷。有效。

【用STATECAD快速设计有限状态机】相关文章:

快速跑教学设计及教案优秀02-17

小学体育教案设计:快速跑02-18

一种快速数字AGC结构的分析与设计08-06

基于DDS的快速跳频频率合成器的设计08-06

用FPGA实现DSP与液晶显示器的快速接口08-06

快速阅读法08-17

30米快速跑08-16

素质练习—快速跑08-16

快速审题和立意08-05