五邑大学实验报告实验课程名称:EDA实验院系名称:信息工程学院专业名称:通信工程(物联网)(一)实验目的:设计并实现具有一定功能的数字钟。
掌握各类计数器及它们相连的设计方法,掌握多个数码管显示的原理与方法,掌握FPGA的层次化设计方法,掌握VHDL语言的设计思想以及整个数字系统的设计。
此数字钟具有时,分,秒计数显示功能,能实现清零,调节小时,分钟以及整点报时的功能。
(二)实验器材:计算机一台,EDA实验箱一台。
(三)实验原理:四)实验内容:1.正常的时、分、秒计时功能,分别由6个数码管显示24小时、60分钟,60秒钟的计数器显示。
2.按键实现“校时”“校分”功能;3.用扬声器做整点报时。
当计时到达59’50”时鸣叫。
方案:利用试验箱上的七段码译码器(模式7),采用静态显示,系统时钟选择1Hz。
整个系统可以是若干文件组成,用PORT MAP 实现的方式;也可以是一个文件用多进程方式实现;亦或者是用文本和图形混合的方式实现;亦或者是用LPM参数化模块实现。
(五)实验步骤:1. 新建一个文件夹,命名为shuzizhong.2. 输入源程序。
打开QuartusⅡ,选择File→new命令。
在New窗口中的DesignFiles栏选择编译文件-的语言类型,这里选择VHDL File选项。
然后在VHDL文本编译窗口中输入秒模块程序。
秒模块源程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity SECOND isport(clk,clr:in std_logic;----时钟/清零信号sec1,sec0:out std_logic_vector(3 downto 0);----秒高位/低位co:out std_logic);-------输出/进位信号end SECOND;architecture SEC of SECOND isbeginprocess(clk,clr)variable cnt1,cnt0:std_logic_vector(3 downto 0);---计数beginif clr='1' then----当ckr为1时,高低位均为0cnt1:="0000";cnt0:="0000";elsif clk'event and clk='1' thenif cnt1="0101" and cnt0="1000" then----当记数为58(实际是经过59个记时脉冲)co<='1';----进位cnt0:="1001";----低位为9elsif cnt0<"1001" then----小于9时cnt0:=cnt0+1;----计数elsecnt0:="0000";if cnt1<"0101" then----高位小于5时cnt1:=cnt1+1;elsecnt1:="0000";co<='0';end if;end if;end if;sec1<=cnt1;sec0<=cnt0;end process;end SEC;3.文件存盘。
选择File→Save As命令,找到已经设立的文件夹,存盘文件名应与实体名一致。
4.创建工程。
打开并建立新工程管理窗口,选择File→New Project Wizard 命令,即弹出设置窗口,命名为1023019857。
5.将设计文件加入工程中。
单击Next按钮,在弹出的对话框中单击File栏后的按钮,单击Add All按钮,将与工程相关的所有VHDL文件都加入此工程。
6.选择目标芯片。
单击Next按钮,选择目标器件,首先在Device Family下拉列表框中选择Cyclone系列。
分别选择Package为TQFP,Pincount为144和Speed grade为8,选择此系列的具体芯片为EP3C5E144C8。
7.工具设置。
单击Next按钮后,弹出的下一个窗口是EDA工具设置窗口—EDA Tool Settings.8.结束设置。
再单击Next按钮后即弹出工程设置统计窗口,单击Finish按钮,即已设定好此工程。
9.全程编译。
选择Processing→Start Compilation命令,启动全程编译。
10.编译成功后,将VHDL文件设置成可调用的文件。
在秒模块程序文件SECOND 处于打开的情况下,选择菜单File→Creat/Update→Creat Symbol Files for Current File,进行封装(元件文件名为SECOND),以便在高层次设计中调用。
同时,在编译成功的基础上,选择Processing中的Generate Functional Simuliation Netlist生成仿真文件,以方便之后的仿真使用。
11. 选择File→new命令。
在New窗口中的DesignFiles栏选择编译文件的语言类型,这里选择VHDL File选项。
然后在VHDL文本编译窗口中输入分模块程序。
然后对分模块程序进行保存、编译,封装成可调用的文件,取名为minute。
分模块的源程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity MINUTE isport(en,setmin,clr,clk:in std_logic;----时钟/清零信号MIN1,MIN0:out std_logic_vector(3 downto 0);----秒高位/低位co:out std_logic);-------输出/进位信号end MINUTE;architecture MIN of MINUTE isbeginprocess(en,setmin,clr,clk)variable cnt1,cnt0:std_logic_vector(3 downto 0);---计数beginif clr='1' then----当ckr为1时,高低位均为0cnt1:="0000";cnt0:="0000";elsif(clk'event and clk='1') thenif (en='1' or setmin='1') thenif cnt1="0101" and cnt0="1000" then----当记数为58(实际是经过59个记时脉冲)co<='1';----进位cnt0:="1001";----低位为9elsif cnt0<"1001" then----小于9时cnt0:=cnt0+1;----计数elsecnt0:="0000";if cnt1<"0101" then----高位小于5时cnt1:=cnt1+1;elsecnt1:="0000";co<='0';end if;end if;end if;end iF;MIN1<=cnt1;MIN0<=cnt0;end process;end MIN;12. 选择File→new命令。
在New窗口中的DesignFiles栏选择编译文件的语言类型,这里选择VHDL File选项。
然后在VHDL文本编译窗口中输入小时模块程序。
然后对分模块程序进行保存、编译,封装成可调用的文件,取名为HOUR.小时模块的源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity hour isport(reset,en ,sethour,clk : in std_logic;daout : out std_logic_vector(7 downto 0));end HOUR;architecture behav of HOUR issignal count : std_logic_vector(3 downto 0);signal counter : std_logic_vector(3 downto 0);beginp1: process(reset,sethour,en)beginif reset='1' thencount<="0000";counter<="0000";elsif(clk'event and clk='1') thenif (en='1' or sethour ='1') thenif (counter<2) thenif (count=9) thencount<="0000";counter<=counter + 1;elsecount<=count+1;end if;elseif (count=3) thencount<="0000";counter<="0000";elsecount<=count+1;end if;end if;end if;end if ;end process;daout(7 downto 4)<=counter;daout(3 downto 0)<=count;end behav;13. 绘制原理图。
选择File→new命令。
在New窗口中的DesignFiles栏选择编译文件的语言类型,这里选择Block Diagram/Schematic选项,按OK按钮后将打开原理图编辑窗口。
双击原理图编辑窗口任何位置,弹出输入文件的对话框,分别在Name栏键入元件名input、SECOND、minute、HOUR和输出引脚output,并用单击拖动的方法参考电路图接好电路,作为本项工程的顶层电路原理设计图。
14.全程编译。
选择Processing→Start Compilation命令,启动全程编译。