您现在的位置: 无忧电子商务网 >> 信息学院 >> 论文中心 >> 理工论文 >> 计算机与信息技术论文 >> 正文

用STATECAD快速设计有限状态机

作者:佚名    信息学院来源:网络整理    点击数:    更新时间:2006-4-2 我要参与讨论

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

在google里搜索更多用STATECAD快速设计有限状态机

Google
Web www.51ec.org
【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
我来说两句 对此文章发表了评论
  昵 称: *必填    ·注册用户·
  评 分: 1分 2分 3分 4分 5分     严禁发表危害国家安全、政治、黄色淫秽等内容的评论,用户需对自己在使用本网站服务过程中的行为承担法律责任。本站管理员有权保留或删除评论内容,评论内容只代表机友个人观点,与本网站立场无关。  
评 论
内 容

 
评论列表 (最新 评论仅限网友观点!)

推荐文章
  • 此栏目下没有推荐信息学院
  • 热门文章
  • 此栏目下没有热点信息学院
  • 供求信息




    | 设为首页 | 加入收藏 | 关于我们 | 广告服务 | 联系方式 | 友情链接 | 版权申明