您的位置:首页 > 其它

[原创][FPGA]时钟分频之奇分频(5分频)

2015-12-10 14:42 232 查看

0. 简介

  有时在基本模块的设计中常常会使用到时钟分频,时钟的偶分频相对与奇分频比较简单,但是奇分频的理念想透彻后也是十分简单的,这里就把奇分频做一个记录。

1. 奇分频

  其实现很简单,主要为使用两个计数模块分别计数,得到两个波形进行基本与或操作完成。直接贴出代码部分如下。

module  div_freq(
iCLK,
iRST_n,
oCLK
);

input   wire    iCLK;
input   wire    iRST_n;
output          oCLK;

parameter   N = 4'd5;

reg         clk_p;
reg [3:0]   cnt_p;
always @ (posedge iCLK or negedge iRST_n) begin
if (!iRST_n)
cnt_p <= 4'd0;
else if (cnt_p == N - 1)
cnt_p <= 4'd0;
else
cnt_p <= cnt_p + 1'b1;
end
always @ (posedge iCLK or negedge iRST_n) begin
if (!iRST_n)
clk_p <= 1'b0;
else if (cnt_p == (N - 1) / 2)
clk_p <= ~clk_p;
else if (cnt_p == N - 1)
clk_p <= ~clk_p;
else
clk_p <= clk_p;
end

reg         clk_n;
reg [3:0]   cnt_n;
always @ (negedge iCLK or negedge iRST_n) begin
if (!iRST_n)
cnt_n <= 4'd0;
else if (cnt_n == N - 1)
cnt_n <= 4'd0;
else
cnt_n <= cnt_n + 1'b1;
end
always @ (negedge iCLK or negedge iRST_n) begin
if (!iRST_n)
clk_n <= 1'b0;
else if (cnt_n == (N - 1) / 2)
clk_n <= ~clk_n;
else if (cnt_n == N - 1)
clk_n <= ~clk_n;
else
clk_n <= clk_n;
end

assign  oCLK = clk_p | clk_n;

endmodule


modelsim仿真结果如下图

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: