[Actel FPGA] 异步复位的问题

[复制链接]
2297|5
 楼主| 年轻不在 发表于 2010-1-9 22:58 | 显示全部楼层 |阅读模式
用的是Fusion StartKit。

目的:测试异步上电复位,确定FPGA上电后的状态。

原理描述:复位按键的上升沿给led(板子上的八个发光二极管)赋值10101010,每个时钟(大约10s)上升沿输出led+1。

程序:
module power_up(reset,clk,led);
input reset,clk;
output reg [7:0] led;

reg [29:0] count;

always @ (posedge clk)      //大约10s,方便观察
begin
    count <= count +1;
end


always @ (posedge count[29],posedge reset)
begin
if(reset)
  led <= 8'b1010_1010;
else
  led <= led + 1;
end


endmodule

按键电路:reset用的是KEY4




实验现象:1 系统上电,led显示10101010,每隔10s加1。按复位键,led复位到10101010。
              2 系统上电,不按复位键,led依然能显示10101010,每隔10s加1。

问题来了:既然上电时reset并没有上升沿,而且我又没有按复位键,那为什么led显示10101010 ?

讨论:reset在上电时没有上升沿,理论上并不能触发posedge reset,也不满足 if(reset)   led <= 8'b1010_1010;
     如果不按复位键,那理论上led并没有机会被初始化。但从实验现象来看,led在上电的瞬间就已经被正确的初始化到10101010了,这让我很疑惑。
     难道综合工具能够智能的识别异步复位?即使是这样,从硬件上怎么解释呢?一个一直为低的信号竟然触发了上升沿的条件,并满足电平为高的条件?

希望大家讨论一下。
 楼主| 年轻不在 发表于 2010-1-9 22:59 | 显示全部楼层
自己顶,复位是个很重要的问题。再总结一下问题:上电时,复位信号一直为低,为什么满足posedge上升沿的条件?
北京户口 发表于 2010-1-9 22:59 | 显示全部楼层
这个问题问的很好,您可以仔细观察,如果下载完程序后不断电,系统是不会出现复位状态的,只有重新上电后才转入复位的状态,当芯片从无源跳到有源状态时时,瞬间充电的状态进入了这个异步复位的过程。所有并不推荐用这种的复位方式,另外你可以试一下同步复位,每次上电的时候,状态都是随机的
想实习去 发表于 2010-1-9 23:05 | 显示全部楼层
要可靠的话,在复位按键两端并个电容,就像单片机一样。其实我最开始就是要这么处理的,但是上面的实验表明不用电容也能很好的复位。“当芯片从无源跳到有源状态时时,瞬间充电的状态进入了这个异步复位的过程”应该就是说上电瞬间芯片内部有个短暂的高电平,这样就复位了,但是这么理解会有很多问题,在某些情况下,这个瞬间的高电平也可能是设计者不愿意看到的。

    还是不了解ACTEL的上电机制,据说是有个上电电路的,手册里面关于上电的信息不够详细。
LPC300 发表于 2010-1-9 23:06 | 显示全部楼层
所以需要用同步复位的方法,去除瞬间的干扰信号
linhai1986 发表于 2010-1-9 23:21 | 显示全部楼层
学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

106

主题

447

帖子

1

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