好文档 - 专业文书写作范文服务资料分享网站

任意整数分频,占空比为50%(VHDL)

天下 分享 时间: 加入收藏 我要投稿 点赞

任意整数分频,占空比为50%(VHDL)

--希望能对大家有帮助

--**************************************-- --程序名:任意整数分频,占空比为50%

--**************************************-- library ieee;

use ieee.std_logic_1164.all; entity clk_div is

generic(n:integer:=2);--n的值是要分频的系数,n>=2 port (clock : in std_logic:='0'; clk_out : out std_logic); end clk_div;

architecture sea of clk_div is signal temp : std_logic:='0';

begin

process(clock,temp)

variable a,a1,a2 : integer range 0 to n; variable temp1,temp2 : std_logic:='0'; begin

if (n rem 2)=1 then

if rising_edge(clock) then

if a1=n-1 then a1:=0;temp1:='0';

elsif a1<((n+1)/2-1) then temp1:='1';a1:=a1+1; elsif a1>=((n+1)/2-1) then temp1:='0';a1:=a1+1; end if; end if;

if falling_edge(clock) then

if a2=n-1 then a2:=0;temp2:='0';

elsif a2<((n+1)/2-1) then temp2:='1';a2:=a1+1; elsif a2>=((n+1)/2-1) then temp2:='0';a2:=a2+1; end if; end if;

temp<=temp1 or temp2;

elsif rising_edge(clock) then

if a=(n/2-1) then a:=0;temp<=not temp; else a:=a+1; end if; end if;

end process; clk_out<=temp;

end sea; --程序结束

1、代码中分成了两个大部分:偶数分频和奇数分频的处理;而在奇数分频中,为了获得50%的分频比,特意加入了对时钟下降沿的响应,这是这段代码精华的所在;

2、对应以上三块分频处理中,分别设置了三个指针(a\\a1\\a2)和中间信号(temp\\temp2\\temp2) 3、每个模块,都用中间参数a”盯住“ 半点 n/2 (代码中使用(n+1)/2-1 这个具体数值)和满点n(代码中使用了n-1)这两个点来监视计数过程,从而(间接地)控制输出时钟的状态; 具体说,就是n=奇数时;满n复位,半n置位;n=偶数时,在半n(自然包括了满n)时取反。 4、为获得50%的占空比,充分利用了时钟的两个沿,巧妙的配合了一个简单的或运算,就解决了奇数分频比条件下的50% 精确占空系数问题(这样,从原理上说这个精度只受输入时钟占空比的影响)。

1:可以用bit位来实现对n的控制,在结构体中将bit位的值转换为十进制赋给n 就行了,不过这个时候的n是全局变量(shared variable)或是信号量;

2:这段代码我当时只是作了功能和时序仿真,综合没有问题,在开始学VHDL时,我看到别人的任意整数分频,占空比不是50%,而占空比不是50%的分频很好实现,但要实现占空比为50%的分频,我当时确实费了不少时间.我在画时序图时,将时序逻辑与组合逻辑结合起来,才写出了上面的程序.

任意整数分频,占空比为50%(VHDL)

任意整数分频,占空比为50%(VHDL)--希望能对大家有帮助--**************************************----程序名:任意整数分频,占空比为50%--**************************************--libraryieee;useiee
推荐度:
点击下载文档文档为doc格式
8hzg34aojd10ttd0ody4
领取福利

微信扫码领取福利

微信扫码分享