目录

前言

题目

二分频电路

第一步:画波形图

第二步:写状态机

三分频电路——1/3占空比

第一步:画波形图

第二步:写状态机

三分频电路——1/2占空比

第一步:画波形图

第二步:写状态机

4/5/6/7...分频电路

第一步:画波形图

总结


前言

最近又到了招聘季,招聘就离不开笔试面试,而在笔试面试过程中经常出现的一道题就是写出分频电路的verilog代码(以及电路图?),因此在这篇文章里,我们使用一个公式将所有分频电路套进去,以便于在考场上和仿真工具中轻松实现分频电路。

题目

实现2/3/4/5分频电路,给出一个模板:

module clk_div(reset,clk_in,clk_out)
input reset ;
input clk_in ;
output clk_out ;//#功能实现模块endmodule

二分频电路

第一步:画波形图

分频电路是将原始信号频率分成频率更小的衍生信号,信号频率变为二分之一,也就意味着周期变为2倍,因此直接将原本的2个周期所占用的时间现在变为一个周期,即可以生成一个二分频的信号。之所以采用波形图是因为波形图的直观性便于理解和思考,相对于抽象的代码和难以理解的电路图来说。

第二步:写状态机

按照三段式状态机的标准写法(以往文章有过介绍),写一个序列发生器,产生我们想要的信号。在二分频电路里,我们实际上是想实现重复的01信号的产生,这就是最简单的序列发生器。

//#功能实现模块
//三段式状态机//状态声明
parameter s0 = 0 ;
parameter s1 = 1 ;reg cs,ns
always@(posedge clk_in) beginif (reset)cs <= s0;elsecs <= ns;
end//状态改变
always@(*) begincase(cs)s0: ns = s1 ;s1: ns = s0 ;
end//输出
always@(*) begincase(cs)s0: clk_out = 0 ;s1: clk_out = 1 ;
end

在二分频电路中产生的是循环的01信号,所以状态机只需要2个状态。二分频电路就这样产生了,接下来看三分频。

三分频电路——1/3占空比

第一步:画波形图

如上图所示,三分频电路即就是将原始clk信号三个周期的时间,变为新信号clk_out_3的一个周期。我们常见的周期信号都是占空比1/2的信号,但是在上图中我们可以看到三分频电路可以分为两种,一种就是1/2占空比(1.5,1.5?),而另一种就是1/3占空比的三分频信号(001,010,100)。按照本文的公式,后者这种规则的循环序列信号很容易产生。由易向难,我们先看1/3占空比的三分频电路。

第二步:写状态机

//#功能实现模块
//三段式状态机//状态声明
parameter s0 = 0 ;
parameter s1 = 1 ;
parameter s2 = 2 ;reg [1:0]cs,nsalways@(posedge clk_in) beginif (reset)cs <= s0;elsecs <= ns;
end//状态改变
always@(*) begincase(cs)s0: ns = s1 ;s1: ns = s2 ;s2: ns = s0 ;
end//输出
always@(*) begincase(cs)s0: clk_out = 0 ;s1: clk_out = 0 ;s2: clk_out = 1 ;
end

要实现三分频电路,那么要产生的序列就是001或者010或100,此时状态机有三个状态,所以需要2位寄存器。简单的1/3占空比三分频电路实现后,现在来看1/2占空比的三分频电路。

三分频电路——1/2占空比

第一步:画波形图

如上图所示,clk_out_3_2即为上面的1/3占空比电路,而现在我们要生成1/2占空比的三分频电路clk_out_3,那么我们就需要在下降沿控制原始信号。但是我们无法使用下降沿和上升沿同时去控制一根信号,所以我们可以使用clk_in的下降沿产生一个010序列信号clk_out_3_1。接下来将clk_out_3_1和clk_out_3_2信号进行或[ | ]操作,即可得到1/2占空比的3分频信号clk_out_3。

第二步:写状态机

//#功能实现模块
//三段式状态机
//上升沿触发
//状态声明
parameter s0 = 0 ;
parameter s1 = 1 ;
parameter s2 = 2 ;reg [1:0]cs,nsalways@(posedge clk_in) beginif (reset)cs <= s0;elsecs <= ns;
end//状态改变
always@(*) begincase(cs)s0: ns = s1 ;s1: ns = s2 ;s2: ns = s0 ;
end//输出
always@(*) begincase(cs)s0: clk_out_1 = 0 ;s1: clk_out_1 = 0 ;s2: clk_out_1 = 1 ;
end//三段式状态机
//下降沿触发
//状态声明
reg [1:0]cts,ntsalways@(negedge clk_in) beginif (reset)cts <= s0;elsects <= nts;
end//状态改变
always@(*) begincase(cts)s0: nts = s1 ;s1: nts = s2 ;s2: nts = s0 ;
end//输出
always@(*) begincase(cts)s0: clk_out_2 = 0 ;s1: clk_out_2 = 1 ;s2: clk_out_2 = 0 ;
end//final out
clk_out = clk_out_1 | clk_out_2 ;

4/5/6/7...分频电路

根据上面的模式,我们想实现一个任意分频任意占空比的分频电路已经不是难事了,只要画出波形图,仔细分析想要实现的功能,然后剩下的就只是套用公式了。

第一步:画波形图

四分频电路波形图如下,用2分频电路再2分频即可得到,只需要再次例化二分频电路模块,不用修改模块内部代码即可实现。亦可直接用原始信号写一个具有4种状态的状态机,实现0011序列发生器。当然如果需要实现什么1/4占空比,3/8占空比,那也是被这套公式所支持的。

如下图所示,5分频电路其实就是3分频电路的扩展。使用上升沿实现00011的序列发生器,再使用下降沿实现00110的序列发生器,最后将产生的两个2/5占空比的5分频电路或起来,即可得到1/2占空比的5分频信号clk_out_5。奇分频电路的实现最重要的一点就是使用下降沿触发来实现那0.5,将多出来的这个1分成2个0.5给高电平和低电平。

总结

总的来说,实现奇偶分频电路,只需要套用上述公式,即可轻松得到任意分频任意占空比的分频信号。

最后再次总结一下公式:

1.画波形图 :偶数分频只需要数好周期数,即可找到中间点。而奇数分频可以先实现简单的接近中点的分频,例如1/3(1.5/3)占空比分频,2/5(2.5/5)占空比分频等等,然后将这个接近1/2占空比的信号利用下降沿平移半个原始信号的周期,即可出现那缺少的0.5,最后再通过或[ | ]得到最终的1/2占空比的信号。

2.写状态机:使用状态机实现序列发生器,通过观察波形图得到想要的是什么序列,然后依据本文中的代码示例状态机的格式和写法进行扩展,主要是状态机的状态个数。

希望这篇文章能够让你对奇偶分频增加更多的了解,欢迎指出错误和互相交流。

一看就会的奇偶分频电路相关推荐

  1. Verilog奇偶分频电路的总结

    1.偶数分频 偶数倍分频相对简单,可以通过计数器对预分频的脉冲沿计数实现,如果要进行N倍(N为整数)偶数分频,可由预分频的时钟触发计数器计数,当计数器从0计数到N/2-1时,输出时钟进行翻转,并给计数 ...

  2. verilog分频电路

    二分频电路: module div2( input clk, input rst_n, output reg clk_o );always@(posedge clk or negedge rst_n) ...

  3. FPGA笔试题解析(五):串并转换与奇分频电路

    题目:使用状态机实现序列检测器? 序列检测器的状态机实现,以前的博文写的很多,这里贴出两个简单易懂的,看需要的部分即可: 序列检测器的Moore状态机实现 序列检测器的Mealy状态机实现 题目:用V ...

  4. 【Verilog HDL 训练】第 11 天(分频电路)

    设计一个占空比50%的三分频电路. 针对这个分频器,博文的末尾会给出一个反面教材,这是我上次写的一个分频器,看起来很好,其实是不能综合的.针对其中的错误,我令立博文记录之:[ Verilog ]alw ...

  5. 数字芯片设计中的时钟分频电路,你了解多少?

    时钟分频电路在数字芯片设计中非常常见,而且也非常重要,正确的符合要求的数字分频电路对功能的正确与否至关重要.现在数字电路设计中的时钟分频主要包括以下几种方法: 1.寄存器分频 寄存器分频就是利用寄存器 ...

  6. 关于3分频电路的讨论

    第一次写技术性的blog,就先选择一个看似简单的话题吧. 无论从算法上还是逻辑上,这个题目都非常简单,但是对于ASIC工程师,恐怕却是一个不小的挑战. 首先,看看我们的目标: 很简单吧,只要在响应的输 ...

  7. 占空比可调的分频电路实现

    在时序逻辑电路中,除了实现时钟的奇偶分频,还会涉及到时钟的占空比问题,现就该问题进行如下分析. 实现占空比为50%的分频电路很简单,对于偶分频电路只需将cnt计数到一半时进行输出q的翻转即可.比如8分 ...

  8. verilog奇偶分频详解

    文章目录 偶分频 2分频 2N分频 奇分频 3分频高电平 3分频低电平 一般结果推导 奇偶分频是一个很常见的问题,这里探讨的分频都是对于占空比为50%的信号分频,分频后的信号也是50%占空比.分频原信 ...

  9. 分频电路的verilog实现

    偶数2分频 由偶数二分频波形可知,每次在时钟的上升沿,输出寄存器的状态进行翻转,就能得到二分频后的时钟. 代码如下: module div2_clk ( input clk, input rst,ou ...

最新文章

  1. PPIO 商业化架构解析
  2. php sql oracle数据库,PHP、PLSQL连接oracle数据库的方法
  3. table_line
  4. Linux centos7防火墙firewalld相关操作
  5. (转)字典树原理+实现
  6. ListView.setAdapter(adapter);空指针异常的解决的总结
  7. 创业维艰,技术人创业如何少走弯路?
  8. 使用makefile生成.so文件
  9. Android查看应用签名
  10. java web背景颜色表,更改表行背景颜色
  11. 转专业选择计算机的理由,转专业面试自我介绍范文
  12. Android基础之批量发送短信
  13. 三菱q系列plc连接电脑步骤_SERVER和三菱Q系列PLC通讯设置步骤 SERVER和三菱Q系列PLC通讯设置步骤...
  14. Apache Calcite论文概要
  15. 计算机专业素质拓展,创新与素质拓展学分.doc
  16. [原创]裴讯K3救砖TTL竟然进入openwrt终端无法进入CFE-强力救砖
  17. 将josn对象转换成string并格式化
  18. mysql 为表添加索引
  19. fprintf()函数的运用
  20. 历代名人、学者对商鞅的评价

热门文章

  1. 教你使用日文输入法-日文输入显示不用愁
  2. 《MySQL必知必会》读书笔记
  3. Cisco AnyConnect Secure Mobility Client 4.10.05111 (macOS, Linux, Windows)
  4. 路由器wan和lan口
  5. PTA python 习题及代码实例
  6. 摄像头poe供电原理_监控安防当中独立供电与POE供电方式图解
  7. 分享一种 ConstraintLayout 让TextView 自适应的同时,还不超出限制范围的方式
  8. ata职业技能评价证书考出来有啥用?
  9. 搭建网校平台的方式有哪些?
  10. android telnet服务器端,Android FTP客户端实现、Telnet客户端