5

我创建了一个接受电线[ 4 : 0 ]作为输入的模块,并且我正在使用这个模块的几个实例。但是,我得到:

实例端口表达式中的语法错误

每当我传递一个包含 AF 的值时。

例如:

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

4

2 回答 2

12

Verilog 将所有裸数字文字视为十进制。 A并且D不是合法的十进制值。

对于十六进制文字,您需要使用以下命令指定文字类型'h

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

请参阅 IEEE 标准(例如 1800-2009)的“编号”部分。

以下代码在 2 个不同的模拟器(Incisive 和 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
于 2013-01-07T21:28:25.867 回答
6

来自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"
于 2013-01-07T21:29:48.563 回答