《VHDL与数字系统设计》课程设计报告
( 2013 -- 2014 年度第 1 学期)
名 称: VHDL与数字系统设计 题 目: 简单状态机 院 系: 电气与电子工程学院 班 级: 电子1201 学 号: 1121230104 学生姓名: 程驰 指导教师: 高雪莲 设计周数: 2周
成 绩:
日期: 2014年 1 月 日
课程 课程设计报告
一、课程设计的目的与要求
1.设计目的
熟悉MAXPLUS2/Quartus II软件,掌握软件的VHDL程序输入、程序编译和程序仿真操作; 学习利用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时,状态保持。 分析:
由该实验的功能可知该状态机共存在六种不同的状态S0、S1、S2、S3、S4、S5。因此需定义六个不同的状态变量,且每种状态应该能显示出当前的状态S,同时输出Q。且状态的切换是取决于K的状态的。
1
课程 课程设计报告
由所学可知,状态机至少要有一个时钟信号,因此规定当且仅当时钟为上升沿时触发状态变换。此外,考虑到不同情况下的初始状态问题,于是设置了一个状态清零信号reset,当reset信号的输入值为1时,状态强制变为S0。考虑到上述条件,于是reset信号具有最高的优先级。状态的切换与各状态的输出均可以靠CASE语句得以实现。于是可得程序源代码。 源代码:
LIBRARY IEEE;
USE ieee.std_logic_11.all; --调用库函数 ENTITY statework IS
PORT(clk,K,reset:IN STD_LOGIC; --定义输入端口 Q:OUT STD_LOGIC;
NOW:OUT STD_LOGIC_VECTOR(5 DOWNTO 0)); --定义输出端口 END statework;
ARCHITECTURE rtl OF statework IS
TYPE statetype IS(S0,S1,S2,S3,S4,S5); --定义状态变量S0—S5 SIGNAL present_state:statetype; --定义当前状态信号 BEGIN
P1:PROCESS(clk) --第一阶段(状态的跳变) BEGIN
IF(clk'event AND clk='1')THEN --当遇到时钟上升沿 IF(reset='1')THEN
present_state<=S0; --当reset输入为1,当前状态变为S0 ELSE
CASE present_state IS --在reset输入不为1的状态 WHEN S0=>
IF(K='1')THEN
present_state<=S1; ELSE
present_state<=S0; END IF; WHEN S1=> IF(K='1')THEN
present_state<=S2; ELSE
present_state<=S1; END IF; WHEN S2=> IF(K='1')THEN
present_state<=S3; ELSE
present_state<=S2; END IF; WHEN S3=> IF(K='1')THEN
2
课程 课程设计报告
present_state<=S4; ELSE
present_state<=S3; END IF; WHEN S4=> IF(K='1')THEN
present_state<=S5; ELSE
present_state<=S4; END IF; WHEN S5=> IF(K='1')THEN
present_state<=S0; ELSE
present_state<=S5;
END IF; -- WHEN OTHERS=>
present_state<=S0; -- END CASE; END IF; END IF;
END PROCESS;
P2:PROCESS(present_state) -- BEGIN
CASE present_state IS WHEN S0=>
NOW<=\"100000\"; Q<='0'; WHEN S1=>
NOW<=\"010000\"; Q<='0'; WHEN S2=>
NOW<=\"001000\"; Q<='0'; WHEN S3=>
NOW<=\"000100\"; Q<='0'; WHEN S4=>
NOW<=\"000010\"; Q<='0'; WHEN S5=>
NOW<=\"000001\"; Q<='1';
END CASE; -- END PROCESS; END rtl;
定义状态的跳变过程 在非此六个状态的情况下将状态强制变为S0 第二阶段(状态的输出) 定义不同状态下状态信号的输出, 3
课程 课程设计报告
三、课程设计总结或结论
图 1 状态机清零信号
1.由图1所示,当状态清零信号reset的输入值为1的情况下,无论原状态为什么,信号均跳变且维持在S0:10000的状态。由红色区域所示,受系统结构的,状态的输出与信号的输入之间存在着一定的延迟时间,但从整体可认为与程序设计要求相符。
图 2 状态机状态的跳变及保持
2.由图2所示,当reset信号不为0,且K的输入值为1的情况下。随着时钟上升沿的到来,状态发生跳变,从001000跳变至000100,再跳变至000010,然后到000001。且当状态为000001时,输出信号Q的值为1;而当K的输入值为0的情况下,当前状态保持不变。由红色区域所示,受系统结构的,状态的输出与信号的输入之间存在着一定的延迟时间。但从整体来看可知实验进行成功。
4
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- sarr.cn 版权所有 赣ICP备2024042794号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务