多状态机的协同设计_第1页
多状态机的协同设计_第2页
多状态机的协同设计_第3页
多状态机的协同设计_第4页
多状态机的协同设计_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、多状态机的协同设计    随着微电子技术的迅速发展,人们对数字系统的需求也在提高 1 。不仅要有完善的功能,而且对速度也提出了很高的要求。对于大部分数字系统,都可以划分为控制单元和数据单元两个组成部分。通常,控制单元的主体是一个有限状态机 ,它接收外部信号以及数据单元产生的状态信息,产生控制信号序列。有限状态机设计的关键是如何把一个实际的时序逻辑关系抽象成一个时序逻辑函数,传统的电路图输入法通过直接设计寄存器组来实现各个状态之间的转换, 而用硬件描述语言来描述有限状态机, 往往是通过充分发挥硬件描述语言的抽象建模能力,通过对系统在系统级或寄存器传输级进行

2、描述来建立有限状态机。EDA 工具的快速发展,使通过CAD快速设计有限状态机自动化成为可能。    传统上在系统级和寄存器传输级完成VHDL 的描述主要分以下几步:    (1) 分析控制器设计指标, 建立系统算法模型图;    (2) 分析被控对象的时序状态, 确定控制器有限状态机的各个状态及输入.输出条件;    (3) 应用VHDL 语言完成描述。    使用XILINX的ISE6.1软件包的辅助工具STATE

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

4、#160;   设计人员的主要工作在第一步。第二步,第三步基本上可以通过STATECAD完成有限状态机的自动生成和分析,还可以利用分析结果来对被控对象的逻辑进行分析,改进,完善系统控制逻辑。    在需要并行处理的场合,往往需要采用多状态机来完成系统的控制任务,这时状态机之间的同步问题往往是设计者需要仔细考虑的问题。如果采用完全人工输入代码的方法来设计,往往力不从心。采用STATECAD完成整个控制逻辑的设计并对设计结果进行验证更能体现CAD设计方法的优势,加速产品开发进度,提高设计生产率。    下面以一个双状态

5、机设计过程来介绍如何使用STATECAD进行多状态机的协同设计。    有二个状态机,一个负责对M0写,一个负责对M0读操作,为了简单起见,系统已经尽量简化了。    负责对M0写的状态机包括四个状态:    STATE0:写状态机复位后初始化;    write0:对M0写,写满4个转到m0full;    m0full:M0满状态;    m0writewait:等待。M0满时转入write0状态。 &

6、#160;  负责对M0读的状态机包括四个状态:    STATE1:读状态机复位后初始化    read0:对M0读,读4个转到m0empty    m0empty:M0空状态    m0readwait:等待。M0空时转入read0状态    负责对M0写的状态机必须知道M0是空的,而负责对M0读的状态机必须知道M0是满的才能读。读完了通知负责对M0写的状态机M0是空的,可以写了。二个状态机同时并行工作。M0写的状态机在写操作完了,

7、就等待M0空。M0读的状态机在读操作完了,就等待M0满。在STATECAD中,状态本身可以作为其他状态机的转移条件。这也正是在进行多状态机的协同设计中最需要的功能,能大大方便多状态机的设计。输入完状态图,就基本完成了状态机的设计过程。进行逻辑优化(工具自动进行逻辑优化)后,使用STATEBENCH进行状态转移分析。以下是自动状态转移模拟波形。由以上的波形看到状态机的工作过程符合设计逻辑。对单独的器件操作也许不需要采用多状态机的设计方法,但在多器件需要并行工作时,多状态机的协同设计就显得必要了。导出VHDL模型块到ISE中进行仿真后综合,这里就不多讲了,以下是产生的代码:-  D:XI

8、LINXTUTORIALDUOZTJI.vhdENTITY SHELL_DUOZTJI IS PORT (CLK,RESET: IN std_logic;  dcounter0,dcounter1 : OUT std_logic); SIGNAL BP_dcounter0,BP_dcounter1,readcounter0,readcounter1: std_logic;END;ARCHITECTURE BEHAVIOR OF SHELL_DUOZTJI IS SIGNAL sreg : std_logic_vector (1 DOWNTO 0

9、); SIGNAL next_sreg : std_logic_vector (1 DOWNTO 0); CONSTANT m0full : std_logic_vector (1 DOWNTO 0) :="00" CONSTANT m0writewait : std_logic_vector (1 DOWNTO 0) :="01" CONSTANT STATE0 : std_logic_vector (1 DOWNTO 0) :="10" CONSTANT write0 : std_

10、logic_vector (1 DOWNTO 0) :="11" SIGNAL sreg1 : std_logic_vector (1 DOWNTO 0); SIGNAL next_sreg1 : std_logic_vector (1 DOWNTO 0); CONSTANT m0empty : std_logic_vector (1 DOWNTO 0) :="00" CONSTANT m0readwait : std_logic_vector (1 DOWNTO 0) :="01" 

11、CONSTANT read0 : std_logic_vector (1 DOWNTO 0) :="10" CONSTANT STATE1 : std_logic_vector (1 DOWNTO 0) :="11" SIGNAL next_BP_dcounter0,next_BP_dcounter1,next_readcounter0,  next_readcounter1 : std_logic; SIGNAL BP_dcounter : std_logic_vector (1 DOWNTO 0);&

12、#160;SIGNAL dcounter : std_logic_vector (1 DOWNTO 0); SIGNAL readcounter : std_logic_vector (1 DOWNTO 0);BEGIN PROCESS (CLK, next_sreg, next_BP_dcounter1, next_BP_dcounter0) BEGIN  IF CLK='1' AND CLK'event THEN   sreg <= next_sreg;  &#

13、160;BP_dcounter1 <= next_BP_dcounter1;   BP_dcounter0 <= next_BP_dcounter0;  END IF; END PROCESS; PROCESS (CLK, next_sreg1, next_readcounter1, next_readcounter0) BEGIN  IF CLK='1' AND CLK'event THEN   sreg1 <= next

14、_sreg1;   readcounter1 <= next_readcounter1;   readcounter0 <= next_readcounter0;  END IF; END PROCESS; PROCESS (sreg,sreg1,BP_dcounter0,BP_dcounter1,readcounter0,readcounter1,  RESET,BP_dcounter,readcounter) BEGINnext_BP_dcounte

15、r0 <= BP_dcounter0;next_BP_dcounter1 <= BP_dcounter1;next_readcounter0 <= readcounter0;next_readcounter1 <= readcounter1;BP_dcounter <= ( std_logic_vector'(BP_dcounter1, BP_dcounter0);readcounter <= ( std_logic_vector'(readcounter1, readcounter0);next_sreg<=m0full;next_s

16、reg1<=m0empty;IF ( RESET='1' ) THEN next_sreg<=STATE0; BP_dcounter <= (std_logic_vector'("00");ELSE CASE sreg IS  WHEN m0full =>   next_sreg<=m0writewait;   BP_dcounter <= ( std_logic_vector'(BP_dcount

17、er1, BP_dcounter0);  WHEN m0writewait =>  IF (  (sreg1=m0empty) THEN   next_sreg<=write0;   BP_dcounter <= ( std_logic_vector'(BP_dcounter1, BP_dcounter0) +       std_logic_vector'("01&quo

18、t;);  ELSE   next_sreg<=m0writewait;   BP_dcounter <= ( std_logic_vector'(BP_dcounter1, BP_dcounter0);  END IF;   WHEN STATE0 =>   next_sreg<=write0;   BP_dcounter <= ( std_logic_vector&

19、#39;(BP_dcounter1, BP_dcounter0) +      std_logic_vector'("01");  WHEN write0 =>  IF ( BP_dcounter0='1' AND BP_dcounter1='1' ) THEN   next_sreg<=m0full;   BP_dcounter <= (std_logic_

20、vector'("00");  ELSE      next_sreg<=write0;   BP_dcounter <= ( std_logic_vector'(BP_dcounter1, BP_dcounter0) +       std_logic_vector'("01");  END IF;  WHEN

21、 OTHERS =>   END CASE; END IF;IF ( RESET='1' ) THEN next_sreg1<=STATE1; readcounter <= (std_logic_vector'("00");ELSECASE sreg1 ISWHEN m0empty => next_sreg1<=m0readwait; readcounter <= ( std_logic_vector'(readcounter1

22、, readcounter0);WHEN m0readwait => IF (  (sreg=m0full) THEN     next_sreg1<=read0; readcounter <= ( std_logic_vector'(readcounter1, readcounter0) +       std_logic_vector'("01");  ELSE  ne

23、xt_sreg1<=m0readwait;  readcounter <= ( std_logic_vector'(readcounter1, readcounter0);  END IF;WHEN read0 => IF ( readcounter0='1' AND readcounter1='1' ) THEN  next_sreg1<=m0empty;  readcounter <= (std_logic_vector'("

24、;00"); ELSE  next_sreg1<=read0;  readcounter <= ( std_logic_vector'(readcounter1, readcounter0) +       std_logic_vector'("01"); END IF;WHEN STATE1 => IF (  (sreg=m0full) THEN  next_s

25、reg1<=read0;  readcounter <= ( std_logic_vector'(readcounter1, readcounter0) + std_logic_vector'("01"); ELSE  next_sreg1<=STATE1;  readcounter <= ( std_logic_vector'(readcounter1, readcounter0); END IF;WHEN OTHERS =>  END CASE;END IF;next_BP_dcounter1 <= BP_dcounter(1);  next_BP_dcounter0 &

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论