2022年电子日历VHDL程序设计报告 .pdf
电 子 设 计 自 动 化 实 训 说 明 书题目:电子日历 VHDL程序设计报告系部: 信息与控制工程学院专业: 电子信息工程班级:学生姓名 :学号:指导教师 :杜 德2010 年 12 月 6 日名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 23 页 - - - - - - - - - 电子设计实训说明书目录1 实训目的 . 1 1.1 硬件实训目的:. 1 1.2 软件实训目的:. 1 2 实训意义 . 2 3 实训内容 . 4 3.1硬件实训内容: . 4 3.2软件实训内容: . 4 3.2.1 功能说明: . 4 3.2.2 软件设计详细内容:. 4 4 实训中疑难解答 . 17 5 实训心得 . 18 参考文献 . 20名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 23 页 - - - - - - - - - 电子设计实训说明书1 1 实训目的1.1 硬件实训目的:1. 熟悉 EDA实验箱的基本工作原理。2. 熟悉并掌握 EDA实验箱各个模式的功能。3. 提高学生的动手能力。1.2 软件实训目的:1熟悉并掌握 Max+plus2 软件的使用。2熟练的使用原理图输入设计方法,VHDL语言编写程序,进一步了解和掌握各个程序语言,提高编程的熟练程度。3掌握年、月、日、时、分、秒程序的原理, 进而理解万年历的设计原理。4拓宽学生知识面, 增强工程意识, 培养学生的分析和解决实际问题的能力。5提高学生的动手能历。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 23 页 - - - - - - - - - 电子设计自动化实训说明书2 2 实训意义该数字时钟实现了调时、年、月、日、时、分、秒的显示功能,无需接译码器,可直接接八段共阴极数码管,总体结构如下图所示:第一部分第二部分第三部分D8 (l5 ) D7(l2) D6 D5 (l4) D4(l1) D3 D2(l3 ) D1 8 个 LED数码管为了显示清楚只用了6 个数码管,分为 3 个部分。采用的是 EDA试验箱上的模式 7。软件 Max+plus2方面:在显示程序中, k3 控制分屏。当 k3=1时, 3 部分数码管显示年、月、日;当 k3=0时,3 部分数码管显示时、分、秒。万年历正常工作时,D1D8都不亮。调时时,秒的变化不需控制,故需调时有年、月、日、时、分5 个量。数码管每部分右边灯亮时,即l5 亮、l4 亮、l3 亮分别控制的是年、月、日的变化;每部分左边亮时,即 l2 亮、l1 亮分别控制的是时、分的变化。若控制其中一个量变化时,其余 4 个量均不变,也不向高位进位。调时、显示、年、月、日、时、分、秒的 VHDL 语言分别生成各自的模块 (Symbol),在顶层文件 wannianli中调用这些底层模块 CNT60模块, CNT24模块,tian模块,yue 模块, nian 模块, tiaoshi模块, xianshi模块,然后链接各个模块,构成所需要的电子日历的原理图。硬件 EDA 试验箱方面:电子日历电路图根据要求采用的是EDA试验箱上的模式7。对万年历电路图上的引脚在电脑软件 Max+plus2进行绑定,然后编译,在进行下载,下载到硬件EDA 试验箱上。在 EDA 试验箱上就可以观察到上述变化。引脚绑定如图所示:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 23 页 - - - - - - - - - 电子设计自动化实训说明书3 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 23 页 - - - - - - - - - 电子设计自动化实训说明书4 3 实训内容3.1 硬件实训内容:在电脑上通过软件Max+plus2对万年历电路图的引脚进行绑定,编译,然后与 EDA 试验箱连接,把 wannianli .sof 文件配置通过 JTAG 口载入 FPGA 中,选择实验电路模式 No.7 进行硬件测试。通过学习,理论上学习了EDA试验箱的原理,对试验箱内部的组件,以及组件之间的链接有了一定的了解,为以后的实训打下了良好的基础。3.2 软件实训内容:3.2.1 功能说明:(1)显示准确的北京时间(年、月、日、时、分、秒,年号只显示最后两位)(2)随时可以调校时间即可以控制年、月、日、时、分的变化,可以跳到指定的时间。3.2.2 软件设计详细内容:(1). 秒、分:秒和分都是从0 计数到 59,可以用六十进制表示。 CNT60程序如下:library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity CNT60 is port(CLK :in std_logic; cq1,cq2:out std_logic_vector(3 downto 0); cout:out std_logic); end entity; architecture one of CNT60 is 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 23 页 - - - - - - - - - 电子设计自动化实训说明书5 signal q1,q2:std_logic_vector(3 downto 0); begin process(CLK) begin if CLKevent and CLK=1 then 检测时钟上升沿q2=q2+1; q2 开始计数if q2=9 then q1=q1+1; q2=0000; end if; if q2=9 and q1=5 then q1=0000;q2=0000; cout=1; q2=9,q1=5时,q1,q2 清零并输出进位信号else cout=0; end if; end if; end process; cq1=q1; cq2=q2; end; CNT60 波形仿真如图:CNT60 模块如图:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 23 页 - - - - - - - - - 电子设计自动化实训说明书6 (2). 时:时是从 0 计数到 23,可以用二十四进制表示。CNT24 程序如下:library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity CNT24 is port(CLK :in std_logic; cq1,cq2:out std_logic_vector(3 downto 0); cout:out std_logic); end entity; architecture one of CNT24 is signal q1,q2:std_logic_vector(3 downto 0); begin process(CLK) begin if CLKevent and CLK=1 then 检测时钟上升沿q2=q2+1; q2 开始计数if q2=9 then q1=q1+1; q2=0000; end if; q2=9时,q1开始计数且 q2 清零if q2=3 and q1=2 then q1=0000; q2=0000; cout=1; q2=3,q1=2 时,q1,q2 清零并输出进位信号else cout=0; end if; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 23 页 - - - - - - - - - 电子设计自动化实训说明书7 end if; end process; cq1=q1; cq2=q2; end; CNT24 波形仿真如图:CNT24 模块如图:(3). 天:一个月可能有31 天或者 30 天;当该年为闰年,二月有29 天,否则二月有 28天。library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity tian is port(clk:in std_logic; pan:in std_logic_vector(1 downto 0); T1,T2:out std_logic_vector(3 downto 0); cout:out std_logic); end tian; architecture one of tian is 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 23 页 - - - - - - - - - 电子设计自动化实训说明书8 signal q1,q2:std_logic_vector(3 downto 0); signal ab:std_logic_vector(1 downto 0); begin process(clk,pan) begin if clkevent and clk=1 检测时钟上升沿then q1=q1+1; q1 开始计数if q1=9 then q1=0000; q2 if q2=3 and q1=1 then q2=0000 ;q1=0001;cout=1; else cout if q2=3 and q1=0 then q2=0000 ;q1=0001;cout=1; else cout if q2=2 and q1=8 then q2=0000 ;q1=0001;cout=1; else cout if q2=2 and q1=9 then q2=0000 ;q1=0001;cout=1; else coutnull; end case; end if; end process; T1=q1;T2=q2; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 23 页 - - - - - - - - - 电子设计自动化实训说明书9 end;tian程序波形仿真如图:tian模块如图:(4) 月:一,三,五,七,八,十,十二月有31;四,六,九,十一月有30 天;当该年为闰年,二月有29 天,否则二月有 28 天。library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity yue is port(clk,run:in std_logic; cout:out std_logic; pan:out std_logic_vector(1 downto 0); Y1,Y2:out std_logic_vector(3 downto 0); end yue; architecture behav of yue is signal q1,q2:std_logic_vector(3 downto 0); signal q3:std_logic_vector(7 downto 0); begin process(clk,run) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 23 页 - - - - - - - - - 电子设计自动化实训说明书10 begin if clkevent and clk=1 then 检测时钟上升沿q1=q1+1; q1 开始计数if q1=9 then q1=0000; q2=q2+1; end if; q1=9时,q2 开始计数且 q1 清零if q1=2 and q2=1 then q1=0001;q2=0000;cout=1; else cout=0; q1=2,q2=1时,q2 清零, q1 从 1 开始计数并输出进位信号end if; q3panif run=1 then pan=11;else panpanpanpanpanpanpanpanpanpanpannull; end case; end if; Y1=q1;Y2=q2; end process; end behav; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 23 页 - - - - - - - - - 电子设计自动化实训说明书11 yue 程序波形仿真如图:yue模块如图:(5).年:由于年号只显示最后两位, 故为 099,是 100 进制。但每四年为一闰年。故 nian 程序是二者结合。library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity nian is port(clk :in std_logic; q1,q2:out std_logic_vector(3 downto 0); run:out std_logic); end entity; architecture one of nian is signal cq1,cq2:std_logic_vector(3 downto 0); signal q3:std_logic_vector(3 downto 0); begin PRO1:process(clk) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 23 页 - - - - - - - - - 电子设计自动化实训说明书12 begin if clkevent and clk=1 then 检测时钟上升沿cq1=cq1+1; cq1 开始计数if cq1=9 then cq2=cq2+1;cq1=0000; end if;cq1=9时,cq2 开始计数且 cq1 清零if cq1=9 and cq2=9 then cq1=0000;cq2=0000; end if;cq1=9,cq2=1时,cq1,cq2 清零end if; end process; PRO2:process(clk) begin if clkevent and clk=1 then 检测时钟上升沿q3=q3+1; q3开始计数if q3=3 then q3=0000;run=1; else run=0; end if; end if;q3=3后 q3 清零且输出信号run=1end process; q1=cq1;q2=cq2; end; nian 程序波形仿真如图:nian 模快名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 23 页 - - - - - - - - - 电子设计自动化实训说明书13 (6). 调时:调时只需调年、月、日、时、分这5 个量,故 tiaoshi程序就是一个五选一程序。library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity tiaoshi is port(k1,k2:in std_logic; m1,m2,m3,m4,m5:in std_logic; n1,n2,n3,n4,n5:out std_logic; l1,l2,l3,l4,l5:out std_logic); end entity; architecture one of tiaoshi is signal q:std_logic_vector(3 downto 0); begin process(k1) begin if k1event and k1=1 then q=q+1; 检测时钟上升沿, q 开始计数if q=5 then qn1=m1;n2=m2;n3=m3;n4=m4;n5=m5;l1=0;l2=0;l3=0;l4=0;l5n1=k2;n2=0;n3=0;n4=0;n5=0;l1=1;l2=0;l3=0;l4=0;l5n1=0;n2=k2;n3=0;n4=0;n5=0;l1=0;l2=1;l3=0;l4=0;l5n1=0;n2=0;n3=k2;n4=0;n5=0;l1=0;l2=0;l3=名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 23 页 - - - - - - - - - 电子设计自动化实训说明书14 1;l4=0;l5n1=0;n2=0;n3=0;n4=k2;n5=0;l1=0;l2=0;l3=0;l4=1;l5n1=0;n2=0;n3=0;n4=0;n5=k2;l1=0;l2=0;l3=0;l4=0;l5NULL; end case; end process; end; tiaoshi模块如图:(7). 显示library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity xianshi is port(k3:in std_logic; ns,ng,ts,tg,ys,yg,ss,sg,fs,fg,ms,mg:in std_logic_vector(3 downto 0); q1,q2,q4,q5,q7,q8:out std_logic_vector(3 downto 0); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 23 页 - - - - - - - - - 电子设计自动化实训说明书15 l:out std_logic); end entity; architecture one of xianshi is begin process(k3) begin if k3 =1 then q8=ns;q7=ng;q5=ys;q4=yg;q2=ts;q1=tg;l=1; k3= 1 时,三部分数码管从左至右分别显示年、月、日,l 输出信号为 1 else q8=ss;q7=sg;q5=fs;q4=fg;q2=ms;q1=mg;l=0; k3=0时,三部分数码管从左至右分别显示时、分、秒,l 输出信号为 1 end if; end process; end one; xianshi模块如图:(8)万年历原理图:由底层文件生成的模块即CNT60模块, CNT24模块, tian模块,yue 模块, nian 模块,tiaoshi模块, xianshi模块链接构成。万年历的实体如下:entity wannianli is port(clk:in std_logic; k1,k2,k3 :in std_logic; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 23 页 - - - - - - - - - 电子设计自动化实训说明书16 q1,q2,q4,q5,q7,q8:out std_logic_vector(3 downto 0); l ,l1 ,l2 ,l3 ,l4 ,l5:out std_logic); end entity; 输入信号: clk 是最底层文件秒的时钟信号k1 是 tiaoshi程序的时钟信号k2 是控制调时中年、月、日、时分的变化k3 是控制分屏。输出信号: q7,q8 显示的是年(时)q4,q5 显示的是月(分)q1,q2 显示的是日(秒)l 输出高电平 1 ,q8=ns;q7=ng;q5=ys;q4=yg;q2=ts;q1=tg; l 输出低电平 0 ,q8=ss;q7=sg;q5=fs;q4=fg;q2=ms;q1=mg; l5 输出高电平 1 ,控制的是年的变化l4 输出高电平 1 ,控制的是月的变化l3 输出高电平 1 ,控制的是日的变化l2 输出高电平 1 ,控制的是时的变化l1 输出高电平 1 ,控制的是分的变化名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 23 页 - - - - - - - - - 电子设计自动化实训说明书17 4 实训中疑难解答在 EDA实训过程中,刚开始时不知如何着手,就是老师把程序讲的很清楚了,最后还是出现很多错误。不过幸运的是,我找到解决的方法。错误: 1CNT24程序编译无错误,但波形仿真时只有013,2023 这几个数。原因:CNT24是在 CNT60的基础上改的, CNT60程序波形仿真正确,认为CNT24程序也因该正确,但却不曾考虑24 进制与 60 进制的不同。在日常生活中个位9 的后面就是个位 0。CNT60 的个位 q2=9时,随后清零,但 CNT24的个位 q2=3,随后清零,但 3的后面是 4。因此出现了上述问题。2.CNT60程序, CNT24程序编译正确,波形仿真也正确,但把CNT 60和 CNT24组成一个时间程序时,秒位对应的数码管从059 变化正常,但分、时位所对应的数码管却都为 00。原因: CNT60 程序中第一个 59 到达后,输出进位信号cout=1,但之后却未清零,以致cout 一直保持高电平,所以cout 失去了进位的功能,即秒位不能向高位进位,使分位时位的数码管保持零不变。3一,三,五,七,八,十,十二月有31;四,六,九,十一月有30 天;当run=1时,即该年为闰年,二月有29 天,否则二月有28 天。tian程序比较复杂,由于不细心在编译过程出现了很多errors 。4在 nian 程序中,因为只有两个数码管来显示,故年号只显示最后两位,即099。但 nian 程序还要输出是否为闰年,对这一块不是很明白,不知道咋样编写。最后在老师的指导下,引入一个中间信号q3,程序如下:if clkevent and clk=1 then q3=q3+1; if q3=3 then q3=0000;run=1; else run=0;。nian 程序编译无错误,但其仿真波形中q1,q2 总保持为低电平 0,run 保持高电平1。原因: nian 程序中的 9,3 都是用十进制表示的,若给q 赋一个十进制的值,应是 q=9,但若给 q 赋以一个二进制的值,应是q=1001。故 nian 程序不能计数,也不能判断闰年。5. 在引脚绑定过程中,对万年历整体程序的了解出现了问题。k3 是控制分屏,k2 是控制调试。k3 绑定错误,应该与 pin-24 相连,k2 与 pin-7 相连,k1 与 pin-143相连。原因:没有分析万年历原理图输入信号k1,k2,k3,的功能, k1 应是脉冲信号, k2,k3 是布尔数据类型。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 23 页 - - - - - - - - - 电子设计自动化实训说明书18 5 实训心得正如古人云:“一分付出,一分收获”,虽然万年历实训期间很忙也很累,但是每个人都感到很充足,收获很大。我们电子信息工程技术专业有了比较全面的认识和理解,但在校期间,一直忙于理论知识的学习,没能有机会走出校园,没能真正切身感受本专业的实际应用。所以在实训之前,电信专业对我来说是比较抽象的。但通过这次实训,在硬件方面,使我们对EDA试验箱有了很多的了解,弥补了我们的知识的缺陷,同时对EDA 试验箱内部的工作原理,以及EDA试验箱各个实验模式的功能很作用有了一定的了解,学习了硬件引脚绑定过程,以及绑定的一些基本常识,并动手完成了绑定,这样不仅拓宽我们的知识面,增强动手能力和实践能力,同时还培养我们的分析和解决实际问题的能力。在软件方面,我们通过分组在软件Max+plus2上独立完成老师给我们的实训题目万年历。 从开始分析万年历原理, 在定义底层文件名称, 编写底层文件程序,生成模块 CNT60 模块,CNT24模块,tian 模块,yue 模块,nian 模块,tiaoshi模块, xianshi模块,然后链接各个模块,到最终完成测试,并运行成功,这些加强了我们的分析问题的能力,提高了我们编程的能力,同时还培养了我们独立完成任务和查阅资料删选资料的能力,虽然完成的软件在实际运用中还有很多不足,比如软件运行的环境有限,程序的效率不高,在老师的要求上也不能全部到达预期的最好效果,等等一些问题,这都需要我们以后更深层次的加以修改,使其更加简单更加方便更加通俗易懂。电子日历一路编来可谓是坎坎坷坷,但大家都没有放弃项目的开发,积极主动的找老师、找同学帮忙解决难题。后来,我们又重新分析原理,重复操作,遇到困难马上向老师提问,及时解决问题,这样的效果很明显,例如,CNT60程序,CNT24程序中的秒位不向分位进位, 达不到实训要求。 我们在一起讨论 CNT60程序,CNT24程序的 VHDL 语言程序,并观察 CNT60 程序,CNT24 程序的波形仿真,最终发现进位信号 cout 给予高电平后却未清零,导致秒位不向分位进位。在这次实训中,组员之间的配合也是相当重要的。每个学生对老师课堂上讲的内容的接收都是不一样的,只有组员间互相配合提出问题,然后讨论问题,最后解决问题,实训才能得以成功。从整体看这次实训是很成功的,让我们都有很大的收获,同时也非常感谢在实训过程中给予我们很大帮助的老师,在老师的指导下,我们才能很好的完成实训认务。此外,这次实训告诉我们:在学校课堂上学到的东西和在实训中学到的东西是不完名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 20 页,共 23 页 - - - - - - - - - 电子设计自动化实训说明书19 全一致的。实训是符合社会的,社会是发展的,是进步的,每时每刻都在发生着变化,你要适应社会, 而不是要社会来适应你, 所以你就得不断地学习, 不断地充电。另外,我们还应具备着团队精神和良好的沟通能力。实训是对每个人综合能力的检验,是让我们能更好的巩固专业知识、积累工作经验、掌握工作技能。让我深深地体会到要想做好每一件事,除了自己平时要有一定的专业知识外,还需要有一定的实践动手能力,操作能力。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 21 页,共 23 页 - - - - - - - - - 电子设计自动化实训说明书20 参考文献1 黄正瑾 . 在系统编程技术及其应用 . 南京:东南大学出版社, 1997 2 彭介华 . 电子技术课程设计指导 . 北京:高等教育出版社,1997 3 李国丽,朱维勇 . 电子技术实验指导书 . 合肥:中国科技大学出版社,2000 4 潘松,黄继业 .EDA技术实用教程 . 北京:科学出版社, 2002 5 郑家龙,王小海,章安元. 集成电子技术基础教程. 北京:高等教育出版社,2002 6 宋万杰,罗丰, 吴顺君 .CPLD技术及其应用 . 西安:西安电子科技大学出版社,1999 7 张昌凡,龙永红,彭涛 . 可编程逻辑器件及 VHDL 设计技术 . 广州:华南工学院出版社, 2001 8 卢杰,赖毅 .VHDL与数字电路设计 . 北京:科学出版社, 2001 9 王金明,杨吉斌 . 数字系统设计与 Verilog HDL.北京:电子工业出版社, 2002 10 张明.Verilog HDL实用教程 . 成都:电子科技大学出版社,1999 11 栾铭,高明伦 . 工业控制芯片中状态机的描述方法. 合肥:第三届全球智能与自动化大会, 2000 12 J.Bhasker著,徐振林等译 .Verilog HDL硬件描述语言 . 北京:机械工业出版社, 2000 13 刘明业,将敬旗,刁岚松等译. 硬件描述语言Verilog.北京:清华大学出版社,2001 14 侯伯亨,顾新.VHDL硬件描述语言与数字逻辑电路设计. 西安:西安电子科技大学出版社, 1999 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 22 页,共 23 页 - - - - - - - - - 电子设计自动化实训说明书指导教师评语:成绩:指导教师签字:年月日名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 23 页,共 23 页 - - - - - - - - -