verilog 連續分頻50mhz到1mhz到1khz再到2hz
时间: 2023-07-31 12:13:25 浏览: 66
以下是一个 Verilog 连续分频器示例,将输入时钟从 50MHz 分频到 1MHz,再从 1MHz 分频到 1kHz,然后从 1kHz 再分频到 2Hz:
```
module freq_divider(input clk_50mhz, output reg out);
reg [5:0] count;
// Divide from 50MHz to 1MHz
always @(posedge clk_50mhz) begin
if (count == 6'h3D) begin // 50MHz / 50 = 1MHz
count <= 6'h00;
out <= ~out;
end else begin
count <= count + 1;
end
end
// Divide from 1MHz to 1kHz
reg [9:0] count2;
always @(posedge out) begin
if (count2 == 10'h3E8) begin // 1MHz / 1000 = 1kHz
count2 <= 10'h000;
out <= ~out;
end else begin
count2 <= count2 + 1;
end
end
// Divide from 1kHz to 2Hz
reg [19:0] count3;
always @(posedge out) begin
if (count3 == 20'h7A120) begin // 1kHz / 500 = 2Hz
count3 <= 20'h00000;
out <= ~out;
end else begin
count3 <= count3 + 1;
end
end
endmodule
```
这个模块使用三个计数器,一个从 50MHz 分频到 1MHz,另一个从 1MHz 分频到 1kHz,第三个从 1kHz 分频到 2Hz。第一个计数器 `count` 是一个 6 位计数器,当 `count` 达到 61 时,即 50MHz / 50 = 1MHz 时,将输出信号取反,并将计数器重置为 0。因此,输出信号的频率将是输入时钟频率的 1/50。第二个计数器 `count2` 是一个 10 位计数器,当 `count2` 达到 1000 时,即 1MHz / 1000 = 1kHz 时,将输出信号取反,并将计数器重置为 0。因此,输出信号的频率将是输入时钟频率的 1/50/1000 = 1/50000。第三个计数器 `count3` 是一个 20 位计数器,当 `count3` 达到 500000 时,即 1kHz / 500 = 2Hz 时,将输出信号取反,并将计数器重置为 0。因此,输出信号的频率将是输入时钟频率的 1/50/1000/500000 = 1/25000000。
阅读全文