如何用verilog写一个倍频器

[复制链接]
20610|10
 楼主| xyzyyb86 发表于 2009-6-1 21:34 | 显示全部楼层 |阅读模式
请问用verilog怎样写一个倍频器?最好是参数化的,谢谢。。。
badboy 发表于 2009-6-3 09:44 | 显示全部楼层

re

一个都是靠内部现成的模块直接来实现。看你的硬件支持情况了。配一下就行了。比较简单。<br /><br />也有靠逻辑间的delay与逻辑门来实现,但可能不稳定,不建议这么使用。
McuPlayer 发表于 2009-6-3 19:01 | 显示全部楼层

PLL

  
jewson 发表于 2009-8-10 18:01 | 显示全部楼层
PLL,3楼没错
Fourier00 发表于 2009-8-10 22:55 | 显示全部楼层
这个得要用锁相环才能实现,毕竟是模拟的东西,数字电路还是比较难实现的。
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
wujing198 发表于 2009-8-16 11:41 | 显示全部楼层
ls给的是分频器吧。
zgl7903 发表于 2009-8-20 20:24 | 显示全部楼层
从原理上讲就是 一个异或门与一些延迟单元 异或门的一个输入端直接CLK,另外一端的输入是CLK经过一些延迟,这样在CLK变化时,由于延迟单元的信号会滞后,就产生一个正跳脉冲,调整这个延迟时间为1/4CLK周期,就可以得到标准的倍频信号
一只小蜗牛 发表于 2009-8-21 11:04 | 显示全部楼层
信号的传输延迟受工艺,温度影响很大,最好还是pll。
 楼主| xyzyyb86 发表于 2009-9-4 13:01 | 显示全部楼层
谢谢各位!!!
zhaolqjn 发表于 2009-11-15 19:21 | 显示全部楼层
PLL DLL等模块例化就可以
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部