verilog用200M时钟生成125M时钟的实现方法
时间: 2023-10-23 10:12:49 浏览: 264
在Verilog中使用200M时钟生成125M时钟有多种实现方法,以下是其中两种常见的方法:
1. 使用PLL模块:PLL是Phase Locked Loop的缩写,可以将输入时钟信号锁相到一个特定频率。因此可以使用PLL模块将200M时钟锁相到125M时钟,实现方法如下:
```
module pll_125m(
input clk_in,
output reg clk_out
);
wire locked;
wire [6:0] feedback;
// 将200M时钟锁相到125M时钟
pll #(
.CLKI_DIV(2), // 输入时钟分频,200M/2=100M
.CLKO_DIV(4), // 输出时钟分频,100M/4=25M
.FEEDBACK_PATH("SIMPLE"),
.PLLOUT_SELECT("GENCLK")
) pll_inst (
.CLKI(clk_in),
.CLKOP(clk_out),
.LOCKED(lcoked),
.FEEDBACK(feedback)
);
endmodule
```
2. 使用计数器和触发器:另一种实现方法是使用计数器和触发器,将200M时钟分频到125M时钟。具体实现方法如下:
```
module clk_div(
input clk_in,
output reg clk_out
);
reg [3:0] cnt;
wire rst;
// 重置计数器
assign rst = (cnt == 4'd4);
always @(posedge clk_in or posedge rst) begin
if (rst) begin
cnt <= 4'd0;
clk_out <= 1'b0;
end
else begin
cnt <= cnt + 4'd1;
clk_out <= (cnt == 4'd2);
end
end
endmodule
```
这里将200M时钟分频为125M时钟,即200M/1.6=125M,因此计数器的计数值为4。在计数器计数到2时,触发器输出高电平,即生成了125M时钟。
阅读全文