Verilog任意整数分频器

  • Verilog任意整数分频器

    • 偶数分频
    • 奇数分频
    • 两种情况结合一下

在实际设计中有的时候需要简单的任意整数分频器,整数分频器主要解决两种情况下的分频,一个是偶数分频,另一个是奇数分频

偶数分频

偶数分频比较简单,可以使用一个计数器来实现,对输入时钟进行计数,当计数器的值为N/2-1时,将输出翻转,同时将计数器清零即可。(N为分频系数)

module EvenDiv_v100(
N,
fin,
rst,
fout
);input [4:0] N;
input fin,rst;output reg fout;reg [4:0] cnter;
always @(posedge fin or posedge rst)
beginif(rst) begincnter<=5'd0;fout<=1'b0;endelse if(cnter>=({1'b0,N[4:1]}-1))begincnter<=5'd0;fout<=~fout;endelsecnter<=cnter+5'd1;
endendmodule

奇数分频

奇数分频稍微复杂一些,针对需要输出为50%占空比的情况下,要采用两个计数器分别对输入时钟的上升沿和下降沿计数,计数到(N-1)/2时对输出进行翻转,继续计数到N-1的时候对输出进行再次翻转同时清空计数器,将两个计数器(分别是上升沿和下降沿)输出结果相或输出即可。

module OddDiv_v100(
N,
fin,
rst,
fout);input [4:0] N;
input fin,rst;output wire fout; assign fout=PosOut|NegOut;reg [4:0] PosCnter,NegCnter;
reg PosOut,NegOut;always @(posedge fin or posedge rst)
beginif(rst)beginPosOut<=1'b0;PosCnter<=5'd0;endelse if(PosCnter==(N-1)/2)beginPosCnter<=PosCnter+5'd1;PosOut<=~PosOut;endelse if(PosCnter==(N-1))beginPosCnter<=5'd0;PosOut<=~PosOut;endelsePosCnter<=PosCnter+5'd1;
endalways @(negedge fin or posedge rst)
beginif(rst)beginNegCnter<=5'd0;NegOut<=1'b0;endelse if(NegCnter==(N-1)/2)beginNegCnter<=NegCnter+5'd1;NegOut<=~NegOut;endelse if(NegCnter==(N-1))beginNegCnter<=5'd0;NegOut<=~NegOut;endelseNegCnter<=NegCnter+5'd1;
endendmodule

两种情况结合一下

将上述对奇数和偶数分频逻辑集合一下,可以直接判定输入分频系数N为奇数或偶数来决定输出奇数分频结果或者偶数分频结果

module FrequencyDivision_v100(
N,
fin,
rst,
fout
);input [4:0] N;input fin,rst;output wire fout; assign fout=N[0]?OddFout:EvenFout;reg [4:0] EvenCnter,OddCnter1,OddCnter2;
reg EvenFout,OddFout1,OddFout2;wire OddFout; assign OddFout=OddFout1|OddFout2;//==============Even Frequency Division===========//
always @(posedge fin or posedge rst)
beginif(rst)beginEvenCnter<=5'd0;EvenFout<=1'b0;endelse if(EvenCnter>=({1'b0,N[4:1]}-1))beginEvenCnter<=5'd0;EvenFout<=~EvenFout;endelseEvenCnter<=EvenCnter+5'd1;
end//==============Odd Frequency Division===========//
always @(posedge fin or posedge rst)
beginif(rst)beginOddFout1<=1'b0;OddCnter1<=5'd0;endelse if(OddCnter1==(N-1)/2)beginOddCnter1<=OddCnter1+5'd1;OddFout1<=~OddFout1;endelse if(OddCnter1==(N-1))beginOddCnter1<=5'd0;OddFout1<=~OddFout1;endelseOddCnter1<=OddCnter1+5'd1;
endalways @(negedge fin or posedge rst)
beginif(rst)beginOddCnter2<=5'd0;OddFout2<=1'b0;endelse if(OddCnter2==(N-1)/2)beginOddCnter2<=OddCnter2+5'd1;OddFout2<=~OddFout2;endelse if(OddCnter2==(N-1))beginOddCnter2<=5'd0;OddFout2<=~OddFout2;endelseOddCnter2<=OddCnter2+5'd1;
endendmodule

Verilog任意整数分频器相关推荐

  1. Verilog实现---1/x任意整数分频器通用代码

    目录 1.偶数分频 2.奇数分频 3.代码文件说明 4.端口说明 5.测试&波形 6.代码 7.Reference 1.偶数分频 对于占空比为50%,分频系数为N的偶数分频,其核心思想是使用计 ...

  2. <Verilog实现数字分频器> 偶数分频器

    一,内容介绍 分频器是数字电路的常见IP,将高频时钟分为低频时钟信号以供外设使用. 下面我们用verilog实现一个偶数分频器 进一步结合奇数分频器组合为整数分频器 再一步升级为小数分频器 二,数字分 ...

  3. 任意整数分频(图文并茂)

    上一篇文章讲解了如何进行任意的奇分频和任意的偶分频,这篇文章主要讲解占空比为50%的任意整数分频(奇分频和偶分频),下面首先以6分频和5分频来回顾一下奇偶分频. 偶分频 偶分频时最简单的,通过下图就可 ...

  4. matlab x为整数,关于matlab中用什么字符表示任意整数

    matlab做除法,怎么取整数? 方法一: floor(a/b);就是舍去小数点. ceil(a/b)就是舍去小数点+1的数. 方法二: fix(x)截尾取整 fix(x)不超过x的最大整数 ceil ...

  5. java 五个数字_关于java:五个任意整数找出其中第二大的数字

    package comxaqf.w02_objectoriented.a_saturday1030; import java.util.Scanner; /** [题6] 6.五个任意整数,找出其中第 ...

  6. 20210916:Verilog的整数类型易错点

    Verilog的整数类型表示易错点 对比类型 仿真结果 易错点分析 总结 对比类型 分析以下四个值的结果: wire [31:0] A; wire [31:0] B; wire [31:0] C; w ...

  7. C语言随笔小算法:取出一个任意整数的每一位数值

    C语言随笔小算法:取出一个任意整数的每一位数值 代码: #include "stdlib.h" #include "stdio.h"//将val的各位取出来 i ...

  8. mysql编写1到n的奇数和_编写程序。输入任意整数n,计算1到n的奇数和

    编写程序.输入任意整数n,计算1到n的奇数和以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 编写程序.输入任意整数n,计 ...

  9. python求1到n的奇数和_编写程序。输入任意整数n,计算1到n的奇数和。C语言编写程序 输入整数N 显...

    编写程序.输入任意整数n,计算1到n的奇数和. C语言编写程序 输入整数N 显 www.zhiqu.org 时间: 2020-11-23 解题思路:循环判断1到N的每一个数: 若除以2是结果为整数,也 ...

最新文章

  1. OpenCV+python:读取图片和视频详细信息
  2. FPGA中LVDS差分高速传输的实现
  3. matlab中表示拉普拉斯分布_CHAPT1:场论;电磁学和微波学的基本的数学手段和表示...
  4. 需要在Emulator上模拟来电 效果
  5. Linux监听进程是否存在,并加入定时任务
  6. dubbo Trace 日志追踪
  7. 视频上传、转码、切面、存储的思路
  8. WebGIS中一种根据网格索引判断点面关系的方法
  9. PHP专家陪练营试听课程下载
  10. 蓝桥杯算法提高 盾神与条状项链
  11. mysql驱动有什么用_什么是数据库驱动?
  12. 鸿海精密收购东芝闪存业务志在必得 或出价270亿美元
  13. 22万抢注“活动”双拼域名,95后创业者却因困意失之交臂
  14. 计算机cpu对什么访问最快,CPU直接访问的存储器是什么?
  15. Linux内核设计与实现 第18章 调试
  16. 【Bug】无法访问Windows Installer服务
  17. 黑马最新Android P2P金融项目开发实战 视频+项目源码
  18. 微信小程序手机号输入3和7位空格,删除时删除空格
  19. xdlove的暑期实践总结(大二篇)
  20. Python 教你绘制个人旅行地图,就是那么牛

热门文章

  1. 192.168.8.1手机登陆_192.168.1.1手机登陆设置
  2. mysql无法存储微表情、微信昵称包含微表情无法存储数据库
  3. 【生产力汇总】毕业论文写作必备工具,高效自动化
  4. 【Unity】如何让粒子系统显示在UI上呢?
  5. Django(bug)——Manager isn‘t available ‘auth.User‘ has been swapped for ‘authentication.UserInfo‘
  6. moment(‘time‘,‘YYYY-MM-DD HH:mm:ss‘)和moment(‘time‘).format(‘YYYY-MM-DD HH:mm:ss‘)的区别
  7. painter X Artists’ Oils(艺术家油彩)画笔
  8. 太牛逼了!用 Python 实现抖音上的“人像动漫化”特效,原来这么简单!
  9. 惠普局域网共享打印机设置_win7惠普32位系统局域网设置打印机共享的对策
  10. Android4.0 默认静、动态桌面设置