Verilog二維陣列埠使用方法

2021-10-18 01:17:13 字數 1434 閱讀 6296

verilog不支援二維陣列埠定義,限制了模組可擴充套件性。

通過generate將二維陣列打包為一維陣列輸出,或將一維陣列展開為二維陣列即可方便地進行管理

將下列巨集函式寫入標頭檔案幷包含在設計中,直接呼叫巨集函式進行打包\展開即可。

//二維陣列打包為一維陣列

`define pack_array

(pk_width,pk_len,pk_src,pk_dest) \

generate \

genvar pk_idx; \

for(pk_idx=

0; pk_idx<

(pk_len)

; pk_idx=pk_idx+

1) \

begin \

assign pk_dest[

((pk_width)

*pk_idx+

((pk_width)-1

)):(

(pk_width)

*pk_idx)

]= pk_src[pk_idx][(

(pk_width)-1

):0]

; \ end \

endgenerate

//一維陣列展開為二維陣列

`define unpack_array

(pk_width,pk_len,pk_dest,pk_src) \

generate \

genvar unpk_idx; \

for(unpk_idx=

0; unpk_idx<

(pk_len)

; unpk_idx=unpk_idx+

1) \

begin \

assign pk_dest[unpk_idx][(

(pk_width)-1

):0]

= pk_src[

((pk_width)

*unpk_idx+

(pk_width-1)

):((pk_width)

*unpk_idx)

]; \

end \

endgenerate

使用例

module example (

input [63:

0] pack_4_16_in,

output [31:

0] pack_16_2_out

);wire [3:

0] din [0:

15];`unpack_array(4

,16,din,pack_4_16_in)

wire [15:

0] out [0:

1];`pack_array(16

,2,din,pack_16_2_out)

endmodule

二維陣列的使用

define crt secure no warnings include include include intdemo01 void int a2 3 4 int a3 4 int i 0 int j 0 for i 0 i 3 i printf n printf n 16 二維陣列陣列名代表第...

二維陣列的使用

public class doubledimensionalarray 輸出第二行第乙個元素的值,也就是4 system.out.println a1 1 0 輸出第三行第三個元素的值,也就是7 system.out.println a1 2 2 輸出二維陣列的長度,實際上就是二維陣列中一維陣列的長...

二維陣列 二維陣列和指標

include using namespace std int main 如上面這段程式所示,通過取位址符 指標 p 獲得了變數 a 的位址,那麼解引用符 就可以從 p 中得到變數 a 的值。也就是說,p a和 p a是等價的。p 是變數 a 的位址,從 p 中就可以取出 a 的值。反之,能從 p ...