原创 【博客大赛】利用VHDL产生奇分频器

2013-12-6 11:45 1351 13 15 分类: FPGA/CPLD 文集: VHDL中信号与变量

利用VHDL产生占空比为50%的奇倍数分频电路

一般的介绍VHDL语言的书在对分频器进行举例描述的时候,都是举得偶数倍分频的例子,因为那相对来说比较简单(只需要设置一个中间信号变量,然后在分频系数到达的时候对中间信号进行取反即可所需的偶数倍分频器),但是很少有介绍奇数倍分频器的,因为这需要对分频系数进行一定的处理,相信大家看过之后,会有耳目一新的感觉。

这里运用的方法是“错位异或法”。由于要进行奇分频而且占空比为50%,那么在一个周期内就必须有一个是时钟上升沿或下降沿是在系统时钟的下降沿处,即必须得有一个进程对下降沿敏感,否则就不可能使占空比为50%。这里我们设置两个中间信号(temp1,temp2)进行异或,当然得使每个中间信号的频率为所需要得到的分频频率,这样对两个信号进行异或的时候才不会使频率变化。具体实现如下:这里计数器的值从0到n-1(n为所需要的分频系数,为奇数保证是奇分频器),而要使得到50%的占空比,必须得使两个中间信号重叠的部分为整个周期的50%,由于是奇分频,这样就必须得其中一个对原始时钟上升沿敏感,而另一个对下降沿敏感。这样便使两个中间信号在上升沿到来的时刻相差1.5个系统时钟,

故只需再对其中一个中间信号上升沿提前(n-1)/2个时钟周期即可,这样重叠部分即可达到50%占空比。具体实现如下:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

use ieee.std_logic_arith.all;

entity odd_divide is

       generic(n:integer:=7);

       port(

              clkin: in std_logic;

              clkout: out std_logic;

              temp1,temp2 : inout std_logic                      --此处设置为inout端口是为了--仿真方便

       );

end entity;

 

architecture odd of odd_divide is 

signal c: integer range 0 to n-1;    

begin

       process(clkin)

       begin

              if falling_edge(clkin) then

                     if c=(n-1)/2 then

                            temp1<=not temp1;

                     end if;

              end if;

              if rising_edge(clkin) then

                     if c=n-1 then

                            temp2<=not temp2;

                            c<=0;

                     else

                            c<=c+1;

                     end if;

              end if;

       end process;

       clkout<=temp1 xor temp2;

end architecture;

仿真结果:

3分频.jpg

图1、3分频器

5分频.jpg

图2、5分频

7分频.jpg

图3、7分频

有以上结果可知得到了所需的分频器。

文章评论2条评论)

登录后参与讨论

T.b.K 2015-7-1 13:10

^ ^

用户1725882 2013-12-4 15:00

奇分频器,挺好玩的!

用户1725879 2013-12-3 14:48

长见识了,以前见到的都是偶数倍分频器!
相关推荐阅读
1053683568_507245520 2014-03-20 11:19
cadence16.6 软件绘制PCB板
   最近一直在学习cadence的使用,现在就对近来学习做个总结,虽然还没有达到熟练的程度,但是也希望可以给后来者做个借鉴吧。         本人的方向是硬件方向,马上面临着找工作的压力。...
1053683568_507245520 2014-01-03 21:02
【博客大赛】自己定制DPRAM的读写操作
DPRAM的读写操作 下面是本人写的DPRAM的读写操作,自己定制DPRAM,不用altera FPGA 内部自带的IP core,选择的存储器块类型是M9K(对于不同类型的存储器块,当同时对...
1053683568_507245520 2013-12-15 20:51
【博客大赛】我的EDN
我的EDN 每次进入EDN网站,看到大家在踊跃的分享自己的学习经历,经验,以及聊生活谈梦想,都会激发我的热情,激发我对生活的热爱,对未来的幻想,对自己的思索。当我懒惰时,我会进来看看,看看特权...
1053683568_507245520 2013-12-07 11:31
【博客大赛】利用FPGA控制VGA接口来使显示器显示彩条纹(里面包括调试中的查错检查方法)
利用FPGA控制VGA接口来使显示器显示彩条纹 最近一直在调关于通过VGA接口来控制显示器的程序,今天终于调试出结果来了,赶紧上来与大家分享一下。 1、VGA显示原理 常见的彩色显示器...
1053683568_507245520 2013-12-06 11:45
【博客大赛】VHDL进程语句的并行执行分析
相信许多人在学习VHDL时,都会对进程如何执行的,以及进程之间的并行执行产生疑问,本文将以下面一个具体的例子来分析单个进程的执行,与进程之间的并行执行。 library ieee; use...
我要评论
2
13
关闭 站长推荐上一条 /2 下一条