最近在学习FPGA,遇到一个棘手的问题,就是FPGA的寄存器类型变量如何赋初值问题。
在网上找了些论坛看了下,总结如下:
1、有的FPGA(后期带有内部RAM的)可以直接在定义reg类型时赋初值,如reg [ 3:0] led_out = 4'b1100; 而有的FPGA(早期产品)不支持这种赋初值方法,上电后reg一般会有默认的全1或全0.
2、想要FPGA的寄存器上电即有初值,
对可直接赋初值的FPGA有两种方法,一种是直接在定义reg类型变量时直接赋初值,另一种是利用上电复位信号对FPGA寄存器回归初值。(其实如果此reg类型定义的是状态机的一种状态,还可以让状态机自动回归。)
对不支持直接赋初值的FPGA则只有利用上电复位信号对FPGA回归到初值了。
个人意见,如果想要程序移植性好,就需要适应以上所述的两种FPGA,所以为了保证程序可靠性而应该统一用上电复位信号来将寄存器回归初值。
但是我比较迷惑的是这个上电复位信号怎么产生呢。
这样又有两种情况:
1、FPGA采用被动配置方式时,可以在配置完成后配置其的MCU等再发个rst信号给FPGA来个复位,寄存器回归初始状态。
2、FPGA采用主动配置方式时,上电信号信号怎么给?如果用上电复位芯片有点不可靠,因为复位芯片复位完成后FPGA还不一定配置完成呢。那这种情况下怎么办?
这就是我的问题,麻烦各位大神说说自己平时的做法。
用户1627584 2013-3-28 13:57
用户1187092 2013-3-26 14:30
你要分清概念,用户rst还是上电复位。 上电复位就是POR,以及initialization。这是FPGA自己完成。产生的效果就是,之后,寄存器会获得一个固定的状态。你所说的,要么全0,要么全1,或者通过赋初值实现。现在不支持POR的还真不好找。然后,这个上电之后的值,除了寄存器赋初值之外,还有别的来源。
user rst是通过always/process 的reset语句来实现的。这个……随便了。。。。
你首先对上电复位的理解并不完全。
然后,你想问之后用户rst。或者说是系统的上电复位。但是,这个复位信号是应该全系统考虑的,什么时候拉,什么时候释放,很可能会受到其他芯片的限制。
用户1627584 2013-3-26 08:58
用户1394263 2013-3-21 18:50
用户1627584 2013-3-21 10:47
用户1627584 2013-3-21 10:45
用户1187092 2013-3-21 08:29
用户1627584 2013-3-20 16:07
用户1627584 2013-3-20 16:02
用户1187092 2013-3-20 09:56