FPGA可调数字时钟实验报告_fpga数字时钟实验报告
FPGA可调数字时钟实验报告由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“fpga数字时钟实验报告”。
浙江大学城市学院
实验报告纸
一、实验要求
1、用vhdl编程,实现10进制计数器
2、用vhdl编程,实现60进制计数器
3、用vhdl编程,实现数字时钟,时、分、秒、毫秒分别显示在数码管上。
4、实现可调数字时钟的程序设计,用按键实现时、分、秒、毫秒的调整。
二、实验原理
用VHDL,行为级描述语言实现实验要求。思路如下:
1、分频部分:由50MHZ分频实现1ms的技术,需要对50MHZ采取500000分频。
2、计数部分:采用低级影响高级的想法,类似进位加1的思路。对8个寄存器进行计数,同步数码管输出。
3、数码管输出部分:用一个拨码开关控制显示,当sw0=0时,四位数码管显示秒、毫秒的计数。当sw0=1时,四位数码管显示时、分得计数。
4、调整部分:分别用四个按键控制时、分、秒、毫秒的数值。先由一个开关控制计数暂停,然后,当按键按下一次,对应的数码管相对之前的数值加1,,通过按键实现时间控制,最后开关控制恢复计数,完成时间调整。
5、整个实现过程由一个文件实现。
三、实验过程
各个引脚说明: Clk:50MHZ SW:数码管切换,SW=’0’时,数码管显示为秒,毫秒。SW=’1’时,数码管显示为时,分。
SW1:暂停与启动。SW1=’0’时,时钟启动,SW=’1’时,时钟暂停。
SW2:时钟调整接通按钮,当SW2=’0’时,不进行调整,当SW=’1’时,通过按键调整时间。
KEY0: 毫秒调整,按一次实现+1功能 KEY1:秒调整,按一次实现+1功能
浙江大学城市学院 实 验 报 告 纸
KEY2:分调整,按一次实现+1功能 KEY3:时调整,按一次实现+1功能 Q0;第一个数码管 Q1;第二个数码管 Q2: 第三个数码管 Q3: 第四个数码管
1、源代码如下:
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity paobiao is port(clk,sw,key0,key1,key2,key3,sw1,sw2:in std_logic;
q0:out std_logic_vector(6 downto 0);
q1:out std_logic_vector(6 downto 0);
q2:out std_logic_vector(6 downto 0);
q3:out std_logic_vector(6 downto 0));end paobiao;architecture behave of paobiao is signal cntt1 :integer range 0 to 10;signal cntt2 :integer range 0 to 10;signal cntt3 :integer range 0 to 10;signal cntt4 :integer range 0 to 6;signal cntt5 :integer range 0 to 10;signal cntt6 :integer range 0 to 10;signal cntt7 :integer range 0 to 10;signal cntt8 :integer range 0 to 6;浙江大学城市学院 实 验 报 告 纸
signal cntttt1 :integer range 0 to 10;signal cntttt2 :integer range 0 to 10;signal cntttt3 :integer range 0 to 10;signal cntttt4 :integer range 0 to 6;signal cntttt5 :integer range 0 to 10;signal cntttt6 :integer range 0 to 10;signal cntttt7 :integer range 0 to 10;signal cntttt8 :integer range 0 to 6;
begin
proce(clk)--,key0,key1,key2,key3)
variable cnt :integer range 0 to 500000;
--variable cnt9 :integer range 0 to 3000000000;
variable cnt1 :integer range 0 to 10;
variable cnt2 :integer range 0 to 10;
variable cnt3 :integer range 0 to 10;
variable cnt4 :integer range 0 to 6;
variable cnt5 :integer range 0 to 10;
variable cnt6 :integer range 0 to 10;
variable cnt7 :integer range 0 to 10;
variable cnt8:integer range 0 to 6;
begin if(clk'event and clk='1')then
if(sw1='0')then if(cnt>=2)then
cnt:=0;
cnt1:=cnt1+1;浙江大学城市学院 实 验 报 告 纸
if(cnt1=10)then
cnt1:=0;
cnt2:=cnt2+1;
if(cnt2=10)then
cnt1:=0;
cnt2:=0;
cnt3:=cnt3+1;
if(cnt3=10)then
cnt1:=0;
cnt2:=0;
cnt3:=0;
cnt4:=cnt4+1;
if(cnt4=6)then
cnt1:=0;
cnt2:=0;
cnt3:=0;
cnt4:=0;
cnt5:=cnt5+1;
if(cnt5=10)then
cnt5:=0;
cnt6:=cnt6+1;
if(cnt6=6)then
cnt5:=0;
cnt6:=0;
cnt7:=cnt7+1;
if(cnt7=4)then
cnt5:=0;
cnt6:=0;
cnt7:=0;浙江大学城市学院 实 验 报 告 纸
cnt8:=cnt8+1;
if(cnt8=3)then
cnt5:=0;
cnt6:=0;
cnt7:=0;
cnt8:=0;
end if;
end if;
end if;
end if;
end if;
end if;
end if;
end if;
else cnt:=cnt+1;
end if;
if(sw2='0')then
cntt1
cntt2
cntt3
cntt4
cntt5
cntt6
cntt7
cntt8
else
cnt1:=cntttt1;
cnt2:=cntttt2;
cnt3:=cntttt3;浙江大学城市学院 实 验 报 告 纸
cnt4:=cntttt4;
cnt5:=cntttt5;
cnt6:=cntttt6;
cnt7:=cntttt7;
cnt8:=cntttt8;
cntt1
cntt2
cntt3
cntt4
cntt5
cntt6
cntt7
cntt8
end if;
end if;end if;end proce;
proce(key0)variable cnttt1 :integer range 0 to 10;variable cnttt2 :integer range 0 to 10;begin if(key0'event and key0='0')then
cnttt1:=cnttt1+1;
if(cnttt1=10)then
cnttt1:=0;
cnttt2:=cnttt2+1;
if(cnttt2=10)then 浙江大学城市学院 实 验 报 告 纸
cnttt2:=0;
end if;
end if;
cntttt1
cntttt2
end proce;proce(key1)variable cnttt3 :integer range 0 to 10;variable cnttt4 :integer range 0 to 10;begin if(key1'event and key1='0')then
cnttt3:=cnttt3+1;
if(cnttt3=10)then
cnttt3:=0;
cnttt4:=cnttt4+1;
if(cnttt4=6)then
cnttt4:=0;
end if;
end if;cntttt3
cntttt4
if(key2'event and key2='0')then 浙江大学城市学院 实 验 报 告 纸
cnttt5:=cnttt5+1;
if(cnttt5=10)then
cnttt5:=0;
cnttt6:=cnttt6+1;
if(cnttt6=6)then
cnttt6:=0;
end if;
end if;cntttt5
cntttt6
end if;end proce;proce(key3)variable cnttt7 :integer range 0 to 10;variable cnttt8 :integer range 0 to 10;begin
if(key3'event and key3='0')then
cnttt7:=cnttt7+1;
if(cnttt7=4)then
cnttt7:=0;
cnttt8:=cnttt8+1;
if(cnttt8=3)then
cnttt8:=0;
end if;
end if;
cntttt7
cntttt8
end if;浙江大学城市学院 实 验 报 告 纸
end proce;
--end if;--end proce;
proce(cntt1,cntt5)
begin
if(sw='0')then
case cntt1 is
when 0=>q0
when 1=>q0
when 2=>q0
when 3=>q0
when 4=>q0
when 5=>q0
when 6=>q0
when 7=>q0
when 8=>q0
when 9=>q0
when others=>q0
case cntt5 is
when 0=>q0
when 1=>q0
when 2=>q0
when 3=>q0
when 4=>q0
when 5=>q0
when 6=>q0
浙江大学城市学院 实 验 报 告 纸
when 7=>q0
when 8=>q0
when 9=>q0
when others=>q0
end if;
end proce;
proce(cntt2,cntt6)
begin if(sw='0')then
case cntt2 is
when 0=>q1
when 1=>q1
when 2=>q1
when 3=>q1
when 4=>q1
when 5=>q1
when 6=>q1
when 7=>q1
when 8=>q1
when 9=>q1
when others=>q1
case cntt6 is
when 0=>q1
when 1=>q1
when 2=>q1
when 3=>q1
when 4=>q1
when 5=>q1
when 6=>q1
when 7=>q1
when 8=>q1
when 9=>q1
when others=>q1
end proce;proce(cntt3,cntt7)
begin
if(sw='0')then
case cntt3 is
when 0=>q2
when 1=>q2
when 2=>q2
when 3=>q2
when 4=>q2
when 5=>q2
when 6=>q2
when 7=>q2
when 8=>q2
when 9=>q2
when others=>q2
case cntt7 is 浙江大学城市学院 实 验 报 告 纸
when 0=>q2
when 1=>q2
when 2=>q2
when 3=>q2
when 4=>q2
when 5=>q2
when 6=>q2
when 7=>q2
when 8=>q2
when 9=>q2
when others=>q2
end proce;
proce(cntt4,cntt8)
begin if(sw='0')then
case cntt4 is
when 0=>q3
when 1=>q3
when 2=>q3
when 3=>q3
when 4=>q3
when 5=>q3
when others=>q3
case cntt8 is
when 0=>q3
when 1=>q3
when 2=>q3
when 3=>q3
when 4=>q3
when 5=>q3
when 6=>q3
--when 7=>q3q3q3
when others=>q3
end proce;end behave;
2、原理图如下:
浙江大学城市学院 实 验 报 告 纸
3、功能仿真如下
1、秒、毫秒计数仿真
2、分、时计数仿真
注释:由于仿真时间限制,小时不能显示。注意SW由0变成1;
浙江大学城市学院 实 验 报 告 纸
3、暂停的仿真,数码管显示用秒,毫秒。
4、按键调整的仿真,主要仿真毫秒的仿真
四、实验结果
实验结果均完成所有要求,但有一个bug,在实现调整功能的时候,不能实时调整数码管暂停下来的数字,只能从之前调整过的数值起开始调整,不过能实现调整之后,开启时钟,时钟即在设定的时间开始跑。当然找到解决的方法,当由于思路和已经 写好的程序冲突性较大,所以此处不再修改。
五、心得体会
本次实验在分频的基础上进行拓展,同时应用数码管显示,开关和按键的控制,比较系统的做了一个实验,对自身的提高还是很有帮助的。
说到心得,此次实验告诉我一下经验:
1、在开始写程序之前最好先评估好自己的思路,简易画出想象中的原理图,再进行编程,对之后的修改有很大的帮助。
2、程序写长了,发现错得时候,修改比较麻烦,所有注意编程习惯很重要,适当的加一些注释,提高程序的可读性。
3、程序最好分模块写,比较清晰。
浙江大学城市学院 实 验 报 告 纸
华大计科学院数字逻辑课程设计说明书题目: 多功能数字钟 专业: 计算机科学与技术 班级:网络工程1班 姓名:刘群 学号: 1125111023 完成日期: 2013-9一、设计题目与要求设计题目:......
实验报告数字时钟的设计一、实验目的1、掌握数字钟的设计方法。2、掌握计数器相互级联的方法。 学号:14040120049 姓名:陶泽二、实验设备和器件1、数字逻辑电路实验板2、74HC(......
FPGA实验报告专业:XXX 姓名:XXX 学号:XX一:实验目的 1.熟悉Modelsim和Quartus II软件的运行环境和使用2.熟练使用Quartus II仿真软件生成网表。3.熟悉FPGA前仿真和后仿真的整......
课程设计报告专业班级 课 程 题 目 秒表的设计 学 号 姓 名 同 组 人 成 绩2013年5月一、设计目的1.进一步熟悉七段码译码器的硬件接口。 2.掌握用扫描方法驱动多个数码管硬......
交通灯实验报告 一, 实验目的实现两路信号灯交替亮起,并利用两组数码管分别对两路信号进行倒计时。两路信号时间分别为:V:绿灯(30S) H:红灯(35S) 黄灯(5s) 绿灯(30S) 红灯(35S) 黄灯(5S)二......
