数字IC手撕代码-分频器(任意偶数分频)
前言:
本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析、代码及波形,所有代码均经过本人验证。
目录如下:
1.数字IC手撕代码-分频器(任意偶数分频)
2.数字IC手撕代码-分频器(任意奇数分频)
3.数字IC手撕代码-分频器(任意小数分频)
4.数字IC手撕代码-异步复位同步释放
5.数字IC手撕代码-边沿检测(上升沿、下降沿、双边沿)
6.数字IC手撕代码-序列检测(状态机写法)
7.数字IC手撕代码-序列检测(移位寄存器写法)
8.数字IC手撕代码-半加器、全加器
9.数字IC手撕代码-串转并、并转串
10.数字IC手撕代码-数据位宽转换器(宽-窄,窄-宽转换)
11.数字IC手撕代码-有限状态机FSM-饮料机
12.数字IC手撕代码-握手信号(READY-VALID)
13.数字IC手撕代码-流水握手(利用握手解决流水线断流、反压问题)
14.数字IC手撕代码-泰凌微笔试真题
15.数字IC手撕代码-平头哥技术终面手撕真题
16.数字IC手撕代码-兆易创新笔试真题
17.数字IC手撕代码-乐鑫科技笔试真题(4倍频)
18.数字IC手撕代码-双端口RAM(dual-port-RAM)
...持续更新
为了方便可以收藏导览博客: 数字IC手撕代码-导览目录
目录
什么是分频
偶数分频
代码
testbench
波形
什么是分频
分频就是生成一个新时钟,该新时钟的频率是原有时钟频率的整数分之一倍,新周期是原有周期的整数倍。
再简单来说,让你手撕一个四分频电路,就是写代码生成一个周期是原来四倍的时钟,如果手撕一个三分频电路,就是写代码生成一个周期是原来三倍的时钟。
如上图所示,就是一个四分频电路的波形,四分频后,新的clk_out的频率是原来的1/4,也即周期是原来的4倍,从图中可以看到,clk每过4个周期,clk_out过1个周期。
同理三分频也一样,但是奇数分频会比偶数分频复杂一些,在奇数分频部分会讲。
偶数分频
我们先来讲偶数分频。逐步加大难度,先说二分频,怎么实现二分频呢?
答:检测参考时钟,每一个上升沿到来时,新的时钟翻转一次。即:
always @ (posedge clk or negedge rstn)
if (!rstn)
clk_out <= 1'b0; // 复位置零
else
clk_out <= !clk_out; // 否则q信号翻转
从图中可以看到,clk_out每过两个clk时钟上升沿就flip-flop一次,这样一个clk_out的周期就是clk周期的两倍,也即实现了二分频。
那如果是任意偶数分频呢,这就得数经过了多少上升沿,如果是四分频,那就每过两个时钟上升沿(两周期),新信号flip-flop一次,flip-flop两次为新信号的一个周期,即是周期是原时钟的四倍。同理,8分频就是每数4个上升沿,flip-flop一次,以此类推,可以实现任意偶数分频了。
下面拿8分频举例,贴出代码以及testbench:
代码
testbench
波形
从波形我们可以看到,clk每过4个时钟上升沿,clk_out 翻转一次,和设计的一样,在RTL文件中的 number 是可以修改的,可以改成任意偶数从而实现任意偶数分频(改为2也行,即每次时钟上升沿到来时,if语句一直满足,clk_out 翻转一次,每次时钟上升沿翻转一次,就是我们之前提到的二分频。)注意翻转的时间点是number/2-1!因为当cnt 是从0开始计数的,
当cnt == 3 时(八分频举例),cnt被重置到0,持续一个clk。
检测到上升沿,cnt再持续一个clk,cnt=1。
再检测到上升沿,cnt再持续一个clk,cnt=2。
再检测到上升沿,cnt再持续一个clk,cnt=3。
再检测到上升沿,此时cnt=3,cnt又被置零。
更加直观一些可以把cnt作为div_8这个module的输出信号,查看cnt随时间的变化值,找感觉。
占空比分析:我们上面写的任意偶数分频代码的占空比都是50%,实际上面试手撕代码不会让你50%占空比,那怎么办?
答:进行计数,对于一个八分频,开始就把时钟设为高电平,我用cnt 计数到两个时钟上升沿后再把它拉低,计数到7后cnt 拉低 时钟拉高,这样就实现了两个周期高,六个周期低,占空比为2/8 即 25% 的八分频。
数字IC手撕代码-分频器(任意偶数分频)相关推荐
- 【数字IC手撕代码】Verilog偶数分频|题目|原理|设计|仿真(二分频,四分频,六分频,八分频,偶数分频及特殊占空比)
芯片设计验证社区·芯片爱好者聚集地·硬件相关讨论社区·数字verifier星球 四社区联合力荐!近500篇数字IC精品文章收录! [数字IC精品文章收录]学习路线·基础知识·总线·脚本语言·芯片求职· ...
- 【数字IC手撕代码】Verilog奇数分频|题目|原理|设计|仿真(三分频,五分频,奇数分频及特殊占空比)
芯片设计验证社区·芯片爱好者聚集地·硬件相关讨论社区·数字verifier星球 四社区联合力荐!近500篇数字IC精品文章收录! [数字IC精品文章收录]学习路线·基础知识·总线·脚本语言·芯片求职· ...
- 数字IC手撕代码-兆易创新笔试真题
前言: 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC手撕代码-分频器(任意偶数分频) 2.数字IC手 ...
- 数字IC手撕代码-流水握手(利用握手解决流水线断流、反压问题)
前言: 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC手撕代码-分频器(任意偶数分频) 2.数字IC手 ...
- 数字IC手撕代码-乐鑫科技笔试真题(4倍频)
前言: 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC手撕代码-分频器(任意偶数分频) 2.数字IC手 ...
- 数字IC手撕代码-同步FIFO
前言: 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC手撕代码-分频器(任意偶数分频) 2.数字IC手 ...
- 数字IC手撕代码-边沿检测(上升沿、下降沿、双边沿)
前言: 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC手撕代码-分频器(任意偶数分频) 2.数字IC手 ...
- 数字IC手撕代码---百题斩
前言: 本篇导览目录,用来索引笔者写的其他手撕代码文章 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC ...
- 数字IC手撕代码-有限状态机FSM-饮料机
前言: 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC手撕代码-分频器(任意偶数分频) 2.数字IC手 ...
最新文章
- JIRA与Confluence的安装与集成(4)
- java中需要用equals来判断两个字符串值是否相等
- bundle 的生成和使用
- python 钉钉机器人自定义发送文件_Python自定义钉钉机器人发送自动化结果报告...
- 电力系统通信站和设备管理系统分析设计
- java检测安卓程序退出_java-我的Android应用程序的gameLoop线程在退出...
- 7.分布式数据库HBase第3部分
- 计算机视觉与深度学习 | 检测和测量图像中的圆形目标(数钢筋)
- 截获所有以太网帧数据并进行具体分析
- Pandas 统计分析基础 笔记4 任务4.4 使用分组聚合进行组内计算
- [分享]iOS开发-如何使用tabBarController
- 商务搜索引擎_网络营销外包——网络营销外包公司如何做好电子商务网站优化?...
- Address already in use: JVM_Bind:8080类似问题解决方法
- php 微信表情存储,emoji表情存储到数据库的方法
- 功能测试Ⅷ——业务流程测试
- NetworkManager nmcli connection modify 笔记221025
- Bootstrap3基础 btn-primary/warning... 三类按钮的六种样式
- 怎么在node环境使用es6语法? bable有什么作用? 发布环境下移除console
- Win10深色模式和白天模式设置
- DFS.04-海贼王之伟大航路