我想對一些我打算合成的 SystemVerilog 代碼使用多維陣列。我的理解是,打包陣列本質上是一個大向量,可以在代碼中以切片或元素為單位進行索引。
那么,以下是否允許?
logic [4:0] [2][2] my_array;
assign my_array = '{ 4'd1, 4'd2, 4'd3, 4'd4 };
如果是,文字是否被解釋為行或列主要?我知道我可以手動將文字分成與 2x2 陣列匹配的層次結構,但這些模塊將在高級語言的自動生成代碼中實體化。我想定位我的陣列,使其與高級語言的列主要方向相匹配。
uj5u.com熱心網友回復:
您的代碼有幾個問題。[2]不允許使用單個數字范圍, 1800-2023 LRM將更明確地說明為什么不允許這樣做。一些工具允許它,但以大多數人對打包范圍的期望的反向位元組順序實作范圍。
如果您想要一個 2 行 x 3 列 x 5 位的 3 維壓縮陣列,您可以使用
logic [0:1][0:2][4:0] my_array;
最后,打包陣列沒有型別安全。如果你撰寫文字連接,如果你得到錯誤的元素數量,或者每個元素的大小錯誤,你會得到靜默截斷或位填充。如果您有以下情況
logic [0:1][0:2][4:0] my_array;
my_array = {4'd1,4'd2,4'd3, 4'd4,4'd5,4'd6};
# my_array is '{'{5'h00, 5'h01, 5'h04}, '{5'h0d, 5'h02, 5'h16}}
你需要把它寫成
my_array = {5'd1,5'd2,5'd3, 5'd4,5'd5,5'd6};
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/414898.html
標籤:
下一篇:如何快速解碼陣列?
