1.偶数分频
对于占空比为50%,分频系数为N的偶数分频,其核心思想是使用计数范围为[0, (N/2)-1]的计数器,每当计数器计到最大值时输出时钟翻转一次,其余时间保持不变。
八分频示意图

2.奇数分频
奇数分频比偶数稍微复杂一些,为了实现50%的占空比,需要分别设置上升沿和下降沿触发的计数器,其核心思想是使用计数范围为[0, (N-1)/2]和[0, (N-1)]的计数器,各自输出当前有效沿下的时钟,最后将二者或起来,得到最终输出的时钟信号。
五分频示意图

3.代码文件说明
分频器的代码并不难,网上多数是奇偶分频分开写的代码,按照电路结构去理解,分频器分为奇偶数两个module是比较理想的。如果把奇偶两个模块写到一个module中,则会导致输出经过较多的逻辑电路,而且每次调用都会用上奇偶分频的全部模块,会浪费很多资源。调用本次代码时,只需例化Div.v,本次代码得到的都是 占空比为50% 的时钟。
| 名字 | 说明 |
|---|---|
| div_even.v | 偶数分频module |
| div_odd.v | 奇数分频module |
| Div.v | 例化奇偶分频module的顶层 |
4.端口说明
仅以Div.v这个module来说明:
| 名字 | 类型 | 说明 |
|---|---|---|
| fre_div | parameter | 分频数 |
| clk | input | 输入时钟 |
| rst_n | input | 复位 |
| clk_out | output | 输出时钟 |
5.测试&波形
为了进行测试,写了一个TOP文件:
//-----------------------------------------------------------------------------------------------
// Copyright :
// File Name : TOP
// Author : Luk.wj
// Data : 2021.10.14
// Description : TOP file for test
//-----------------------------------------------------------------------------------------------
module TOP #(
parameter fre_div = 4 //frequency division
) (
input clk,
input rst_n,
output clk_out
);
Div#(
.fre_div ( fre_div )
)u1_Div(
.clk ( clk ),
.rst_n ( rst_n ),

本文详细介绍了FPGA中偶数和奇数分频的设计原理,包括50%占空比的实现方法,并提供了对应的Verilog代码实现。通过模块化设计,实现了根据分频数自动选择奇偶分频器的功能。测试与波形验证了四分频的正确性,同时也指出调整参数即可适应不同分频需求。

3163

被折叠的 条评论
为什么被折叠?



