我正在尝试创建一个 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
文件中还有其他错误。 不应声明具有相同名称的多个端口。 您分别声明了 D
和 Q
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要求在每个语句后都有一个分号。 尽管某些编译器显然不需要它,但最好使用它以实现可移植性。