内容发布更新时间 : 2024/12/26 22:48:07星期一 下面是文章的全部内容请认真阅读。
eda状态机的VHDL设计
10进制加减计数器状态机的VHDL设计
一、 【设计目的】
学习并掌握Quartus II 开发系统的基本操作。
掌握用Quartus II进行文本输入法进行电路设计、编译和仿真方法。 掌握CPLD/FPGA的开发流程。 掌握EDA实验开发系统的使用。 掌握状态机的原理。
掌握简单状态机的VHDL设计方法 掌握计数器的设计方法。
掌握带有复位和和时钟使能的10进制计数器的原理。 掌握通用计数器的设计方法。
学习使用VHDL进行时序逻辑电路的设计。 学习利用真值表编写VHDL程序。
学习掌握7段数码显示译码器设计的原理。 掌握VHDL语言方式设计7段数码显示译码器。 学习掌握8位数码管动态扫描显示电路的原理。 掌握VHDL语言设计8位数码管动态扫描显示电路 学习VHDL语言设计较复杂的电路方法。
二、 【设计任务】 设计要求
用VHDL语言设计一个状态机,要求具有以下状态和功能中的四种或者四种以上:
A. B. C. D. E. F. G.
复位功能
8、10或者16进制加法计数 8、10或者16进制减法计数 数码管以任何方式闪动 8个LED灯以任何方式闪动 蜂鸣器发声或者播放一段音乐 并用两位数码管将结果显示出来
本次设计选用的功能状态为:
1 / 7
eda状态机的VHDL设计
A. B. C. D. E. F.
复位功能
十进制加法计数 十进制减法计数 数码管闪动 8个led灯闪动
并用两位数码管将结果显示出来
功能实现说明
Clk为50MHz的时钟信号输入;rst为复位控制按键(低电平有效);en(0-2)通过三个按键分别控制3种状态(低电平有效)。
1. 当en(0)=`0`时,启动加法计数并将结果动态显示到两位数码管上,同
时另外的两位数码管的6段以相反方向按顺序闪烁
2. 当en(1)=`0`时,启动减法计数并将结果动态显示到两位数码管上,同
时另外的两位数码管的6段以相反方向按顺序闪烁,闪烁方向与加法的相反;
3. 当en(2)=`0`时,启动LED闪烁功能,LED灯按顺序逐个流水闪动; 4. 当rst=`0`时,复位清零;
三、 【设计代码】
library IEEE;
use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
-----------------------------------------------------------------------------
ENTITY cnt16 IS PORT (
clk : IN std_logic; --50MHz时钟信号输入 rst : IN std_logic; ---复位功能输入 en : IN std_logic_vector(2 DOWNTO 0); ---状态选择输入 led8 : OUT std_logic_vector(7 DOWNTO 0); --各段数据输出
com8 : OUT std_logic_vector(7 DOWNTO 0)); ---各位数据输出 END cnt16;
-----------------------*****对各个信号进行定义****------------------------------------- ARCHITECTURE arch OF cnt16 IS signal cnt : std_logic_vector(25 downto 0 ); signal data : std_logic_vector(3 downto 0); signal led8_xhdl : std_logic_vector(7 downto 0); signal com8_xhdl : std_logic_vector(7 downto 0);
2 / 7
eda状态机的VHDL设计
signal coud1 : std_logic_vector(3 downto 0); signal coud2 : std_logic_vector(3 downto 0); signal s1 : std_logic; signal s2 : std_logic; signal s3 : std_logic; signal coud : std_logic_vector(3 downto 0); signal first : std_logic_vector(3 downto 0); --0000 signal second : std_logic_vector(3 downto 0); --0000 0000 0000 1001 signal jinwei: std_logic;
------------------------------------------------------------------------------------------------------------- begin led8<=led8_xhdl; com8<=com8_xhdl;
----------------------- *****状态控制部分*************--------------------------------------------- process(en) begin
if en=\ ----状态控制,低电平有效 s1<='1'; s2<='0'; s3<='0'; else if en=\ s2<='1'; s1<='0'; s3<='0'; else if en=\ s3<='1'; s1<='0'; s2<='0'; end if; end if; end if;
end process;
-----------------------------------------------------------------------------------------------------
--------------------------**********时钟分频部分********----------------------------------
process(clk,rst) begin
3 / 7