vhdl课程设计实验报告

  • 格式:doc
  • 大小:576.50 KB
  • 文档页数:17

下载文档原格式

  / 17
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

湖南科技大学

信息与电气工程学院

《课程设计报告》

题目:硬件描述语言课程设计

专业:电子信息工程

班级:三班

姓名:康良红

学号: 1204030326

指导教师:——————————胡士刚——————————————————————

2015 年 01 月 13 日

信息与电气工程学院

课程设计任务书

2014—2015 学年第 1 学期专业:学号:姓名:

课程设计名称:

设计题目:

完成期限:自年月日至年月日共周设计依据、要求及主要内容(可另加附页):

指导教师(签字):

批准日期:年月日

摘要

在目前,可编程逻辑器件、单片机、DSP已经成为数字系统的硬件基础,而从事数字系统的设计必须掌握可编程逻辑器件的设计方法,而VHDL语言是一种标准的数字系统硬件电路设计语言,为所有可编程逻辑器件厂商所支持,已成为电路设计人员和电子设计工程师必须掌握的工具。VHDL语言是培养信息类专门人才的一门必修的专业基础课程。通过本次课程设计,使我们能够学习和掌握现代电子系统设计的新技术、新器件,掌握硬件描述语言VHDL的编程技术和硬件描述方法,能够对设计系统进行规范描述掌握相关软件的使用,操作。能对VHDL 语言程序进行编译,调试,以及通过计算机仿真,得到正确的仿真波形图,并根据所得仿真波形图分析判断并改进所设计的电路。

本次课程设计设计主要使用了VHDL语言,采用的开发软件是MAXPLUS II,设计一个多功能数字钟。在MAXPLUS II开发平台下进行了编译、仿真、下载,实现了基本记时显示和设置、调整时间、报时和闹钟功能。

关键词:EDA;VHDL ;Max+plus II;

目录

1.设计目的 (1)

2.设计内容 (1)

3.电路工作原理 (1)

3.1循环彩灯 (1)

3.2抢答器 (1)

3. 3 数字频率计 (1)

4.主要程序和仿真结果 (1)

4.1循环彩灯设计与仿真结果 (1)

4.2抢答器设计与仿真结果 (1)

4.3 数字频率计设计与仿真结果 (1)

5.心得体会 (1)

参考文献 (1)

1.设计目的

1、熟悉maxplus2这一系列仿真软件的应用;

2、熟悉由vhdl设计程序,设计电路,实现功能的过程,进一步了

解vhdl语言;

3、提高动手能力,培养独立思考的思维。

2. 设计内容

1、循环彩灯

2、电子抢答器

3.数字频率计

3.电路工作原理

3.1循环彩灯工作原理

八位流动彩灯由八个彩色灯泡组成,接通电源后彩灯自动形成流动显示状态可用于节日与喜庆日。CLK是1HZ的时钟脉冲,程序定义CNT1进行计数,作为花样彩灯译码模块的输入值,译码后的值就是彩灯的显示代码。

3.2抢答器工作原理

电子抢答器包括抢答器模块与数码管模块。抢答器模块通过一个CLK时钟脉冲,START是开始键,CLR是复位信号,ADD1,ADD2为加分键,SEL_1,SEL_2为选择键,LED为指示灯,有七位,SEG为数码管段选择,SL为数码管位选择,数码管模块主要是译码功能。顶层抢答器主控模块包括抢答、加分以及指示灯驱动功能,分数显示模块采用动态扫描的方法来控制LED数码管的显示。

3.3数字频率器工作原理

数字频率计测频有两种方式:一种是直接测频,即在一定闸门时间测量被测信号的脉冲个数;二是间接测评法,如周期测评法。直接测评法适用于高频信号的频率测量,间接测频法适用于低频信号的频率测量。本设计采用了直接测量法,在一定闸门时间内测量被测信号个数。

4.主要程序和仿真结果

4.1循环彩灯设计与仿真结果

循环彩灯程序:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

use ieee.std_logic_unsigned.all;

entity caideng is

port(

clk:in std_logic;

light:out std_logic_vector(7 downto 0));

end caideng;

architecture control of caideng is

signal cnt1:std_logic_vector(3 downto 0):="0000"; begin

process(clk)

begin

if(clk'event and clk='1') then

if cnt1="1111" then

cnt1<="0000";

else cnt1<=cnt1+1;

end if;

case cnt1 is

when "0000"=>light<="11000000";

when "0001"=>light<="01100000";

when "0010"=>light<="00110000";

when "0011"=>light<="00011000";

when "0100"=>light<="00001100";

when "0101"=>light<="00000110";

when "0110"=>light<="00000011";

when "0111"=>light<="00000110";

when "1000"=>light<="00001100";

when "1001"=>light<="00011000";

when "1010"=>light<="00110000";

when "1011"=>light<="01100000";

when "1100"=>light<="11000000";

when others=>light<="00000000";

end case;

end if;

end process;

end architecture control;