打印

关于测量时钟频率跳变次数统计的问题

[复制链接]
1294|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qiwaren|  楼主 | 2013-5-24 22:41 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
1.现在又一个100M的时钟以0~63分频,需要检测在这个分频区间内的任何一次分频变化。统计并累加频率跳变次数。
代码如下:
module test(
                        clkin,
                        clkref,
                        rst,
                       
                        frq                                                                                                                       
                        );

input clkin,clkref,rst;
output [15:0] frq;
reg  [15:0] frq;
//--------------------------div
reg clk_div2;
always@(posedge clkin or negedge rst)
if(!rst)
        clk_div2<=0;
else
        clk_div2<=~clk_div2;


wire clk_div3/* synthesis keep */;
assign clk_div3=~(~clk_div2);
wire clk_div4/* synthesis keep */;
assign clk_div4=~(~clk_div3);
wire clk_div5/* synthesis keep */;
assign clk_div5=~(~clk_div4);
wire clk_div6/* synthesis keep */;
assign clk_div6=~(~clk_div5);
wire clk_div7/* synthesis keep */;
assign clk_div7=~(~clk_div6);
wire clk_div8/* synthesis keep */;
assign clk_div8=~(~clk_div7);


wire clk4;
assign clk4=((~clk_div2)&&clk_div7)||((~clk_div7)&&clk_div2);
wire clkref,clk0,clk1,clk2;                                                                                                                                             
pll1 u_pll1(
        .areset(~rst),
        .inclk0(clkref),
        .c0(clk0),
        .c1(clk1),
        .c2(clk2));

wire [7:0] cnt0,cnt1,cnt2;       
lpm u_lpm0(
        .aclr(clk4),
        .clk_en(~clk4),
        .clock(clk0),
        .q(cnt0));

lpm u_lpm1(
        .aclr(clk4),
        .clk_en(~clk4),
        .clock(clk1),
        .q(cnt1));
       
lpm u_lpm2(
        .aclr(clk4),
        .clk_en(~clk4),
        .clock(clk2),
        .q(cnt2));       

       
reg [7:0] temp1,temp2;       
always@(posedge clk4 or negedge rst)
if(!rst)
        begin
        temp1<=0;
        temp2<=0;
        end
else
        begin
        temp1<=cnt0;
        temp2<=temp1;
        end
       
reg [7:0] temp3,temp4;       
always@(posedge clk4 or negedge rst)
if(!rst)
        begin
        temp3<=0;
        temp4<=0;
        end
else
        begin
        temp3<=cnt1;
        temp4<=temp3;
        end
       
reg [7:0] temp5,temp6;       
always@(posedge clk4 or negedge rst)
if(!rst)
        begin
        temp5<=0;
        temp6<=0;
        end
else
        begin
        temp5<=cnt2;
        temp6<=temp5;
        end       
       
always@(posedge clk4 or negedge rst)
if(!rst)
        frq<=0;
else
        if((temp1==0)||(temp2==0)||(temp3==0)||(temp4==0)||(temp5==0)||(temp6==0)  )
        frq<=frq;
        else
                        if(   (temp2>temp1)&&((temp2-temp1)>=3)&&  (temp4>temp3)&&((temp4-temp3)>=3)
                        &&  (temp6>temp5)&&((temp6-temp5)>=3)  )
                                frq<=frq+1;
                        else if(   (temp1>temp2)&&((temp1-temp2)>=3)&&(temp3>temp4)&&((temp3-temp4)>=3)
                         &&(temp5>temp6)&&((temp5-temp6)>=3)    )
                                frq<=frq+1;       
                        else
                                frq<=frq;
       
endmodule

有个问题是在实际变化中会统计漏2~4次。。不知道有没有高手看有没有问题?

相关帖子

沙发
GoldSunMonkey| | 2013-5-25 23:33 | 只看该作者
结合仿真看吧。这样容易看漏

使用特权

评论回复
板凳
GoldSunMonkey| | 2013-5-25 23:33 | 只看该作者
先仿真找原因

使用特权

评论回复
地板
qiwaren|  楼主 | 2013-5-26 20:58 | 只看该作者
仿真图。。

fangzhen.JPG (89.81 KB )

fangzhen.JPG

使用特权

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

本版积分规则

1

主题

23

帖子

0

粉丝