3412|2

6892

帖子

0

TA的资源

五彩晶圆(高级)

楼主
 

分频器的VHDL描述 [复制链接]

数字电路中,常需要对较高频率时钟进行分频操作,得到较低频率的时钟信号。我们知道,在硬件电路设计中时钟信号时非常重要的。
  下面我们介绍分频器VHDL描述,在源代码中完成对时钟信号CLK的2分频,4分频,8分频,16分频。
LIBRARYIEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYclkdivIS
   PORT(clk  : IN STD_LOGIC;
clk_div2  : OUT STD_LOGIC;
clk_div4  : OUT STD_LOGIC;
clk_div8  : OUT STD_LOGIC;
clk_div16 : OUT STD_LOGIC);
END clk_div;
ARCHITECTURE rtl OF clk_div IS
  SIGNALcount : STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
  PROCESS(clk)
  BEGIN
   IF (clk’event AND clk=’1’) THEN
    IF(count=”1111”) THEN
    Count <= (OTHERS =>’0’);
    ELSE
    Count <= count +1;
    END IF ;
   END IF ;
END PROCESS;
  clk_div2 <= count(0);
clk_div4 <= count(1);
clk_div8 <= count(2);
clk_div16 <= count(3);
END rtl;
对于分频倍数不是2的整数次幂的情况,我们只需要对源代码中的计数器进行一下计数控制就可以了,如下面源代码描述一个对时钟信号进行6分频的分频器。

ENTITYclkdivIS
   PORT(clk  : IN STD_LOGIC;
clk_div6  : OUT STD_LOGIC);
END clk_div;
ARCHITECTURE rtl OF clk_div IS
  SIGNALcount : STD_LOGIC_VECTOR(1 DOWNTO 0);
  SIGNALclk_temp: STD_LOGIC;
BEGIN
  PROCESS(clk)
  BEGIN
   IF (clk’event AND clk=’1’) THEN
    IF(count=”10”) THEN
    count <= (OTHERS =>’0’);
clk_temp <=NOT clk_temp;
    ELSE
    count <= count +1;
    END IF ;
   END IF ;
END PROCESS;
  clk_div6 <= clk_temp;

END rtl;
  前面两个分频器的例子描述的将时钟信号进行分频,分频后得到的时钟信号的占空比为1:1。在进行硬件设计的时候,往往要求得到一个占空比不是1:1的分频信号,这时仍采用计数器的方法来产生占空比不是1:1的分频信号。下面源代码描述的是这样一个分频器:将输入的时钟信号进行16分频,分频信号的占空比为 1:15,也就是说,其中高电位的脉冲宽度为输入时钟信号的一个周期。
LIBRARYIEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYclkdivIS
   PORT(clk  : IN STD_LOGIC;
clk_div16 : OUT STD_LOGIC);
END clk_div;
ARCHITECTURE rtl OF clk_div IS
  SIGNALcount : STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
  PROCESS(clk)
  BEGIN
   IF (clk’event AND clk=’1’) THEN
    IF(count=”1111”) THEN
    Count <= (OTHERS =>’0’);
    ELSE
    Count <= count +1;
    END IF ;
   END IF ;
END PROCESS;
PROCESS(clk)
  BEGIN
   IF (clk’event AND clk=’1’) THEN
    IF(count=”1111”) THEN
    Clk_div16 <= ‘1’;
    ELSE
    Clk_div <= ‘0’;
    END IF ;
   END IF ;
END PROCESS;

END rtl;
对于上述源代码描述的这种分频器,在硬件电路设计中应用十分广泛,设计人员常采用这种分频器来产生选通信号、中断信号和数字通信中常常用到的帧头信号等。
此帖出自FPGA/CPLD论坛

最新回复

我是新手   你发的程序确实不错   蛮有用的  详情 回复 发表于 2011-3-29 15:42
点赞 关注
个人签名一个为理想不懈前进的人,一个永不言败人!
http://shop57496282.taobao.com/
欢迎光临网上店铺!
 

回复
举报

10

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
我是新手   你发的程序确实不错   蛮有用的
此帖出自FPGA/CPLD论坛
 
 

回复

6892

帖子

0

TA的资源

五彩晶圆(高级)

板凳
 

能够帮组你是我最大的快乐!

此帖出自FPGA/CPLD论坛
个人签名一个为理想不懈前进的人,一个永不言败人!
http://shop57496282.taobao.com/
欢迎光临网上店铺!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表