2017-08-05 59 views
0

我假設在串聯的最左側放置一個未基礎的未定義字面量時,將只填寫給定值的任何缺失位。我沒有在LRM中看到任何明確的說明。SystemVerilog:串聯中未基於未定義的字面量

logic [63:0] rd_data; 
logic [31:0] mem_dout; 
logic [15:0] op_data; 
.... 
assign rd_data = {'0, op_data, mem_dout}; 

顯然,下面將非法

編輯:@ dave_59指出,這是合法的,只是不直觀。

assign rd_data = {op_data, mem_dout, '0}; 

只是想檢查,如果每個人都知道(1)本模擬如預期,和(2)的主要綜合工具做正確的事情,高16位配合0

+0

嘗試使用'assign rd_data = {'1,op_data,mem_dout};' – toolic

回答

2

其實,這兩個陳述都是合法的在自我確定的情況下,'0等同於1'b0。串聯的所有操作數都是在自我確定的環境下評估的。兩個連接的結果是32 + 16 + 1 = 49位表達式。在分配給rd_data的上下文中,這些表達式右對齊,然後左邊填充15個零。

所以你得到了你期待的結果,但是出於完全不同的原因。

+0

填充是基於提供的最高位的值還是Verilog始終爲0填充? –

+1

無符號數據始終爲0填充。簽名數據的符號擴展到已簽名上下文的寬度。 –