Verilog 中的未知模块错误,但模块已存在

问题描述

我正在为我所在的数字逻辑课程做预实验。我们必须设计一个 n 位计数器和一个半加法器,然后是另一个模块,您可以将 nbitcounter 和半加器一起使用。

>

我在新模块中实例化计数器时遇到问题。它说 nbitcounter 不存在,但我正在我的设计文件列表中查看它并且我已经对其进行了测试,所以我知道它有效。有人能帮我弄明白这件事的真相吗?

module nBitCounter
    #(parameter N=4)
    (input wire clr,input wire clk,output reg [N-1:0] q
    );
    
 always @(posedge clk or posedge clr)
 begin
    if (clr == 1)
        q <= 0;
    else
        q <= q + 1;
  end
endmodule
module counter2adder(clk,clr,s,c_out);
//Port and wire declarations:
    input wire clk,clr;
    output wire s,c_out;
    wire [2:0] out;
 //Logic:
    nBitCounter #(.N(2)) 2count(
    .clk(clk),.clr(clr),.q(out)
    );   
    
endmodule

如您所见,counter2adder 尚未完成,但我停止了,因为我看到了此错误。另一件事。计数器的文件名为 n-bitCounter.v。我不知道这是否会改变事情。

解决方法

当我编译您的 2 个模块时,在实例名称上出现编译错误。更改:

nBitCounter #(.N(2)) 2count(

到:

nBitCounter #(.N(2)) count2 (

实例名称与 Verilog 中的所有标识符一样,不得以数字 (2count) 开头。

我还收到有关 out 位宽的警告。改为:

wire [1:0] out;

通常的做法是将文件命名为与模块相同的名称。例如,nBitCounter 模块应位于名为 nBitCounter.v 的文件中。

如果您在编译这 2 个模块时仍然遇到问题,只需将它们添加到同一个文件中,直到您从讲师那里获得有关 Vivado 工具使用的帮助。