错误:模块边界外出现意外的模块实例化



我正在尝试创建一个 32 位计数器,将 32 个输入分成 4 组,每组 8 个,然后将这 4 组馈送到多路复用器中。这是我所拥有的:

modules Bit32 ( clk, reset, load, D, Q);
input clk, reset, load, D, Q;
input [7:0] D;
input [15:8] D;
input [23:16] D;
input [31:24] D;
output [7:0] Q;
output [15:8] Q;
output [23:16] Q;
output [31:24] Q;
reg [7:0] Q;
reg [15:8] Q;
reg [23:16] Q;
reg [31:24] Q;
always @(posedge clk)
    if(reset) Q <=32'b0; else 
    if (load) Q <=D;
    else Q <=Q + 32'b1
endmodule

我收到以下错误:

错误:HDL存储器:944 - "C:/Users/Skyla/Documents/csulb/Fall17/201/assign5/Bit32.v" 第 1 行: 模块边界之外的意外模块实例化。

警告:HDL存储:1591 - "C:/Users/Skyla/Documents/csulb/Fall17/201/assign5/Bit32.v" 第 1 行: 在 verilog 95/2K 模式下不允许使用根范围声明

错误:HDL 计算机:806 - "C:/Users/Skyla/Documents/csulb/Fall17/201/assign5/Bit32.v" 第 2 行: "输入"附近的语法错误。

我的复用器:

module CounterMux(select, D, Q);
input[1:0] select;
input[3:0] D:
output Q;
wire Q;
wire [1:0] select;
wire [3:0] D;
assign Q=D[select];
endmodule

Bit32.v文件的错误和警告是由于拼写错误造成的:关键字是 module ,而不是modules(注意"s")。 改变:

modules Bit32 ( clk, reset, load, D, Q);

自:

module Bit32 ( clk, reset, load, D, Q);

编译器认为您正在放置名为 modules 的模块的实例。 进行该更改会删除您显示的消息。

<小时 />

但是Bit32.v文件中还有其他错误。 不应声明具有相同名称的多个端口。 您分别声明了 DQ 5 次,但每次只能声明一次。 例如:

module Bit32 ( clk, reset, load, D, Q);
input clk, reset, load;
input [31:0] D;
output [31:0] Q;
reg [31:0] Q;
always @(posedge clk)
    if (reset) Q <= 32'b0;
    else if (load) Q <= D;
    else Q <= Q + 32'b1;
endmodule
<小时 />

我也得到了一个编译错误,因为else Q <=Q + 32'b1后缺少一个分号。 我相信IEEE Std要求在每个语句后都有一个分号。 尽管某些编译器显然不需要它,但最好使用它以实现可移植性。

最新更新