domore
驱动中牛
驱动中牛
  • 注册日期2002-04-06
  • 最后登录2008-04-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:4393回复:23

谁有任意分频器的VHDL代码

楼主#
更多 发布于:2003-01-13 11:19
如题
green_pine
驱动太牛
驱动太牛
  • 注册日期2002-10-22
  • 最后登录2019-06-10
  • 粉丝3
  • 关注0
  • 积分48分
  • 威望599点
  • 贡献值1点
  • 好评度144点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2003-01-13 13:18
怎么个任意法,整数?
wuhao
驱动小牛
驱动小牛
  • 注册日期2002-06-14
  • 最后登录2005-02-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-01-13 13:22
用CPLD可以写任意分频器.
domore
驱动中牛
驱动中牛
  • 注册日期2002-04-06
  • 最后登录2008-04-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-01-13 16:36
TO GREEN_PINE:是整数分频

WUHAO老兄是怎么实现的,能否具体点
green_pine
驱动太牛
驱动太牛
  • 注册日期2002-10-22
  • 最后登录2019-06-10
  • 粉丝3
  • 关注0
  • 积分48分
  • 威望599点
  • 贡献值1点
  • 好评度144点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2003-01-13 16:40
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;


ENTITY clkdiv IS
generic(n:integer:=3);
PORT(
     CLK: IN STD_LOGIC;
     CLKOUT_3:BUFFER STD_LOGIC
        );
END clkdiv;
ARCHITECTURE A OF clkdiv IS
SIGNAL CNT1,CNT2:integer:=0;
SIGNAL OUTTEMP:STD_LOGIC;
SIGNAL LOUT:STD_LOGIC;
SIGNAL OUT3:STD_LOGIC:=\'0\';
BEGIN
l1:PROCESS(CLK)
BEGIN
IF CLK\'EVENT AND CLK=\'1\'THEN
IF CNT1=n-1 THEN
CNT1<=0;
ELSE
CNT1<=CNT1+1;
END IF;
END IF;
END PROCESS;
l2:PROCESS(CLK)
BEGIN
IF CLK\'EVENT AND CLK=\'0\'THEN
IF CNT2=n-1 THEN
CNT2<=0;
ELSE
CNT2<=CNT2+1;
END IF;
END IF;
END PROCESS;
l3:PROCESS(CNT1,CNT2 )
BEGIN
if ((n mod 2)=1) then
 IF CNT1=1 THEN
    IF CNT2=0 THEN
    OUTTEMP<=\'1\';
     ELSE OUTTEMP<=\'0\';
     END IF;

 ELSIF CNT1=(n+1)/2 THEN
    IF CNT2=(n+1)/2 THEN
    OUTTEMP<=\'1\';
    ELSE OUTTEMP<=\'0\';
    END IF;

 ELSE
 OUTTEMP<=\'0\';
 END IF;
else
  if cnt1=1 then
   outtemp<=\'1\';
  elsif (cnt1=(n/2+1)) then
   outtemp<=\'1\';
  else
   outtemp<=\'0\';
  end if;
end if;
END PROCESS;
l4:PROCESS(OUTTEMP,clk)
BEGIN
if ((n/=2) and (n/=1)) then
 IF OUTTEMP\'EVENT AND OUTTEMP=\'1\' THEN
  CLKOUT_3<=NOT CLKOUT_3;
 END IF;
elsif (n=2) then
 if(clk\'event and clk=\'1\')then
  clkout_3<=not clkout_3;
 end if;
else
  clkout_3<=clk;
end if;
END PROCESS;
END A;

只要把n设置成你要分频的数值就可以了
wuhao
驱动小牛
驱动小牛
  • 注册日期2002-06-14
  • 最后登录2005-02-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-01-13 17:05
楼上的兄弟你手真快,我这的服务器下午出了点问题,
你的贴子就上去。
多谢帮忙。
green_pine
驱动太牛
驱动太牛
  • 注册日期2002-10-22
  • 最后登录2019-06-10
  • 粉丝3
  • 关注0
  • 积分48分
  • 威望599点
  • 贡献值1点
  • 好评度144点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2003-01-14 08:44
哈哈,:p
: p
l1:process

[编辑 -  1/14/03 by  green_pine]
green_pine
驱动太牛
驱动太牛
  • 注册日期2002-10-22
  • 最后登录2019-06-10
  • 粉丝3
  • 关注0
  • 积分48分
  • 威望599点
  • 贡献值1点
  • 好评度144点
  • 原创分0分
  • 专家分0分
  • 社区居民
7楼#
发布于:2003-01-14 08:46
真奇怪
 : P
原来是它

 :P :P :P :P
domore
驱动中牛
驱动中牛
  • 注册日期2002-04-06
  • 最后登录2008-04-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-01-14 19:10
调试通过,很好用,非常感谢GREEN_PINE老兄,水平真是高。
马上给分。
2分给WUHAO兄弟,也谢谢你的支持。

还有个问题,我用MAXPLUSII仿真时为什么只能仿出1uS的结果,设置了END TIME也不行,WHY?
green_pine
驱动太牛
驱动太牛
  • 注册日期2002-10-22
  • 最后登录2019-06-10
  • 粉丝3
  • 关注0
  • 积分48分
  • 威望599点
  • 贡献值1点
  • 好评度144点
  • 原创分0分
  • 专家分0分
  • 社区居民
9楼#
发布于:2003-01-15 08:35
我没有用max,不过肯定可以设置
wuhao
驱动小牛
驱动小牛
  • 注册日期2002-06-14
  • 最后登录2005-02-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-01-15 16:39
调试通过,很好用,非常感谢GREEN_PINE老兄,水平真是高。
马上给分。
2分给WUHAO兄弟,也谢谢你的支持。

还有个问题,我用MAXPLUSII仿真时为什么只能仿出1uS的结果,设置了END TIME也不行,WHY?


 -------------------------------
谢谢你的分数,分数不多,意思意思,解决问题就是快乐!!!
green_pine
驱动太牛
驱动太牛
  • 注册日期2002-10-22
  • 最后登录2019-06-10
  • 粉丝3
  • 关注0
  • 积分48分
  • 威望599点
  • 贡献值1点
  • 好评度144点
  • 原创分0分
  • 专家分0分
  • 社区居民
11楼#
发布于:2003-01-15 17:31
楼上的老兄很喜欢的话,我开个帖子给你点?
green_pine
驱动太牛
驱动太牛
  • 注册日期2002-10-22
  • 最后登录2019-06-10
  • 粉丝3
  • 关注0
  • 积分48分
  • 威望599点
  • 贡献值1点
  • 好评度144点
  • 原创分0分
  • 专家分0分
  • 社区居民
12楼#
发布于:2003-01-16 14:11
tt
rocklet
驱动牛犊
驱动牛犊
  • 注册日期2003-01-22
  • 最后登录2004-05-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-01-22 22:18
关于end time解决办法:打开wave editor,此时在file菜单下会发现end time选项,修改参数即可,最好是加上单位。
yuri69
驱动小牛
驱动小牛
  • 注册日期2002-07-12
  • 最后登录2005-12-31
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2003-02-28 13:29
我知道你们说的问题了。

你开始用1us,然后改成10us,但是时钟你没有重新设定,所以在1us后面没有波形。
我不会停止对你的思念,就像呼吸一样,我不去特意的想,但是,只能屏息,而不可能停止
domore
驱动中牛
驱动中牛
  • 注册日期2002-04-06
  • 最后登录2008-04-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2003-02-28 20:12
 
我知道你们说的问题了。

你开始用1us,然后改成10us,但是时钟你没有重新设定,所以在1us后面没有波形。

 


是这样的,它只给我出1us的结果。这该怎么办呢,如何重新设定时钟?
X_ray
驱动中牛
驱动中牛
  • 注册日期2003-02-03
  • 最后登录2004-07-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2003-03-01 14:51
单击左边时钟,选中整条时钟,单击工具条的时钟按钮,置入参数。按存盘,设定END TIME,关闭仿真窗口,然后重新打开。
X_ray
驱动中牛
驱动中牛
  • 注册日期2003-02-03
  • 最后登录2004-07-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2003-03-01 14:55
如果你用ALTERA的芯片用AHDL有现成的库函数。
domore
驱动中牛
驱动中牛
  • 注册日期2002-04-06
  • 最后登录2008-04-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2003-03-01 15:36
 
单击左边时钟,选中整条时钟,单击工具条的时钟按钮,置入参数

    左边哪有时钟,没找到呀,工具条上也没有时钟按钮,我是在Waveform Editor环境中。请X_RAY老兄再详细点。
    另外,现成的AHDL函数是哪个?
  分数另开贴子给,谢谢!
X_ray
驱动中牛
驱动中牛
  • 注册日期2003-02-03
  • 最后登录2004-07-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2003-03-02 04:27
在屏幕的(不是窗口)最左边一个画得象个“钟”一样的按钮。
下面x是你要的分频数-1。LPM_WIDTH是分频器宽度。
include \"lpm_counter.inc\";
subdesign ssl201
(
CLKin  :input;
CLKout :output;
)
variable
CounterL :lpm_counter with (LPM_WIDTH=16);

BEGIN
Counter.clock=CLKin;
Counter.sclr=Counter.q[]==x;
CLKout=Counter.eq0;
END;
上一页
游客

返回顶部