打印

如何用verilog写一个倍频器

[复制链接]
18386|10
手机看帖
扫描二维码
随时随地手机跟帖
沙发
badboy| | 2009-6-3 09:44 | 只看该作者

re

一个都是靠内部现成的模块直接来实现。看你的硬件支持情况了。配一下就行了。比较简单。

也有靠逻辑间的delay与逻辑门来实现,但可能不稳定,不建议这么使用。

使用特权

评论回复
板凳
McuPlayer| | 2009-6-3 19:01 | 只看该作者

PLL

使用特权

评论回复
地板
jewson| | 2009-8-10 18:01 | 只看该作者
PLL,3楼没错

使用特权

评论回复
5
Fourier00| | 2009-8-10 22:55 | 只看该作者
这个得要用锁相环才能实现,毕竟是模拟的东西,数字电路还是比较难实现的。

使用特权

评论回复
6
2steps| | 2009-8-15 22:22 | 只看该作者
verilog-A 是可以写的,也很简单。分频比都是可以设定的。

下面就是代码:

// Frequency dividers
//
// divider1: a ** frequency divider
// divider2: a frequency divider that exhibits gaussian synchronous jitter
//
// Version 1c, 11 February 2008
//
// Ken Kundert
//
// Downloaded from The Designer's Guide (www.designers-guide.org).
// Post any questions to www.designers-guide.org/Forum

`include "disciplines.vams"

//
// This model exhibits no jitter
//

module divider1 (out, in);

output out; voltage out;        // output
input in; voltage in;                // input (edge triggered)
parameter real vh=+1;                // output voltage in high state
parameter real vl=-1;                // output voltage in low state
parameter real vth=(vh+vl)/2;        // threshold voltage at input
parameter integer ratio=2 from [2:inf);        // divide ratio
parameter integer dir=1 from [-1:1] exclude 0;
                                // dir=1 for positive edge trigger
                                // dir=-1 for negative edge trigger
parameter real tt=1n from (0:inf);        // transition time of output signal
parameter real td=0 from [0:inf);        // average delay from input to output
integer count, n;

analog begin
    @(cross(V(in) - vth, dir)) begin
        count = count + 1; // count input transitions
        if (count >= ratio)
            count = 0;
        n = (2*count >= ratio);
    end
    V(out) <+ transition(n ? vh : vl, td, tt);
end
endmodule






//
// This model exhibits white synchronous jitter
//

module divider2 (out, in);

output out; voltage out;        // output
input in; voltage in;                // input (edge triggered)
parameter real vh=+1;                // output voltage in high state
parameter real vl=-1;                // output voltage in low state
parameter real vth=(vh+vl)/2;        // threshold voltage at input
parameter integer ratio=2 from [2:inf);        // divide ratio
parameter integer dir=1 from [-1:1] exclude 0;
                                // dir=1 for positive edge trigger
                                // dir=-1 for negative edge trigger
parameter real tt=1n from (0:inf);        // transition time of output signal
parameter real td=0 from (0:inf);        // average delay from input to output
parameter real jitter=0 from [0:td/5);        // edge-to-edge jitter
parameter real ttol=1p from (0:td/5);        // time tolerance, recommend ttol << jitter
integer count, n, seed;
real dt;

analog begin
    @(initial_step) seed = -311;
    @(cross(V(in) - vth, dir, ttol)) begin
        count = count + 1; // count input transitions
        if (count >= ratio)
            count = 0;
        n = (2*count >= ratio);
        dt = jitter*$rdist_normal(seed,0,1); // add jitter
    end
    V(out) <+ transition(n ? vh : vl, td+dt, tt);
end
endmodule

使用特权

评论回复
7
wujing198| | 2009-8-16 11:41 | 只看该作者
ls给的是分频器吧。

使用特权

评论回复
8
zgl7903| | 2009-8-20 20:24 | 只看该作者
从原理上讲就是 一个异或门与一些延迟单元 异或门的一个输入端直接CLK,另外一端的输入是CLK经过一些延迟,这样在CLK变化时,由于延迟单元的信号会滞后,就产生一个正跳脉冲,调整这个延迟时间为1/4CLK周期,就可以得到标准的倍频信号

使用特权

评论回复
9
一只小蜗牛| | 2009-8-21 11:04 | 只看该作者
信号的传输延迟受工艺,温度影响很大,最好还是pll。

使用特权

评论回复
10
xyzyyb86|  楼主 | 2009-9-4 13:01 | 只看该作者
谢谢各位!!!

使用特权

评论回复
11
zhaolqjn| | 2009-11-15 19:21 | 只看该作者
PLL DLL等模块例化就可以

使用特权

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

本版积分规则

1

主题

4

帖子

0

粉丝