当前位置:首页 >> 计算机硬件及网络 >>

VHDLFPGA状态机


《VHDL 与数字系统设计》课程设计报告
( 2014 -- 2015 年度第 1 学期)

名 题 院 班 学

称: VHDL 与数字系统设计 目: 系: 级: 号: 简单状态机 电气与电子工程学院 电子 1301 1131230106 韩辉 高雪莲 2周

学生姓名: 指导教师: 设计周数:



绩:

日期:

2015 年 1 月



课程

课程设计报告

一、课程设计的目的与要求 1. 设计目的 (1) 熟悉 MAXPLUS2/Quartus II 软件,掌握软件的 VHDL 程序输入、程序编译和程序仿真操作; (2) 学习利用 VHDL 语言设计简单状态机程序。 2.设计要求:根据设计正文提出的简单状态机要求设计相应 VHDL 程序。 二、设计正文 设计一个简单状态机的电路,其功能如下: S0:100000 Q:0 K=1 S1:010000 Q:0 K=1 S2:001000 Q:0 K=1 S3:000100 Q:0 K=1 S4:000010 Q:0 K=1 S5:000001 Q:1 K=1

其中:状态有六种状态,分别为 s0—s5;Q 为输出值,只有从 S5 到 S0 的状态转换时,Q=1;k 为控制 信号,当 K=1 时,进行状态转换,k=0 时,状态保持。

简单状态机设计的源程序: Library ieee; Use ieee.std_logic_1164.all; Entity machine is
1

——包含库和程序包 ——定义实体

课程

课程设计报告

Port( clk,reset,K: in std_logic; phase: out std_logic_vector(3 downto 0) Q:out std_logic;); End entity machine; Architecture arc1 of stepmotor is Type states is (S0,S1,S2,S3,S4,S5); Signal current_state: states; Begin process(clk) begin if clk’event and clk='1' then if reset=‘1’ then current_state<= S0; else case current_state is WHEN S0=> IF K='1' THEN current_state <=S1; ELSE current_state <=S0; END IF; Q<='0'; WHEN S1=> IF K='1' THEN current_state <=S2; ELSE current_state <=S1; END IF; Q<='0'; WHEN S2=> IF K='1' THEN current_state E<=S3; ELSE current_state E<=S2;
2

——clk,reset,K 输入变量

——phase,Q 输出变量 ——结束实体

——检测时钟上升沿

——reset=1 时保持 S0 状态

——reset=0 时进入状态转换模式

——K=1 时 S0 转换为 S1

——K=0 时 S0 保持原状态

——输出结果 Q=0

——K=1 时 S1 转换为 S2

——K=0 时 S1 保持原状态

——输出结果 Q=0

——K=1 时 S2 转换为 S3

——K=0 时 S2 保持原状态

课程

课程设计报告

END IF; Q<='0'; WHEN S3=> IF K='1' THEN current_state <=S4; ELSE current_state <=S3; END IF; Q<='0'; WHEN S4=> IF K='1' THEN current_state <=S5; ELSE current_state <=S4; END IF; Q<='0'; WHEN S5=> IF K='1' THEN current_state <=S0; ELSE current_state <=S5; END IF; Q<='1'; WHEN others => current_state <=s0; end case; end if; End if; End progress; Process (current_state) Begin Case current_state is when S0 => phase <= “100000”; when S1 => phase <= “010000”; when S2 => phase <= “001000”;
3

——输出结果 Q=0

——K=1 时 S3 转换为 S4

——K=0 时 S3 保持原状态

——输出结果 Q=0

——K=1 时 S4 转换为 S5

——K=0 时 S4 保持原状态

——输出结果 Q=0

——K=1 时 S5 转换为 S0

——K=0 时 S5 保持原状态

——输出结果 Q=1

——设置 S0~S5 的输出结果

课程

课程设计报告

when S3 => phase <= “000100”; when S4 => phase <= “000010”; when S5 => phase <= “000001”; End case; End progress; End architecture arc1; 三.课程设计结论和总结 1.简单状态机的仿真波形图及其分析 ——结束进程

S0

S1

S2

S3

S4

S5

S0

图 1 简单状态机的仿真波形图一 图 1 为简单状态机的仿真波形图,由图 1 分析可得以下结论: (1) 如图 1 中红色框内区域所示,忽略时间的延迟,当 reset=1 时,输出 phase 一直保持 S0=100000,; 当 reset=1 时,输出 phase 开始进入状态转换。 (2) 如图 1 中绿色框内区域所示,输出结果 phase 的循环状态为 S0→S1→S2→S3→S4→S5→S0?? 且在 phase 输出 S0、S1、S2、S3、S4 时输出 Q=0;在 phase 输出 S5 时输出 Q=1。

S0

S1

S2

S3

S4

图 2 简单状态机的仿真波形图二 图 2 为简单状态机的仿真波形图,由图 2 分析可得以下结论: 输入 K 控制 phase 的状态:当 K=1 时,为转换状态;当 K=0 时,为保持状态。例如:图 2 中红色框内区域 所示即为 K=0 时的保持状态。 2.课程设计的总结 (1)在利用 Quartus II 进行仿真时,要清楚地知道源程序中每一个出入输出变量的作用,并对其给定合 适的值,最终得到正确的仿真波形图。 (2)对同一要求的设计,可尝试利用不同的设计方法进行设计,综合考量后选定最简单易懂的设计方案。
4


相关文章:
更多相关标签: