打印

请教分频!!!!

[复制链接]
2137|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wangxueq|  楼主 | 2011-6-21 08:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用频率59934756产生四个频率7491844.5、7484528.5、936480.5625、943796.5625,用VHDL或者verilog怎么个思路?

相关帖子

沙发
lwq030736| | 2011-6-21 11:00 | 只看该作者
直接用PLL锁相环不行吗?

使用特权

评论回复
板凳
lxc806705| | 2011-6-21 11:12 | 只看该作者
分频其实做一个内部计数器就可以:
div(clk_out,clk);
input clk;
output clk_out;
reg [7:0] cnt;

always @(posedge clk)
begin
   if(cnt==你想要的数字)
     begin
          clk_out=~clk_out;
          cnt==0;
     end
   else
      cnt++;
end
就是这样,我上面的代码只是示意,你自己斟酌

使用特权

评论回复
地板
lxc806705| | 2011-6-21 11:12 | 只看该作者
另外记得clk_out要给一个初始化值,0或者1,不然就是xxxxxx

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
sxhhhjicbb + 1 clk_out是output类型的,不能放在赋值的右边 ...
5
wangxueq|  楼主 | 2011-6-21 11:36 | 只看该作者
7491844.5   936480.5625这两个做出来了 用分频
但是7484528.5 943796.5625这两个不知道怎么弄了
大家可以看出来这两组频率都相差一个中频7316

使用特权

评论回复
6
wangxueq|  楼主 | 2011-6-21 11:49 | 只看该作者
从数字上看:比方说7491844.5是59934756的8次分频,这个好说;7484528.5是59934756的8.0078198次分频,原则上是要求输出50%占空比。从电路控制上看,这两个频率要做混频的

使用特权

评论回复
7
lxc806705| | 2011-6-21 12:17 | 只看该作者
要做到精确的分频,那你还是用PLL吧

使用特权

评论回复
8
sxhhhjicbb| | 2011-6-21 20:26 | 只看该作者
第一次:用PLL将主时钟倍到约200M
第二步:找出最小公约数.然后作加法处理,最接近50%的.

使用特权

评论回复
9
wangxueq|  楼主 | 2011-6-22 08:27 | 只看该作者
EPM3128可以做锁相环吗?

使用特权

评论回复
10
lxc806705| | 2011-6-22 08:39 | 只看该作者
看看IP核里是否找得到PLL,不然只有自己写了-不过我觉得要占用很大资源吧

使用特权

评论回复
11
wangxueq|  楼主 | 2011-6-22 08:48 | 只看该作者
嗯哪 而且好像原版的程序没有那么大,不知道怎么做出来的

使用特权

评论回复
12
wangxueq|  楼主 | 2011-7-4 09:19 | 只看该作者
:dizzy:

使用特权

评论回复
13
binghe41| | 2011-7-12 08:53 | 只看该作者
占空比没有必要1:1

使用特权

评论回复
14
wangxueq|  楼主 | 2011-7-19 11:35 | 只看该作者
不是1:1占空比的   怎么得到呢

使用特权

评论回复
15
cq_sunny_fish| | 2011-8-3 16:47 | 只看该作者
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;


entity cnt is
port( clk : in std_logic;
      --cnt_out: out std_logic_vector(7 downto 0);
      q : out std_logic);
end entity;

architecture bhv of cnt is
signal cnt : std_logic_vector(7 downto 0); --255
signal q1 : std_logic;
begin
process(clk)
begin
if clk'event and clk='1'then
  cnt <= cnt + '1';
  if cnt=5 then  --(cnt=? any divid num you want but <255)
   q1 <= not(q1);
   cnt<="00000000";
  else q1 <= q1;
end if;
cnt_out<=cnt;
q<=q1;
end if;
end process;
end;

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

118

帖子

2

粉丝