2017-08-19 145 views
0

以下是我的1位ALU,经验证可以正常工作。现在我想将这个1位aLU用于8位alu,它需要通过一个测试平台。到目前为止,我编译了一个8位的ALU代码,但它似乎没有工作。任何帮助?在Verilog中将ALU 1位转换为ALU 8位

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 

回答

0

如果没有一个更全面的图片,不容易判断这是否是您唯一的问题。但是这可能会失败的一个原因是您似乎没有在您的ALUBit中正确连接ALUSlice模块。 ALUSlice模块的端口(io)顺序应该是输入,然后是输出,但在您的实例中输出后面跟着输入。作废的bug这类的最佳方式是明确的端口连接到各自的线路,而不是依靠秩序,就像这样:

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]BCarryInCI等),而不会犯命令错误,或者当您添加新端口或取走任何东西时,所有内容仍按预期方式挂钩。

+0

因此对于下面的代码行,我会用括号中的1s而不是0代码编写完全相同的代码。 – itstgtc

+0

仍然收到错误 – itstgtc

+0

@itstgtc对于你的第一个问题,基本上是的。不像你在问题中那样使用端口顺序连接线,而是使用上面给出的语法显式连接它们。虽然不是所有东西都只是一个'X [n]',你有'CarryIn'和'CarryOut',并且确保正确连接你的进位链。我不知道现在怎么了,你能发布关于你所看到的错误的更多细节吗? – Unn