文档介绍:《EDA技术及可编程器件应用实训》课程设计报告
院系 机械电子工程系
姓名
专业班级 07通信技术一班
学号
指导老师
日期:2009年 6 月 10 日
《EDA技术及可编程器件应用实训》课程设计报告
一、设计内容:
课程设计题目:基于CPLD技术的数字万年历设计。课题设计的万年历具有年、月、日、时、分、秒计数功能,以秒、分、时、日、月、年进制循环计时;具有清零、调时功能、报时功能。
二、设计意义
通过理论学****和实践动手操作,可以掌握小型数字系统的设计方法。理论学****中了解到大规模可编程逻辑器件CPLD/FPGA的内部结构和外部特性;了解到EDA设计的方法;掌握硬件描述语言VHDL程序方法和思路;学会使用 Quartus II开发平台。
通过具体的数字百年历的项目设计,可深切地领会到EDA硬件设计软件化的特点;掌握六十进制、二十四进制、十二进制、及通过语言VHDL程序来控制三十、 三十一、 二十八、二十九进制的选择、五选一、二选一 ,从而实现计数器的设计方法;同时掌握CPLD技术的层次化结构化设计方法;并能熟练使用Quartus II开发小中型数字系统,解决调试过程中所遇到的一些问题。
三、设计方法
常见数字百年历具有计时和显示、报时功能。电路设计中包括分频模块,用于将外部晶振产生的一定周期的时钟信号计数产生1s时钟信号;60进制的秒、分计数模块;24进制的时计数模块;12进制的月计数模块;通过语言选择的闰年平年天数选择模块;5选一的调时控制模块;2选一模式转换模块;另有显示模块和整点报时信号端口。
1、 同步计时 六十进制加法器的程序如下。其中,cout为输出 端口信号,clk为分频模块产生的秒计时信号(时钟信号),q1和q2为秒计数中十进制数所对应的高位和低位信号。
library ieee;
use ;
use ;
entity cnt60 is
port(clk:in std_logic;
cout:out std_logic;
q1,q2:out std_logic_vector(3 downto 0));
architecture behav of cnt60 is
begin
variable cq1,cq2:std_logic_vector(3 downto 0);
begin
if clk'event and clk='1' then
cq1:=cq1+1;
if cq1>9 then cq1:="0000";
cq2:=cq2+1;
end if;
if cq2=6 and cq1=0 then
cq1:="0000";cq2:="0000";cout<='1';
else cout<='0';
end if;
q1<=cq1;q2<=cq2;
end process;
end; 所写程序经过仿真的如上图所示。同理分和秒一样都是六十进制只不过是把程序中q1,q2分别改为分的十位,个位而已,有程序生成六十进制模块图。如下
该程序在编写过程中应注意IF语句的结束标志END IF所对应的是那一部分.
2、 同步计时二十四进制加法器的程序如下。其中,cout为输出 端口信号,clk为分频模块产生的时计时信号(时钟信号),q1和q2为时计数中十进制数所对应的高位和低位信号。
library ieee;
use ;
use ;
entity cnt24 is
port(clk:in std_logic;
q1:out std_logic_vector(3 downto 0);
q2:out std_logic_vector(3 downto 0);
cout:out std_logic);
end cnt24
architecture behav of cnt24 is
begin
process(clk)
variable cq1:std_logic_vector(3 downto 0) ;
variable cq2:std_log