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 ...