Files
2025-11-06 10:08:01 +08:00

95 lines
2.2 KiB
Verilog

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date: 2024/12/04 22:53:45
// Design Name:
// Module Name: slowClock
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
module slowClock(
input clk,
input reset,
output reg clk_1Hz,
output reg clk_12Hz,
output reg clk_48Hz,
output reg clk_190Hz
);
parameter sys_clk = 100_000_000; // 100 MHz
parameter clk_out1 = 1;
parameter clk_out12 = 12;
parameter clk_out48 = 48;
parameter clk_out190 = 190;
parameter max1 = sys_clk / (2 * clk_out1) - 1;
parameter max12 = sys_clk / (2 * clk_out12) - 1;
parameter max48 = sys_clk / (2 * clk_out48) - 1;
parameter max190 = sys_clk / (2 * clk_out190) - 1;
reg [25:0] counter1Hz;
reg [22:0] counter12Hz;
reg [20:0] counter48Hz;
reg [18:0] counter190Hz;
always @(posedge clk or posedge reset) begin
if (reset) begin
counter1Hz <= 0;
clk_1Hz <= 0;
counter12Hz <= 0;
clk_12Hz <= 0;
counter48Hz <= 0;
clk_48Hz <= 0;
counter190Hz <= 0;
clk_190Hz <= 0;
end
else begin
// 1 Hz
if (counter1Hz == max1) begin
counter1Hz <= 0;
clk_1Hz <= ~clk_1Hz;
end
else begin
counter1Hz <= counter1Hz + 1;
end
// 12 Hz
if (counter12Hz == max12) begin
counter12Hz <= 0;
clk_12Hz <= ~clk_12Hz;
end
else begin
counter12Hz <= counter12Hz + 1;
end
// 48 Hz
if (counter48Hz == max48) begin
counter48Hz <= 0;
clk_48Hz <= ~clk_48Hz;
end
else begin
counter48Hz <= counter48Hz + 1;
end
// 190 Hz
if (counter190Hz == max190) begin
counter190Hz <= 0;
clk_190Hz <= ~clk_190Hz;
end
else begin
counter190Hz <= counter190Hz + 1;
end
end
end
endmodule