2017-08-19 2 views
0

Unten ist meine 1-Bit-ALU, die nachweislich funktioniert. Jetzt möchte ich diese 1-Bit-aLU zu einem 8-Bit-Alu verwenden und muss einen Prüfstand bestehen. Bisher habe ich einen 8-Bit-ALU-Code kompiliert, aber es scheint nicht zu funktionieren. Irgendeine Hilfe?Ein ALU 1-Bit in Verilog in ALU 8-Bit umwandeln

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 

Antwort

0

Ohne ein vollständigeres Bild von allem, es ist nicht einfach zu sagen, ob dies Ihr einziges Problem ist. Aber ein Grund, warum dies scheitern könnte, ist, dass Sie Ihre ALUSlice Module in Ihrem ALUBit nicht richtig angeschlossen haben. Die Port (io) -Reihenfolge des ALUSlice Moduls sollte Eingänge gefolgt von Ausgängen sein, aber Sie haben Ausgänge gefolgt von Eingängen in Ihren Instanziierungen. Der beste Weg, diese Art von Fehlern ungültig zu erklären ist explizit Ports an ihre jeweiligen Linien zu verbinden, anstatt auf, um zu verlassen, etwa so:

ALUSlice A0(.A(A[0]), .B(B[0]), .CI(CarryIn), .M(S1), .S(S0), .F(F[0]), .CO(C[0])); 

Auf diese Weise alles miteinander verbunden ist genau so, wie Sie (dh die Absicht, A[0] angeschlossen zum A Eingang, zu B, CarryIn zu , etc.) ohne Fehler bei der Bestellung, oder wenn Sie neue Anschlüsse hinzufügen oder wegnehmen, alles ist noch angeschlossen wie erwartet.

+0

also für die Zeile darunter würde ich den exakt gleichen Code mit allem außer 1s anstelle von 0s in den Klammern schreiben? – itstgtc

+0

Immer noch einen Fehler – itstgtc

+0

@itstgtc Zu Ihrer ersten Frage, grundsätzlich ja. Anstatt die Reihenfolge der Ports zu verwenden, um die Linie wie in Ihrer Frage zu verbinden, verbinden Sie sie explizit mit der oben angegebenen Syntax. Obwohl nicht alles nur ein 'X [n]' ist, haben Sie 'CarryIn' und' CarryOut' und stellen sicher, dass Sie Ihre Carry Chain korrekt verbinden. Ich bin mir nicht sicher, was jetzt falsch ist; könnten Sie weitere Details zu dem angezeigten Fehler posten? – Unn

Verwandte Themen