ModelSim 编译成功,但我的代码中有错误的声明

ModelSim compile successfully but i have wrong declaration in my code

我是 modelSim 和 verilog 的初学者

modelsim 不关心我的名称声明和 Half_Adder 模块的每个名称都编译成功
在下面的部分中,我有不正确的 Half_(因为我的模块名称是 Half_Adder)但是 modelsim 编译它没有错误

module Half_Adder(input a,b,output  s,c );
xor (s,a,b);
and(c,a,b);
endmodule
module Full_Adder(input a,b,c,output sum,carry);
wire sum1,carry1,carry2;
Half_  m1(a,b,sum1,carry1);
Half_Adder m2(sum1,c,sum,carry2);
or(carry,carry1,carry2);
endmodule

以上所有代码都在一个 .v 文件中,我不知道它是否正确

我在 jdoodle 在线 verilog 编译器中测试了上面的代码,它在名称声明中有错误: jdoodle.v:8: 错误:未知模块类型:Half_

但在 modelsim 中确实如此!

当您在 jdoodle 上 运行 时,您正在尝试编译 并详细说明 您的代码。这将是失败的细化步骤(因为没有 Half_ 模块)。

当您在 Modelsim 上键入 vlog 时,您 只是在编译 ,而不是在详细说明您的代码。当您尝试详细说明您的代码时,您在 Modelsim 中遇到错误:

vsim Full_adder

** Error: Half_Adder.v(7): Module 'Half_' is not defined.

编译Verilog 类似于编译C 或其他语言。每个模块都是单独编译的。精化是最后阶段,所有模块都试图链接在一起(精化有点类似于 C 和其他语言中的链接)。因此,当任何模拟器试图详细说明您的代码时,您都会收到错误消息,因为没有 Half_ 模块。