当前位置:   article > 正文

基于FPGA的数字时钟(使用vivado)_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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 228
  • 229
  • 230
  • 231
  • 232
  • 233
  • 234
  • 235
  • 236
  • 237
  • 238
  • 239
  • 240
  • 241
  • 242
  • 243
  • 244
  • 245
  • 246
  • 247
  • 248
  • 249
  • 250
  • 251
  • 252
  • 253
  • 254
  • 255
  • 256
  • 257
  • 258
  • 259
  • 260
  • 261
  • 262
  • 263
  • 264
  • 265
  • 266
  • 267
  • 268
  • 269
  • 270
  • 271
  • 272
  • 273
  • 274
  • 275
  • 276
  • 277
  • 278
  • 279
  • 280
  • 281
  • 282
  • 283
  • 284
  • 285
  • 286
  • 287
  • 288
  • 289
  • 290
  • 291
  • 292
  • 293
  • 294
  • 295
  • 296
  • 297
  • 298
  • 299
  • 300
  • 301
  • 302
  • 303
  • 304
  • 305
  • 306
  • 307
  • 308
  • 309
  • 310
  • 311
  • 312
  • 313
  • 314
  • 315
  • 316
  • 317
  • 318
  • 319
  • 320
  • 321
  • 322
  • 323
  • 324
  • 325
  • 326
  • 327
  • 328
  • 329

实物展示

由于这个代码将速率方法了十倍,故手机录像时,无法捕捉到动态刷新,只能贴一张图片了,不能做成pdf。
在这里插入图片描述

小结

换了开发板和平台,vivado编译一次是真的慢,也得慢慢琢磨。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/796628
推荐阅读
相关标签
  

闽ICP备14008679号