在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 9047|回复: 26

[求助] FPGA运行不稳定

[复制链接]
发表于 2014-6-6 09:06:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
最近做了一个MDIO 从机的FPGA项目,spartan6的芯片,软件上用的verilog,为求稳妥alway@只用userclk。 实际出来出现FPGA运行不稳定的情况,有时候运行全部是正确的,有时候就出错,而且是针对相同的输入。另外在不同的主机上运行也出现有的主机上很稳定,有的不稳定的情况。 求助各位大神,可能的问题是哪里。
我先说说我自己怀疑的地方
1,1.2V bank2的供电不知道有没有什么特别需要注意的地方,因为MDIO是1.2V的电平。 我选的LVCMOS1.2。
2,测得地噪声比较大,任何时候只要FPGA端口有I2C信号或者MDIO信号,就会出现相应频率的噪声,幅度能达到50mV。
3,上电时序上来说1.2V因为经过电平转换芯片,所以Vint上电要慢一些。
4,程序(程序我做了很多尝试,没有什么进展)

希望大家多多给建议,女工程师已经在崩溃边缘了。
发表于 2014-6-6 09:21:42 | 显示全部楼层
正在做个IIC2MDIO,看下有没有时序问题吧。接口,因为有的chip输入输出延迟是不一样的。还有板子。。。抓下波形,看看。
发表于 2014-6-6 09:28:11 | 显示全部楼层
userclk是什么,同步还是异步啊,其实我也不懂mdio。为了点信元
 楼主| 发表于 2014-6-6 09:37:31 | 显示全部楼层
回复 2# A1985

我也在做这个,目前看来I2C的通信很好,3.3V。 MDIO会乱跳,就是读的话该读成0010的东西会突然读成0001. 有时候一大串100多个全能读对,有时候就到第四个就出错了。输入都是一样的。
 楼主| 发表于 2014-6-6 09:38:35 | 显示全部楼层
回复 3# wgej1987

就是系统时钟,晶振是100M的,同步。
发表于 2014-6-6 09:48:19 | 显示全部楼层
不知道我理解的对不对,MDIO是以太网那个把,应该有MDIO,MCK,mck和mdio你都用系统时钟打两拍同步了吗,一般会把MCK同步个上升沿脉冲来
发表于 2014-6-6 09:52:21 | 显示全部楼层
然后用那个上沿脉冲做使能信号读入MDIO的数据。也许我想错了,毕竟没做过MDIO。我按照同步的i2c做法来的,异步就直接拿MCK做时钟读入数据,最后对数据到系统去做同步处理
 楼主| 发表于 2014-6-6 09:55:01 | 显示全部楼层
回复 6# wgej1987

打两拍同步是指同步两次吗?我是这么得到上升沿下降沿的
reg sync_mdio;
reg sync_mdc;
reg sync_mdc_1;  
//----------------------------------------------------
//sync MDIO and MDC

always @(posedge clk or posedge reset)

begin

if (reset)

begin

    sync_mdio<=1'bZ;

sync_mdc<=1'bZ;

sync_mdc_1<=1'bZ;

end

else

begin

sync_mdio<=mdio;

sync_mdc<=mdc;

sync_mdc_1<=sync_mdc;

end

end

reg mdc_neg;
reg mdc_pos;
//----------------------------------------------------
//detect the falling edge of sync_mdc  

always @(negedge clk or posedge reset)

begin

if(reset)

begin

mdc_pos<=1'b0;

mdc_neg<=1'b0;

end

else

begin

if(sync_mdc_1==0 && sync_mdc==1)

mdc_pos<=1'b1;

else if(sync_mdc_1==1 && sync_mdc==0)

mdc_neg<=1'b1;

else

begin

mdc_pos<=1'b0;

mdc_neg<=1'b0;

end

end

end
发表于 2014-6-6 10:07:31 | 显示全部楼层
没用过Z,不过FPGA里应该没问题,OpenDrain的话
always @(posedge clk or posedge reset)

begin

if (reset)

begin
   sync_mdio_1 <=1'bz;
    sync_mdio<=1'bZ;

sync_mdc<=1'bZ;

sync_mdc_1<=1'bZ;
sync_mdc_2 <=1'bz;
end

else

begin

sync_mdio_1<=mdio;
sync_mdio <=sync_mdio_1;
sync_mdc<=mdc;

sync_mdc_1<=sync_mdc;
sync_mdc_2<=sync_mdc_1;
end

end

wire mdc_neg= ~sync_mdc_1 & sync_mdc_2;
wire mdc_pos= ~sync_mdc_2 & sync_mdc_1;
//----------------------------------------------------
如果还有问题就不是同步问题了
发表于 2014-6-6 10:17:15 | 显示全部楼层
不知道MDIO速度是多少的,100m的采样时钟应该够了吧,同步就是功耗高,这个采样时钟降不下去,不过FPGA不关心功耗,异步有风险,如果有噪声到MCK上的话。同步的话50mV毫无压力。1.2V还是用同步稳妥
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-3 23:35 , Processed in 0.031988 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表