Vivado暫存器初始值問題

2021-09-26 08:35:32 字數 1985 閱讀 2668

前言

本復位只針對vivado中的暫存器復位。

什麼時候需要復位?到底要不要復位?怎麼復位?復位有什麼卵用?

該復位的暫存器需要復位,復位使得暫存器恢復初始值,有的暫存器並不需要復位(資料流路徑上)。

官方說法如下:具體可檢視ug949。

流程所以,問題來了,為了不使用復位訊號該怎麼賦初始值。

注意:reg語句中給暫存器賦初始值,在fpga上電配置後值就為這個初始值。

如果只有復位語句中的初始值,那麼上電配置(configuration )後和復位(reset)後暫存器都為此初始值。

如果reg語句給了初始值x1,且在復位語句中賦初始值x2,那麼上電配置後初始值為x1,復位後暫存器初始值為x2。

**驗證:

1.如下**,不復位也不賦初始值,vivado綜合後暫存器初始值全為0。

(*dont_touch="

yes"*)reg [5:0

] r_cnt_1;

always @(posedge i_clk)

begin

r_cnt_1

<= r_cnt_1 + 6

'd1;

end //

always

2.如下**,不復位賦初始值,vivado綜合後暫存器初始值為**中賦的初始值。

(*dont_touch="

yes"*)reg [5:0

] r_cnt_1 = 6'h34;

always @(posedge i_clk)

begin

r_cnt_1

<= r_cnt_1 + 6

'd1;

end //

always

3.如下**,使用復位但不給初始值,vivado綜合後暫存器初始值為**中復位語句中賦的初始值。(xilinx不推薦非同步復位)

(*dont_touch="

yes"*)reg [5:0

] r_cnt_0;

always @(posedge i_clk,negedge i_rst_n)

begin

if (~i_rst_n)

r_cnt_0

<= 6

'h12;

else

r_cnt_0

<= r_cnt_0 + 6

'd1;

end //

always

4.如下**,既使用復位且給初始值,vivado綜合後暫存器初始值為reg賦的初始值。

(*dont_touch="

yes"*)reg [5:0] r_cnt_2 = 6

'h01;

always @(posedge i_clk,negedge i_rst_n)

begin

if (~i_rst_n)

r_cnt_2

<= 6

'h12;

else

r_cnt_2

<= r_cnt_2 + 6

'd1;

end //

always

另乙個問題,vivado綜合暫存器初始值怎麼檢視?

(1)開啟綜合後的工程。

(3)在properties視窗中檢視初始值如下,右側可以更改初始值(沒使用過。。)

以上。

Vivado暫存器初始值問題

前言 本復位只針對vivado中的暫存器復位。什麼時候需要復位?到底要不要復位?怎麼復位?復位有什麼卵用?該復位的暫存器需要復位,復位使得暫存器恢復初始值,有的暫存器並不需要復位 資料流路徑上 官方說法如下 具體可檢視ug949。流程所以,問題來了,為了不使用復位訊號該怎麼賦初始值。注意 reg語句...

傳參初始值問題

方式一 後台直接接收,列出所有引數,設定預設值為空,這樣mybatis判斷時不會出現找不到引數屬性的情況 requestbody為接收json或者實體物件必備 requestparam value endtime defaultvalue string endtime,requestparam va...

DropdownList 賦初始值問題

網上查了這樣的 雖然是可以用。但是會點選多次會出現 dropdownlist不能選多個值的問題 private void initdroplistitemlirun string c business private void initdroplistitem string c business 最...