三分频电路设计

ops/2024/11/17 4:22:26/

文章目录

  • 偶数分频
    • 二分频
    • 更大的2N偶数
  • 奇数分频
    • 三分频

偶数分频

通常情况下,偶数倍分频器,可以借助计数器实现。

二分频

最简单的,二分频时,直接把输入时钟加到D触发器上,输出端Q取反后,接回输入D端,就可以了。参考代码如下。

module clk_div(input       i_clk       ,output      o_clk_div   
);
reg ro_clk_div = 0 ;
assign o_clk_div = ro_clk_div;
always @(posedge i_clk) beginro_clk_div <= ~ro_clk_div;
end
endmodule

更大的2N偶数

其余2N倍数分频时,就需要借助计数器。举例,4分频时,1个输出时钟周期内,有4个输入时钟,按照50%的占空比算,输出时钟需要在4/2=2个时钟周期处翻转。

可以产生一个 0 1 0 1 的循环计数器,计数器到1,翻转输出即可,参考代码。

module clk_div(input       i_clk       ,output      o_clk_div   
);
reg ro_clk_div = 0 ;
reg [1:0] r_cnt = 0;
assign o_clk_div = ro_clk_div;
always @(posedge i_clk) beginif(r_cnt == 2-1)r_cnt <= 0;elser_cnt <= r_cnt + 1;
end
always @(posedge i_clk) beginif(r_cnt == 2-1)ro_clk_div <= ~ro_clk_div;
end
endmodule

更具一般性的,4分频计数两个数,2N分频计数2N>>1个数,又由于计数器从0开始,则有:(2N>>1)-1 通式

module clk_div #(parameter P_DIV_NUM = 6
)
(input       i_clk       ,output      o_clk_div   
);
reg ro_clk_div = 0 ;
reg [1:0] r_cnt = 0;
assign o_clk_div = ro_clk_div;
always @(posedge i_clk) beginif(r_cnt == (P_DIV_NUM>>1)-1)r_cnt <= 0;elser_cnt <= r_cnt + 1;
end
always @(posedge i_clk) beginif(r_cnt == (P_DIV_NUM>>1)-1)ro_clk_div <= ~ro_clk_div;
end
endmodule

至此,偶数倍分频都实现了。

奇数分频

三分频

三分频是面试、笔试高频问题。

如果只考虑信号在上升沿发生变化,3分频会有几种情况呢?

高电平:低电平
1 :2
2:1
两种而已,图示如下。
在这里插入图片描述

这种占空比非50%的是比较好实现的,只需要一个0~2的循环计数器即可

//1:2
module clk_div(input       i_clk       ,output      o_clk_div   
);
reg ro_clk_div = 0 ;
reg [1:0] r_cnt = 0 ;
assign o_clk_div = ro_clk_div;
always @(posedge i_clk) beginif(r_cnt == 2)r_cnt <= 0;elser_cnt <= r_cnt + 1;
end
always @(posedge i_clk) beginif(r_cnt == 0 || r_cnt==1)ro_clk_div <= ~ro_clk_div;
end
endmodule//2:1
module clk_div(input       i_clk       ,output      o_clk_div   
);
reg ro_clk_div = 0 ;
reg [1:0] r_cnt = 0 ;
assign o_clk_div = ro_clk_div;
always @(posedge i_clk) beginif(r_cnt == 2)r_cnt <= 0;elser_cnt <= r_cnt + 1;
end
always @(posedge i_clk) beginif(r_cnt == 0 || r_cnt==2)ro_clk_div <= ~ro_clk_div;
end
endmodule

如果是占空比50%的三分频呢?图示如下。一定会用到下降沿。
借鉴上面非50%占空比的思路,还是用计数器实现。
在这里插入图片描述
考虑两个时钟 或 运算,得到输出三分频时钟。
参考代码:

module clk_div(input       i_clk       ,output      o_clk_div   
);
reg ro_clk_div = 0 ;
reg [1:0] r_cnt = 0 ;reg clk1 = 0 , clk2 = 0 ;assign o_clk_div = clk1 | clk2;always @(posedge i_clk) beginif(r_cnt == 2)r_cnt <= 0;elser_cnt <= r_cnt + 1;
endalways @(posedge i_clk) beginif(r_cnt == 0 || r_cnt == 1)clk1 <= !clk1;
endalways @(negedge i_clk) beginif(r_cnt == 1 || r_cnt == 2)clk2 <= !clk2;
end
endmodule

这里clk2的变化是根据下降沿来的,数据稳定,建立时间、保持时间都能满足,所以在时钟沿立即就能变化,不会出现打一拍的现象。
而clk1的变化会有打一拍的现象。
在这里插入图片描述
另一种低翻转率的三分频。

module clk_div(input       i_clk       ,output      o_clk_div   
);
reg ro_clk_div = 0 ;
reg [1:0] r_cnt = 0 ;reg clk1 = 0 , clk2 = 0 ;assign o_clk_div = clk1 ^ !clk2;always @(posedge i_clk) beginif(r_cnt == 2)r_cnt <= 0;elser_cnt <= r_cnt + 1;
endalways @(posedge i_clk) beginif(r_cnt == 2)clk1 <= !clk1;
endalways @(negedge i_clk) beginif(r_cnt == 1)clk2 <= !clk2;
end
endmodule

在这里插入图片描述


http://www.ppmy.cn/ops/134331.html

相关文章

【Qt聊天室客户端】消息功能--发布程序

1. 获取文件内容 主要目标是实现获取内容二进制数据的接口&#xff0c;主要是为后面的消息功能提供服务 具体实现 客户端发送请求 服务端处理请求&#xff0c;同时支持三种数据类型 客户端处理服务端的响应 2. 发送图片消息 客户端与服务端的通信约定 客户端从服务器中获取图片…

Shell基础2

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团…

【freertos】FreeRTOS时间管理

FreeRTOS时间管理 一、睡眠延时函数1、vTaskDelay2、vTaskDelayUntil3、相对延时与绝对延时对比 二、自定义延时函数1、微秒延时2、毫秒延时 一、睡眠延时函数 1、vTaskDelay \quad 在UCOSIII 中延时函数OSTimeDly()可以设置为三种模式:相对模式、周期模式和绝对模式。在FreeR…

【Three.js基础学习】24. shader patterns

前言 课程回顾: ShaderMaterial 这里用的是着色器材质 所以顶点和片段着色器就不需要像原始着色器那样添加需要的属性 然后写 片段着色器需要属性 &#xff1a; 顶点 属性 -》变化 -》 片段中 顶点中的属性不需要声明 只需要声明传送的变量 例如 varying vec vUv; vUv uv; 补充…

量子前沿英雄谱|光量子计算的前沿探险家:Jeremy O‘Brien

大航海时代&#xff0c;书写了一部人类探索与发现的壮丽史诗&#xff0c;而作为宏大叙事背后若干个体之一&#xff0c;那些大大小小航船上载着的&#xff0c;是一群不断航向未知海域的坚定探险家。 日光底下无新事。从著名物理学家费曼提出量子计算机的概念起 ... 大航海时代&a…

RK3568平台开发系列讲解(GPIO篇)GPIO的sysfs调试手段

🚀返回专栏总目录 文章目录 一、内核配置二、GPIO sysfs节点介绍三、命令行控制GPIO3.1、sd导出GPIO3.2、设置GPIO方向3.3、GPIO输入电平读取3.4、GPIO输出电平设置四、Linux 应用控制GPIO4.1、控制输出4.2、输入检测4.3、使用 GPIO 中断沉淀、分享、成长,让自己和他人都能有…

241115

A 自闭 考虑到每列每行的差值一定&#xff0c;就考虑排序后使用暴力判断去了 一看标签还带个图论 一开始想向图论方向思考&#xff0c;发现直接爆空间了&#xff0c;时间两说 结果是用并查集维护插值相同的连通块 寄了 C 字符串距离 看我 n 2 m n^2m n2m巨型复杂度直接拿…

前海华海金融创新中心的工地餐点探寻

​前海的工地餐大部分都是13元一份的哈。我在前海华海金融创新中心的工地餐点吃过一份猪杂饭&#xff0c;现做13元一份。我一般打包后回公司吃或直接桂湾公园找个环境优美的地方吃饭。 ​我点的这份猪杂汤粉主要是瘦肉、猪肝、肉饼片、豆芽和生菜&#xff0c;老板依旧贴心问需要…