基于状态机的工程设计(五邑大学)_第1页
基于状态机的工程设计(五邑大学)_第2页
基于状态机的工程设计(五邑大学)_第3页
基于状态机的工程设计(五邑大学)_第4页
基于状态机的工程设计(五邑大学)_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

1、2.6.4.2 基于状态机的工程设计方法学习利用quartusII软件中的状态机编辑器设计一个1110010序列检测器。1建立工程文件工程文件的建立主要包括指定工程文件名称、选择添加的文件和库及选择目标器件3个过程。在quartusII菜单栏中选择FileNew Project Wizard,在弹出的图2.6.8对话框中输入新建工程所在的文件夹名称(exp_detect3)、工程名称(exp_detect3)和顶层实体名称(exp_detect3),然后点击Next,选择目标器件EPF10K20TC144-3,其他取系统默认设置,继续点击Next按钮,直至进入如图2.6.9所示的对话框,该对话

2、框可以查看设置信息是否正确。正确则单击Finish按钮,完成工程文件的建立。 图2.6.8 创建新工程文件1(指定工程文件名称) 图2.6.9 工程创建结束对话框2输入状态机 建立文件在quartusII菜单栏中选择FileNew,或单击工具栏中的按钮,在弹出的新建文件对话框中,选择State Machine File,单击OK按钮,进入如图2.6.10所示的状态机编辑器窗口。 图2.6.10 quartusII的状态机编辑窗口 创建状态机在quartusII的状态机编辑窗口的菜单栏中选择ToolsState Machine Wizard,弹出如图2.6.11所示的状态机创建向导选择对话框。在

3、该对话框中选择Edit an existing state machine design,点击OK按钮,进入如图2.6.12所示的状态机向导4步中的步骤1对话框。 图2.6.11 状态机创建向导选择对话框 状态机向导步骤1:在图2.6.12对话框中,选择复位Reset信号模式:同步(Synchronous)或者异步(Asynchronous),该序列检测器设计选择异步复位;选中复位信号Reset高电平有效(Reset is active-high);选中输出端的输出方式为寄存器方式(Register the output ports),点击Next按钮,进入状态机向导步骤2对话框如图2.6.1

4、3。 图2.6.12 状态机向导步骤1 状态机向导步骤2:状态转换在图2.6.13状态转换对话框中,在States栏中输入1110010序列检测器的状态名称s0、s1s7,在Input ports栏中输入该检测器状态机的输入时钟信号clock、复位信号reset以及串行数据输入信号din。在State transitions栏中依据该序列检测器设计的状态图依次输入各种状态转换,设置完后点击Next,进入状态机向导步骤3的对话框,如图2.6.14 图2.6.13 状态机向导步骤2(状态转换) 状态机向导步骤3:在图2.6.14所示对话框中,在Output ports栏下的Output Port

5、Name中输入该序列检测器设计的输出信号z,在Output State栏中选择Next clock cycle;在Action condition栏下的Output Port中输入该设计的输出信号z,在Output Value栏以及INState栏中输入该设计的检测结果1极其状态s7。设置完后点击Next进入如图2.6.15所示的状态机向导步骤4。 图2.6.14 状态机向导步骤3 状态机向导步骤4:在图2.6.15所示对话框中显示出状态机的设置情况。点击Finish,关闭状态机向导,生成所需的状态机,将该状态机的各状态位置做适当调整,得到我们所需的状态图,如图2.6.16。 图2.6.15

6、状态机向导步骤4 图2.6.16 利用状态机向导完成的状态图 保存文件单击菜单栏中的按钮,在弹出的“另存为|”对话框中,默认该设计文件为exp_detect3.smf,选中Add file to current project,点击保存按钮,完成文件保存。 生成对应的VHDL文件选择ToolGenerate HDL File,在弹出的对话框2.6.17中选择产生程序代码HDL语言的种类,选择VHDL,点击OK按钮,则自动生成对应的余状态机文件名相同的VHDL文本文件exp_detect3.vhd,在文本编辑窗口中打开该状态机的VHDL代码。 图2.6.17 生成HDL文件对话框基于状态机输入的

7、1110010序列检测器的VHDL代码:exp_detect3.vhdLIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY exp_detect3 ISPORT ( clock : IN STD_LOGIC; reset : IN STD_LOGIC := '0' din : IN STD_LOGIC := '0' z : OUT STD_LOGIC );END exp_detect3;ARCHITECTURE BEHAVIOR OF exp_detect3 IS TYPE type_fstate IS (s0,s1,s

8、2,s3,s4,s5,s6,s7); SIGNAL fstate : type_fstate; SIGNAL reg_fstate : type_fstate; SIGNAL reg_z : STD_LOGIC := '0'BEGIN PROCESS (clock,reg_fstate) BEGIN IF (clock='1' AND clock'event) THEN fstate <= reg_fstate; END IF; END PROCESS; PROCESS (fstate,reset,din,reg_z) BEGIN IF (rese

9、t='1') THEN reg_fstate <= s0; reg_z <= '0' z <= '0' ELSE reg_z <= '0' z <= '0' CASE fstate IS WHEN s0 => IF (din = '1') THEN reg_fstate <= s1; ELSIF (NOT(din = '1') THEN reg_fstate <= s0; - Inserting 'else' block

10、 to prevent latch inference ELSE reg_fstate <= s0; END IF; WHEN s1 => IF (din = '1') THEN reg_fstate <= s2; ELSIF (NOT(din = '1') THEN reg_fstate <= s0; - Inserting 'else' block to prevent latch inference ELSE reg_fstate <= s1; END IF; WHEN s2 => IF (din = &

11、#39;1') THEN reg_fstate <= s3; ELSIF (NOT(din = '1') THEN reg_fstate <= s0; - Inserting 'else' block to prevent latch inference ELSE reg_fstate <= s2; END IF; WHEN s3 => IF (NOT(din = '1') THEN reg_fstate <= s4; ELSIF (din = '1') THEN reg_fstate <

12、;= s2; - Inserting 'else' block to prevent latch inference ELSE reg_fstate <= s3; END IF; WHEN s4 => IF (NOT(din = '1') THEN reg_fstate <= s5; ELSIF (din = '1') THEN reg_fstate <= s1; - Inserting 'else' block to prevent latch inference ELSE reg_fstate <

13、= s4; END IF; WHEN s5 => IF (din = '1') THEN reg_fstate <= s6; ELSIF (NOT(din = '1') THEN reg_fstate <= s0; - Inserting 'else' block to prevent latch inference ELSE reg_fstate <= s5; END IF; WHEN s6 => IF (NOT(din = '1') THEN reg_fstate <= s7; ELSIF

14、(din = '1') THEN reg_fstate <= s2; - Inserting 'else' block to prevent latch inference ELSE reg_fstate <= s6; END IF; WHEN s7 => IF (din = '1') THEN reg_fstate <= s1; ELSIF (NOT(din = '1') THEN reg_fstate <= s0; - Inserting 'else' block to prevent latch inference ELSE reg_fstate <= s7; END IF; reg_z <= '1' WHEN OTHERS => reg_z <= 'X' report "Reach undefined state" END CASE

温馨提示

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

最新文档

评论

0/150

提交评论