對于寄存器,如果沒有明確指定其初始值,Vivado會根據其類型(FDCE/FDRE/FDPE/FDRE)設定合適的初始值。有些工程師喜歡使用復位信號,對所有的寄存器進行上電復位,使其在處理數據之前達到期望初始狀態。但這會有一個不利之處就是復位信號的扇出很大,從而消耗了大量的布線資源,甚至造成布線擁塞。那么能不能讓寄存器在上電之后不用通過復位就輸出期望值呢?答案是肯定的。
Xilinx也建議對于同步元件,最好設定其初始值。這里我們以最常用的寄存器為例。如果使用的是VHDL,可以采用下面的方法設定寄存器初始值,如下圖所示。
如果使用的是Verilog,可以采用下面的方法設定寄存器初始值,如下圖所示。
此外,對于Verilog,也可通過initial設定初始值,如下圖所示。
采用這種方法的好處是:綜合工具是支持的,這樣生成bit文件時這些初始值會被寫入配置文件中,上電即可生效,避免了使用復位造成的扇出過大;同時在仿真時,也能跟實際業務相匹配。 為了驗證這個方法是否生效,只需要打開綜合后的.dcp,找到相應的寄存器,在其Property窗口中查看屬性INIT的值,如下圖所示。
編輯:jq
-
寄存器
+關注
關注
31文章
5427瀏覽量
123741 -
上電復位
+關注
關注
1文章
43瀏覽量
16021 -
init
+關注
關注
0文章
16瀏覽量
3568
原文標題:如何設定寄存器的初始值?
文章出處:【微信號:Lauren_FPGA,微信公眾號:FPGA技術驛站】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
使用ads1298時,部分寄存器讀寫不正常,為什么?
ADS1298 CONFIG2讀取初始值不正常是什么原因引起的?
AFE5801到底怎么讀TGC registers寄存器組的值?
ads124s08把AIN0端口接入的采集電壓斷開或者接通,芯片的寄存器所有配置值都變成默認的初始值了,為什么?
AFE4404沒有接外部時鐘,4404寄存器的為初始值,能夠通過IIC修改寄存器值嗎?
使用ADS1256的8個Single-Ended輸入去采集壓力傳感器數據,壓力傳感器空載時AIN0-AIN7 8個通道初始值不是直線,為什么?
Modbus協議的讀取保持寄存器值
TAS5733L按照初始化的寄存器配置,播放音樂無聲是怎么回事?
寄存器間接尋址和寄存器尋址的區別
寄存器是什么意思?寄存器是如何構成的?

評論