1月9日,在线听RF检波器如何简化系统设计,与ADI工程师一起学习吧!→ 报名参会 ←
电子产品世界 » 论坛首页 » 嵌入式开发 » FPGA » 任意整数分频出来,占空比不为50%问题

共3条 1/1 1 跳转至

任意整数分频出来,占空比不为50%问题

助工
2019-11-29 17:30:49    评分

各位高手:我用CPLD对晶振10MHz进行整数分频,输出信号为400kHz,程序用的是任意整数倍分频,程序中占空比为50%,但是在每次重新上电后,输出信号的占空比大多数次数都没达到50%,并且占空比基本上每次都在变化,偶尔能达到50%,请问有没有遇到过这种故障现象,如何解决?敬请发言以解我惑kkk.jpg




关键词: CPLD     分频     占空比     任意     整数     问题    

助工
2019-11-29 22:12:03    评分
2楼

这是为啥呢


助工
2019-12-05 09:44:01    评分
3楼

附任意整数分频vhdl代码:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

use ieee.std_logic_unsigned.all;


entity net_clk_div_n is

generic (n:integer:=20);

port(clk : in std_logic;

rst : in std_logic; 

clkout :out std_logic

);

end net_clk_div_n;


architecture rtl of net_clk_div_n is


--constant n : integer range 0 to 10 := 6; 

signal clk_p : std_logic;

signal clk_n : std_logic;


signal cnt_p : integer range 0 to n;

signal cnt_n : integer range 0 to n;


begin 

process(clk_p, clk_n)

begin

if((n mod 2) = 0)then

clkout <= clk_p;

else

clkout <= clk_p or clk_n;

end if;

end process;



process(clk, rst)

begin

if(rst = '0') then

cnt_p <= 0;

elsif(clk'event and clk = '1') then

if(cnt_p = n-1) then

cnt_p <= 0;

else

cnt_p <= cnt_p + 1;

end if;

end if;

end process;


process(clk, rst)

begin

if(rst = '0') then

clk_p <= '0';

elsif(clk'event and clk = '1')then

if (cnt_p < (n/2)) then

clk_p <= '1';

else

clk_p <= '0';

end if ;

end if;

end process; 



process(clk, rst)

begin

if(rst = '0') then

cnt_n <= 0;

elsif(clk'event and clk = '0')then

if(cnt_n = n-1) then

cnt_n <= 0;

else

cnt_n <= cnt_n + 1;

end if;

end if;

end process;


process(clk, rst)

begin

if(rst = '0') then

clk_n <= '0';

elsif(clk'event and clk = '0')then

if (cnt_n < (n/2)) then

clk_n <= '1';

else

clk_n <= '0';

end if ;

end if;

end process; 

end rtl; 



共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]