在寄存器的聲明,示例代碼顯示了這個:我們如何在verilog中聲明多位寄存器?
reg[15:0] regfile[0:15];
我不明白爲什麼[0:15]的變量名後反轉。 reg [15:0]聲明瞭一個16位的寄存器,但爲什麼變量名是相反的呢?
在寄存器的聲明,示例代碼顯示了這個:我們如何在verilog中聲明多位寄存器?
reg[15:0] regfile[0:15];
我不明白爲什麼[0:15]的變量名後反轉。 reg [15:0]聲明瞭一個16位的寄存器,但爲什麼變量名是相反的呢?
通過SystemVerilog的所使用的術語中,[15:0]的數據類型後reg
表示填充陣列尺寸。 reg [15:0]
是一個16位的包裝的或整型。一個整數類型可以用在算術表達式中。 15是最高有效位(MSB),0是最低有效位(LSB)。索引積分值時,大多數計算機系統的LSB都爲0。
顯示在聲明的變量名稱右側的[0:15]是未包裝的尺寸。 reg [15:0] regfile[0:15]
宣佈未包裝的陣列的包裝陣列。在Verilog中,一次只能選擇一個解壓數組的一個元素來讀或寫。因此,解包維度的數字排序的唯一重要性在於當您調用例如$readmemh
的例程時。左邊的第一個索引表示默認加載的第一個元素,您通常希望它爲0.在SystemVerilog中,您可以將解壓後的數組作爲整體進行操作,因此索引排序變得更加重要。
Verilog-2001允許聲明多個未壓縮的尺寸,但是您一次只能選擇一個數組元素。 SystemVerilog還允許多個打包維度,以及執行某些操作(如分配和比較整個或部分解壓縮數組)的功能。
我認爲這是一個比規定更多的約定。例如,請參閱IEEE Std 1800-2012中的第7.4.4節「存儲器」。您的regfile
被認爲是一個16位寬的16位存儲器。
reg[15:0] regfile[A:B];
是宣稱可使用A,A+1..B
reg[15:0] regfile[0:15];
索引(B-A+1)
16位寄存器快捷聲明
reg[15:0] regfile[0];
reg[15:0] regfile[1];
.....................
reg[15:0] regfile[14];
reg[15:0] regfile[15];
它做同樣的,如果你反轉指標如下
reg[15:0] regfile[15:0];
以下聲明相同但具有不同索引10..24,25
。指數0,1..9
無效。
reg[15:0] regfile[25:10];