我必须编译一个文件(x.sv)。在x.sv中,有一堆“`include y.v”。 y.v 的内容只是一组赋值语句。例如:分配 a = b&&c。信号 a、b 和 c 在 x.sv 中定义。
我尝试编译如下:
vlog -sv -work work x.sv +incdir+ "path to y.v"
这些文件已经交给我了,我要模拟一下。
这样做的原因是因为 y.v 中有很多赋值语句,这会让 x.sv 更具可读性。
module x (input b, input c, output d);
wire a;
reg d;
`include y.v
always @* d <= a;
endmodule
assign a = b && c;
Modelsim 能够找到这些文件,但它显示“靠近“分配”:语法错误,意外分配,期望类。”在文件 y.v
中对于您希望模拟器查找“包含”文件的每个目录,这应该是
+incdir+<dir>
。 .
当前目录通常有效或明确指定。
您的代码的问题不是因为
`include
而是因为它之前的行。不幸的是,许多语法错误都指向错误后的下一行,因为错误的语法使其丢失,而包含文件中的assign
语句恰好是下一行。
你的问题是你混合了两种不同风格的端口声明语法; ANSI 和非 ANSI 风格。
reg d;
不是预期的。将其放入端口标头中。修复后的其他问题:
always_comb
,切勿使用 always @*
。 @* 未命中
时间 0 处的事件以及常量。 <=
组合逻辑。