名称:计时器日历及时间设计Verilog代码VIVADO仿真(文末获取)
软件:VIVADO
语言:Verilog
代码功能:
计时器日历及时间
基本要求:计时显示日历,年/月/日/时/分/秒/百分秒。
提示:
计时器计算设计,
年/月/日的日历查找表。
1. 工程文件
2. 程序文件
ROM IP 核
3. 程序编译
4. RTL图
5. 仿真文件(testbench)
6. 仿真图
修改起始地址,获得不同年月日
部分代码展示:
`timescale 1ns/100ps module calendar ( input sysclk, input reset_n, output [31:0] rom_data ); reg [15:0] year_h = 8'd20; reg [7:0] year_l = 8'd08; reg [3:0] month = 4'd1; reg [4:0] day = 5'd30; //------------------------------------------------------------------------------ wire month_flag = (day == 28)&!(year_l[1:0] == 0 & year_l !=0 | year_h[1:0] ==0 & year_l ==0)&(month == 2)| (day == 29)& (year_l[1:0] == 0 & year_l !=0 | year_h[1:0] ==0 & year_l ==0)&(month == 2)| (day == 30)& ((month == 4)|(month == 6)|(month == 9)|(month == 11))| (day == 31)& ((month == 1)|(month == 3)|(month == 5)|(month == 7)|(month == 8)|(month == 10)|(month == 12)); //------------------------------------------------------------------------------ always@(posedge sysclk or negedge reset_n) begin if (!reset_n) begin day <= 5'b1; month <= 4'd1; year_l <= 8'd08; year_h <= 8'd20; end else begin if (month_flag) begin day <= 5'd1; if (month == 12) begin month <= 5'd1; if (year_l == 100 -1'b1) begin year_l <= 8'd0; if (year_h == 100 -1'b1) begin year_h <= 8'd0; end else if (year_l == 100 -1'b1) begin year_h <= year_h + 1'b1; end end else if (month == 12) begin year_l <= year_l + 1'b1; end
源代码
扫描文章末尾的公众号二维码