在 Verilog 中将 ALU 1 位转换为 ALU 8 位
Turning an ALU 1-bit into ALU 8-bit in Verilog
下面是我的 1 位 ALU,它被证明可以工作。现在我想把这个 1-bit 的 aLU 变成 8-bit 的 alu,它需要通过一个 test bench。到目前为止,我编译了一个 8 位 ALU 代码,但它似乎不起作用。有帮助吗?
module ALUSlice(A,B,CI,M,S,F,CO); //Code for 1-bit
input A,B,CI,M,S;
output F,CO;
wire [3:0] TF;
wire [3:0] TC;
FullAdder F1(TF[3],TC[3],A,B,CI);
assign TF[0] = A & B;
assign TF[1] = A | B;
assign TF[2] = ~A;
assign TC[2:0] = 0;
Dual4to1Mux Mux1(F,CO,{M,S},TF,TC);
endmodule
module ALU8Bit(S1,S0, A, B, CarryIn, CarryOut, F);//What I have so far
input [7:0] A,B;
input S1,S0,CarryIn;
output [7:0] F;
output CarryOut;
wire [7:0] C;
ALUSlice A0(F[0],C[0],A[0],B[0],CarryIn,S0,S1);
ALUSlice A1(F[1],C[1],A[1],B[1],C[0],S0,S1);
ALUSlice A2(F[2],C[2],A[2],B[2],C[1],S0,S1);
ALUSlice A3(F[3],C[3],A[3],B[3],C[2],S0,S1);
ALUSlice A4(F[4],C[4],A[4],B[4],C[3],S0,S1);
ALUSlice A5(F[5],C[5],A[5],B[5],C[4],S0,S1);
ALUSlice A6(F[6],C[6],A[6],B[6],C[5],S0,S1);
ALUSlice A7(F[7],CarryOut,A[7],B[7],C[6],S0,S1);
endmodule
如果没有更完整的情况,很难判断这是否是您唯一的问题。但这可能失败的原因之一是您似乎没有在 ALUBit
中正确连接 ALUSlice
模块。 ALUSlice
模块的端口 (io) 顺序应该是输入后跟输出,但是您的实例化中有输出后跟输入。消除这些错误的最好方法是明确地将端口连接到它们各自的线路而不是依赖顺序,像这样:
ALUSlice A0(.A(A[0]), .B(B[0]), .CI(CarryIn), .M(S1), .S(S0), .F(F[0]), .CO(C[0]));
这样,一切都完全按照您的意愿连接(即,A[0]
连接到 A
输入,B[0]
连接到 B
,CarryIn
到 CI
, 等等)没有顺序错误,或者当你添加新端口或拿走任何端口时,一切仍然按预期连接。
下面是我的 1 位 ALU,它被证明可以工作。现在我想把这个 1-bit 的 aLU 变成 8-bit 的 alu,它需要通过一个 test bench。到目前为止,我编译了一个 8 位 ALU 代码,但它似乎不起作用。有帮助吗?
module ALUSlice(A,B,CI,M,S,F,CO); //Code for 1-bit
input A,B,CI,M,S;
output F,CO;
wire [3:0] TF;
wire [3:0] TC;
FullAdder F1(TF[3],TC[3],A,B,CI);
assign TF[0] = A & B;
assign TF[1] = A | B;
assign TF[2] = ~A;
assign TC[2:0] = 0;
Dual4to1Mux Mux1(F,CO,{M,S},TF,TC);
endmodule
module ALU8Bit(S1,S0, A, B, CarryIn, CarryOut, F);//What I have so far
input [7:0] A,B;
input S1,S0,CarryIn;
output [7:0] F;
output CarryOut;
wire [7:0] C;
ALUSlice A0(F[0],C[0],A[0],B[0],CarryIn,S0,S1);
ALUSlice A1(F[1],C[1],A[1],B[1],C[0],S0,S1);
ALUSlice A2(F[2],C[2],A[2],B[2],C[1],S0,S1);
ALUSlice A3(F[3],C[3],A[3],B[3],C[2],S0,S1);
ALUSlice A4(F[4],C[4],A[4],B[4],C[3],S0,S1);
ALUSlice A5(F[5],C[5],A[5],B[5],C[4],S0,S1);
ALUSlice A6(F[6],C[6],A[6],B[6],C[5],S0,S1);
ALUSlice A7(F[7],CarryOut,A[7],B[7],C[6],S0,S1);
endmodule
如果没有更完整的情况,很难判断这是否是您唯一的问题。但这可能失败的原因之一是您似乎没有在 ALUBit
中正确连接 ALUSlice
模块。 ALUSlice
模块的端口 (io) 顺序应该是输入后跟输出,但是您的实例化中有输出后跟输入。消除这些错误的最好方法是明确地将端口连接到它们各自的线路而不是依赖顺序,像这样:
ALUSlice A0(.A(A[0]), .B(B[0]), .CI(CarryIn), .M(S1), .S(S0), .F(F[0]), .CO(C[0]));
这样,一切都完全按照您的意愿连接(即,A[0]
连接到 A
输入,B[0]
连接到 B
,CarryIn
到 CI
, 等等)没有顺序错误,或者当你添加新端口或拿走任何端口时,一切仍然按预期连接。