打印
[Actel FPGA]

异步复位的问题

[复制链接]
1360|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的上电机制,据说是有个上电电路的,手册里面关于上电的信息不够详细。

使用特权

评论回复
5
LPC300| | 2010-1-9 23:06 | 只看该作者
所以需要用同步复位的方法,去除瞬间的干扰信号

使用特权

评论回复
6
linhai1986| | 2010-1-9 23:21 | 只看该作者
学习了

使用特权

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

本版积分规则

106

主题

447

帖子

1

粉丝