前言:

本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析、代码及波形,所有代码均经过本人验证。

目录如下:

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手撕代码-分频器(任意偶数分频)相关推荐

  1. 【数字IC手撕代码】Verilog偶数分频|题目|原理|设计|仿真(二分频,四分频,六分频,八分频,偶数分频及特殊占空比)

    芯片设计验证社区·芯片爱好者聚集地·硬件相关讨论社区·数字verifier星球 四社区联合力荐!近500篇数字IC精品文章收录! [数字IC精品文章收录]学习路线·基础知识·总线·脚本语言·芯片求职· ...

  2. 【数字IC手撕代码】Verilog奇数分频|题目|原理|设计|仿真(三分频,五分频,奇数分频及特殊占空比)

    芯片设计验证社区·芯片爱好者聚集地·硬件相关讨论社区·数字verifier星球 四社区联合力荐!近500篇数字IC精品文章收录! [数字IC精品文章收录]学习路线·基础知识·总线·脚本语言·芯片求职· ...

  3. 数字IC手撕代码-兆易创新笔试真题

    前言: 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC手撕代码-分频器(任意偶数分频) 2.数字IC手 ...

  4. 数字IC手撕代码-流水握手(利用握手解决流水线断流、反压问题)

    前言: 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC手撕代码-分频器(任意偶数分频) 2.数字IC手 ...

  5. 数字IC手撕代码-乐鑫科技笔试真题(4倍频)

    前言: 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC手撕代码-分频器(任意偶数分频) 2.数字IC手 ...

  6. 数字IC手撕代码-同步FIFO

    前言: 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC手撕代码-分频器(任意偶数分频) 2.数字IC手 ...

  7. 数字IC手撕代码-边沿检测(上升沿、下降沿、双边沿)

    前言: 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC手撕代码-分频器(任意偶数分频) 2.数字IC手 ...

  8. 数字IC手撕代码---百题斩

    前言: 本篇导览目录,用来索引笔者写的其他手撕代码文章 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC ...

  9. 数字IC手撕代码-有限状态机FSM-饮料机

    前言: 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC手撕代码-分频器(任意偶数分频) 2.数字IC手 ...

最新文章

  1. JIRA与Confluence的安装与集成(4)
  2. java中需要用equals来判断两个字符串值是否相等
  3. bundle 的生成和使用
  4. python 钉钉机器人自定义发送文件_Python自定义钉钉机器人发送自动化结果报告...
  5. 电力系统通信站和设备管理系统分析设计
  6. java检测安卓程序退出_java-我的Android应用程序的gameLoop线程在退出...
  7. 7.分布式数据库HBase第3部分
  8. 计算机视觉与深度学习 | 检测和测量图像中的圆形目标(数钢筋)
  9. 截获所有以太网帧数据并进行具体分析
  10. Pandas 统计分析基础 笔记4 任务4.4 使用分组聚合进行组内计算
  11. [分享]iOS开发-如何使用tabBarController
  12. 商务搜索引擎_网络营销外包——网络营销外包公司如何做好电子商务网站优化?...
  13. Address already in use: JVM_Bind:8080类似问题解决方法
  14. php 微信表情存储,emoji表情存储到数据库的方法
  15. 功能测试Ⅷ——业务流程测试
  16. NetworkManager nmcli connection modify 笔记221025
  17. Bootstrap3基础 btn-primary/warning... 三类按钮的六种样式
  18. 怎么在node环境使用es6语法? bable有什么作用? 发布环境下移除console
  19. Win10深色模式和白天模式设置
  20. DFS.04-海贼王之伟大航路

热门文章

  1. 【Java编程进阶】封装继承多态详解
  2. [架构之路-150]-《软考-系统分析师》- 7-企业信息化战略与实施-7-软件集成技术
  3. 戴尔服务器R740-iDRAC管理卡远程安装系统
  4. 深度学习tensorflow之kaggle猫狗大战实现
  5. oracle中表的碎片化演示和整理步骤
  6. 相机投影模型以及畸变模型
  7. mysql 索引index_MySQL查询优化之 index 索引的分类和使用
  8. String 截取字符串最后一个字符,后边的值
  9. 好钢用在刀刃上--PowerBI Pro 是否值得买?
  10. R语言相关性分析函数和相关性检验函数