1、 基于 FPGA 的万年历 目录 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 1 1 目的 1.1 硬件实训目的: 1. 熟悉 EDA 实验箱的基本工作原理。 2. 熟悉并掌握 EDA 实验箱各个模式的功能。 3. 提高学生的动手能力。 1.2 软件实训目的: 1 熟悉并掌握 Max+plus2 软件的使用。 2 熟
2、练的使用原理图输入设计方法, VHDL 语言编写程序,进一步了解和掌握各个程序语言,提高编程的熟练程度。 3 掌握年 、 月 、 日 、 时 、 分 、 秒程序的原理,进而理解 万年历的设计原理。 4 拓宽学生知识面,增强工程意识,培养学生的分析和解决实际问题的能力。 5 提高学生的动手能历。 2 2 实训意义 该数字时钟实现了调时、年、月、日、时、分、秒的显示功能,无需接译码器,可直接接八段共阴极数码管,总体结构如下图所示: 第一部分 第二部分 第三部分 D8( l5) D7(l2) D6 D5 (l4) D4(l1) D3 D2( l3) D1 8 个 LED 数码管为了显示清楚只用了 6
3、 个数码管,分为 3个部分。采用的是 EDA试验箱上的模式 7。 软件 Max+plus2 方面: 在显示程序中, k3 控制分屏。当 k3= 1时, 3 部分数码管显示年 、 月 、 日;当 k3= 0时, 3部分数码管显示时 、 分 、 秒。万年历正常工作时, D1D8 都不亮。 调时时,秒的变化不需控制,故需调时有年 、 月 、 日 、 时 、 分 5 个量。数码管每部分右边灯亮时,即 l5亮 、 l4亮 、 l3亮分别控制的是年 、 月 、 日的变化;每部分左边亮时,即 l2 亮 、 l1 亮分别控制的是时 、 分的变化。若控制其中一个量变化时,其余 4个量均不变,也不向高位进位。 调
4、时、显示、年、月、日、时、分、秒的 VHDL 语言分别生成各自的模块( Symbol),在顶层文件 wannianli 中调用这些底层模块 CNT60 模块, CNT24 模块, tian 模块, yue 模块, nian 模块, tiaoshi 模块, xianshi 模块 , 然后链接各个模块, 构成所需要的 电子日 历的原理图。 硬件 EDA 试验箱方面: 电子日历 电路图根据要求采用的是 EDA 试验箱上的模式 7。对万年历电路图上的引脚在电脑软件 Max+plus2 进行绑定,然后编译,在进行下载,下载到硬件 EDA 试验箱上。在 EDA 试验箱上就可以观察到上述变化。 引脚绑定如图
5、所示: 3 4 3 实 训 内容 3.1 硬件实训内容: 在电脑上通过 软件 Max+plus2 对万年历电路图的引脚进行绑定,编译, 然后与 EDA 试验箱连接,把 wannianli .sof 文件配置通过 JTAG 口载入 FPGA 中,选择实验电路模式 No.7 进行硬件测试。通过学习,理论上学习了 EDA 试验箱的原理,对试验箱内部的组件,以及组件之间的链接有了一定的了解,为以后的实训打下了良好的基础。 3.2 软件实训内容: 3.2.1 功能说明: ( 1) 显示准确的北京时间(年、月、日、时、分、秒,年号只显示最后两位) ( 2) 随时可以调校时间 即可以控制年 、 月 、 日
6、、 时 、 分的变化,可以跳到指定的时间。 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
7、CNT60 is 5 signal q1,q2:std_logic_vector(3 downto 0); begin process(CLK) begin if CLKevent and CLK=1 then 检测时钟上升沿 q2 if q2=3 and q1=1 then q2 if q2=3 and q1=0 then q2 if q2=2 and q1=8 then q2 if q2=2 and q1=9 then q2null; end case; end if; end process; T1=q1;T2=q2; 9 end; tian 程序波形仿真如图: tian 模块如图: (
8、 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)