EDA课程设计报告 - 数字钟 下载本文

下载可编辑

图8 选择结

单击OK,完成引脚输入,加上输入信号后波形文件存盘。

2.运行仿真器。在Processing菜单下选择StartSimulation项,直到Simulator was successful出现,仿真结束。完成波形如图9所示。

.专业.整理.

下载可编辑

图9 仿真波形图 步骤4:引脚锁定

选择Assignments?Assignments Editor,锁定引脚,输入以后如下图,设定完成以后再运行一次程序。

图10 引脚锁定

步骤5:编程下载:

1)首先将下载线把计算机的打印机口与目标板(如开发板或实验板)连接好,打开电源

2)下载方式设定。选择Tools?Programmer选项,跳出下图左侧所示的编程器窗口,然后选择Hardware Setup硬件设置选项,其窗口图中左侧所示。在其下拉菜单中选ByteBlaster(MV)编程方式,在Model栏选定JTAG模式。然后点击start按钮下载,进入下载模式,等待下载完成以后在试验箱上进行调试检测是否正确。

.专业.整理.

下载可编辑

五、心得体会

经过两周EDA课程设计,使我受益匪浅。这不仅增强了我对EDA设计的兴趣,更巩固了基本的电路设计流程、方法以及技巧。具备了这些基本知识,为今后的自主学习奠定了良好的基础。在编写时可以相互借鉴,这样可以节省一定的时间,但在一个问题上纠结了很久,现还未明白,为什么一个变量在进程中只能被一个边沿信号触发进行修改,无奈之下选择了另一种方法,通过一个控制端来进行选频,以实现快速调时,在闹钟的处理上使用了数据选择,设置闹铃时数码管显示闹钟时间。

在设计中还是需要注意一些常见的问题,比如实体名、项目名等,还有在编写VHDL文件时,一些文件名也是需要注意的;在编写程序的过程中,信号与变量的使用是一个特需要注意的,进程中一个信号不应有多个复制源,信号的复值是在进程结束之时,而变量的复值是立即的,在书写时容易出错的地方是,信号的赋值与变量的赋值符号,信号作为全局的联络线,信号往往不允许在多个进程中被赋值,因为进程之间是并行的;整个系统是由多个底层元件组成,底层元件之间的相互连接是通过信号实现。

由于时间比较紧,在准备智能车比赛,就没有挑战难度高点的题了,但本人对FPGA是挺感兴趣的,在今后的学习中我会把握时间好好学学。

最后感谢姚老师对我们的指导,使得实验能够顺利完成!

六、程序代码:

1分频:

library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity PrescalClk is

port(clkin : in std_logic;

clkout_1Hz : out std_logic; clkout_4Hz : out std_logic); end ;

Architecture bhv of PrescalClk is begin

process(clkin)

variable count1 : integer range 0 to 32768; variable count2 : integer range 0 to 8192; begin if clkin 'event and clkin='1' then count1+1;count2:=count2+1;

if(count1=32768) then clkout_1Hz<='1' ; else clkout_1Hz<='0'; end if;

if(count2=8192) then clkout_4Hz<='1'; else clkout_4Hz<='0'; end if;

.专业.整理.

count1 :=

下载可编辑

end if;

end process; end;

2时计数模块 library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity hour is

port(rst,carry,en : in std_logic; ADJclk,ADJEN : in std_logic;

ADJ : in std_logic_vector(3 downto 0); decade,unit : out std_logic_vector(3 downto 0)); end ;

architecture bhv of hour is signal clk : std_logic; begin

process(carry,ADJ,ADJEN,ADJclk) begin

if (ADJEN='1' and ADJ=\ else clk<=carry; end if;

end process;

process(rst,en,clk)

variable unitcount : std_logic_vector(3 downto 0); variable decadecount : std_logic_vector(3 downto 0); begin

if (rst='1') then unitcount:=\ elsif(en='1') then

if clk 'event and clk='1' then

if(unitcount<10) then unitcount:=unitcount+1; else unitcount:=\ end if;

if(unitcount=10) decadecount:=decadecount+1;unitcount:=\ end if;

if(decadecount=2 and unitcount=4) unitcount:=\ end if; end if; end if;

decade<=decadecount;

.专业.整理.

then then