OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7084|回复: 7

[ALTERA] 500M时钟处理数据出现误码求解?

[复制链接]

6

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2019-5-23
在线时间
44 小时
发表于 2019-8-29 10:59:53 | 显示全部楼层 |阅读模式
1金钱
我在FPGA内部通过PLL生成500M的时钟用来对数据进行处理,很简单的代码如下。
但是入口数据和出口数据不一样,一直找不到原因,经过时序约束,依旧存在误码的情况,求解答
//************************************************
//File name:           data_inout
//Descriptions:将12位数据拼接成16位数据
//************************************************
module data_inout(
                                input PLL_500M,
                                input rst_n,
                                input [11:0] AD_in0,
                                output reg [15:0] AD_out0,
                                output reg [1:0] cnt_clk,
                                input over_3us
);

reg [11:0] q0_data0;

always@(posedge PLL_500M or negedge rst_n)
begin
        if(!rst_n)
                begin
                        q0_data0<=12'h000;
                        AD_out0<=16'h0000;
                        cnt_clk<=2'b00;
                end
        else if(over_3us==1)
                begin
                        cnt_clk<=cnt_clk+1'b1;
                        if(cnt_clk==0)
                                begin
                                        q0_data0<=AD_in0;//输入数值先寄存过去
                                end
                        else if(cnt_clk==1)//可以输出data0
                                begin
                                        AD_out0<={q0_data0,AD_in0[11:8]};//拼凑第一个数值
                                        q0_data0<=AD_in0;//再寄存
                                end
                        else if(cnt_clk==2)
                                begin
                                        q0_data0<=AD_in0;//再寄存
                                        AD_out0<={q0_data0[7:0],AD_in0[11:4]};//拼凑第二个数值
                                end
                        else if(cnt_clk==3)
                                begin
                                        AD_out0<={q0_data0[3:0],AD_in0};//拼凑第三个数值
                                end
                end
        else if(over_3us==0)
                cnt_clk<=0;
end
endmodule

以下是在线逻辑分析仪抓取的数据:

逻辑分析仪抓取数据

逻辑分析仪抓取数据

我使用500M时钟固定生成:AB0、123、456、789这样的16进制数据循环;
在数据处理后正确的数据应该是0123、4567、89AB这样的16进制循环,
可是数据出现了0123、4567、89EB这样的误码。令人百思不得其解

最佳答案

查看完整内容[请看2#楼]

误码的问题搞定了。 1、首先我的程序有用到PLL时钟功能,不可避免的就有两个复位信号(外部复位、PLL稳定复位); 2、上面列出的部分程序就是使用了外部的复位信号所以出现误码的情况,至于根本原因不了解。有知道的可以给出答案。(此处说明一点不单单使用内部PLL产生的500M会误码,芯片外部进入的500M也会误码) 3、500M速率的数据进入RAM,以50M速率出来的数据也会出现误码的原因是输出的数据没有加时钟同步,如下图:
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2019-5-23
在线时间
44 小时
 楼主| 发表于 2019-8-29 10:59:54 | 显示全部楼层
本帖最后由 林道友 于 2019-9-4 17:49 编辑

误码的问题搞定了。
1、首先我的程序有用到PLL时钟功能,不可避免的就有两个复位信号(外部复位、PLL稳定复位);
2、上面列出的部分程序就是使用了外部的复位信号所以出现误码的情况,至于根本原因不了解。有知道的可以给出答案。(此处说明一点不单单使用内部PLL产生的500M会误码,芯片外部进入的500M也会误码)
3、500M速率的数据进入RAM,以50M速率出来的数据也会出现误码的原因是输出的数据没有加时钟同步,如下图: 12.png
回复

使用道具 举报

4

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2016-11-1
在线时间
22 小时
发表于 2019-8-29 15:21:43 | 显示全部楼层
500M太快了,有的芯片不支持,看下芯片手册的内核时钟最大到多少。
回复

使用道具 举报

6

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2019-5-23
在线时间
44 小时
 楼主| 发表于 2019-8-29 15:34:47 | 显示全部楼层
爱上在路上 发表于 2019-8-29 15:21
500M太快了,有的芯片不支持,看下芯片手册的内核时钟最大到多少。

我选用的芯片是:5CGTFD9E5F35I7,话说一般的cyclone V系列芯片都支持1G的时钟频率才对呀
回复

使用道具 举报

9

主题

202

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
839
金钱
839
注册时间
2018-7-29
在线时间
128 小时
发表于 2019-8-29 20:17:01 | 显示全部楼层
你可以先把时钟频率降一半,然后看数据还会不会出错。如果不出错了,就说明是时钟频率设置的太高了。
回复

使用道具 举报

6

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2019-5-23
在线时间
44 小时
 楼主| 发表于 2019-8-30 09:10:12 | 显示全部楼层
SunML 发表于 2019-8-29 20:17
你可以先把时钟频率降一半,然后看数据还会不会出错。如果不出错了,就说明是时钟频率设置的太高了。

这个时钟频率是不能改的,设计要求就是500M。曾经测试过100M的时钟频率数据一点问题都没有,可是设计要求不得不用500M的时钟频率。目的就是为了恢复模拟波形,像是应用于雷达等项目上,模拟频率高达200MHz,采样频率就得400M以上
回复

使用道具 举报

4

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2016-11-1
在线时间
22 小时
发表于 2019-8-30 10:52:37 | 显示全部楼层
林道友 发表于 2019-8-29 15:34
我选用的芯片是:5CGTFD9E5F35I7,话说一般的cyclone V系列芯片都支持1G的时钟频率才对呀

在Cyclone V Device Overview 文档看到的,
Up to 550 MHz global clock network
你用到了500MHz,可能会不稳定吧。
回复

使用道具 举报

6

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2019-5-23
在线时间
44 小时
 楼主| 发表于 2019-9-4 15:30:49 | 显示全部楼层
爱上在路上 发表于 2019-8-30 10:52
在Cyclone V Device Overview 文档看到的,
Up to 550 MHz global clock network
你用到了500MHz,可能 ...

我将频率降到250M还是会有误码,只有100M以下不会出现误码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 08:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表