Link_Ling 发表于 2014-12-5 09:39:31

Cyclone 系列 FPGA 上电复位的考虑

Cyclone 系列 FPGA 上电复位不知道大家一般是怎样实现的

一般的开发板上 都是3.3V --1K--10uF--地,这样一个电路,然后在电容处引出线到FPGA IO管脚,当然最好用时钟输入管脚

于是做了一个测试
always@( ...CLK,...nRESET)
begin
   if(!nRESET)
        testpin_buf <= 1'b0;
   else
        testpin_buf <= 1'b1;       
end


assign TESTPIN =testpin_buf;

然后烧写,断电重启,观测TESTPIN的波形

上电拉高200ms+,然后拉低120ns+,然后一直高


理解:上电拉高200ms这段期间是因为EPCS在对FPGA进行配置,配置完之后拉低120ns,说明进入了if(!nRESET),但只有120ns,就跳出来置高了
将1K换做10K,拉低从120ns-->129ns,基本无变化

用双通道监测RESET管脚信号,和TESTPIN管脚信号
发现当TESTPIN拉高200ms的这段期间内,RESET管脚充电已经接近3.3V

根据特权同学的上电时间公示:t = RC*Ln[(V1-V0)/(V1-Vt)]
10K,10uF,大致在70ms左右就可以达到阈值电平1.7V

特权同学 上电复位的博客
http://bbs.ednchina.com/BLOG_ARTICLE_2026515.HTM

问题来了:既然在200ms配置完之后,RESET管脚已经达到高电平了,为何又进入进入了if(!nRESET),而且只有120ns
后来又将10K,换成51K,现象依旧。


目前的解决方案:
在CONFIG_DOWN处有一非门(三极管),原本是用于当配置完成之后,CONFIG_DOWN置高,经过非门拉低,
这样3.3V--270R--LED--CONFIG_DOWN非,LED亮,用以指示配置成功。
所以现在将复位电路改为3.3V--10K--10uF--CONFIG_DOWN非,
如此上电观测TESTPIN管脚信号
上电拉高200ms+,然后拉低100ms+,然后一直高

至少这样能从原理上解释的通。

不知道大家是如何设计RESET电路的,对于以上问题又能怎样解释?

sczh0001 发表于 2014-12-6 10:27:38

会不会 TESTPIN初始状态就是低 所以配置完成后 会拉低一段时间 然后被逻辑拉高 也就是不是你的程序问题而是配置问题?

AutumnKing 发表于 2014-12-6 14:10:50

觉得 sczh0001 说的有道理!

楼主在声明 testpin_buf 时有没初始化?我的猜测是:没有初始化的话默认应该是‘0’,那这样的话,当FPGA配置完成后,TESTPIN会输出‘0’,而nRESET在FPGA配置完成的时候已经是‘1’了,故 TESTPIN 要等到CLK触发沿来了之后才会跳为‘1’,CLK的频率是多少呢?若是8MHZ那就约为120ns。如果CLK频率远不是8MHZ,那我这个推论应该就是错误的!{:tongue:}

muok@sohu.com 发表于 2014-12-7 09:13:15

楼主看到的现象,分析都是有道理的.你可以考虑缩短EPCS加载时间,增大复位阻容时间,应该也是可以的。
事实上,上电配置后可以保证电路处于有效复位状态,外部的复位信号是不需要的。我向来是直接上拉到高电平的。

NJ8888 发表于 2014-12-7 10:45:29

一般FPGA系统有外配MCU,我是靠MCU的IO来初始化FPGA,MCU先控制FPGA下载(从串)完毕,然后给FPGA复位

Link_Ling 发表于 2014-12-9 21:08:05

本帖最后由 Link_Ling 于 2014-12-9 21:09 编辑

3楼 ,主板晶振为40MHz,所以抱歉你的推论是错误的

4楼,上电配置后怎样才能保证电路处于有效复位状态?

默认高电平本来也无可厚非,但是若是IO管脚用来驱动继电器,即IO--驱动(uln2803/三极管)--继电器,一般继电器上拉VCC,IO控制nln2803或是三极管,使继电器工作。
所以问题来了: IO为高的时候,uln2803输出低(三极管导通),继电器通电,即上电会导致继电器工作,

即使加了reset,想让IO在复位状态下输出低,继电器断电,
但是因为配置过程中(200ms)IO是为高的,所以上电的一刹那就会听到继电器啪啪啪的切换声音,不是很舒服

所以上电IO输出低电平,在某些场合还是很必要的

目前解决方法:
1 加非门,不切实际,成本、PCB空间都是不允许的
2 在需要上电输出低的IO处,加下拉电阻,官方推荐1~2K,
目前是在uln2803输入口出“飞"了几个0805的电阻,然后打上胶水,另一头用导线并起来连到GND

但纠结的是,5、6个继电器,哪怕10来个继电器,下拉电阻也无所谓,但是FPGA啊,动不动几十个IO,若是在其他方案中要IO上电输出低电平,难道要几十个下拉电阻么?

advantech 发表于 2015-1-14 13:22:14

进来学习一下哦。

Link_Ling 发表于 2015-1-29 18:52:01

结贴!谢谢大家!

agilityChen 发表于 2015-1-29 19:21:52

直接用PLL的锁定信号做复位不就好了。

bj232 发表于 2015-1-29 19:40:01

如果楼主必须用这个型号,建议控制电源,而不是复位,如果可以actel基于flash的,上电可配置

mcupro 发表于 2015-1-31 00:05:23

muok@sohu.com 发表于 2014-12-7 09:13
楼主看到的现象,分析都是有道理的.你可以考虑缩短EPCS加载时间,增大复位阻容时间,应该也是可以的。
事实 ...

对,配置后寄存器无条件为0,仅仅在系统运行时候需要一个复位的时候才有必要设置复位引脚,就说动态复位吧。
页: [1]
查看完整版本: Cyclone 系列 FPGA 上电复位的考虑