基于FPGA的数字时钟(使用vivado)

这篇具有很好参考价值的文章主要介绍了基于FPGA的数字时钟(使用vivado)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基于FPGA的数字时钟(使用vivado)

使用两个四位数码管,可以实现时钟分钟秒钟显示,高两位设置不显示。

换了一个新开发板,nexys4ddr,资料不多,最多使用的就是一本英文Reference Manual。

其实是老师觉得我计数器还差点,得再练练。

原件选择

Digilent NEXYS4DDR

Vivado2018.3

设计方案

60进制秒钟计数然后进1分钟

60进制分钟计数然后进1小时

设计思想

1、设计时钟一,用于计数器计一秒,根据芯片晶振选择计算

2、设计时钟二,用于计数60秒

3、设计时钟三,用于计数60分

4、设计时钟四,用于计数24时

5、设计时钟五,用于选择数码管刷新频率

代码

module	clock(
		input			sclk					,
		input			s_rst_n					,
		input			YEAR					,
		input			MONTH					,
		input			DAY						,
		
		output	reg		[7:0]	SEG				,
		output	reg		[7:0]	SMG					
);
localparam		DELAY_1S			=			'd9_999_999;
localparam		DELAY_1M			=			'd59;
localparam		DELAY_1H			=			'd59;
localparam		DELAY_1D			=			'd23;
localparam		DELAY_10MS  		=			'd199_999;

reg		[3:0]			TIME_8					;

reg		[25:0]			cnt_1s					;
reg		[5:0]			cnt_1m					;
reg		[5:0]			cnt_1h					;
reg		[4:0]			cnt_1d					;

reg		[18:0]			cnt_10ms				;

reg		[7:0]			SEG1					;
reg		[7:0]			SEG2					;
reg		[7:0]			SEG3					;
reg		[7:0]			SEG4					;
reg		[7:0]			SEG5					;
reg		[7:0]			SEG6					;
reg		[7:0]			SEG7					;
reg		[7:0]			SEG8					;

localparam		NULL				=			8'b1111_1111;
localparam		num0				=			8'b1100_0000;
localparam		num9				=           8'b1001_0000;
localparam		num8				=           8'b1000_0000;
localparam		num7				=           8'b1111_1000;
localparam		num6				=           8'b1000_0010;
localparam		num5				=           8'b1001_0010;
localparam		num4				=           8'b1001_1001;
localparam		num3				=           8'b1011_0000;
localparam		num2				=           8'b1010_0100;
localparam		num1				=           8'b1111_1001;
//秒计时
always @ (posedge sclk or negedge s_rst_n)	
begin
		if(s_rst_n == 1'b0)
				cnt_1s		<=			'd0;				
		else if (cnt_1s == DELAY_1S)				
				cnt_1s		<=			'd0;
		else  
				cnt_1s 	<=			cnt_1s + 1'b1;
end
//分计时
always @ (posedge sclk or negedge s_rst_n)	
begin
		if(s_rst_n == 1'b0)
				cnt_1m		<=			'd0;				
		else if (cnt_1s == DELAY_1S && cnt_1m == DELAY_1M)				
				cnt_1m		<=			'd0;
		else if (cnt_1s == DELAY_1S) 
				cnt_1m 	<=			cnt_1m + 1'b1;
end
//时计时
always @ (posedge sclk or negedge s_rst_n)	
begin
		if(s_rst_n == 1'b0)
				cnt_1h		<=			'd0;				
		else if (cnt_1s == DELAY_1S && cnt_1m == DELAY_1M && cnt_1h == DELAY_1H)				
				cnt_1h		<=			'd0;
		else if (cnt_1s == DELAY_1S && cnt_1m == DELAY_1M)  
				cnt_1h 	<=			cnt_1h + 1'b1;
end
//天计时
always @ (posedge sclk or negedge s_rst_n)	
begin
		if(s_rst_n == 1'b0)
				cnt_1d		<=			'd0;				
		else if (cnt_1s == DELAY_1S && cnt_1m == DELAY_1M && cnt_1h == DELAY_1H && cnt_1d == DELAY_1D)	
				cnt_1d		<=			'd0;
		else if (cnt_1s == DELAY_1S && cnt_1m == DELAY_1M && cnt_1h == DELAY_1H)  
				cnt_1d 	<=			cnt_1d + 1'b1;
end
//数码管刷新
always @ (posedge sclk or negedge s_rst_n)	
begin
		if(s_rst_n == 1'b0)
				cnt_10ms		<=			'd0;				
		else if (cnt_10ms == DELAY_10MS)				
				cnt_10ms		<=			'd0;
		else  
				cnt_10ms 	<=			cnt_10ms + 1'b1;
end
//位选1
always @ (posedge sclk or negedge s_rst_n)	
begin
		if(s_rst_n == 1'd0)				
				TIME_8	<=			1'd0;
		else if (TIME_8 == 8 && cnt_10ms == DELAY_10MS)				
				TIME_8	<=			1'd1;				
		else  if (cnt_10ms == DELAY_10MS) 
				TIME_8  	<=			TIME_8 + 1'd1;
end
//位选2
always @ (posedge sclk or negedge s_rst_n)	
begin
		if(s_rst_n == 1'd0)				
				SEG		<=			8'b0000_0000;			
		else if (TIME_8 == 01)
				SEG		<=			8'b1111_1110;
		else if (TIME_8 == 02)
				SEG		<=			8'b1111_1101;
		else if (TIME_8 == 03)
				SEG		<=			8'b1111_1011;
		else if (TIME_8 == 04)
				SEG		<=			8'b1111_0111;
		else if (TIME_8 == 05)
				SEG		<=			8'b1110_1111;
		else if (TIME_8 == 06)
				SEG		<=			8'b1101_1111;
		else if (TIME_8 == 07)
				SEG		<=			8'b1011_1111;
		else if (TIME_8 == 08)
				SEG		<=			8'b0111_1111;
end
//段选
always @ (posedge sclk or negedge s_rst_n)	
begin
		if(s_rst_n == 1'd0)				
				SMG 	<=			8'b0000_0000;			
		else if (TIME_8 == 01)
				SMG 	<=			SEG4;		
		else if (TIME_8 == 02)
				SMG 	<=			SEG3;		
		else if (TIME_8 == 03)
				SMG 	<=			SEG2;		
		else if (TIME_8 == 04)
				SMG 	<=			SEG1;
		else if (TIME_8 == 05)
				SMG 	<=			SEG6;
		else if (TIME_8 == 06)
				SMG 	<=			SEG5;
		else if (TIME_8 == 07)
				SMG 	<=			NULL;
		else if (TIME_8 == 08)
				SMG 	<=			NULL;
								
end
//秒显示
always@(*)
begin		
			case(cnt_1m)
				00:						{SEG3,SEG4}	<={num0,num0};
				01:						{SEG3,SEG4}	<={num0,num1};
				02:						{SEG3,SEG4}	<={num0,num2};	
				03:						{SEG3,SEG4}	<={num0,num3};	
				04:						{SEG3,SEG4}	<={num0,num4};	
				05:						{SEG3,SEG4}	<={num0,num5};	
				06:						{SEG3,SEG4}	<={num0,num6};	
				07:						{SEG3,SEG4}	<={num0,num7};	
				08:						{SEG3,SEG4}	<={num0,num8};	
				09:						{SEG3,SEG4}	<={num0,num9};
				
				10:						{SEG3,SEG4}	<={num1,num0};	
				11:						{SEG3,SEG4}	<={num1,num1};	
				12:						{SEG3,SEG4}	<={num1,num2};	
				13:						{SEG3,SEG4}	<={num1,num3};	
				14:						{SEG3,SEG4}	<={num1,num4};	
				15:						{SEG3,SEG4}	<={num1,num5};	
				16:						{SEG3,SEG4}	<={num1,num6};	
				17:						{SEG3,SEG4}	<={num1,num7};	
				18:						{SEG3,SEG4}	<={num1,num8};	
				19:						{SEG3,SEG4}	<={num1,num9};
				
				20:						{SEG3,SEG4}	<={num2,num0};	
				21:						{SEG3,SEG4}	<={num2,num1};
				22:						{SEG3,SEG4}	<={num2,num2};				
				23:						{SEG3,SEG4}	<={num2,num3};
				24:						{SEG3,SEG4}	<={num2,num4};
				25:						{SEG3,SEG4}	<={num2,num5};	
				26:						{SEG3,SEG4}	<={num2,num6};	
				27:						{SEG3,SEG4}	<={num2,num7};	
				28:						{SEG3,SEG4}	<={num2,num8};	
				29:						{SEG3,SEG4}	<={num2,num9};	
				
				30:						{SEG3,SEG4}	<={num3,num0};				
				31:						{SEG3,SEG4}	<={num3,num1};	
				32:						{SEG3,SEG4}	<={num3,num2};	
				33:						{SEG3,SEG4}	<={num3,num3};	
				34:						{SEG3,SEG4}	<={num3,num4};	
				35:						{SEG3,SEG4}	<={num3,num5};	
				36:						{SEG3,SEG4}	<={num3,num6};	
				37:						{SEG3,SEG4}	<={num3,num7};	
				38:						{SEG3,SEG4}	<={num3,num8};	
				39:						{SEG3,SEG4}	<={num3,num9};	
				
				40:						{SEG3,SEG4}	<={num4,num0};					
				41:						{SEG3,SEG4}	<={num4,num1};	
				42:						{SEG3,SEG4}	<={num4,num2};	
				43:						{SEG3,SEG4}	<={num4,num3};	
				44:						{SEG3,SEG4}	<={num4,num4};	
				45:						{SEG3,SEG4}	<={num4,num5};	
				46:						{SEG3,SEG4}	<={num4,num6};	
				47:						{SEG3,SEG4}	<={num4,num7};	
				48:						{SEG3,SEG4}	<={num4,num8};	
				49:						{SEG3,SEG4}	<={num4,num9};	
				
				50:						{SEG3,SEG4}	<={num5,num0};					
				51:						{SEG3,SEG4}	<={num5,num1};	
				52:						{SEG3,SEG4}	<={num5,num2};	
				53:						{SEG3,SEG4}	<={num5,num3};	
				54:						{SEG3,SEG4}	<={num5,num4};	
				55:						{SEG3,SEG4}	<={num5,num5};	
				56:						{SEG3,SEG4}	<={num5,num6};	
				57:						{SEG3,SEG4}	<={num5,num7};	
				58:						{SEG3,SEG4}	<={num5,num8};	
				59:						{SEG3,SEG4}	<={num5,num9};	
                                                                                     
			endcase
		
end                
//分显示
always@(*)
begin		
			case(cnt_1h)
				00:						{SEG1,SEG2}	<={num0,num0};
				01:						{SEG1,SEG2}	<={num0,num1};
				02:						{SEG1,SEG2}	<={num0,num2};	
				03:						{SEG1,SEG2}	<={num0,num3};	
				04:						{SEG1,SEG2}	<={num0,num4};	
				05:						{SEG1,SEG2}	<={num0,num5};	
				06:						{SEG1,SEG2}	<={num0,num6};	
				07:						{SEG1,SEG2}	<={num0,num7};	
				08:						{SEG1,SEG2}	<={num0,num8};	
				09:						{SEG1,SEG2}	<={num0,num9};
				
				10:						{SEG1,SEG2}	<={num1,num0};	
				11:						{SEG1,SEG2}	<={num1,num1};	
				12:						{SEG1,SEG2}	<={num1,num2};	
				13:						{SEG1,SEG2}	<={num1,num3};	
				14:						{SEG1,SEG2}	<={num1,num4};	
				15:						{SEG1,SEG2}	<={num1,num5};	
				16:						{SEG1,SEG2}	<={num1,num6};	
				17:						{SEG1,SEG2}	<={num1,num7};	
				18:						{SEG1,SEG2}	<={num1,num8};	
				19:						{SEG1,SEG2}	<={num1,num9};
				
				20:						{SEG1,SEG2}	<={num2,num0};	
				21:						{SEG1,SEG2}	<={num2,num1};
				22:						{SEG1,SEG2}	<={num2,num2};				
				23:						{SEG1,SEG2}	<={num2,num3};
				24:						{SEG1,SEG2}	<={num2,num4};
				25:						{SEG1,SEG2}	<={num2,num5};	
				26:						{SEG1,SEG2}	<={num2,num6};	
				27:						{SEG1,SEG2}	<={num2,num7};	
				28:						{SEG1,SEG2}	<={num2,num8};	
				29:						{SEG1,SEG2}	<={num2,num9};	
				
				30:						{SEG1,SEG2}	<={num3,num0};				
				31:						{SEG1,SEG2}	<={num3,num1};	
				32:						{SEG1,SEG2}	<={num3,num2};	
				33:						{SEG1,SEG2}	<={num3,num3};	
				34:						{SEG1,SEG2}	<={num3,num4};	
				35:						{SEG1,SEG2}	<={num3,num5};	
				36:						{SEG1,SEG2}	<={num3,num6};	
				37:						{SEG1,SEG2}	<={num3,num7};	
				38:						{SEG1,SEG2}	<={num3,num8};	
				39:						{SEG1,SEG2}	<={num3,num9};	
				
				40:						{SEG1,SEG2}	<={num4,num0};					
				41:						{SEG1,SEG2}	<={num4,num1};	
				42:						{SEG1,SEG2}	<={num4,num2};	
				43:						{SEG1,SEG2}	<={num4,num3};	
				44:						{SEG1,SEG2}	<={num4,num4};	
				45:						{SEG1,SEG2}	<={num4,num5};	
				46:						{SEG1,SEG2}	<={num4,num6};	
				47:						{SEG1,SEG2}	<={num4,num7};	
				48:						{SEG1,SEG2}	<={num4,num8};	
				49:						{SEG1,SEG2}	<={num4,num9};	
				
				50:						{SEG1,SEG2}	<={num5,num0};					
				51:						{SEG1,SEG2}	<={num5,num1};	
				52:						{SEG1,SEG2}	<={num5,num2};	
				53:						{SEG1,SEG2}	<={num5,num3};	
				54:						{SEG1,SEG2}	<={num5,num4};	
				55:						{SEG1,SEG2}	<={num5,num5};	
				56:						{SEG1,SEG2}	<={num5,num6};	
				57:						{SEG1,SEG2}	<={num5,num7};	
				58:						{SEG1,SEG2}	<={num5,num8};	
				59:						{SEG1,SEG2}	<={num5,num9};	                                                                                    
			endcase
		
end              
//时显示
always@(*)
begin		
			case(cnt_1d)
				00:						{SEG5,SEG6}	<={num0,num0};
				01:						{SEG5,SEG6}	<={num0,num1};
				02:						{SEG5,SEG6}	<={num0,num2};	
				03:						{SEG5,SEG6}	<={num0,num3};	
				04:						{SEG5,SEG6}	<={num0,num4};	
				05:						{SEG5,SEG6}	<={num0,num5};	
				06:						{SEG5,SEG6}	<={num0,num6};	
				07:						{SEG5,SEG6}	<={num0,num7};	
				08:						{SEG5,SEG6}	<={num0,num8};	
				09:						{SEG5,SEG6}	<={num0,num9};										
				10:						{SEG5,SEG6}	<={num1,num0};	
				11:						{SEG5,SEG6}	<={num1,num1};	
				12:						{SEG5,SEG6}	<={num1,num2};	
				13:						{SEG5,SEG6}	<={num1,num3};	
				14:						{SEG5,SEG6}	<={num1,num4};	
				15:						{SEG5,SEG6}	<={num1,num5};	
				16:						{SEG5,SEG6}	<={num1,num6};	
				17:						{SEG5,SEG6}	<={num1,num7};	
				18:						{SEG5,SEG6}	<={num1,num8};	
				19:						{SEG5,SEG6}	<={num1,num9};										 
				20:						{SEG5,SEG6}	<={num2,num0};	
				21:						{SEG5,SEG6}	<={num2,num1};
				22:						{SEG5,SEG6}	<={num2,num2};				
				23:						{SEG5,SEG6}	<={num2,num3};
			endcase
		
end   								

endmodule

实物展示

由于这个代码将速率方法了十倍,故手机录像时,无法捕捉到动态刷新,只能贴一张图片了,不能做成pdf。
vivado设计时钟,嵌入式,FPGA,fpga开发

小结

换了开发板和平台,vivado编译一次是真的慢,也得慢慢琢磨。文章来源地址https://www.toymoban.com/news/detail-780119.html

到了这里,关于基于FPGA的数字时钟(使用vivado)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于FPGA的多功能数字时钟设计报告

    作品基于intel Cyclone IV E EP4CE10F17C8 FPGA板卡,主要开发环境为Quartus Ⅱ,编程并实现了多功能温湿度电子钟。本作品在实现显示实时时间的基础上,设计并完成了设置闹钟、改变闹钟铃声、显示实时温度和实时湿度、基于以太网通信协议的实时视频传输等功能。在未设置闹钟时

    2024年02月05日
    浏览(51)
  • 基于FPGA的多通道数据采集系统Verilog设计嵌入式

    基于FPGA的多通道数据采集系统Verilog设计嵌入式 在本文中,我们将介绍基于FPGA的多通道数据采集系统的Verilog设计,该系统可用于同时采集和处理多个通道的数据。我们将详细讨论系统的设计原理和实现步骤,并提供相应的Verilog源代码。 系统概述 多通道数据采集系统是一种

    2024年02月07日
    浏览(71)
  • 嵌入式课程设计-- 电子时钟

    开发环境: Proteus:是比较好的仿真单片机及外围器件的工具。 keil5:嵌入式开发的软件。 原理图和PCB 图 : 原理图: 功能和操作说明: 本系统以C51单片机为核心,通过软件在LCD1602上显示具体时间日期的系统。本质是一个简易电子时钟。同时可以通过4个按键来调整时间。 在

    2024年02月11日
    浏览(52)
  • 基于FPGA的FIR数字滤波器设计(quartus和vivado程序都有)。

    基于FPGA的FIR数字滤波器设计(quartus和vivado程序都有)。 附: 1.配套quartus从MATLAB系数生成直到仿真成功说明文档。 2.配套仿真出波形(图1)的视频。      

    2024年02月10日
    浏览(49)
  • FPGA时钟资源与设计方法——Xilinx(Vivado)

    1.时钟资源包括:时钟布线、时钟缓冲器(BUFGBUFRBUFIO)、时钟管理器(MMCM/PLL)。 2.时钟类型有三种:全局时钟,可以驱动整个内核上的同步逻辑;局部时钟,可以驱动特定和相邻区域的逻辑;IO时钟,可以驱动某个IO的特定逻辑。 3.混合模式时钟管理器(MMCM)和数字时钟管理

    2024年02月22日
    浏览(56)
  • FPGA多功能数字时钟 基于Quartus实现设计与仿真 华南师范大学数电综设

    专业: 通信工程 学号:__ 姓名: 龚易乾___指导老师: 电子与信息工程学院 2023年2月 有任何疑问可以联系邮箱:codealan@qq.com 项目仓库地址:https://github.com/CodeAlanqian/e-clock github仓库地址 熟练掌握Quartus等EDA设计与仿真工具,掌握多路选择器、N进制计数器、显示译码电路、开关

    2024年02月12日
    浏览(51)
  • 基于vivado(语言Verilog)的FPGA学习(5)——跨时钟处理

    慢时钟到快时钟一般都不需要处理,关键需要解决从快时钟到慢时钟的问题,因为可能会漏信号或者失真,比如: 第一种办法是开环解决方案,也就是人为设置目标信号脉宽大于1.5倍的周期。但是容易和设计要求冲突 所以第二个大方法是闭环解决方案,也就是从改善同步方

    2024年02月03日
    浏览(50)
  • FPGA项目设计:数字时钟

    项目要求: 设计一个数字时钟,数码管前两位显示小时,数码管中间两位显示分钟,数码管后面两位显示秒。 项目设计: 系统框架图: 计数模块时序图: 代码实现: 计数模块: 数码管显示模块: 顶层文件:

    2024年02月14日
    浏览(47)
  • 应届生谈薪技巧和注意事项,怎么为自己多争取1~2k(FPGA,芯片谈薪,数字IC,嵌入式,模拟IC,FPGA探索者)

      找工作的终极目标:谈薪!谈高薪!今天【FPGA探索者】给大家分享一下谈薪的技巧和注意事项,别被HR轻易压价。   本文适用人群: 应届毕业生 。 FPGA探索者 FPGA+数字IC笔试面试,无线通信物理层及数字信号处理,半导体芯片行业求职,校招社招实习,职场趣事,行业动

    2024年01月25日
    浏览(58)
  • FPGA课程设计——数字电子时钟VERILOG(基于正点原子新起点开发板,支持8位或6位共阳极数码管显示时分秒毫秒,可校时,可设闹钟,闹钟开关,led指示)

    2019   级    电子科学与技术   专业FPGA课程设计 报   告 2022  年 5 月 20 日 多功能数字电子钟的设计 摘要 电子设计自动化(EDA)是一种实现电子系统或电子产品自动化设计的技术,使用EDA技术设计的结果既可以用FPGA / CPLD来实施验证,也可以直接做成专用集成电路(ASIC)。

    2024年02月03日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包