阅读:4393回复:23
谁有任意分频器的VHDL代码
如题
|
|
沙发#
发布于:2003-01-13 13:18
怎么个任意法,整数?
|
|
板凳#
发布于:2003-01-13 13:22
用CPLD可以写任意分频器.
|
|
地板#
发布于:2003-01-13 16:36
TO GREEN_PINE:是整数分频
WUHAO老兄是怎么实现的,能否具体点 |
|
地下室#
发布于: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设置成你要分频的数值就可以了 |
|
5楼#
发布于:2003-01-13 17:05
楼上的兄弟你手真快,我这的服务器下午出了点问题,
你的贴子就上去。 多谢帮忙。 |
|
6楼#
发布于:2003-01-14 08:44
哈哈,:p
: p l1:process [编辑 - 1/14/03 by green_pine] |
|
7楼#
发布于:2003-01-14 08:46
真奇怪
: P 原来是它 :P :P :P :P |
|
8楼#
发布于:2003-01-14 19:10
调试通过,很好用,非常感谢GREEN_PINE老兄,水平真是高。
马上给分。 2分给WUHAO兄弟,也谢谢你的支持。 还有个问题,我用MAXPLUSII仿真时为什么只能仿出1uS的结果,设置了END TIME也不行,WHY? |
|
9楼#
发布于:2003-01-15 08:35
我没有用max,不过肯定可以设置
|
|
10楼#
发布于:2003-01-15 16:39
调试通过,很好用,非常感谢GREEN_PINE老兄,水平真是高。
马上给分。 2分给WUHAO兄弟,也谢谢你的支持。 还有个问题,我用MAXPLUSII仿真时为什么只能仿出1uS的结果,设置了END TIME也不行,WHY? ------------------------------- 谢谢你的分数,分数不多,意思意思,解决问题就是快乐!!! |
|
11楼#
发布于:2003-01-15 17:31
楼上的老兄很喜欢的话,我开个帖子给你点?
|
|
12楼#
发布于:2003-01-16 14:11
tt
|
|
13楼#
发布于:2003-01-22 22:18
关于end time解决办法:打开wave editor,此时在file菜单下会发现end time选项,修改参数即可,最好是加上单位。
|
|
14楼#
发布于:2003-02-28 13:29
我知道你们说的问题了。
你开始用1us,然后改成10us,但是时钟你没有重新设定,所以在1us后面没有波形。 |
|
|
15楼#
发布于:2003-02-28 20:12
我知道你们说的问题了。 是这样的,它只给我出1us的结果。这该怎么办呢,如何重新设定时钟? |
|
16楼#
发布于:2003-03-01 14:51
单击左边时钟,选中整条时钟,单击工具条的时钟按钮,置入参数。按存盘,设定END TIME,关闭仿真窗口,然后重新打开。
|
|
17楼#
发布于:2003-03-01 14:55
如果你用ALTERA的芯片用AHDL有现成的库函数。
|
|
18楼#
发布于:2003-03-01 15:36
单击左边时钟,选中整条时钟,单击工具条的时钟按钮,置入参数 左边哪有时钟,没找到呀,工具条上也没有时钟按钮,我是在Waveform Editor环境中。请X_RAY老兄再详细点。 另外,现成的AHDL函数是哪个? 分数另开贴子给,谢谢! |
|
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; |
|
上一页
下一页