《EDA技术及可编程器件应用实训》课程设计报告基于CPLD技术的数字万年历设计模板Word格式文档下载.docx
- 文档编号:22595752
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:21
- 大小:583.57KB
《EDA技术及可编程器件应用实训》课程设计报告基于CPLD技术的数字万年历设计模板Word格式文档下载.docx
《《EDA技术及可编程器件应用实训》课程设计报告基于CPLD技术的数字万年历设计模板Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《《EDA技术及可编程器件应用实训》课程设计报告基于CPLD技术的数字万年历设计模板Word格式文档下载.docx(21页珍藏版)》请在冰豆网上搜索。
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycnt60is
port(clk:
instd_logic;
cout:
outstd_logic;
q1,q2:
outstd_logic_vector(3downto0));
architecturebehavofcnt60is
begin
variablecq1,cq2:
std_logic_vector(3downto0);
ifclk'
eventandclk='
1'
then
cq1:
=cq1+1;
ifcq1>
9thencq1:
="
0000"
;
cq2:
=cq2+1;
endif;
ifcq2=6andcq1=0then
cq2:
cout<
='
elsecout<
0'
q1<
=cq1;
q2<
=cq2;
endprocess;
end;
所写程序经过仿真的如上图所示。
同理分和秒一样都是六十进制只不过是把程序中q1,q2分别改为分的十位,个位而已,有程序生成六十进制模块图。
如下
该程序在编写过程中应注意IF语句的结束标志ENDIF所对应的是那一部分.
2、同步计时二十四进制加法器的程序如下。
其中,cout为输出端口信号,clk为分频模块产生的时计时信号(时钟信号),q1和q2为时计数中十进制数所对应的高位和低位信号。
entitycnt24is
port(clk:
q1:
outstd_logic_vector(3downto0);
q2:
outstd_logic);
endcnt24
architecturebehavofcnt24is
process(clk)
variablecq1:
std_logic_vector(3downto0);
variablecq2:
cq1:
ifcq1>
endif;
ifcq1=4andcq2=2then
=(others=>
'
);
);
elsecout<
q1<
程序中实体结束处endcnt24后缺少分号.
程序中IF语句是多层存在,因此应当两次结束,绿色所标注的部分上边缺少endif;
改正后的程序仿真得到二十四进制模块图如下:
3、天的模块的程序如下。
clk为分频模块产生的天计时信号(时钟信号),cq2和cq1为天计数中十进制数所对应的高位和低位信号,cout为进位位,pan为判断位,判断计到多少天才进位。
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYtianIS
PORT(pan:
INSTD_LOGIC_VECTOR(1DOWNTO0);
clk:
INSTD_LOGIC;
cq1:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
cq2:
cout:
OUTSTD_LOGIC);
END;
ARCHITECTUREbehavOFtianIS
signalcq3,cq4:
STD_LOGIC_VECTOR(3DOWNTO0);
PROCESS(clk)
BEGIN
IFclk'
EVENTandclk='
THEN
cq3<
=cq3+1;
IFcq3=9THENcq4<
=cq4+1;
cq3<
ENDIF;
CASEpanIS
WHEN"
00"
=>
IFcq3="
0001"
andcq4="
0011"
THENcq3<
cq4<
ELSEcout<
ENDIF;
01"
10"
1000"
0010"
11"
1001"
WHENothers=>
NULL;
ENDCASE;
cq1<
=cq3;
cq2<
=cq4;
ENDPROCESS;
经过仿真从警告处发现错误所在,程序中进程前缺少BEGIN。
修改后仿真可得天的模块图。
4、月的模块的程序。
clk为分频模块产生的月计时信号(时钟信号),cq2和cq1为月计数中十进制数所对应的高位和低位信号,cout为进位位,run为闰年进位位,pan为输入判断位。
ENTITYyueIS
port(clk:
run:
OUTSTD_LOGIC;
pan:
OUTSTD_LOGIC_VECTOR(1DOWNTO0);
cq1,cq2:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
END;
ARCHITECTUREbehavOFyueIS
signalcq5:
STD_LOGIC_VECTOR(7DOWNTO0);
PROCESS(clk)
THEN
IFcq3=9THENcq4<
IFcq3=2andcq4=1THENcq3<
cq5<
=cq4&
cq3;
CASEcq5IS
00000001"
pan<
——一月
00000010"
ifrun='
01'
thenpan<
elsepan<
——二月
00000011"
——三月
00000100"
——四月
00000101"
——五月
00000110"
——六月
00000111"
——七月
00001000"
——八月
00001001"
——九月
00001010"
——十月
00001011"
——十一月
00001100"
——十二月
cq1<
cq2<
仿真得如下图;
程序中WHEN"
处出现错误应该是run='
1'
。
仿真后得模块图。
5、年的模块的程序。
clk为分频模块产生的年计时信号(时钟信号),cq2和cq1为年计数中十进制数所对应的高位和低位信号,cout为进位位,run为闰年进位位。
ENTITYnianIS
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
ARCHITECTUREbehavOFnianIS
STD_LOGIC_VECTOR(3DOWNTO0);
IFcq3=9THENcq3<
IFcq3=9andcq4=9THENcq3<
variablecq5:
cq5〈=cq5+1;
IFcq5>
=3THENrun<
cq5〈="
ELSErun<
程序中cq5〈=cq5+1;
应改为cq5:
=cq5+1;
仿真成功后得年的模块图。
6、五选一多路选择器的模块的程序。
mi,fi,si,ti,yi为秒、分、时、天、月输入端的端口名,k1,k2为通道选择控制信号输入端的端口名,fo,so,tl,yo,no为分、时、天、月、年输出端的端口名,l1,l2,l3,l4,l5为输出端的端口名。
LIBRARYIEEE;
ENTITYmux51IS
PORT(k1,k2:
mi,fi,si,ti,yi:
fo,so,tl,yo,no:
l1,l2,l3,l4,l5:
ARCHITECTUREbehavOFmux51IS
signala:
PROCESS(k1,k2)
IFk1'
EVENTandk1='
a<
=a+1;
IFa=5THENa<
CASEaIS
fo<
=mi;
so<
=fi;
tl<
=si;
yo<
=ti;
no<
=yi;
选通秒模块
l1<
l2<
l3<
l4<
l5<
=k2;
选通分模块
选通时模块
选通天模块
0100"
选通月模块
0101"
选通年模块
五选一模块程序的编写要注意输入与输出的对应,明确选通控制键是在什么通道上,从而取对应相应的输出。
7、二选一模块的程序。
k3为时钟信号,mg,ms,fg,fs,sg,ss,tg,ts,yg,ys,ng,ns为秒、分、时、天、月、年个位和十位输入端的端口名,l6为输出信号,p1,p2,p3,p4,p5,p6为秒、分、时、天、月、年输出计数端口。
ENTITYmux21IS
PORT(k3:
mg,ms,fg,fs,sg,ss,tg,ts,yg,ys,ng,ns:
INSTD_LOGIC_VECTOR(3DOWNTO0);
p1,p2,p3,p4,p5,p6:
l6:
ARCHITECTUREbehavOFmux21IS
PROCESS(k3)
IFk3='
THENp1<
=mg;
p2<
=ms;
p3<
=fg;
p4<
=fs;
p5<
=sg;
p6<
=ss;
l6<
ELSEp1<
=tg;
=ts;
=yg;
=ys;
=ng;
=ns;
二选一模块是对百年历走时和显示年月日进行调换的模块。
8、构建顶层文件
(1)在F盘中新建一个文件夹,命名为bainianli,把上述创建的.vhd和.bsf的文件都复制到bainianli文件夹中。
(2)、重新打开QuartusII软件,把dianzibiao文件夹中的CNT60程序复制到此,保存在bainianli文件夹中,保存名还为CNT60.vhd,然后创建工程,工程名为:
bainianli如下图,目标芯片应选择:
EP2C5T144C8,Family应选择:
CycloneII
(2)选择File菜单中Create/UpdateCreateSymbolFilesforCreateFile选项,运行成功后。
在窗口中选择菜单FileNewDeviceDesignFilesBlockDiagram/SchematicFile选项,即可调入上述的所有元件,连线即可构成百年历原理图,然后保存名为bainianli.bdf,然后进行编译(启动StartCompilation)一次。
(3)、选择Assignments菜单中的Pins项,将弹出目标器件的引脚图编辑窗,如下图选择实验模型N0.7,对照模型绑定引脚。
(4)、最后存储上述引脚锁定的信息后,必须再编译(启动StartCompilation)一次,才能将引脚锁定信息编译进编程下载文件中。
选择programmer选项则出如下图,将HardwareSetup设置为USB-Blaster[USB-0],把Program/Configure下面的小方框点对勾,然后点击star则下载到实验箱上,调试则出现年月日、时分秒的计时。
四、设计过程中出现的问题及解决方法
VHDL语言与C语言程序存在不同,一些C语言上正确的语句格式在VHDL语言上是错误的。
在运行顺序上,C语言是顺序执行的而VHDL语言是借助QuartusII平台并行执行的,因此在效率上VHDL语言运行速度较快,效率较高。
另外C语言是严格的文本编辑语言,VHDL的QuartusII平台则不同它支持符号编辑,例如本设计中的顶层文件可以通过符号编辑器来替代。
VHDL语言的QuartusII平台提供了波形仿真,对端口的定义和模块的调用更为灵活,为最终所有模块的逻辑连接变得极其的直观。
问题及解决办法
1.程序调试过程中
二十四进制程序
问题Error:
VerilogHDLsyntaxerroratcnt24.vhd(10)neartext"
architecture"
expecting“;
”解决办法:
endcnt24后加“;
”
VerilogHDLsyntaxerroratcnt24.vhd(27)neartext"
process"
expectingasequenialstatement,
解决办法:
在进程结束前缺少“endif;
天程序
问题Error:
VerilogHDLsyntaxerrorattian.vhd(13)neartext"
PROCESS"
expecting"
begin"
oradeclarationstatement,
进程前缺少"
月程序
VerilogHDLsyntaxerroratyue.vhd(26)neartext"
"
("
oranidentifier,orunaryoperator,
把标注的一句改为WHEN"
endif
年模块
VerilogHDLsyntaxerroratnian.vhd(27)neartext¡
解决办法:
把cq5〈=cq5+1;
改为cq5:
2构建顶层元件,出现的问题:
1,调入CNT60程序,创建工程时,工程名一定不要在写成CNT60,要写成bainianli,不然在调入元件的时候只出现CNT60元件而不会出现年月日时分的元件。
2.在调入程序时,只要调入其中任意一个然后创建工程就可以,不要把所有程序都调入和创建工程。
3.在绑定引脚的时候要细心,不然下载到实验箱上百年历不能正常的计数。
五.心得体会
首先,在软件方面。
以前在EDA课程的学习中了解了什么是VHDL语言,能够读懂一些简单的VHDL语言,运用VHDL语言编写一些简单的程序来实现数字电路中基本的逻辑运算,能够对VHDL语言平台QuartusII和MAX+plusII有所区别。
通过这次实训使我对VHDL语言及平台QuartusII角度上有所改变不再是纯粹的编写一些程序,而是有目的的去编写某些程序,同时这也是思想上的变化。
提升了VHDL语言纠错的能力,更加熟悉QuartusII平台各项功能。
能够编写一些比较复杂一点的程序。
因此,说在软件方面有所提升。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA技术及可编程器件应用实训 EDA 技术 可编程 器件 应用 课程设计 报告 基于 CPLD 数字 万年历 设计 模板
链接地址:https://www.bdocx.com/doc/22595752.html