芯片设计验证社区·芯片爱好者聚集地·硬件相关讨论社区·数字verifier星球
四社区联合力荐!近500篇数字IC精品文章收录
【数字IC精品文章收录】学习路线·基础知识·总线·脚本语言·芯片求职·EDA工具·低功耗设计Verilog·STA·设计·验证·FPGA·架构·AMBA·书籍

Verilog偶数分频

  • 一、前言
  • 二、偶数分频题目
  • 三、偶数分频电路原理
    • 3.1 寄存器级联法
    • 3.2 计数器法
  • 四、寄存器级联法分频电路
    • 4.1 二分频|四分频|八分频RTL设计
    • 4.2 分频电路的Testbench
    • 4.3 仿真波形
    • 4.4 结果分析
  • 五、计数器法分频电路
    • 5.1 六分频RTL设计
    • 5.2 分频电路的testbench
    • 5.3 仿真波形
    • 5.4结果分析
  • 六、不需要满足50%占空比的偶数分频

一、前言

本系列旨在提供100%准确的数字IC设计/验证手撕代码环节的题目,原理,RTL设计,Testbench和参考仿真波形,每篇文章的内容都经过仿真核对。快速导航链接如下:

1.奇数分频
2.偶数分频
3.半整数分批
4.小数/分数分频
5.序列检测器
6.模三检测器
7.饮料机
8.异步复位,同步释放
9.边沿检测(上升沿,下降沿,双边沿)
10.全加器,半加器
11.格雷码转二进制
12.单bit跨时钟域(打两拍,边沿同步,脉冲同步)
13.奇偶校验
14.伪随机数生成器[线性反馈移位寄存器]
15.同步FIFO
16.无毛刺时钟切换电路

应当说,手撕代码环节是面试流程中既重要又简单的一个环节,跟软件类的岗位相比起来,数字IC的手撕代码题目固定,数量有限,属于整个面试中必得分的一个环节,在这个系列以外,笔者同样推荐数字IC求职者使用“HdlBits”进行代码的训练
链接如下
HDLBits — Verilog Practice

二、偶数分频题目

1.实现二分频电路,满足50%占空比。
2.实现四分频电路,满足50%占空比。
3.实现任意偶数分频,满足50%占空比。
4.实现任意偶数分频,不需要满足占空比。

三、偶数分频电路原理

3.1 寄存器级联法

寄存器级联法能实现2^N的偶数分频,具体是采用寄存器结构的电路,每当时钟上升沿到来的时候输出结果进行翻转,以此来实现偶数分频,具体的时序图如下所示

3.2 计数器法

计数器法可以实现任意偶数分频,以六分频为例,电路需要实现的是:计数器从0开始计数至2,当clock上升沿取到clock=2时,输出clock进行翻转,具体的时序图如下

若我们想实现任意任意偶数分频,如10/12分频,我们只需要将计数器的最大值设定为(10/2-1)或(12/2-1)或(N/2-1),既可以实现相关的分频电路

四、寄存器级联法分频电路

4.1 二分频|四分频|八分频RTL设计

module even_divide(clk,rst_n,clk2,clk4,clk8);input clk;
input rst_n;
output reg clk2;
output reg clk4;
output reg clk8;always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
clk2 <= 1'b0;
else
clk2 <= !clk2;
endalways@(posedge clk2 or negedge rst_n)
begin
if(!rst_n)
clk4 <= 1'b0;
else
clk4 <= !clk4;
endalways@(posedge clk4 or negedge rst_n)
begin
if(!rst_n)
clk8 <= 1'b0;
else
clk8 <= !clk8;
endendmodule

4.2 分频电路的Testbench

module even_divide_tb();reg clk;
reg rst_n;
wire clk2;
wire clk4;
wire clk8;even_divide u1(.clk(clk),.rst_n(rst_n),.clk2(clk2),.clk4(clk4),.clk8(clk8));always #5 clk = ~clk;initial
begin
clk = 0;
rst_n = 1;
#15 rst_n = 0;
#25 rst_n = 1;#300;
endendmodule

4.3 仿真波形

4.4 结果分析

可以发现,clk2为2分频电路输出,ck4为4分频电路输出,clk8为8分频电路输出,结果满足需求

五、计数器法分频电路

5.1 六分频RTL设计

module odd_divide(clk,rst_n,clk6);input clk;
input rst_n;
output reg clk6;parameter N = 3'd6;
reg [2:0] count;always@(posedge clk or negedge rst_n)
begin
if(!rst_n | count == N/2 -1)
count <= 3'd0;
else
count <= count + 1'd1;
endalways@(posedge clk or negedge rst_n)
begin
if(!rst_n)
clk6 <= 3'b0;
else if (count == N/2-1)
clk6 <= ~clk6;
else
clk6 <=  clk6;
end
endmodule

5.2 分频电路的testbench

`timescale 1ns/ 1ps
module odd_divide_tb();reg clk;
reg rst_n;
wire clk6;odd_divide u1(.clk(clk),.rst_n(rst_n),.clk6(clk6));always #5 clk = ~clk;initial
begin
clk = 0;
rst_n = 1;
#15 rst_n = 0;
#25 rst_n = 1;#300;
endendmodule

5.3 仿真波形

5.4结果分析

可以发现:所需六分频电路得到实现,此处略去count计数器,当其等于2的时候clk6实现翻转。

六、不需要满足50%占空比的偶数分频

通常来说,满足50%占空比的要求更严格,假如对于占空比没有要求,我们也可以使用状态机去来实现六分频电路

定义六个状态:状态0时clk的输出为0,状态1,2,3,4,5时clk的输出为1,也可以同样的实现六分频电路,以此类推,可以实现任意偶数分频的电路,并通过状态的输出为1,控制特殊占空比

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

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

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

  2. 数字IC手撕代码--小米科技(除法器设计)

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

  3. 数字IC手撕代码-泰凌微笔试真题

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

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

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

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

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

  6. 数字IC手撕代码-平头哥技术终面手撕真题

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

  7. 数字IC手撕代码-分频器(任意偶数分频)

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

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

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

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

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

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

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

最新文章

  1. 封装设置属性,一家人都要整整齐齐系列(1) JAVA泛型的实现原理
  2. Oracle DB 服务器 系统时间修改问题 与 SCN 关系的深入研究
  3. spoj 375 Query on a tree
  4. cobaltstrike安装_CobaltStrike + Metasploit 组合安装
  5. PPT 下载 | 神策数据张涛:企业服务客户全生命周期运营三步曲总览篇
  6. mysql常用的分组函数
  7. python3与Beautiful Soup库
  8. 洛谷P4319 变化的道路
  9. 进程间通信:消息队列概念及代码
  10. ASP.NET MVC 1.0 Result 几何?
  11. 从零开始学视觉Transformer(6):Swin Transformer-1
  12. Yii防注入***笔记
  13. 企业怎样才能开除一个股东?
  14. [转载] Python print输出不换行没空格
  15. Windows下命令(bat可用)
  16. Windows Phone 项目实战之账户助手
  17. 自动化系统扫描数字和文本OCR条形码控件字体
  18. 将哔哩哔哩手机端缓存视频导出为正常mp4视频.
  19. 海康威视摄像头rtsp推流至H5总结
  20. 美国大大学计算机排名2015,2015年美国计算机专业大学排名TOP20

热门文章

  1. Jenkins内存占用过高的问题
  2. MySQL英语不好能学吗_英语不好,我能学好编程语言吗
  3. 认识VF--Visual FoxPro 漫谈(轉)
  4. 微信小程序绘图canvas,绘制网络图片
  5. matlab 读取脉冲数,已知一段波形,求脉冲个数,用代码实现
  6. 如何准备OCP考试?
  7. 【OpenCV】Qt + OpenCV 开发配置 + 入门知识(代码示例)
  8. php 生成图片二维码
  9. STM32寻迹智能车
  10. python:查找兄弟单词