上课作息时间打铃器设计Verilog代码VIVADO仿真

名称:上课作息时间打铃器设计Verilog代码VIVADO仿真(文末获取)

软件:VIVADO

语言:Verilog

代码功能:

在 Vivado软件中设计一个面向学校上课作息时间的打铃器。具体要求如下基本功能

1.按照学校上课作息时间点定时打铃,每次打铃时长5秒。

2.具备电子钟的功能,能够完成24小时、60分和和60秒的计时。

3电子钟走时不准确时,可对时和分进行调整。

4用数码管显示小时和分钟的计时值。

1. 工程文件

打铃时间为:

2. 程序文件

3. 程序编译

4. RTL图

5. Testbench

6. 仿真图

整体仿真图

按键检测模块

分频模块

计时模块

显示模块

打铃模块

部分代码展示:

`timescale 1ns / 1ps
//顶层
module digital_clock(
input clk_100M,//100MHz
input BTNL,//设置时间
input BTNR,//确认
input BTNU,//设置时分秒
output bell,//打铃
//数码管显示
output   [7:0] dig_led_1,//数码管段选
output   [3:0] wei_led_1//数码管位选
    );
wire set_time_key;//设置时间
wire confirm_key;//确认
wire change_time_key;//设置时分秒
wire clk_1Hz;
wire [7:0] hour_time;//时
wire [7:0] minute_time;//分
wire [7:0] second_time;//秒
//按键检测模块
key_jitter key_set_time_key(
     . clkin(clk_100M),
     . key_in(BTNL),//输入
 . key_posedge(set_time_key)//按键上升沿
);
//按键检测模块
key_jitter key_confirm_key(
     . clkin(clk_100M),
     . key_in(BTNR),//输入
 . key_posedge(confirm_key)//按键上升沿
);
//按键检测模块
key_jitter key_change_time_key(
     . clkin(clk_100M),
     . key_in(BTNU),//输入
 . key_posedge(change_time_key)//后按键上升沿
);
//分频模块
fenping i_fenping(
. clk_100M(clk_100M),
. clk_1Hz(clk_1Hz)
);
//计时
jishi i_jishi(
. clk_100M(clk_100M),
. clk_1Hz(clk_1Hz),
. set_time_key(set_time_key),//设置时间
. confirm_key(confirm_key),//确认
. change_time_key(change_time_key),//设置时分秒
. hour_time(hour_time),//时
. minute_time(minute_time),//分
. second_time(second_time)//秒
);
//显示模块
display_num i_display_num(
. clk(clk_100M),
. hour_time(hour_time),//时
. minute_time(minute_time),//分
. second_time(second_time),//秒
. dig_led_1(dig_led_1),
. wei_led_1(wei_led_1)
);
//打铃模块
bell_ctrl i_bell_ctrl(
. clk_100M(clk_100M),
. hour_time(hour_time),//时
. minute_time(minute_time),//分
. second_time(second_time),//秒
. bell(bell) //打铃,每次5秒
);
endmodule

源代码

点击下方的公众号卡片获取

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个基于FPGA的数字计频Verilog代码,同时包含了Quartus II的仿真测试代码: ```verilog module freq_counter ( input clk, // 输入时钟 input reset, // 复位信号 input start, // 开始计数信号 output reg [31:0] freq_count // 输出计数计数值 ); reg [31:0] count; // 内部计数 always @(posedge clk) begin if (reset) begin count <= 0; freq_count <= 0; end else if (start) begin count <= count + 1; freq_count <= count; end end endmodule module freq_counter_test(); reg clk; reg reset; reg start; wire [31:0] freq_count; freq_counter counter( .clk(clk), .reset(reset), .start(start), .freq_count(freq_count) ); initial begin clk = 0; reset = 1; start = 0; #10 reset = 0; #100 start = 1; #1000 start = 0; #100000 $finish; end always #5 clk = ~clk; endmodule ``` 在这个例子中,我们定义了一个频率计数模块`freq_counter`,它包含了一个时钟输入`clk`、一个复位信号`reset`、一个开始计数信号`start`和一个计数计数值输出`freq_count`。在每个时钟上升沿时,如果复位信号为1,则计数复位为0;如果开始计数信号为1,则计数加1,并将计数计数值赋值给输出端口。 我们还定义了一个测试模块`freq_counter_test`,它包含了一个时钟输入`clk`、一个复位信号`reset`、一个开始计数信号`start`和一个计数计数值输出`freq_count`。在测试模块中,我们通过给时钟、复位和开始计数信号赋值的方式来测试计数模块的功能。具体来说,我们在仿真开始时将复位信号置为1,经过一段时间后将其置为0,然后在一定时间后将开始计数信号置为1,经过一定时间后再将其置为0。最后,在一定时间后仿真结束。 在Quartus II中,我们可以通过仿真波形来验证计数模块是否能够正确地计数。具体来说,我们可以打开波形编辑,将测试模块的输入和输出端口添加到波形中,然后运行仿真。在仿真结果中,我们可以看到计数模块的计数值是否与预期相符。如果相符,则说明计数模块的功能是正确的。 希望这个Verilog代码和Quartus II仿真测试代码对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值