前言

去年寒假前我的一个亲戚问我如何做一个五分频的分频器。我想这还不简单,不就是个计数器吗,但是发现并没有那么简单,因为偶数分频器根据上升沿计数就可以了,但是奇数分频器也可以,但是没法做到50%占空比。今天课上老师完美的解决了这个问题。

偶分频

我们之前学习过计数器,偶分配无非就是个计数器嘛,用信号做中间变量要注意他是滞后变值,所以修改的时候要考虑清除。这点没什么好说的直接上代码。

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity Test isgeneric(constant N:integer:=6);port(signal clk:in std_logic;signal cout:out std_logic);
end Test;
architecture even of Test issignal temp:integer:=0;constant half:integer:=N/2;
beginprocess(clk)beginif rising_edge(clk) thentemp<=temp+1;if temp<half thencout<='1';elsif temp<N-1 thencout<='0';elsetemp<=0;cout<='0';end if;end if;end process;
end even;

这里我们可以实现一个偶数分频。这个想必大家都没问题,那么我们继续看奇数分频

奇数分频

我们很容易想到奇数分频的50%的占空比肯定是和上升沿和下降沿都有关系,那么我们对上升沿和下降沿都做计数,来看一下效果。

我们发现只有当两个方向的状态均为0时才为0
因为正方向看,他会有半个时钟周期的延迟,这样就可以做到3.5个周期的高电平了。那么剩下的自然就是低电平。

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity div_any isgeneric(constant N:integer:=5);port(signal clk:in std_logic;signal cout:out std_logic);
end div_any;
architecture even of div_any issignal tempA,tempB:integer:=0;signal coutA,coutB:std_logic;constant half:integer:=N/2;
beginprocess(clk)beginif rising_edge(clk,coutA,coutB) thentempA<=tempA+1;if tempA<half thencoutA<='1';elsif tempA<N-1 thencoutA<='0';elsetempA<=0;coutA<='0';end if;elsif falling_edge(clk) thentempB<=tempB+1;if tempB<half thencoutB<='1';elsif tempB<N-1 thencoutB<='0';elsetempB<=0;coutB<='0';end if;end if;cout<=coutA or coutB;end process;
end even;

任意分频

那么如何实现任意分频呢?
我们可以发现,如果当前是偶数,那么直接与上升沿的一样就可以了。不过我们这里做一下特判,1的情况。
下面代码通过输入分频值来更改分频状态。

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity div_any isport(signal clk:in std_logic;signal scaler:in integer range 0 to 63;signal clk_out,clk_f,clk_r:out std_logic);
end div_any;
architecture DIV of div_any issignal f_count:integer range 0 to 63:=0;signal r_count:integer range 0 to 63:=0;signal half:integer;signal even:integer;signal clk_f_temp,clk_r_temp:std_logic;
beginhalf<=scaler/2;even<= scaler rem 2;with even*scaler selectclk_out<=clk_r_temp                      when 0,clk                              when 1,clk_f_temp or clk_r_temp     when others;process(clk,scaler)beginif rising_edge(clk) thenr_count<=r_count+1;if r_count<half thenclk_r_temp<='1';elsif r_count<scaler-1 thenclk_r_temp<='0';elseclk_r_temp<='0';r_count<=0;end if;elsif falling_edge(clk) thenf_count<=f_count+1;if f_count<half thenclk_f_temp<='1';elsif f_count<scaler-1 thenclk_f_temp<='0';elseclk_f_temp<='0';f_count<=0;end if;end if;end process;clk_f<=clk_f_temp;clk_r<=clk_r_temp;
end DIV;

By-Round Moon

VHDL-任意分频器(50%占空比)相关推荐

  1. 分频器——(任意奇分频(50%占空比、非50%占空比),任意偶分频,任意小数分频)

    分频器定义: 在数字系统的设计中经常会碰到需要使用多个时钟的情况.时钟信号的产生通常具有两种方法,一种是使用PLL(Phase Locked Loop,锁相环),可生成倍频.分频信号:另一种则是使用硬 ...

  2. 50%占空比的3分频器(奇数分频)

    要求:设计一个50%占空比的3分频器 总结:设计奇数N分频的核心思想是,用计数器产生两个(N/2+1)/N占空比的时钟信号(分别在系统时钟的上升沿和下降沿产生).在将这两个信号做组合逻辑运算(与运算) ...

  3. FPGA 任意分频器设计

    结合网上的经验,自己写了写偶.奇.任意分频器的程序. 偶分频器 /************************* Date:2018.8.14*************************** ...

  4. (96)分频器设计(任意分频器)

    (96)分频器设计(任意分频器) 1 文章目录 1)文章目录 2)FPGA入门与提升课程介绍 3)FPGA简介 4)分频器设计(任意分频器) 5)技术交流 6)参考资料 2 FPGA入门与提升课程介绍 ...

  5. (05)VHDL实现分频器

    (05)VHDL实现分频器 1.1 目录 1)目录 2)FPGA简介 3)VHDL简介 4)VHDL实现分频器 5)结语 1.2 FPGA简介 FPGA(Field Programmable Gate ...

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

    数字IC秋招手撕代码(二)50%占空比的三分频 题目 设计思路 与逻辑分频 代码 或逻辑分频 代码 异或逻辑分频 代码 题目 用verilog实现三分频电路,要求输出50%占空比 设计思路 如果不限制 ...

  7. 题目:用Verilog实现三分频电路,要求输出50%占空比。

    题目:用Verilog实现三分频电路,要求输出50%占空比. module Div_three(input clk,input rst_n,output div_three ); reg [1:0] ...

  8. 五分频电路(50%占空比)

    五分频电路(50%占空比) 设计代码 `timescale 1ns / 1ps // // Company: // Engineer: // // Create Date: 20:28:43 05/1 ...

  9. 奇偶分频电路设计(任意占空比、50%占空比)

    一.概述 分频电路一般就是以输入源时钟为参考,将其进行降频输出:分频可以使用锁相环时钟资源实现,也可以计数为基础,进行分频设计.本文主要记录后者的相关问题. 二.偶分频 1.一些概念 分频数:即降频倍 ...

  10. FPGA基础设计(二):任意分频器(奇数,偶数,小数)

    分频器 前言 分频原理 偶数分频    6分频    代码    tb    仿真波形 奇数分频   仿真波形   代码   tb 小数分频    说明  半整数分频:N+0.5   仿真波形   代 ...

最新文章

  1. MW150UH驱动程序Linux,水星MW150UH无线网卡驱动
  2. 【深度学习】GPU选型调研!3090依旧是性价比之王
  3. java 动手动脑之父子继承
  4. 在linux中检测go语言,Linux AIDE(文件完整性检测)-Go语言中文社区
  5. ETL第一篇(Kettle Spoon) 初遇
  6. java开发之分页查询
  7. nlp基础—9.条件随机场模型(CRF算法)
  8. 对apache中并发控制参数prefork理解和调优
  9. js如何获取php中的变量的类型,js获取变量的类型
  10. 矩阵的逆和矩阵的转置运算公式对比
  11. 可靠性 可用性 可维护性
  12. Excel宏的录制与调用
  13. 【JAVA】java递归测试考拉兹猜想/冰雹猜想
  14. 会议室管理系统jsp和mysql_基于jsp+mysql+servlet的JSP会议-会议室管理系统
  15. 加载调用本地百度地图资源,附地图下载器及黑龙江省1-16级瓦片地图,加载显示marker
  16. 2019第二届中国智慧零售终端大会
  17. 7-33 地下迷宫探索 (30 分)
  18. Windows7 Home高级 64 中文版 + TortoiseSVN 64 英文版 + SVN Server 32
  19. linux内置的cron定时任务
  20. (织梦cms)dedecms5.7注入和上传0day

热门文章

  1. 夏普红外测距模块使用笔记
  2. 全年数学建模相关比赛
  3. rust go对比选择
  4. 嵌入式分享合集101-PLC
  5. 有哪些比较好的免费简历网站?
  6. Jmeter 中的BeanShell使用
  7. Snake模型综合介绍
  8. 动态考勤表-日期只能在某个月选时间段
  9. 混合云架构下的安全风险分析和安全解决方案建议
  10. OA办公系统源码下载_PHPOA源码