2013-08-20 52 views
2

當號碼大小是可變的,因此必須由參數設置時,如何設置最大號碼?在下面,結果必須是「FFFF」,但模擬器只返回「F」。誰能解決這個問題嗎?如何設置一個完整的變量常量?

`define SIZE 10 
module tb1; 
    reg [15:0] a; 

    initial begin 
     a = `SIZE'hF; 
     $display("a=%h",a); 
    end 
endmodule 
+3

要獲得'FFFF',你需要設置'定義大小16'。 – toolic

回答

7

您可以使用複製操作符構造位向量。

{A {B}}產生具有矢量b拷貝的載體。

你的情況,這將是:

a = {`SIZE{1'b1}}; 
+0

使用複製時,SIZE必須設置爲16.也許這是他的代碼中的拼寫錯誤。 {10 {1'b1}}僅導致03FF。獲得'a'的最大數量,或者將'SIZE'更改爲16或使用未定義的單比特值。 – jclin

+0

感謝您的回答。答案有很大幫助。我發現在某些情況下,a =〜0也可以,儘管似乎是無稽之談。 – gnoejh

5

`SIZE'hF,所述SIZE部分只意味着它僅僅是一個n位寬度數。在你的情況下,10'hF表示它是一個10位數字0xF,所以它在模擬中是正確的。

如果您正在使用SystemVerilog的,你可以使用a = '1;,它將所有位設置爲1

這裏是SystemVerilog的LRM說,可以指定

的未分級的單比特值通過在撇號(')之前加上單位值,但沒有基本說明符。未分配值的所有位應設置爲指定位的值。在一個自定義的上下文中,未分級的單比特值應該具有1比特的寬度,並且該值應該被視爲無符號。

相關問題