用verilog编译问题
任何人都能看到任何明显的错误,这是为什么没有编译。我认为这些操作的逻辑都是正确的。它最有可能的语法错误。 我能想到的唯一一件事是switch语句没有像add模块那样正确编写。每个四位语句都连接到它下面的一个模块。(按位非二进制)用verilog编译问题,verilog,system-verilog,Verilog,System Verilog,任何人都能看到任何明显的错误,这是为什么没有编译。我认为这些操作的逻辑都是正确的。它最有可能的语法错误。 我能想到的唯一一件事是switch语句没有像add模块那样正确编写。每个四位语句都连接到它下面的一个模块。(按位非二进制) \u 4bitALU模块中存在很多问题: case语句不在始终块内 您不能像在案例分支中那样“调用”其他模块,而是需要创建这些模块的实例,并将连接到案例分支中这些实例的导线分配给所需的输出 这些问题是相当基本的Verilog,因此我建议您仔细阅读它的使用方法(可能会有所
\u 4bitALU
模块中存在很多问题:
case
语句不在始终
块内案例
分支中那样“调用”其他模块
,而是需要创建这些模块的实例,并将连接到案例
分支中这些实例的导线
分配给所需的输出这些问题是相当基本的Verilog,因此我建议您仔细阅读它的使用方法(可能会有所帮助)。请记住,您(无论如何,在大多数情况下)试图描述硬件的结构,而不是刚执行的软件程序。
notop
、和op
等。所有模块都必须声明为函数,而不是模块。另外,case
语句必须位于某个always块内。像总是@(开关)
之类的。
module _4bitALU(C , O , A , B , Switch);
input[3:0] A ;
input [3:0] B;
input [3:0] Switch;
output [3:0] O;
output C;
case(Switch)
4'B0000: notop(O , A);
4'B0001: andop(O , A , B);
4'B0010: orop(O , A , B);
4'B0011: xorop(O , A , B);
4'B1000: addop(C , O , A , B);
endcase // case (Switch)
endmodule // _4bitALU
module notop(O , A);
input [3:0] A;
output [3:0] O;
assign O = ~A;
endmodule // notop
module andop(O , A , B);
input [3:0] A;
input [3:0] B;
output [3:0] O;
assign O = (A & B);
endmodule // andop
module orop(O , A , B);
input [3:0] A;
input [3:0] B;
output [3:0] O;
assign O = (A | B);
endmodule // orop
module xorop(O , A , B);
input [3:0] A;
input [3:0] B;
output [3:0] O ;
assign O = (A ^ B);
endmodule // xorop
module addop(C , O , A , B);
input [3:0] A;
input [3:0] B;
output [3:0] O;
output C;
assign C1 = (A[0] & B[0]);
assign C2 = ((A[1] & B[1]) | (A[1] & C1) | (B[1] & C1));
assign C3 = ((A[2] & B[2]) | (A[2] & C2) | (B[2] & C2));
assign C = ((A[3] & B[3]) | (A[3] & C3) | (B[3] & C3));
assign O[0] = (A[0] ^ B[0]);
assign O[1] = ((A[1] ^ B[1] ^ C1) | (A[1] & B[1] & C[1]));
assign O[2] = ((A[2] ^ B[2] ^ C2) | (A[2] & B[2] & C[2]));
assign O[3] = ((A[3] ^ B[3] ^ C3) | (A[3] & B[3] & C[3]));
assign O[4] = ((A[4] ^ B[4] ^ C4) | (A[4] & B[4] & C[4]));
endmodule // addop