将100MHz时钟分频为50Hz,verilog设计源代码和仿真源代码
时间: 2024-02-21 14:01:09 浏览: 162
Verilog 设计源代码:
```
module clk_divider(
input clk, // 100 MHz 时钟输入
output reg clk_out // 50 Hz 分频后的时钟输出
);
reg [23:0] count; // 24 位计数器
always @(posedge clk) begin
if (count == 4999999) begin // 当计数器达到 4999999 时,输出一个时钟脉冲
count <= 0;
clk_out <= ~clk_out;
end else begin
count <= count + 1;
end
end
endmodule
```
仿真源代码:
```
module clk_divider_tb;
reg clk;
wire clk_out;
clk_divider dut(.clk(clk), .clk_out(clk_out));
initial begin
clk = 0;
#5; // 延迟 5 个时钟周期
forever #10 clk = ~clk; // 100 MHz 时钟,周期为 10 ns
end
initial begin
#100000000; // 仿真时长为 1 秒
$finish;
end
endmodule
```
这个设计中,计数器的位宽为 24 位,因为 100 MHz 的时钟周期为 10 ns,而 50 Hz 的时钟周期为 20 ms,所以需要计数 4999999 个时钟周期才能输出一个时钟脉冲。计数器每次加 1,直到达到 4999999 时清零,并且输出一个时钟脉冲。
阅读全文