原创 FPGA寄存器类型reg赋初值问题

2013-3-19 16:17 5405 19 31 分类: 消费电子

最近在学习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还不一定配置完成呢。那这种情况下怎么办?

 

这就是我的问题,麻烦各位大神说说自己平时的做法。

PARTNER CONTENT

文章评论12条评论)

登录后参与讨论

用户1627584 2013-3-28 13:57

这个是我没说清楚 ,其实我意思是上电后用户rst如何做以达到效果。

用户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

呵呵,不是看其是否配置完成。主要是要寄存器的初始状态确定。我们用的xilinx的FPGA,也是用done引脚看其是否配置完成的。

用户1394263 2013-3-21 18:50

我们团队设计的fpga IC是通过一个Done信号来表明fpga 上电(POR)之后是否配置完成。如果是多片fpga,那就看着多个done信号的与逻辑的状态。fpga上电后是通过主动方式(MSPI)配置,(也可通过jtag/sspi/si等方式配置),可带点重新配置。像其他厂家的FPGA你再看看其手册吧。(heidong84@163.com)祝你好运!

用户1627584 2013-3-21 10:47

一个比较容易让人忽略的问题,大家平时考虑了吗

用户1627584 2013-3-21 10:45

我知道是POR,其实你说的这个就是我在文章里面提到的上电后所有的寄存器都会有个特定值,即全0或全1,要视具体的FPGA芯片定。如原来的altera芯片上电复位后有的是全1,有的是全0,而不支持那种声明时就赋初值的方法。 我在上面的文章里面已经说清楚了几种情况,估计你没有仔细看吧呵呵。

用户1187092 2013-3-21 08:29

你好好的读懂那篇文档的描述……一个字一个字读懂!!作为一个工程师,要学会怎么读懂data sheet!! 如果是FPGA本身的POR,那么是通过上电之后initialization实现,具体是什么值,看文档说明。 如果你用always或者process 的rst,从外部管脚或者寄存器过来,这个是用户的复位。 你的always或者process 没有声明rst的话,一样可以通过别的手段,具体看文档,最简单的就是寄存器赋初值,来实现POR的时候寄存器被初始化到相应的值。 并且,文档说了,rst的值和这个POR的初始值是可以不一样的。

用户1627584 2013-3-20 16:07

我的意思是模块应该有个复位rst端口,上电完成后这个端口会有个复位信号有效信号进来。然后在always模块中有if(rst)则reg = 2'b10等语句使reg为初始状态。

用户1627584 2013-3-20 16:02

但是我不是模块中要有一个端口是复位端口rst么?FPGA内部的上电复位他只是用来加载程序的吧。

用户1187092 2013-3-20 09:56

POR是FPGA 厂商做的,在FPGA 配置完成的时候会自动进行,这会包括一个全片的initialization。 举一个例子,看V5的User Guide,http://www.xilinx.com/support/documentation/user_guides/ug190.pdf 看第180页,Storage Elements 部分, The initial state after configuration or global initial state is defined by separate INIT0 and INIT1 attributes. By default, setting the SRLOW attribute sets INIT0, and setting the SRHIGH attribute sets INIT1. Virtex-5 devices can set INIT0 and INIT1 independent of SRHIGH and SRLOW.
相关推荐阅读
用户1627584 2013-10-15 09:16
Allegro小操作
1、出gerger时提示gerber类型不对,则取shape-global dynamic shape parameters里面设置下,具体在void controls 里的artwork for...
用户1627584 2012-11-29 09:28
钽电容封装区别
钽电容封装区别,除了适应电路板所需的体积之外,相应的大体积能做到高容量,高耐压(但不能同时做到),而小体积无法做到。而且特种钽电容也需要大体积的支持,如具有超低ESR的钽电容,多阳极钽电容(一颗封...
用户1627584 2012-11-19 14:02
关于与门在数字电路中的作用
在很多别人的设计中都把一个信号输入同一个与门的A、B输入端,然后从输出端引出最终信号,这是为什么? 是不是为了去除毛刺?   根据网友的回复,整理如下: 1、信号整型,因为其输出为...
用户1627584 2012-10-24 10:44
差分对间的串联电阻作用
一直很迷茫为什么差分对间要加上一个电阻在+-信号之间,不知道大家有什么看法,请指教:   下面是看到网友的回答,不知道对不对: 1、 差分信号是对同一个信号的,经过一...
用户1627584 2012-08-08 17:19
PCI总线接口标准
         PCI总线分为32位和64位两种。AD线有32条,可拓展为64条,工作频率为33MHZ/66MHZ,最大传输速率13...
EE直播间
更多
我要评论
12
19
关闭 站长推荐上一条 /3 下一条