- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于CPLD技术的数字万年历设计
《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 ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
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 clkevent and clk=1 then
cq1:=cq1+1;
if cq19 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 ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
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_logic_vector(3 downto 0) ;
begin
if clkevent and clk=1 then
cq1:=cq1+1;
if cq19 then cq1:=0000;
cq2:=cq2+1;end
文档评论(0)