Verilog实现一个简单的数字时钟
时间: 2024-01-24 19:05:30 浏览: 67
下面是一个简单的数字时钟Verilog代码:
```verilog
module digital_clock(
input clk,
output reg [3:0] hours,
output reg [5:0] minutes,
output reg [5:0] seconds
);
reg [3:0] hours_reg;
reg [5:0] minutes_reg;
reg [5:0] seconds_reg;
always @(posedge clk) begin
if (seconds_reg == 59) begin
seconds_reg <= 0;
if (minutes_reg == 59) begin
minutes_reg <= 0;
if (hours_reg == 23) begin
hours_reg <= 0;
end
else begin
hours_reg <= hours_reg + 1;
end
end
else begin
minutes_reg <= minutes_reg + 1;
end
end
else begin
seconds_reg <= seconds_reg + 1;
end
end
assign hours = hours_reg;
assign minutes = minutes_reg;
assign seconds = seconds_reg;
endmodule
```
这个代码模块包含一个时钟输入和三个输出(小时,分钟和秒)。使用 `always` 块,我们可以编写与时钟相关的逻辑来更新输出。在这个例子中,我们使用了三个寄存器 `hours_reg`,`minutes_reg` 和 `seconds_reg` 来存储当前的小时,分钟和秒数。每当时钟上升沿触发时,我们根据当前时间更新这些寄存器。
在这个例子中,我们用分层的 if-else 语句来处理时间的进位。当秒数到达59时,我们将其重置为0,并将分钟数加1。当分钟数到达59时,我们将其重置为0,并将小时数加1。当小时数到达23时,我们将其重置为0。
最后,我们使用 `assign` 语句将寄存器连接到模块的输出。