2013-01-07 54 views
3

我已經創建了一個接受wire [4:0]作爲輸入的模塊,並且我使用了這個模塊的幾個實例,但我得到了「實例端口中的語法錯誤表達式(s)「,只要我傳遞一個包含AF的值。在Verilog中將十六進制值傳遞到模塊中

E.g.

key_schedule i1(09); // works 
key_schedule i1(0A); // doesn't work 
key_schedule i1(15); // works 
key_schedule i1(1D); // doesn't work 

如果有人知道什麼是錯的,我會很感激他們的幫助。

另外,如果我通過了,例如,一個值「C」會發生什麼,但我也有一個叫做C的線?

謝謝。

回答

5

Verilog將所有裸數字文字視爲小數。 AD不是合法的十進制值。

十六進制文字,你需要指定使用'h文字類型:

key_schedule i1('h0A); // works 
key_schedule i1('h1D); // works 

參考IEEE標準(1800年至2009年爲例),部分「數字」。

UPDATE:下面的代碼編譯爲我而對2個不同的模擬器(精闢和VCS)錯誤:

module tb; 
    key_schedule i1(5'h1A); 
    key_schedule i2('h1A); 
endmodule 

module key_schedule (input [4:0] in); 
    always @(in) $display(in); 
endmodule 
+0

我看到用我之前也問,並試圖它,以及,但它也不能工作這個「「H」。我得到「錯誤:不匹配的字符(十六進制?)」 – Hardell

+0

如果您仍有問題,請顯示您的新代碼。 – toolic

+0

@RossRogers有'在那裏,很難看到後' – Hardell

3

http://www.asic-world.com/verilog/syntax1.html#Integer_Numbers

的Verilog HDL允許整數被指定爲

  • 尺寸或未編號(未確定尺寸爲32位)
  • 以二進制,八進制,十進制和十六進制
  • 沙蔘和十六進制數字(A,B,C,d,E,F)是不區分大小寫
  • 允許空格的大小,基數和值之間

語法:

[size]'[radix][value]; 

例子:

8'h1D; # 8-bit hex value "1D" 
+0

我在看到這個「'h」之前,甚至在我問及嘗試過之前,但它也沒有工作。 「錯誤:unm字符(十六進制?)「 – Hardell

相關問題