我已经创建了一个模块,它接受一个连线[4:0]作为输入,我正在使用这个模块的几个实例,但每当我通过一个实例端口表达式时,我都会收到“语法错误”包含AF的值。
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的电线?
谢谢。
答案 0 :(得分:7)
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
答案 1 :(得分:5)
来自http://www.asic-world.com/verilog/syntax1.html#Integer_Numbers
Verilog HDL允许将整数指定为
语法:
[size]'[radix][value];
示例:
8'h1D; # 8-bit hex value "1D"