eda状态机的VHDL设计 下载本文

内容发布更新时间 : 2024/5/22 2:16:55星期一 下面是文章的全部内容请认真阅读。

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