16 分频 32 分频是啥意思_一天一个设计实例任意分频器设计
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
端口名 | 位宽 | 输入/输出 | 说明 |
clk | 1 | Input | 全局时钟信号 |
rst_n | 1 | Input | 全局复位信号 |
divide_clk | 1 | Output | 分频时钟信号 |
divide_clken | 1 | Output | 使能时钟信号 |
(2)相位计数器-32位K步计数器,如下所示:代码1‑632位K步计数器
1.//------------------------------------------------------ 2.//RTL1: Precise fractional frequency for uart bps clock 3.reg [31:0] cnt; 4.always@(posedge clk or negedge rst_n) 5.begin 6. if(!rst_n) 7. cnt <= 0; 8. else 9. cnt <= cnt + DEVIDE_CNT; 10.end |
如上所示,在全局时钟驱使下,进行K步计数,cnt可以理解为0~232-1的地址。类似于AD9850,可以通过计数器来实现跳跃寻址。其中DEVICE_CNT是一个在接口中经过宏定义的16倍波特率(9600x16)的分频参数,方便文件在例化时可以直接修改分频参数。(3)合成频率:方波的生成在上一步完成0~232-1寻址后,需要对地址进行比较、划分,得到一个方波信号。这类似于AD9850内部的比较器,通过输出的正弦波于门限电压做比较,得到一定频率下的方波。这里设计的Verilog HDL代码如下:代码1‑7方波的生成
1.//------------------------------------------------------ 2.//RTL2: Equal division of the Frequency division clock 3.reg cnt_equal; 4.always@(posedge clk or negedge rst_n) 5.begin 6. if(!rst_n) 7. cnt_equal <= 0; 8. else if(cnt 9. cnt_equal <= 0; 10. else 11. cnt_equal <= 1; 12.end |
32’h7FFF_FFFF为232-1的中点,因此它可以作为“门限电压”,来实现合成频率后的方波输出。(4)分频时钟使能信号的生成。在FPGA中,除了全局时钟外,不允许用其他门控时钟来驱动电路,不然不易于综合电路,而且也无法保证电路的稳定性。因此,为了便于后续模块的调用,需要生成使能时钟信号。这里采用 “边沿检测技术”。代码如下:代码1‑8分频时钟使能信号的生成
1.//------------------------------------------------------ 2.//RTL3: Generate enable clock for clock 3.reg cnt_equal_r; 4.always@(posedge clk or negedge rst_n) 5.begin 6. if(!rst_n) 7. cnt_equal_r <= 0; 8. else 9. cnt_equal_r <= cnt_equal; 10.end 11.assign divide_clken = (~cnt_equal_r & cnt_equal) ? 1'b1 : 1'b0; 12.assign divide_clk = cnt_equal_r; |
这个分频器在后续使用中会慢慢验证,在此不会进验证(其实本人已经验证过了),有兴趣的可以自己编写程序进行验证。 |
完整的代码及调用方式如下代码1‑9完整的任意分频器设计代码
1.//****************************************************************************// 2.//# @Author: 碎碎思 3.//# @Date: 2017-04-22 16:50:30 4.//# @Last Modified by: zlk 5.//# @WeChat Official Account: OpenFPGA 6.//# @Last Modified time: 2017-04-22 09:19:50 7.//# Description: 8.//# @Modification History: 2017-04-22 09:19:50 9.//# Date By Version Change Description: 10.//# ========================================================================= # 11.//# 2017-04-22 09:19:50 12.//# ========================================================================= # 13.//# | | # 14.//# | OpenFPGA | # 15.//****************************************************************************// 16.`timescale 1ns/1ns 17.module precise_divider 18.#( 19. //DEVIDE_CNT = 42.94967296 * fo 20.// parameter DEVIDE_CNT = 32'd175921860 //256000bps * 16 21.// parameter DEVIDE_CNT = 32'd87960930 //128000bps * 16 22.// parameter DEVIDE_CNT = 32'd79164837 //115200bps * 16 23. parameter DEVIDE_CNT = 32'd6597070 //9600bps * 16 24.) 25.( 26. //global clock 27. input clk, 28. input rst_n, 29. 30. //user interface 31. output divide_clk, 32. output divide_clken 33.); 34. 35.//------------------------------------------------------ 36.//RTL1: Precise fractional frequency for uart bps clock 37.reg [31:0] cnt; 38.always@(posedge clk or negedge rst_n) 39.begin 40. if(!rst_n) 41. cnt <= 0; 42. else 43. cnt <= cnt + DEVIDE_CNT; 44.end 45. 46.//------------------------------------------------------ 47.//RTL2: Equal division of the Frequency division clock 48.reg cnt_equal; 49.always@(posedge clk or negedge rst_n) 50.begin 51. if(!rst_n) 52. cnt_equal <= 0; 53. else if(cnt 54. cnt_equal <= 0; 55. else 56. cnt_equal <= 1; 57.end 58. 59.//------------------------------------------------------ 60.//RTL3: Generate enable clock for clock 61.reg cnt_equal_r; 62.always@(posedge clk or negedge rst_n) 63.begin 64. if(!rst_n) 65. cnt_equal_r <= 0; 66. else 67. cnt_equal_r <= cnt_equal; 68.end 69.assign divide_clken = (~cnt_equal_r & cnt_equal) ? 1'b1 : 1'b0; 70.assign divide_clk = cnt_equal_r; 71. 72. 73.endmodule |
代码1‑10调用完整的任意分频器设计代码示例
1.wire divide_clken; 2.precise_divider 3.#( 4. //DEVIDE_CNT = 42.94967296 * fo 5. 6.// .DEVIDE_CNT (32'd175921860) //256000bps * 16 7.// .DEVIDE_CNT (32'd87960930) //128000bps * 16 8.// .DEVIDE_CNT (32'd79164837) //115200bps * 16 9. .DEVIDE_CNT (32'd6597070) //9600bps * 16 10.) 11.u_precise_divider 12.( 13. //global 14. .clk (clk_ref), //100MHz clock 15. .rst_n (sys_rst_n), //global reset 16. 17. //user interface 18. .divide_clk (divide_clk), 19. .divide_clken (divide_clken) 20.); |
推荐阅读
一天一个设计实例-Xilinx FPGA和Intel FPGA区别
一天一个设计实例-Xilinx FPGA主流芯片选型
一天一个设计实例-Intel FPGA主流芯片选型
一天一个设计实例-Intel FPGA主流芯片命名规则
一天一个设计实例-Xilinx FPGA命名规则
一天一个设计实例-FPGA开源网站和论坛
一天一个设计实例-FPGA设计流程
一天一个设计实例-PLL、DLL、DCM区别及应用
一天一个设计实例-计数器设计
一天一个设计实例-门控时钟和使能时钟
点击上方字体就可以阅读哟
最强理解
转了吗
赞了吗
在看吗
16 分频 32 分频是啥意思_一天一个设计实例任意分频器设计相关推荐
- 16 分频 32 分频是啥意思_Verilog中任意分频的实现
在这里讲的是利用计数器进行对clk分频,在rtl code 设计中,由于各个ip的时钟频率不同,所以我们经常要对系统clk进行分频,下面是它的代码以及要实现的功能. //功能:对输入时钟clock进行 ...
- 16 分频 32 分频是啥意思_Verilog 数字分频器的设计及验证
1.分频器的概念及应用 分频器是指使输出信号频率为输入信号频率整数分之一的电子电路.在许多电子设备中如电子钟.频率合成器等,需要各种不同频率的信号协同工作,常用的方法是以稳定度高的晶体振荡器为主振源, ...
- 16 分频 32 分频是啥意思_CD4017是什么?十进制计数器分频器CD4017的逻辑功能呢?...
一.CD4017功能概述 CD4017是5位Johnson十进制计数器分频器,时钟输入端的斯密特触发器具有脉冲整形功能,对输入时钟脉冲上升和下降时间无限制,CD4017 提供了16 引线多层陶瓷双列直 ...
- arduino点阵声音频谱_音频跳动:制造32分频音频频谱点阵
MAKER:Shajeeb/ 译:趣无尽 该项目通过 Arduino 和四块点阵屏,实现32分频的音频(音乐)频谱可视化显示. 这里用了大量篇幅对其原理做了解释(初学者理解起来开可能稍有难度),并且提 ...
- arduino点阵声音频谱_创客实战 | 制作一个随音乐跳动的32分频音频频谱显示器
前言 这期作品是通过 Arduino 和四块LED点阵模块,实现32分频的音频频谱可视化显示,让LED随音乐跳动! 主要特点 1.使用简易安装的库 ArduinoFFT 和 MD_MAX72xx.2. ...
- arduino点阵声音频谱_Arduino实现32分频音频频谱显示器
MAKER:Shajeeb/译:趣无尽 Cherry(转载请注明出处) 该项目通过 Arduino 和四块点阵屏,实现32分频的音频(音乐)频谱可视化显示. 这里用了大量篇幅对其原理做了解释(初学者理 ...
- 千元打造双千兆4盘位16核32线程家庭nas服务器,满足你的家庭 all in one方案!
2023年 高性能框框之王! 小体积4盘位双千兆网卡 就是这么强! 更多NAS or 黑群晖方案 访问DIYNAS:DIYNAS - 家庭服务器构建基地,快速打造你的智能家庭生态圈! 介绍 在科技飞速 ...
- ASP.Net中MD5加密-16位32位
public string md5(string str,int code) { if(code==16) //16位MD5加密(取32位加密的9~25字符) { return System.Web. ...
- 16位/32位中断机制比較
16位/32位中断机制比較 原理: 16位中断机制:使用中断向量表 32位中断机制:使用中段描写叙述符表IDT 位置: 中断向量表的位置是固定的,位于内存的開始0x00000 中断向量符表位置不固定, ...
- 外设位宽为8、16、32时,CPU与外设之间地址线的连接方法
有不少人问到: flash连接CPU时,根据不同的数据宽度,比如16位的NOR FLASH (A0-A19),处理器的地址线要(A1-A20)左移偏1位.为什么要偏1位? 从软件和CPU的角度而言,一 ...
最新文章
- python 服务器端_python实现服务器端
- Eclipse设置背景色、字体大小
- AGI:走向通用人工智能的【生命学哲学科学】第二篇——思维、生命科学、客观世界
- XML基本知识(三)
- Linux DNS | resolv.conf 配置dns解析,重启network丢失
- mysql root 注入_sql注入入门之mysqlroot权限下的注入利用方式
- [csu/coj 1632]LCP
- Jfinal的七牛云存储插件:qiniuPlugin for jfinal.
- 中国互联网公司大盘点
- html 广告弹窗代码,广告弹窗.html
- Java Email——使用Java程序收发电子邮件
- 基于华为云服务器Docker nginx安装和配置挂载
- 时光飞逝,思考,实践,伴我一生的经验
- java—员工的工资
- 帮我写一篇,3000字的关于对外汉语线上教学平台的论文
- 6.3.2 延迟操作与延迟缓存
- matlab把向量转化为矩阵,MATLAB小函数:将列向量转化为0-1矩阵
- 【Office】Excel如何导出宏
- Mysql读写分离插件简化版
- 2008年4月计算机网络原理答案,全国2008年4月高等教育自学考试4741计算机网络原理试题及答案...