将十六进制值传递给Verilog中的模块

Har*_*ell 5 parameters verilog

我已经创建了一个模块,接受一个连线[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
Run Code Online (Sandbox Code Playgroud)

如果有人知道什么是错的,我会感激他们的帮助.

另外,如果我传递的话会发生什么,例如,值为"C",但我也有一条叫C的线?

谢谢.

too*_*lic 7

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

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

key_schedule i1('h0A); // works
key_schedule i1('h1D); // works
Run Code Online (Sandbox Code Playgroud)

请参阅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
Run Code Online (Sandbox Code Playgroud)


dwi*_*kle 5

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

Verilog HDL允许将整数指定为

  • 大小或未大小的数字(Unsized size是32位)
  • 在二进制,八进制,十进制或十六进制的基数
  • 基数和十六进制数字(a,b,c,d,e,f)不区分大小写
  • 允许在大小,基数和值之间留出空格

句法:

[size]'[radix][value];
Run Code Online (Sandbox Code Playgroud)

例:

8'h1D;   # 8-bit hex value "1D"
Run Code Online (Sandbox Code Playgroud)