Menu Close

verilog 奇数,偶数分频逻辑

在fpga 设计中, 我们有时需要对输入的时钟进行分频。 例如:1/2,1/3,1/4,1/5 等等。在偶数分频时,分频逻辑比较容易实现,在奇数分频时,fpga 设计相对麻烦一些。

偶数分频逻辑设计:

even_div.v


偶数分频相对比较简单, 程序中使用cnt 作为计数器, 当计数器计数到分频值的一半时(N/2), clk 反转; 当计数器计数到分频值(N)时, clk 再次反转。

 

odd_div.v


奇数分频相对比较麻烦, 步骤如下:

1)需要两个计数器:clk 上升沿计数器; clk 下降沿计数器。这两个计数器实现N计数。

2)分别在clk 的上升沿和下降沿 实现 clk_p,  clk_n。当cnt_x ==  N/2 – 0.5 时,clk_x 反转; 当cnt_x ==  N 时,clk_x 再次反转; 这样生成的时钟clk_x 是一个占空比不等的时钟(高电平 – 低电平 = 1)即要么高电平多0.5, 或者低电平多0.5 个时钟周期。

3)clk_out = clk_p | clk_n;  平衡占空比不等的现象,通过使用 或操作 ,实现%50 、%50 占空比的时钟。

 

仿真程序:


仿真波形:

verilog 奇数,偶数分频逻辑

从仿真波形上可以看出,通过或操作实现 %50 , %50 的占空比时钟,从而实现计数分频。 偶数分频相对简单一些,只要通过计数分频即可。

 

Posted in FPGA, FPGA 教材教案, Verilog, 教材与教案, 文章