数字IC秋招手撕代码(二)50%占空比的三分频

  • 题目
  • 设计思路
    • 与逻辑分频
    • 代码
    • 或逻辑分频
    • 代码
    • 异或逻辑分频
    • 代码

题目

用verilog实现三分频电路,要求输出50%占空比

设计思路

如果不限制占空比50%的话,那么用counter做3进制计数,每次counter=1拉高,counter=2拉低即可,但是这样的占空比是1/3。
如果要做50占空比的三分频,则需要一个上升沿的六分频和一个下降沿的六分频组合来得到。
类似的奇分频都可以这样实现。
大致有三种组合方式都可以得到:

  1. 异或

后续将上升沿采样记为clk_pos,下降沿采样记为clk_neg

与逻辑分频

  • 用与逻辑来组合,需要clk_pos和clk_neg拉高2T,但是其本身有0.5T的时序差
  • 那么在cnt=0时,clk_pos拉高2拍
  • cnt=0时,clk_neg拉高2拍
  • 最后clk_pos & clk_neg 即为分频结果

下面是理论波形图方便理解。

代码

module div_and #(parameter n=5)
(input       clk,input       rstn,output      clk_div);reg     [15:0]  cnt;
reg             clk_pos,clk_neg;assign clk_div = clk_pos & clk_neg;always @(posedge clk or negedge rstn)beginif(!rstn)cnt <= 0;else if(cnt==n-1)cnt <= 0;else cnt <= cnt + 1;
end         always @(posedge clk or negedge rstn)beginif(!rstn)clk_pos <= 1'b0;else if(cnt==n-1)clk_pos <= 1'b1;else if(cnt==(n>>1))clk_pos <= 1'b0;
endalways @(negedge clk or negedge rstn)beginif(!rstn)clk_neg <= 0;else if(cnt==n-1)clk_neg <= 1'b1;else if (cnt==(n>>1))clk_neg <= 1'b0;
end endmodule

或逻辑分频

  • 用或逻辑来组合,需要clk_pos和clk_neg只拉高1T,但是其本身有0.5T的时序差
  • 那么在cnt=2时,clk_pos拉高1拍
  • cnt=2时,clk_neg拉高1拍
  • 最后clk_pos | clk_neg 即为分频结果

下面是理论波形图方便理解。

代码

module div_or #(parameter n=3)
(input       clk,input       rstn,output      clk_div);reg     [15:0]  cnt;
reg             clk_pos,clk_neg;assign clk_div = clk_pos | clk_neg;always @(posedge clk or negedge rstn)beginif(!rstn)cnt <= 0;else if(cnt==n-1)cnt <= 0;else cnt <= cnt + 1;
end         always @(posedge clk or negedge rstn)beginif(!rstn)clk_pos <= 1'b0;else if(cnt==n-1)clk_pos <= 1'b1;elseclk_pos <= 1'b0;
endalways @(negedge clk or negedge rstn)beginif(!rstn)clk_neg <= 0;else if(cnt==n-1)clk_neg <= 1'b1;else clk_neg <= 1'b0;
end endmodule

异或逻辑分频

  • 用异或逻辑来将两个六分频组合成三分频原理很简单,因为异或是相同为0,不同为1 所以需要将上升沿与下降沿差一半再翻转
  • 如果上升沿在cnt=2时翻转,那么下降沿应该在cnt=1翻转
  • 这样cnt带来了1T的时序差
  • 而上升沿和下降沿自带0.5T的时序差。

下面是理论波形图方便理解。

代码

module div #(parameter n=3)
(input       clk,input       rstn,output      clk_div);reg     [15:0]  cnt;
reg             clk_pos,clk_neg;assign clk_div = clk_pos ^ clk_neg;always @(posedge clk or negedge rstn)beginif(!rstn)cnt <= 0;else if(cnt==n-1)cnt <= 0;else cnt <= cnt + 1;
end         always @(posedge clk or negedge rstn)beginif(!rstn)clk_pos <= 0;else if(cnt==n-1)clk_pos <= ~clk_pos;
endalways @(negedge clk or negedge rstn)beginif(!rstn)clk_neg <= 0;else if(cnt==(n>>1))clk_neg <= ~clk_neg;
end endmodule

搜索关注我的微信公众号【IC墨鱼仔】,获取我的更多IC干货分享!

数字IC秋招手撕代码(二)50%占空比的三分频相关推荐

  1. 2021年oppo哲库数字IC岗位手撕代码真题(含:握手信号、自动售卖机、序列发生器、根据RTL写verilog)

    大家好,最近汇总了2021年oppo哲库招聘手撕代码题目,本文章一共含有以下几个题目: 一,使用握手信号实现跨时钟域数据传输(verilog) 二,自动售卖机(verilog) 三,序列发生器(ver ...

  2. 秋招手撕代码:4bit转换为1bit,且是慢时钟域到快时钟域

    /2021.08.05修改 今天和一个朋友讨论这个题,发现我之前写的代码存在两个问题:第一,不能直接对多bit数据进行打两拍:第二,这个写法,没有考虑到clk_out是clk_in的四倍及其以上,所以 ...

  3. 数字IC面试手撕代码(一)

    1.最近看别人有面试说遇到这样一个问题.用状态机实现类似序列检测的题目:生成01011011101111-依次类推.针对这个问题,我设计如下的三段式状态机代码,用了4个状态,2个计数器. 设计之初,本 ...

  4. 秋招手撕代码:verilog实现常规8-3编码器和优先级8-3编码器

    1.常规的8-3编码器(一次输入只有一个1) //8-3编码器:常规8-3编码器,每次的输入只有1个1,编码输出结果为1所处的位置module encoder( input D0, input D1, ...

  5. 2021年数字IC秋招总结

    2021年数字IC秋招总结 欢迎各位想来 瑞晟微电子的将简历,带上以下信息: 姓名-学校-岗位 身份证号+邮箱 发到以下邮箱: 436090083@qq.com 我会在瑞晟微电子开始招聘的第一时间进行 ...

  6. 老学姐2021年数字IC秋招复盘

    本着学习交流的目的,写了下面的内容,希望大家都能拿到心仪的offer. 1. 秋招变春招? 从我个人经历来说是这样的,因为今年很多企业六七月份就开始提前批了,而我六七月还在做项目,等我开始的时候,发现 ...

  7. 算法手撕代码46~50

    深度学习/机器视觉/数字IC/FPGA/算法手撕代码目录总汇 目录 1.二叉搜索树的第k个节点 2.两个栈实现队列 3.青蛙跳台阶

  8. 数字IC秋招---笔试记录

    2022年7月更新!!! 1.组合逻辑电路的冒险现象是由于()引起的? 2.芯片制造中,工艺节点28nm,12nm,7nm的含义? 3.哈佛结构和冯诺依曼结构? https://blog.csdn.n ...

  9. 2022届FPGA/数字IC秋招笔试面试汇总帖(题目来源:FPGA探索者)

    目录 001--什么是STA静态时序分析,有什么作用? 具有代表性的STA工具: 静态时序分析STA: (1)setup time (2)hold time (3)STA 的时序路径 (4)recov ...

最新文章

  1. 人工智能和机器学习技术推动企业发展
  2. 删除目录下大量小文件和清空大文件
  3. 5G NGC — AUSF 鉴权服务功能
  4. hdu4277 DFS+SET
  5. 【Groovy】Groovy 扩展方法 ( Groovy 扩展方法引入 | 分析 Groovy 中 Thread 类的 start 扩展方法 )
  6. c语言操作空间怎么打开_学好C语言,离大神更近一步,C环境的安装
  7. 无盘服务器为什么重启还原,无盘站反复重启怎么办
  8. Data Poisoning Attacks to Deep Learning Based Recommender Systems论文解读
  9. python买卖股票_用Python买卖股票III的最佳时间
  10. Linux环境SOCKET编程1:套接字
  11. matlab 韩明距离_科学网—Matlab中 pdist 函数详解(各种距离的生成) - 朱新宇的博文...
  12. python 视频文件格式和分辨率转换
  13. 暗金色 rgb_杜伽TAURUS K310樱桃RGB红轴体验:做工精良、手感优秀
  14. Excel怎么换行?简单!Excel大神教会了我N种换行方法
  15. 贷超分销系统的模式!
  16. Three.js加载动画模型并控制播放
  17. 电脑版微信聊天记录和小程序视频播放黑屏,但有声音,qq和其浏览器视频播放正常。如何解决?
  18. 华为鸿蒙arm,华为亮大招:鸿蒙系统+5G万物互联+1亿 掌握ARM架构修改
  19. element-ui upload 上传组件附带额外参数进行上传(表单形式,多个参数)
  20. 管理运筹学软件计算机解咋看,管理运筹学-线性规划的计算机求解ppt课件.ppt

热门文章

  1. SpringBoot项目解决@ResponseBody注解返回xml格式数据而不是json格式的问题
  2. PDF文件如何快速转换成Word文件?两个方法教你搞定
  3. python编程趣味试题_Python趣味编程-中国大学mooc-试题题目及答案
  4. 六、文件管理(1.文件和文件系统)
  5. 基于J2EE人事考勤管理系统设计与实现(论文+项目源码) 运行环境: idea ,maven,mysql
  6. 刷脸支付就是会员为大商户管理与运营提供帮助
  7. 异步爬取有道词典(入门js逆向)
  8. PySpark——开启大数据分析师之路
  9. 2011 信义聚会记实
  10. msfvenom生成木马攻击-Windows10实现自己黑自己